ubuntu 12.04 で、pyaudioを使用して wav ファイルを再生し、出力デバイス インデックス - USB Advanced Audio Device: USB Audio (hw:1,0) を選択しようとしています。
フレーム レート 48000.000000 wav ファイルを選択し、出力デバイス インデックスを選択した場合 - USB オーディオは正常に動作していますが、聞くことができます。 ,聞こえません。次のエラーが表示されます:
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
同じサンプリング レート 16 k 「デフォルト」のデバイス インデックスを選択すると、正常に動作します。私のコードは、オーディオ デバイスの出力インデックスを取得するのが簡単で、出力デバイスのインデックス ID を渡しています。
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)
PyAudio を使用してサウンドを再生します。USBオーディオデバイスでPyAudioを使用して16kサンプリングレートを動作させるアイデアがあれば教えてください。