とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【Python】Pyaudioで音声を読み取り.wav形式で保存

pyaudioというライブラリを使うと、音声を録音・再生・保存etc.することができます。

この記事では、音声の録音に挑戦してみます。また、録音した音声をmatplotlibを使ってグラフに表示してみます。

1.ライブラリのインストール

今回は、録音用にpyaudioを使用し、音声書き出し&保存用にwaveというライブラリを使います。
それぞれ下のコマンドをプロンプトで実行するとインストールができます。

pip install pyaudio

pip install wave

その後、Pythonの以下のスクリプトでエラーが出なければインストールは完了しています。

import pyaudio
import wave



2.音声を録音

以下のプログラムで音声を録音し、「sample.wav」として保存することができます。

import numpy
import wave     #wavファイルを扱うためのライブラリ
 
WAVE_OUTPUT_FILENAME = "sample.wav" #音声を保存するファイル名
iDeviceIndex = 0 #録音デバイスのインデックス番号
 
def MakeWavFile(FileName = "sample.wav", Record_Seconds = 2)
    chunk = 1024
    FORMAT = pyaudio.paInt16
    
    CHANNELS = 1 #モノラル
    RATE = 44100 #サンプルレート(録音の音質)
    
    p = pyaudio.PyAudio()
    
    stream = p.open(format = FORMAT,
                    channels = CHANNELS,
                    rate = RATE,
                    input = True,
                    frames_per_buffer = chunk)
    
    #レコード開始
    print("Now Recording...")
    all = []
    for i in range(0, int(RATE / chunk * Record_Seconds)):
        data = stream.read(chunk) #音声を読み取って、
        all.append(data) #データを追加
    
    #レコード終了
    print("Finished Recording.")
    
    stream.close()
    p.terminate()
    wavFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wavFile.setnchannels(CHANNELS)
    wavFile.setsampwidth(p.get_sample_size(FORMAT))
    wavFile.setframerate(RATE)
    wavFile.writeframes(b''.join(all)) #Python2 用
    #wavFile.writeframes(b"".join(all)) #Python3用
    
    wavFile.close()


if __name__ is "__main__":
    #WAVファイル作成, 引数は(ファイル名, 録音する秒数)
    MakeWavFile("sample.wav", Record_Seconds = 2) 

 

3.実行結果

上の.pyファイルと同じディレクトリに「sample.wav」ができていればOKです。
試しに再生してみてください。音声は正常に録音できているでしょうか...?

もし何か変だな...という場合は、↓のトラブルシューティングをご覧ください。

コードの中身については、コメントを見ながら感じ取ってください。


トラブルシューティング

このプログラムを実行しても、エラーが出る、録音されない等の対処法です。
こちらをご覧ください:
shizenkarasuzon.hatenablog.com