ふと興味がわいたので、
マイコンボードESP32から、I2Sという規格の音声出力モジュールの制御を試しています。
I2S=Inter IC Soundとは、CDプレイヤーやTVやデジタルアンプの中に入っていて
信号を音に変換する部品(の規格)、らしいです。
この「機械の音が出る部分」に、プログラムで数字を流し込んで音を鳴らしてみます。
上がマイコンボードESP32、プログラムが動く部分です。
下がI2SモジュールのPCM5102Aです。大きさは幅3cm、人差し指の先ほど。
400円くらい?イヤホンを直挿しできます。
見た目によらず性能の評価は高く、ちょっと高めのオーディオにも使われているらしいです。
I2Sの制御信号は、上の図のようなイメージです。
SCK(BCK)でタイミングを取り、LRCKで左右ヨシ!を決め、DINに二進数のデータを流す。
想像より、ずっとシンプルでした。
バッファリングやデータを流すタイミングは、全てマイコン側が行うのですが
ESP32では内蔵I2Sインタフェースがハード処理してくれます。
せっかくなので、ちょっと無茶なテストをしようと思い
音のデータを伸び縮みさせて音階を付け、同時100音重ねて演奏してみました。
オクターブ1~オクターブ8までのアルペジオ往復50音 ×2音色重ね=計100音
I2S.hライブラリのみ使用、 音階を付けるWav再生処理は自作です。
サンプルレート16kHzのWavデータを、LRステレオ100音分リアルタイムで計算し
I2Sのバッファに44.1kHz刻みでゴリゴリと出力しています。
音はこんな感じです。
音階処理を一から組み直したので、音程の精度も上がったと思います。
なお今回のプログラムでは、同時102音を超えると処理が追い付かなくなり、
プツプツと雑音が混ざり始めました。100音が限界です。
これをMIDIの鍵盤から鳴らせると、かなり楽器っぽくなりそうです。
作れないか試してみようと思います。
【次回予告】
4月~GWは外出を控え、いろいろなプログラムを作っては試していました。
①上 ST7735S 1.77インチ液晶ディスプレイ
表示しているのはpeach9-89様のセクシー大根。(使用許可を頂きました。感謝です)
ST7735、データシートと睨めっこで大変でしたが、いい感じで制御できています。
②左下 SSD1306 日本語表示
JISコード表とフリーフォントを睨めっこして、独自のデータを再構成、
お手軽に漢字表示できるようにしました。
③右奥 MIDIインタフェース
MIDI鍵盤を押すと16ch別々で、ESP32のDACから音が鳴る
果たして完成するのか。
でも最近、プログラムもいいけど温泉か釣りに行きたい(本音) そろそろ出掛けたいです。
おしまい。