はじめに
Node-RED MCU (Moddable)でクリチカを試したという記事が流れてきた。
巨大なNode-REDフローの中にaudiooutノードが含まれており、クリスマスの定番音楽が流れていたので、さっそく試してみた。
注意点として、サンプルではESP32-S3(Flash 8MBメモリ)を使用しており、M5Stack Core2(ESP32 Flash 4MBメモリ)ではメモリ不足エラー(cannot allocate SharedArrayBuffer)が出やすいです。
前提条件
ビルド・インストール環境
- Intel MacBook Pro (2017)
マイコンデバイス
- M5Stack Core2
手順
以下を参考にNode-RED Dashboardを使用できるようにします。
1. audiooutノードをインストールする。
Node-REDとnode-red-mcu-pluginをインストールしたディレクトリで以下のコマンドを実行します。
$ npm install node_modules/\@ralphwetzel/node-red-mcu-plugin/node-red-mcu/nodes/audioout
2. Node-REDを起動する。
新しいモジュール(今回はaudiooutノード)をインストールすると、Node-RED起動時のエラー(node-red-mcu-pluginがパッチを適用するutils.jsが存在しない)が発生するため、node_modules/node-redディレクトリで必要なモジュールをインストールしてからNode-REDを起動します。
$ cd node_modules/node-red
$ npm install
$ cd ../..
$ node node_modules/node-red/red.js -u ./
3. 音声ファイルを用意する
効果音ラボの「クリスマスの鈴」(シャンシャン)を使用させていただきました。
audiooutノードがサポートしているフォーマットはサンプリングレート(16bit, 16kHz)のモノラルWAV形式、または、SBC形式です。ffmpegコマンドを使用してフォーマットを変換します。
$ ffmpeg -i santaclaus-bell1.mp3 -acodec pcm_s16le -ac 1 -ar 16000 santaclaus-bell1.wav
$ ffmpeg -i santaclaus-bell1.mp3 -acodec sbc -ac 1 -ar 16000 -b:a 32k santaclaus-bell1.sbc
出力された音声ファイルをHTTPでアクセスできるウェブサイトへ置きます。
Node-REDフロー
Node-RED MCUのDashboardサンプルフローに「change」ノードと「audioout」ノードを追加し、ノード間を接続します。
「change」ノードはmsg.waveにWAVファイルのURLを、msg.sbcにSBCファイルのURLを設定します。
「audioout」ノードは再生するボリュームを設定します。
サンプルフロー
[{"id":"5ed813308402a4b0","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[],"_mcu":{"mcu":true}},{"id":"3c6c04d315fddf06","type":"ui_button","z":"5ed813308402a4b0","name":"A","group":"88ee1734c254e1cb","order":0,"width":0,"height":0,"passthru":false,"label":"A","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"A","payloadType":"str","topic":"topic","topicType":"msg","_mcu":{"mcu":true},"x":70,"y":40,"wires":[["def69a7b250c2736","172e2f277f989576"]]},{"id":"def69a7b250c2736","type":"ui_text","z":"5ed813308402a4b0","group":"88ee1734c254e1cb","order":1,"width":0,"height":0,"name":"","label":"Song","format":"{{msg.payload}}","layout":"row-spread","className":"","_mcu":{"mcu":true},"x":270,"y":80,"wires":[]},{"id":"2c72b81b70d481d9","type":"ui_button","z":"5ed813308402a4b0","name":"B","group":"88ee1734c254e1cb","order":0,"width":0,"height":0,"passthru":false,"label":"B","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"B","payloadType":"str","topic":"topic","topicType":"msg","_mcu":{"mcu":true},"x":70,"y":120,"wires":[["def69a7b250c2736","b1bc49e3731414ac"]]},{"id":"172e2f277f989576","type":"change","z":"5ed813308402a4b0","name":"","rules":[{"t":"set","p":"wave","pt":"msg","to":"http://host01.norahack.tk/bell.wav","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"_mcu":{"mcu":true},"x":300,"y":220,"wires":[["93893f1b5c7f304e"]]},{"id":"b1bc49e3731414ac","type":"change","z":"5ed813308402a4b0","name":"","rules":[{"t":"set","p":"wave","pt":"msg","to":"http://test.moddable.com/audio/ChristmasMusic/god_rest.wav","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"_mcu":{"mcu":true},"x":300,"y":280,"wires":[["93893f1b5c7f304e"]]},{"id":"93893f1b5c7f304e","type":"audioout","z":"5ed813308402a4b0","name":"","volume":"1.5","_mcu":{"mcu":true},"x":520,"y":220,"wires":[]},{"id":"88ee1734c254e1cb","type":"ui_group","name":"Happy X'mas!","tab":"5a15d716f5894281","order":1,"disp":true,"width":"6","collapse":false,"className":"","_mcu":{"mcu":false}},{"id":"5a15d716f5894281","type":"ui_tab","name":"home","icon":"dashboard","disabled":false,"hidden":false,"_mcu":{"mcu":false}}]
動作確認
Dashboardのボタンを押すと、「クリスマスの鈴」が再生されます。