docs: def get(self):
          """
          Get a new chunk if available.
  
          Returns:
              Chunk or list: If enough frames are available a chunk is returned. Otherwise None.
                             If ``self.num_buffer >= 1`` a list instead of single chunk is returned.
          """
          chunk_size = self._smallest_buffer()
          all_full = self._all_full()
  
          if all_full:
              right_context = 0
              num_frames = chunk_size - self.current_left_context
          else:
              right_context = self.right_context
              num_frames = self.min_frames
  
          chunk_size_needed = num_frames + self.current_left_context + right_context
  
          if chunk_size >= chunk_size_needed:
              data = []
              keep_frames = self.left_context + self.right_context
              keep_from = max(0, chunk_size - keep_frames)
  
              for index in range(self.num_buffers):
                  data.append(self.buffers[index][:chunk_size])
                  self.buffers[index] = self.buffers[index][keep_from:]
  
              if self.num_buffers == 1:
                  data = data[0]
  
              chunk = Chunk(data,
                            self.current_frame,
                            all_full,
                            self.current_left_context,
                            right_context)
  
              self.current_left_context = min(self.left_context, chunk_size)
              self.current_frame = max(self.current_frame + chunk_size - keep_frames, 0)
  
              return chunk