・キット付属のUSBマイクで、音を録音してみましょう。
事前準備
・ラズパイにUSBマイクとスピーカーを接続しておいてください。

・「スピーカーから声をだす」で説明した方法で、スピーカーから音がでることを確認しておいてください。
録音テスト
・以下のコマンドを入力後、マイクに向かって喋り、Ctrl+Cで終了させてください。終了させないと、ずっと録音を継続してしまうので要注意です。
$ sudo arecord -r 16000 -f S16_LE test.wav
・16kHzでサンプリングした音を「test.wav」という名前で保存しています。
・test.wavファイルを再生してみましょう。
$ aplay test.wav
・無事に再生されたら、マイクの設定はバッチリです。
・以下のサンプルスクリプトを試してみましょう。
sample_record1.py
機能
・マイクで音を録音し、スピーカーから再生します。
実行方法
$ python sample_record1.py
・実行するとスピーカーから「何か言って」と声がでるので、マイクに向かって1秒ほど話してください。録音された音声が再生されます。
ソースコード
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Bezelie demo Code for Raspberry Pi : 音声録音サンプル
# ラズパイにマイクとスピーカーを接続してから実行してください。
# ライブラリの読み込み
from time import sleep # ウェイト処理
import subprocess # 外部プロセスを実行するモジュール
import pyaudio # オーディオI/Oライブラリ
import wave # wavファイルを読み書きするモジュール
# 音声合成シェルスクリプトのファイル名の指定
ttsFile = "exec_openJTalk.sh"
# Pyaudio
RATE = 44100 #サンプル周波数 取り込み1回分の時間
CHUNK = 2**12 #取り込み1回分のデータサイズ 512
FORMAT = pyaudio.paInt16 #データフォーマットは int16型
CHANNELS = 1 #モノラル
RECORD_SECONDS = 2 #録音する時間の長さ
DEVICE_INDEX = 0
WAVE_OUTPUT_FILENAME = "test.wav"
audio = pyaudio.PyAudio() #pyaudioのインスタンスaudioを生成
# メインループ
def main():
try:
while (True):
subprocess.call("sh "+ttsFile+" "+"何か言って", shell=True)
print ("録音中...")
sleep(1)
# 録音
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE, input=True,
input_device_index = DEVICE_INDEX,
frames_per_buffer = CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read (CHUNK )
frames.append (data )
stream.stop_stream() # streamを停止
stream.close() # streamを開放
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') # wavファイルをwbモードで開く
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
# 再生
subprocess.call("sh "+ttsFile+" "+"再生します", shell=True)
print ("録音完了")
subprocess.call('aplay -D plughw:1 "'+ WAVE_OUTPUT_FILENAME +'"', shell=True)
sleep (2)
except KeyboardInterrupt:
print " 終了しました"
audio.terminate() # インスタンスaudioを終了
if __name__ == "__main__":
main()
解説
・録音した音声はいったん「test.wav」というファイルに保存されてから再生されます。test.wavの権限設定で実行権限が有効になっていないとエラーがでてしまいます。
応用
・16行目~20行目の設定値はべゼリー音声対話キット付属のマイクに合わせた値です。他のマイクを使う場合は設定値を調整しないとエラーがでてしまいます。