Python PyAudio流读取在带有ALSA和pulseaudio的设备上阻塞(无数据)

Python PyAudio流读取在带有ALSA和pulseaudio的设备上阻塞(无数据),python,alsa,pyaudio,pulseaudio,Python,Alsa,Pyaudio,Pulseaudio,我试图在运行PulseAudio的Linux设备上用Python获取音频数据 pyaudio以前的工作环境也是如此。 现在环境运行PulseAudio。我将默认的ALSA设备设置为脉冲,从而将ALSA连接到PulseAudio arecord-f dat test.wav然后aplay test.wav现在对我来说效果很好 但是,pyaudio似乎无法在这些设置下工作 import pyaudio import wave CHUNK = 1024 FORMAT = pyaudio.paInt1

我试图在运行PulseAudio的Linux设备上用Python获取音频数据

pyaudio以前的工作环境也是如此。 现在环境运行PulseAudio。我将默认的ALSA设备设置为脉冲,从而将ALSA连接到PulseAudio

arecord-f dat test.wav
然后
aplay test.wav
现在对我来说效果很好

但是,pyaudio似乎无法在这些设置下工作

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

stream.read(CHUNK)
stream.read()
挂起<代码>strace显示它卡在以下循环中:

poll([{fd=3, events=POLLIN|POLLERR|POLLNVAL}], 1, 3) = 1 ([{fd=3, revents=POLLIN}])
我猜这里的元问题是,pyaudio->port audio->alsa->PulseAudio的堆栈是否工作?如果没有,是否有一种从PulseAudio获取Python音频的标准方法?在过去的几年里,很多python/PulseAudio顶级库都没有任何活动

我的asound.conf看起来像这样

pcm.!default{
type plug
route_policy "average"
slave.pcm "asymed"
}

pcm.asymed{
type asym
playback.pcm "pulse_playback"
capture.pcm "pulse_capture"
}

pcm.pulse_playback {
type pulse
device "alsa_output.platform-sound_0.analog-stereo"
}

pcm.pulse_capture {
type pulse
device "alsa_input.platform-sound_1.analog-stereo"
}

您的参数对应于
-f cd
;这是否适用于
arecord
?哪个设备正在使用?-f cd工作。my asound.conf指定pulseaudio为默认设备(这可能是不指定设备的情况下arecord/aplay的工作方式),因此pyaudio可能应该使用它。但是我也尝试过为默认设备手动输入设备索引。您的参数对应于
-f cd
;这是否适用于
arecord
?哪个设备正在使用?-f cd工作。my asound.conf指定pulseaudio为默认设备(这可能是不指定设备的情况下arecord/aplay的工作方式),因此pyaudio可能应该使用它。但我也尝试手动为默认设备传递输入设备索引。