2023年10月30日のv2.1.2以来、リリースのなかった micro:bit 用 MicroPython であったが、ひさびさに github を覗いてみたら audio-recordingなんてブランチがあって、「お、マイクから録音できるようになった?」ということで試してみました。
インストール
正式リリースされていないので、当然ソースコードからのビルドが必要となる。arm-none-eabi-gccのツールチェーンはセットアップしておこう。
その上で、以下を実施。
$ git clone -b audio-recording https://github.com/microbit-foundation/micropython-microbit-v2.git
$ git submodule update --init
$ make -C lib/micropython/mpy-cross
$ cd src
$ make
MICROBIT.hex ができあがるので、micto:bit V2 を USB に繋いでマウントされるストレージにコピーするとインストール完了。
サンプルを動かしてみる
test_recoed.py というサンプルがあるので、MicroPython のファイルシステムに main.py にコピーする。私はいつもながら mpremote を利用。
$ mpremote cp test_recoed.py :main.py
リセットしたら、録音スクリプトのスタート。
Aボタンを押しながら内蔵マイクに向かって話す。Aボタンを話したら録音終了。Bボタンを押すと内蔵スピーカで再生される。音はけっこうひどいが、話したように聞こえないこともない。外付けのスピーカーを使えば少しは音が良くなる。
API
まだドキュメントがないので調べてみる。
録音
audio.AudioRecording クラス
録音データ格納用のバッファらしい。コンストラクタの引数は durationとrate。
microphone.record_into() 関数
録音する。引数は buffer (AudioRecordingオブジェクト)とwait (録音終了を待つか。デフォルト True。Trueのときはどうやって録音止めるのだ? バッファ尽きるまで?)。
録音結果を返す。
microphine.is_recording() 関数
録音中なら True を返す。
microphone.stop() 関数
録音を終了
audio.play() 関数
引数は必須の source が 録音結果(microphone.record_into() の戻り値)、wait (再生終了を待つか。デフォルトはTrue)、pin (音の出力先。デフォルトは内蔵スピーカー)、return_pin (使い方不明)。
audio.sound_level()
再生音のレベルを返す。サンプルではこの値で口の動きのアニメーションを動かしていた。