2016-11-20 43 views
0

私はpythonを使って音声を録音しようとしています。 私はコンピュータにwavファイルを保存したpyaudioモジュールを使用しようとしましたが、静的な音声を記録しました。 提案がありますか?pyaudioを使った音声録音

import pyaudio 
import wave 

CHUNK = 1024 
FORMAT = pyaudio.paInt16 
CHANNELS = 2 
RATE = 44100 
RECORD_SECONDS = 5 
WAVE_OUTPUT_FILENAME = "voice.wav" 

p = pyaudio.PyAudio() 

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

print("* recording") 

frames = [] 

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

print("* done recording") 

stream.stop_stream() 
stream.close() 
p.terminate() 

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

答えて

2

まず、マイクが実際に接続されていて、オンになっていて、ミュートされていないことを確認します。

ストリームを開くときにデバイスインデックスを提供していません。これは、PyAudioがデフォルトと見なすデバイスを取得することを意味します。あなたのマイクではないかもしれない。

対話的なPythonセッションでPyAudioオブジェクトのget_device_countget_device_info_by_indexメソッドを使用します。 get_device_info_by_indexが返す辞書を印刷して、マイクを表すデバイスインデックスを特定し、ストリームを開くときにそのインデックス番号をinput_device_indexパラメータとして指定します。

+0

どのように私のマイクのインデックスがわかりますか? – user4719989

+0

@ user4719989更新された回答を参照 –

+0

get_device_info_by_index は私に巨大なdictを返します – user4719989

0

あなたのコードは私の環境で動作します:Win7とPython3.4 - 自分のノートパソコンのマイクを使って声を録音します。 マイクの録音レベルが低く設定されている可能性があります。それともミュートになっているの?

0

マイクがコンピュータに接続されていることを確認してください。それは以下のコードを使って特定することができます。

import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print("Microphone with name \"{1}\" found for microphone(device_index{0})".format(index, name))

関連する問題