Я хочу написать скрипт, который будет воспроизводить звуки на двух устройствах одновременно, используя python, будет два звука: 1. Длинный звук (играет на динамике) 2. Короткий звук (играет на гарнитуре) оба должны воспроизводиться одновременно, но коротко звук имеет тенденцию воспроизводиться через некоторый интервал, который мы можем установить самостоятельно Я попытался сделать это с помощью библиотеки звуковых устройств, используя многопоточный подход. Сценарий приведен ниже. Проблема, с которой я сталкиваюсь, заключается в том, что при одновременном воспроизведении на двух устройствах возникает промежуток, возникающий при воспроизведении коротких звуков через интервал, но при одновременном воспроизведении двух звуков на одном Устройство результаты в порядке. Я хотел бы знать только подход или любой другой метод или решение этого подхода, для меня очень важно завершить его. Любая помощь будет очень полезна, и заранее спасибо
import threading
import time
import sounddevice as sd
import soundfile as sf
import os
sound_folder = "C:\\Users\\HP\\Documents\\GitHub\\multi_sound_device\\Sound file" #For getting file
def good_filepath(path):
print(path,str(path).endswith(".wav") and (not str(path).startswith(".")))
return str(path).endswith(".wav") and (not str(path).startswith("."))
sound_file_paths = [
os.path.join(sound_folder, path) for path in sorted(filter(lambda path: good_filepath(path), os.listdir(sound_folder)))
]
#Above is to fetch sounds file
DATA_TYPE = "float32"
def load_sound_file_into_memory(path,dict_n):
audio_data = sf.read(path,dtype=DATA_TYPE)
file_name = path.split("\\")[-1].split('.')[0]
dict_n[file_name] = audio_data
return audio_data
dict_n = {}
file = [load_sound_file_into_memory(path,dict_n) for path in sound_file_paths]
long_sound,fs = dict_n['casio'][0],dict_n['casio'][1]
short_sound = dict_n['drum'][0]
def play_long_sound(long_sound,fs,snd):
print('its_playing')
snd.play(long_sound,fs,device = snd.query_devices(4)['name'])
def play_short_sound(short_sound,interval,fs,snd):
while True:
print("Played after",interval,":secs")
stream = snd.OutputStream(device=snd.query_devices(7)['name'], samplerate=48000, dtype='float32')
stream.start()
stream.write(short_sound)
stream.close()
time.sleep(interval)
if __name__ == "__main__":
long_t = threading.Thread(target = play_long_sound,args=(long_sound,fs,sd))
short_t = threading.Thread(target = play_short_sound,args=(short_sound,9,fs,sd))
long_t.start()
short_t.start()
long_t.join()
short_t.join()
print("exiting")