在Linux上检测何时未将输入用于Python SoundDevice / PortAudio

问题描述

我正在使用Python的声音设备库(在下面运行PortAudio)在Linux(RPi 4的Raspbian Buster桌面)上录制音频,但是看来我脚本的多个实例会导致错误PaErrorcode -9985,我相信是由于PortAudio(或OS?)不允许多个程序同时访问音频输入。

我是菜鸟,但阅读了有关Try块的信息,并将使用sounddevice的代码部分封装在Try块中,在该块中,它一直重试,直到不再给出错误代码为止。但是,声音设备似乎无法识别输入是否空闲,即使输入变为自由后也是如此。例如,即使在第一个实例关闭后,在第二个实例上运行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),2 out)
  1 sysdefault,128 out)
  2 dmix,2 out)
< 3 default,2 out)

除了Try块like this之外,我还尝试了重新导入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)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...