スマイルサウンドデコーダでのサウンドデータ構成

現在開発中の、オープンサウンドデコーダ改めスマイルサウンドデコーダは、少しずつ機能が追加されてます。自由なプログラムを実行できるようにするため、CSVのスクリプト(開発メンバー内ではCSVのスクリプトを”サウンドフロー”と呼んでます)を採用し、同時並列的に処理が動く仕組みを取り入れてます。ここで、簡単な動きを説明します。

スマイルサウンドデコーダは、LittleFSを用いたデータ管理を採用していて、RP2040に接続されたフラッシュメモリの15MBの空間にサウンドデータを置きます。wavファイルとcsvファイルを現時点でサポートしており、これらを置いておくと、読み出して処理を実行してくれます。

サウンドチャンネルは12chあり、CSVスクリプト上にサウンド再生コマンドがある場合、このチャンネルに自動でスクリプトを1:1で割り付ける仕組みを取っています。割り付けられると、スクリプトが終了するまで固定されます。

まず最初に、デコーダが起動すると、main.csvというスクリプトを自動でロードします。現時点のテスト用main.csvは以下のような感じです。

call,f0.csv,0
call,f1.csv,1
call,typhon.csv,2
call,f3.csv,3
call,door.csv,11
call,door2.csv,12
label,mainloop
wait,5000
goto,mainloop

何をしているかというと、callというコマンドでファンクションボタンにCSVを割り当てて、ファンクションが押されたらそこを動かしなさいという登録作業をしているのです。その後、label,wait,gotoとありますが、これは5秒間隔のダミーループを動かしているだけで、何もしていません。ランダムで音を出すとか、何か処理をするとか実装するかもしれないので、このように置いてあります。何も書かなければ、このスクリプトは終了します。

f0.csvを見ると以下のような感じです。AUX0は、ヘッドライト・テールライトを意味していて、ライト操作をしてますが、いろいろとif文とか書いてあって複雑ですね。実は、CSVスクリプトでは状態遷移を書かないといけません。なので、if文やgoto文、Labelを使ってちょっと面倒ですがいろいろ書かないといけません。しかし、CSVスクリプトで一通りなんでもできることでもあるので、自由度が格段に上がるという副次的効果もあります。

aux,0,0
label,START
if,fnc==1,PLAY_ON,START
label,PLAY_ON
aux,0,1
label,PLAY_LOOP
if,fnc==1,PLAY_LOOP
aux,0,0
goto,START

ドア開閉のスクリプトは以下のような形になります。

label,START
if,fnc==1,PLAY_ON,START
label,PLAY_ON
play,E233_dopen.wav,0,0
label,PLAY_LOOP
if,fnc==1,PLAY_LOOP
play,E233_sokusin.wav,0,0
wait,500
play,E233_dclose.wav,0,0
goto,START
タイトルとURLをコピーしました