В конце концов я нашел решение моей проблемы Pygame, которое не требует потоков или многопроцессорной обработки.
Предпосылки проблемы:
Я работал с Pyaudio, и, поскольку он довольно низкоуровневый API для аудио, у меня были проблемы со смешиванием нескольких звуков одновременно и в целом.Причины:
1) Нелегко (возможно, невозможно) запустить несколько потоков одновременно или подавать эти потоки одновременно (похоже на аппаратную проблему)
2) На основе 1) Я попробовал другое отношение - есть один поток, в котором звуковые волны из разных звуков суммируются перед входом в поток - чтоработает, но ненадежно, так как добавление аудиоволн не совсем совместимо - добавление большого количества волн приводит к «растрескиванию звука», так как амплитуды слишком велики.
На основе 1) и 2) Я хотел попробовать запустить потоки в разных процессах, поэтому этот вопрос.
Решение Pygame (одиночная обработка):
for sound_file in sound_files:
availible_channel = pygame.mixer.find_channel() #if there are 8 channels, it can play 8 sounds at the same time
availible_channel.play(sound_file )
, если звуковые_файлы уже загружены, это дает почти одновременные результаты.
Многопроцессорное решение
Спасибо Darkonaut, который указалмногопроцессорный метод, мне удается ответить на мои вопросыl вопрос о многопроцессорности, на который, я думаю, уже дан ответ на stackoverflow, но я его включу.
Пример не закончен, потому что я не использовал его в конце, но он отвечает моему начальному требованию к процессам с общей очередью , но с различными параметрами
import multiprocessing as mp
shared_queue = mp.Queue()
def channel(que,channel_num):
que.put(channel_num)
if __name__ == '__main__':
processes = [mp.Process(target=channel, args=(shared_queue, channel_num)) for channel_num in range(8)]
for p in processes:
p.start()
for i in range(8):
print(shared_queue.get())
for p in processes:
p.join()