M5スタックに喋らせる方法
M5スタックにはビープ音を鳴らす関数とかはあるのですが、やはり、喋らせたい。
どうやらDAコンバータが内蔵されているらしいので、任意の波形を出す方法を考えてみました。
結果としては、dacWriteという関数を使えばDACのポートに任意の値(8bit)を書き込むことができるようです。
波形の再生となると一定時間ごとに呼び出さなければなりませんが、普通の感覚ならばタイマー割り込みとDMAで・・と思うのですが、M5スタックに入っているサンプルプログラムを見るとloopの中でdacWriteを繰り返しています。
割り込みのコンテキストとかではなく通常レベルのloopの中で・・
dacWriteの前にmicrosを呼び出しています。これは何をしているのかというと、「現在の時刻が、前回の出力時よりサンプリングレート周期を経過したら次のデータを出力する」ということを繰り返しています。
音声のサンプリングレートが44.1kHzだとすると22.67μ秒ごとってことですね。
割り込みもDMAも使わずにCPUのパワーでできてしまうのか・・
組み込みマイコンが数百MHzの速度で動いてしまうことにカルチャーショックを受けました。
#なお、参考にしたプログラムは、Arduino\libraries\M5Stack\examples\Fire\SpeakerDacSineにある SpeakerDacSine.ino です。
| 固定リンク
コメント