python - проигрывать аудиосэмплы одновременно и на разной громкости - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь воспроизводить аудиосэмплы одновременно и на разных уровнях громкости на Raspberry Pi, используя python:

from time import sleep
import threading
import pygame

def play(sample,volume):
    sample.set_volume(volume)
    sample.play()

pygame.init()
pygame.mixer.init()
sound = pygame.mixer.Sound('/home/pi/Desktop/sample.wav')
thr=threading.Thread(target=play,args=([sound,1]),kwargs={})
thr.start()
sleep(1)
thr=threading.Thread(target=play,args=([sound,0.5]),kwargs={})
thr.start()
sleep(1)
thr=threading.Thread(target=play,args=([sound,0.25]),kwargs={})
thr.start()
sleep(1)
thr=threading.Thread(target=play,args=([sound,0.1]),kwargs={})
thr.start()
sleep(5)

, но в этом примере у меня есть задержка с последним воспроизведенным сэмплом.также я хотел бы иметь 8 каналов с 8 сэмплами.

что не так с этим кодом?Есть лучшие способы или библиотеки для этой цели?

РЕДАКТИРОВАТЬ
Я пытался использовать каналы, но у меня все еще есть лаги при воспроизведении звука2

from time import sleep
import pygame

pygame.mixer.init()
channel1 = pygame.mixer.Channel(0)
channel2 = pygame.mixer.Channel(1)

sound1 = pygame.mixer.Sound('piano.wav') #duration 4s
sound2 = pygame.mixer.Sound('kick.wav') #duration <1s

channel1.play(sound1)
channel2.play(sound2)
sleep(0.25)
channel2.stop()
channel2.play(sound2)
sleep(0.25)
channel2.stop()
channel2.play(sound2)
sleep(0.25)
channel2.stop()
channel2.play(sound2)
sleep(5)
...