ESP32+I2Sで音階を同時100音鳴らすテスト(PCM5102A) | a24a24a24のブログ

a24a24a24のブログ

アメピグ残党。
釣り、温泉、お出かけ、パソコン。最近、電子工作。

ふと興味がわいたので、

マイコンボード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から音が鳴る

 

 

果たして完成するのか。

でも最近、プログラムもいいけど温泉か釣りに行きたい(本音) そろそろ出掛けたいです。

おしまい。