ラベル MMA8452Q の投稿を表示しています。 すべての投稿を表示
ラベル MMA8452Q の投稿を表示しています。 すべての投稿を表示

2018年3月19日月曜日

ESP32でI2Sから音を出す・その2

その1の方法だと再生が終わるまで帰ってきてくれないので、音が出ている最中に止めたり他の音に変更することができません。そのヘン改良したのがこちらです。

なおこちらはKickstarter製品で使ったコードの一部です。

setupではI2S関連の初期化と音を出力するためのタスクsound_loopを準備しています。

loopでは割り込み要素として加速度計を使っていて、3軸合成加速度が平均値(ほぼ重力)を一定以上越えたら音を出力するフラグsoundOnを立てます。

sound_loopではループをぐるぐる回って、大きな加速度を検知してsoundOnがonになったら音源番号iSoundを変更して再生位置iを初期化し、内側のループでi2s_push_sampleを使って1音ずつバッファにプッシュし、音を出力します。再生が終わるか、音源番号が変わったらループを抜けます。

内側のループにはウエイトを入れていないですが、DMAバッファがいっぱいになるとi2s_push_sampleで止まるので、大丈夫っぽいです(ポイかよ)。

まぁこんな感じで…。