PyAudio
- クロスプラットフォームのオーディオI/Oライブラリ
- MITライセンスで配布されています
インストール(Mac)
- pip 経由でインストールします
- 動作にはPortAudioが必要です
brew install portaudio
pip install pyaudio
録音デバイス
- Macのビルドインマイクを使って動作確認
- デバイス情報はpyaudioのメソッドで確認ができます
In [21]: p = pyaudio.PyAudio()
In [22]: p.get_default_input_device_info()
Out[22]:
{'index': 0,
'structVersion': 2,
'name': 'Built-in Microphone',
'hostApi': 0,
'maxInputChannels': 2,
'maxOutputChannels': 0,
'defaultLowInputLatency': 0.0029478458049886623,
'defaultLowOutputLatency': 0.01,
'defaultHighInputLatency': 0.02471655328798186,
'defaultHighOutputLatency': 0.1,
'defaultSampleRate': 44100.0}
録音のための関数
-
PyAudioを使って取得した録音内容をリストに格納
-
最後にwavファイルに書き出すようにしました
-
サンプリング周波数 12000Hz, 32bit浮動小数点で録音します
import pyaudio
import numpy as np
import scipy.io.wavfile
RATE = 12000
def record_audio(output_name):
CHUNK = 1024
FORMAT = pyaudio.paFloat32
CHANNELS = 1
pa = pyaudio.PyAudio()
stream = pa.open(rate=RATE,
channels=CHANNELS,
format=FORMAT,
input=True,
frames_per_buffer=CHUNK)
print("RECORD START")
print("ctrl-C : STOP RECORDING")
# RECORDING ###############
# Stop with Ctrl-C
frame = []
while True:
try:
# Record
d = stream.read(CHUNK)
d = np.frombuffer(d, dtype=np.float32) # convert numpy
frame.append(d)
except KeyboardInterrupt:
# Ctrl - c
break
# END # RECORDING ###############
# CLOSE
stream.stop_stream()
stream.close()
pa.terminate()
# Numpy Array
frame = np.array(frame).flatten()
print("STOP {} samples {:.2f}s".format(frame.size, frame.size/RATE))
# Write Wavfile with scipy module
scipy.io.wavfile.write(output_name, RATE, frame)
print("OUTPUT: {}".format(basename(output_name))
録音結果
- ファイル名をつけて呼び出します
record_audio('test.wav') # 呼び出し
- コンソールの表示内容
- Ctrl-c で途中でSTOPしました
RECORD START
ctrl-C : STOP RECORDING
^C
STOP 111616 samples 9.30s
OUTPUT: test.wav
- 'あ〜'と喋っている波形が録音できました