我试图写一个脚本,从一个4声道音频设备记录USB音频.我正在使用Python3.7和“声设备”库。编译后,代码会给出一个错误。
使用以下代码,我找到了我想要记录的设备的设备号:
>>>sounddevice.query_devices()
这将打印出所有音频设备的列表。我想录的是设备20:
20 Microphone (USB Device Audio), Windows WASAPI (4 in, 0 out)
然后,我使用这个代码从那个设备中记录:
sounddevice.default.device = 20
myrecording = sounddevice.rec(int(duration*fs), samplerate=fs, channels=4, blocking=True)
但是,每当我尝试录制音频时,我都会得到这个错误:
line 18, in <module>
myrecording = sounddevice.rec(int(duration*fs), samplerate=fs, channels=4, blocking=True)
sounddevice.PortAudioError: Error opening InputStream: Invalid device [PaErrorCode -9996]
我在2通道的MME设备和2通道的Windows DirectSound设备上测试了这段代码.这对他们俩都有用。但它不能与我的4通道WASAPI设备工作。
发布于 2019-08-12 21:16:40
我找到了答案。采样频率"fs“必须与Windows中该设备的默认采样频率相匹配。
我去了控制面板->录音->右击设备->属性->高级。在那里,我发现默认格式是"4通道,16位,48000赫兹(DVD质量)“。
我将"fs“的值从44100改为48000,代码开始工作。
fs = 48000
sounddevice.default.device = 20
myrecording = sounddevice.rec(int(duration*fs), samplerate=fs, channels=4, blocking=True)
发布于 2021-06-28 06:18:36
您还可能需要在线程中调用CoInitialize
,在线程中使用WASAPI或WDM(内核流)打开音频流。
ctypes.windll.ole32.CoInitialize(None)
否则,我将得到以下错误:
Error starting stream: Unanticipated host error [PaErrorCode -9999]: 'WdmSyncIoctl: DeviceIoControl GLE = 0x00000490 (prop_set = {8C134960-51AD-11CF-878A-94F801C10000}, prop_id = 10)' [Windows WDM-KS error 0]
然后,我使用Rohitab监视器检查了Winapi调用,发现CoMarshalInterThreadInterfaceInStream(IAudioClient2, ...)
给出了CO_E_NOTINITIALIZED
错误:
https://stackoverflow.com/questions/57467633
复制相似问题