2

我正在使用 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)
4

0 回答 0