我正在使用 Python 的 sounddevice 库(在下面运行 PortAudio)在 Linux(RPi 4 上的 Raspbian Buster 桌面)上录制音频,但似乎我的脚本的多个实例会导致错误PaErrorcode -9985
,我认为这是由于 PortAudio(或操作系统?)不允许多个程序同时访问音频输入。
我是一个菜鸟,但阅读了 Try 块并将我的代码中使用 sounddevice 的部分封装在 Try 块中,它会不断重试,直到不再给出错误代码。但是,即使在输入变为空闲后,sounddevice 似乎也无法识别输入是否空闲。例如,sounddevice.default.device
即使在第一个实例关闭后,在第二个实例上运行也会产生 [-1,3] 而不是第一个实例的 [0,0]。奇怪的是,通常只有两种设备:
第一个实例 sounddevice.query_devices() 结果:
* 0 sysdefault, ALSA (128 in, 128 out)
1 dmix, ALSA (0 in, 2 out)
二审结果:
0 snd_rpi_hifiberry_dacplusadcpro: HiFiBerry DAC+ADC Pro HiFi multicodec-0 (hw:0,0), ALSA (0 in, 2 out)
1 sysdefault, ALSA (0 in, 128 out)
2 dmix, ALSA (0 in, 2 out)
< 3 default, ALSA (0 in, 2 out)
除了像这样的 Try 块之外,我还尝试重新导入 sounddevice 并重新检查,但这也没有用。通过搜索错误代码、阅读 sounddevice 或 portaudio 的文档,我无法找到任何解决方案。我还查看了一个 pidfile,但如果我无法让 sounddevice 重新识别正确的输入,那将无济于事。
总的来说,我试图弄清楚如何让声音设备识别输入是免费的并使用它。
更新:根据评论中的要求,下面是一个简单的示例脚本,两个实例不能同时运行。
import sounddevice
from scipy.io.wavfile import write
mysamplerate = 44100
myrecording = sounddevice.rec(mysamplerate * 10, samplerate=mysamplerate, channels=1)
sounddevice.wait()
write('output.wav', mysamplerate, myrecording)