code: def next_chunks(self):
          
          with self.chunk_available:
              while True:
                  playing_sounds = [s for s in self.sounds if s.playing]
  
                  chunks = []
                  for s in playing_sounds:
                      try:
                          chunks.append(next(s.chunks))
                      except StopIteration:
                          s.playing = False
                          self.sounds.remove(s)
                          self.is_done.set()  # sound was played, release is_done to end the wait in play
  
                  if chunks:
                      break
  
                  self.chunk_available.wait()
  
              return numpy.mean(chunks, axis=0)
docs: Gets a new chunk from all played sound and mix them together.