2017-03-09 7 views
0

私はpythonを使用して自分のrpi3で8KhzのUSBマイクから音声を録音しようとしています。私はpyaudio、sounddevice、およびsoundfileライブラリを使用しましたが、それらは44100Hzまたは48000Hzでしかサンプルを送れませんでした。私は、コマンド使用時に一方ラズベリーpi3のpythonで8khzのサンプルレートを使用

"PortAudioError: Error opening InputStream: Invalid sample rate".

::私は8KHzの中でサンプルしようとしたとき、私は次のエラーを得た、コマンドラインのすべてに

"arecord -D plughw:1,0 -f S16_LE -r 8000 -d 2 test.wav" 

を大丈夫でした。

これは私が使用するコードです:

import pyaudio 
import wave 

FORMAT = pyaudio.paInt16 




CHANNELS = 1 
RATE = 8000 
CHUNK = 4000 
RECORD_SECONDS = 5 
WAVE_OUTPUT_FILENAME = "test1.wav" 

audio = pyaudio.PyAudio() 
print audio.get_default_input_device_info() 


# start Recording 
stream = audio.open(format=FORMAT, channels=CHANNELS,rate=RATE, input=True,frames_per_buffer=CHUNK,input_device_index=1) 
print ("recording...") 
frames = [] 

for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)): 
    data = stream.read(CHUNK) 
    frames.append(data) 
print ("finished recording") 


# stop Recording 
stream.stop_stream() 
stream.close() 
audio.terminate() 



waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') 
waveFile.setnchannels(CHANNELS) 
waveFile.setsampwidth(audio.get_sample_size(FORMAT)) 
waveFile.setframerate(RATE) 
waveFile.writeframes(b''.join(frames)) 
waveFile.close() 

これが結果です:

{'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': -1.0, 'defaultLowInputLatency': 0.008684807256235827, 'maxInputChannels': 1L, 'structVersion': 2L, 'hostApi': 0L, 'index': 1L, 'defaultHighOutputLatency': -1.0, 'maxOutputChannels': 0L, 'name': u'USB PnP Sound Device: Audio (hw:1,0)', 'defaultHighInputLatency': 0.034829931972789115} 

Traceback (most recent call last): 
    File "/home/pi/wave1.py", line 20, in <module> 
    stream = audio.open(format=FORMAT, channels=CHANNELS,rate=RATE, input=True,frames_per_buffer=CHUNK,input_device_index=1) 
    File "build/bdist.linux-armv7l/egg/pyaudio.py", line 750, in open 
    stream = Stream(self, *args, **kwargs) 
    File "build/bdist.linux-armv7l/egg/pyaudio.py", line 441, in __init__ 
    self._stream = pa.open(**arguments) 
IOError: [Errno -9997] Invalid sample rate 

私がチェックし、私は右のデバイスを使用していることを知っている、しかし、あなたが見ることができるようにデフォルトのサンプルレートは変更されず、同じエラーが発生します。

+0

あなたの質問は何ですか? – feedMe

+0

8KHzでPythonを使ってサンプルするには? – tomash

+0

オーディオの録音に使用したPythonコードを表示できますか? –

答えて

0

Pythonスクリプトで間違ったデバイスを開いている可能性があります。使用可能なサンプルレートはハードウェアによって決まります.PyAudioで開かれているものは8kHzをサポートしていませんが、開かれているものはarecordで明らかになります。 Linux上で利用可能なさまざまなAPIは、ハードウェアを異なる方法で索引付けしているようで、非常に混乱する可能性があります(私は確かにそれを見つけました)。私のパイで

、USBマイクは、デバイス2である、と私は44.1kHzの時にサンプリングしていますので、私が持っている:

import pyaudio 

DEVICE = 2 #USB Audio Device 
CHANNELS = 1 
FRAME_RATE = 44100 
FORMAT = pyaudio.paInt16 

def init_stream(): 
    stream = p.open(format = FORMAT, 
        channels = CHANNELS, 
        rate = FRAME_RATE, 
        input = True, 
        output = False, 
        input_device_index = DEVICE, 
        frames_per_buffer = 8192, 
        stream_callback = callback) 
    return (stream) 

のでPyAudioでインデックス化(とよう、オーディオデバイスのリストを取得するには正しいデバイスを選択してください)、あなたはthis答えのコードを使用することができます。

関連する問題