Pythonで音を録音して保存する方法

Pythonで音を録音〜保存する方法を紹介します。

今回使うライブラリは、pyaudioとwaveを使います。

waveに関しては、標準でインストールされているので、すぐ使えます。

pyaudioは、別にインストールする必要があるので、インストール方法も紹介します。

pyaudioのインストール

pyaudioをインストールしていきます。

私は、ライブラリ管理にAnacondaを使用しているので、Anacondaのインストール方法しか紹介しません。

手順は簡単です。

  1. Anaconda navigatorを起動する
  2. Environmentから、[installed]を[uninstalled]に変更する
  3. 検索ボックスで、「pyaudio」と検索する
  4. pyaudioを追加する

こんな感じの手順でインストールできます。

[pip install pyaudio]でもいけます。

pythonで録音する方法

先程インストールしたpyaudioを使います。

今回紹介するプログラムでは、時間(秒数)を指定して、その時間だけ録音するという機能です。

Pythonで音を録音して可視化するraspberryPi と pyaudioで録音、音声波形処理を参考にしました。

上の2つにあるソースコードを実行しましたが、なぜか上手く動作しませんでした。

そこで、手直しを加えて、自分の環境で動くプログラムにしたので、公開します。

ソースコード

import pyaudio
import wave

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1

#サンプリングレート
RATE = 44100

#録音時間を入力
RECORD_SECONDS = int(input())

p = pyaudio.PyAudio()

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

all = []
for i in range(0, int(RATE / chunk * RECORD_SECONDS)):
    data = stream.read(chunk)
    all.append(data)

stream.close()   
p.terminate()

data = b''.join(all)

#保存するファイル名、wは書き込みモード
out = wave.open('sample.wav','w')
out.setnchannels(1)
out.setsampwidth(2)
out.setframerate(RATE)
out.writeframes(data)
out.close()

おすすめ