Python 2.7 pyaudio未使用USB音频设备索引以16000采样率工作,并出现获取错误“;Errno无效采样率]-9997“;在ubuntu 12.04 LTS中

Python 2.7 pyaudio未使用USB音频设备索引以16000采样率工作,并出现获取错误“;Errno无效采样率]-9997“;在ubuntu 12.04 LTS中,python-2.7,audio,usb,ubuntu-12.04,pyaudio,Python 2.7,Audio,Usb,Ubuntu 12.04,Pyaudio,我正在ubuntu 12.04中尝试使用pyaudio播放wav文件,并选择输出设备索引-USB高级音频设备:USB音频(hw:1,0) 如果我选择帧速率48000.000000 wav文件并选择输出设备索引-USB音频,它工作正常,我可以听到。但是 但是,如果我选择帧速率16000.000000 wav文件并选择输出设备索引-USB音频,它工作正常,我无法听到,它显示以下错误: 表达式“SetApproximateSampleRate(pcm,hwParams,sr)”在“src/hosta

我正在ubuntu 12.04中尝试使用pyaudio播放wav文件,并选择输出设备索引-USB高级音频设备:USB音频(hw:1,0)

如果我选择帧速率48000.000000 wav文件并选择输出设备索引-USB音频,它工作正常,我可以听到。但是 但是,如果我选择帧速率16000.000000 wav文件并选择输出设备索引-USB音频,它工作正常,我无法听到,它显示以下错误:


表达式“SetApproximateSampleRate(pcm,hwParams,sr)”在“src/hostapi/alsa/pa_linux_alsa.c”中失败,行:1968 “src/hostapi/alsa/pa_linux_alsa.c”行中的表达式“paalstreamcomponent_InitialConfigure(&self->playback,outParams,self->primeBuffers,hwParamsPlayback,&realSr)”失败 “src/hostapi/alsa/pa_linux_alsa.c”行中的表达式“paalstream_Configure(流、inputParameters、outputParameters、sampleRate、framesPerBuffer、&inputplatency、&outputplatency、&hostBufferSizeMode)”失败 回溯(最近一次呼叫最后一次): 文件“speech.py”,第34行,在 输出=真) 打开文件“/usr/lib/pymodules/python2.7/pyaudio.py”,第714行 流=流(自,*args,**kwargs) 文件“/usr/lib/pymodules/python2.7/pyaudio.py”,第396行,在__ self.\u stream=pa.open(**参数) IOError:[Errno无效采样率]-9997
相同的采样率16 k如果我选择“默认”设备索引,它工作得很好。我的代码很容易获得音频设备输出索引,我正在传递输出设备索引id


导入pyaudio
输入波
导入系统
如果len(系统argv)<2:
打印(“播放波形文件。\n\n用法:%s filename.wav”%sys.argv[0])
系统出口(-1)
“”“wf=wave.open('C:/Users/arunku2x/Desktop/bar_opening.wav','rb')”
wf=wave.open(sys.argv[1],'rb')
p=pyaudio.pyaudio()
计数=p.获取设备计数()
设备=[]
对于范围内的i(计数):
附加(p.get_device_info_by_index(i))
对于枚举中的i、dev(设备):
打印“%d-%s%”(i,dev['name'])
打印“样本宽度%f”%wf.getsampwidth()
打印“通道数%d”%wf.getnchannels()
打印“帧速率%f”%wf.getframerate()
#支持x=p.getframerate(),输出设备=4,输出通道=wf.getnchannels(),输出格式=p.get格式(wf.getsampwidth())
#打印“格式…”x%d“%x”
stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
速率=wf.getframerate(),
输出设备索引=4,这里4表示USB音频设备
输出=真)
数据=wf.readframes(1024)
而数据!='':
stream.write(数据)
数据=wf.readframes(1024)

使用PyAudio播放声音。 让我知道,如果你有任何想法,工作的16k采样率与USB音频设备使用PyAudio

Expression 'SetApproximateSampleRate( pcm, hwParams, sr )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1968
Expression 'PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwParamsPlayback, &realSr )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2646
Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2767
Traceback (most recent call last):
  File "speech.py", line 34, in <module>
    output=True)
  File "/usr/lib/pymodules/python2.7/pyaudio.py", line 714, in open
    stream = Stream(self, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/pyaudio.py", line 396, in __init__
    self._stream = pa.open(**arguments)
IOError: [Errno Invalid sample rate] -9997
import pyaudio
import wave
import sys

if len(sys.argv) < 2:
        print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
        sys.exit(-1)

"""wf = wave.open('C:/Users/arunku2x/Desktop/bar_opening.wav', 'rb')"""

wf = wave.open(sys.argv[1], 'rb')
p = pyaudio.PyAudio()

count = p.get_device_count()
devices = []
for i in range(count):
        devices.append(p.get_device_info_by_index(i))

for i, dev in enumerate(devices):
        print "%d - %s" % (i, dev['name'])

print "Sample Width %f" % wf.getsampwidth()
print "Number of channels %d" % wf.getnchannels()
print "Frame rate %f" % wf.getframerate()


#x = p.is_format_supported(rate = wf.getframerate(),output_device = 4 ,output_channels = wf.getnchannels(),output_format= p.get_format_from_width(wf.getsampwidth()))
#print "format .............x %d" % x

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
        channels=wf.getnchannels(),
        rate=wf.getframerate(),
                output_device_index =4,#here 4 means - USB Audio device
        output=True)
data = wf.readframes(1024)
while data != '':
    stream.write(data)
    data=wf.readframes(1024)