1

我正在尝试将声音文件播放到两个不同的设备,所以我尝试了多处理和线程模块,但它没有产生想要的结果

起初,我想执行同时播放文件两次的函数,但后来我意识到这是不可能的,所以我想在一个非常小的时间窗口内执行这两个函数。我尝试了线程和多处理模块来创建两个进程。在我尝试简单地执行它并立即返回播放功能以便它可以执行下一个播放但它只是一个接一个地播放它们之后

import sounddevice as sd
import soundfile as sf
from multiprocessing import Process
import argparse

parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("filename", help="audio file to be played back")
args = parser.parse_args()

def _play_(d):
    try:
       data, fs = sf.read(args.filename, dtype='float32')
       sd.play(data, fs, device=d, blocking = False)
       status = sd.wait()
    if status:
        parser.exit('Error during playback: ' + str(status))
    except KeyboardInterrupt:
        parser.exit('\nInterrupted by user')
    except Exception as e:
        parser.exit(type(e).__name__ + ': ' + str(e))


if __name__ == '__main__':
        Process(target =_play_(8),name = 'playing1').start()
        Process(target =_play_(9),name = 'playing2').start()

我希望它几乎同时播放我为两个不同设备指定的文件的两倍,但相反,它一次只播放一个

4

0 回答 0