BPK-09 : 声を録音して、そのまま再生

ここではRaspberry Piに接続したUSBマイクから音を入力し、wavファイルとして保存してから再生する方法を説明します。

準備
マイクの設定
    • USBオーディオアダプタの優先順位を変更します。
      • まずは下記のコマンドを実行し、現在の優先度を確認します。
        • $ cat /proc/asound/modules
      • Raspberry Piが初期状態だと、下記のようにUSB_Audioは2番めに表示されてしまうはずです。USB_Audioがリストの1番上に表示されている場合は、すでに設定は終了しているということなので、以下のステップは飛ばして次のステップ(マイクの感度調整) に進んでください。
        • 0 snd_bcm2835
          1 snd_usb_audio
      • 「/etc/modprobe.d/」フォルダーに移動し設定ファイル「alsa-base.conf」を編集してください。
        • $ cd /etc/modprobe.d/
          $ sudo nano alsa-base.conf
      • すでにalsa-base.confが存在している場合と、新たに作成する場合とがありますが、いずれにしても、以下のように書き換えてください。
        • options snd slots=snd_usb_audio,snd_bcm2835
          options snd_usb_audio index=0
          options snd_bcm2835 index=1
      • Raspberry Piを再起動($ reboot)してください。
      • 改めてUSB_Audioの優先順位を確認してください。
        • $ cat /proc/asound/modules
      • 以下のように表示されれば、優先順位の変更作業は成功です。
      • 0 snd_usb_audio
        1 snd_bcm2835

        マイクの感度調整
        •  マイクの感度を調整しておきます。最大値は62ですが、音が割れてしまうので50ぐらいがお勧めです。必要に応じて変更してください。
          • $ sudo amixer sset Mic 50
          • もし「Unable to find simple control ‘Mic’,0」といったエラーがでてしまった場合は、マイクが認識されていない可能性が高いです。このページの頭から再度確認してみてください。
        録音テスト
        • 以下のコマンドを入力後、マイクに向かって喋り、Ctrl+Cで終了させてください。
          • $ sudo arecord -r 16000 -f S16_LE test.wav
          • 16kHzでサンプリングしています。
          • もし「 audio open error: そのようなファイルやディレクトリはありません」といったエラーがでてしまった場合は、マイクが認識されていない可能性が高いです。このページの頭から再度確認してみてください。
        • test.wavが生成されていることを確認してください。
        • wavファイルを再生してみましょう。
          • $ aplay test.wav

        pyaudioのインストール

        • pyaudioをインストールしてください
          • $ sudo apt-get install python-pyaudio

サンプルプログラム
  • まずは先程作成した「test.wav」の権限を変更して書き込みができるようにします。
    • $ sudo chmod a+w test.wav
  •  サンプルプログラムを実行してみましょう。
    • $ cd /home/pi/bezelie/pi
      $ sudo python sampleRecord1.py
      • ベゼリーが「録音開始!」と言ったら、2秒以内でマイクに向かって喋ってください。
      • ちょっとしてからスピーカーからあなたの声が出力されたら成功です。
      • 止めたいときは、CTRL+C を押してください。

応用
  • サンプルプログラムをnanoで開いてみましょう。
    • $ sudo nano sampleRecord1.py
  • 16行目の変数RECORD_SECONDSの値が録音する音の長さを表しています。サンプルでは2秒と設定されていますが、この値を大きくしたり小さくしたりしてみましょう。