我需要使用Python 3捕获192 kHz的音频来进行生物声学实验。我有所需硬件:一个Sound Devices USBPre 2声卡,一个具有良好频率响应曲线(高达100 kHz)的麦克风,并且我已经在我的操作系统(ubuntu 13.04)上启用了从该声卡采样以达到192 kHz的功能。
我尝试使用PyAudio进行录制。它似乎可以工作,并会给我一个采样率为192 kHz的wav文件。然而,当我查看频谱时,没有24 kHz以上的功率,这表明PyAudio实际上并没有捕获192 kHz,而是48 kHz。但是,当我使用JACK的输入进行录制时,使用Audacity可以得到带有高达96 kHz功率的漂亮录音。因此,我认为PyAudio实际上并没有以192 kHz采样声音,尽管它应该能够做到。 如何解决这个问题?
我能够无错误地启动JACK:
我尝试使用PyAudio进行录制。它似乎可以工作,并会给我一个采样率为192 kHz的wav文件。然而,当我查看频谱时,没有24 kHz以上的功率,这表明PyAudio实际上并没有捕获192 kHz,而是48 kHz。但是,当我使用JACK的输入进行录制时,使用Audacity可以得到带有高达96 kHz功率的漂亮录音。因此,我认为PyAudio实际上并没有以192 kHz采样声音,尽管它应该能够做到。 如何解决这个问题?
我能够无错误地启动JACK:
/usr/bin/jackd -R -dalsa -Chw:1,0 -n3 -o1 -p2048 -r192000
jackd 0.122.0
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
JACK compiled with System V SHM support.
loading driver ..
apparent rate = 192000
creating alsa driver ... -|hw:1,0|2048|3|192000|0|1|nomon|swmeter|-|32bit
control device hw:0
configuring for 192000Hz, period = 2048 frames (10.7 ms), buffer = 3 periods
ALSA: final selected sample format for capture: 24bit little-endian
ALSA: use 3 periods for capture
初始化PyAudio(据我所知,没有任何真正的错误):
p = pyaudio.PyAudio()
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
打开一个PyAudio流:
stream = p.open(format=pyaudio.paInt32,
channels=1,rate=192000,
input=True,
frames_per_buffer=2048)
如果有人想要验证我的解释:PyAudio无法捕获192 kHz的声音,但Audacity可以。以下是声谱图图像:
使用PyAudio捕获的声音的频谱图
使用Audacity捕获的声音的频谱图
如何使用PyAudio以192000个采样/s录制声音? 欢迎提供其他使用Python 3捕获声音的建议。
p.open(..., input_device_index=dev_idx)
打开时,我会收到以下错误OSError: [Errno Invalid number of channels] -9998
,类似于尝试p.is_format_supported(...)
时收到的错误:ValueError: ('Invalid number of channels', -9998)
。 - user2936487[Errno Input overflowed] -9981
。通过循环尝试不同的采样率、通道数和设备索引,我成功地探测到了正确的配置(现在它可以工作了)。我会尝试优化代码并提供一个“答案”,希望对你有所帮助。 - Lukas Grafpyaudio.paFloat32
而不是pyaudio.paInt32
?(我仍在清理我的代码) - Lukas GrafOSError: [Errno Invalid number of channels] -9998
。 - user2936487