
ぷちオーディオ沼への道 (1) - Bluetooth Classic A2DP受信編
きっかけ
以前、Boseのスピーカをリメイクして、毎日楽しく聞いていますが、さらにアップグレードしたい欲求が出てきます。でも、ここで、高額なお金をかけて高級機器を揃えるのは我慢して、仕組み的にいいものにできないかと考えました。
最近、FPGAを使ってAIが作成したコードでいろいろなことが作れます。DSP(デジタル信号処理)も、難しい理論を理解しなくても、大体の知識でできそうです。そのDSPで、原音に自分好みにいろいろかけることで、自分にとって最高の音ができるのではと考えました。まずはフィルタとEQですが、もっと面白いことができそうです。
できるだけ予算は抑えめに、でも自分にとって最高な音。そんなことを考えています。
構想
図のような構成にしています。ESP32でスマフォやPCからBluetoothでデータを受信し、I2SでDSPに転送して処理、その後複数のチャンネルに分割してそれぞれをI2Sで出力、TAS5754のDAC,Class-Dアンプでスピーカを鳴らします。
TAS5754は、TIのデジタル入力のClass-DアンプICです。ステレオで40Wまで出力できます。なぜ、これにしたかというと、ESP32とアンプの間にDSPを入れるので、PWMではなく、I2Sデジタル入力でなければならないこと、DAC以降は直に出力して、出力信号を入力側に戻して監視することで、比較補正(クローズド)して出力したいためです。これで、DSP側で指定した音が正しく出力できるのではないかと思います。(ここはデータシートの受け売りなので予想)
DACまでは、音量調整などすべてデジタルで処理します。
EQ周波数設定や各音量は、ESP32側で、WebUIの画面で調整します。DSP,TAS5754へのコントロールはI2Cで行います。DSPからもI2Cで指示できます。

これを実現するために、まずはスマフォからESP32でA2DPでデータを受信し、I2Sで出力、再生できるか実験しました。


Bluetooth Classic A2DPが使用できるのはESP32(SやC何もついていないもの)のタイプのみです。これは、USBポートからソフトウェアを書き込むことはできず、USB-シリアル変換が必要です。実験した時は、持ち合わせのUSB-シリアル変換モジュールを使用しています。シリアルのDTR信号とRTS信号で、RESET、IO0/BOOTの線を制御することで、シリアルから書き込み、ブートまで指示できます。

音を出すために必要な結線は、MAX98357AへのDIN(IO22), BCLK(IO26), LRCLK(14), GND, VDDだけです。他のESP32ボードとI2Sが入力できるアンプでも使用できると思います。
コードとビルド方法はこちらにあります。
音出し
ソフトウェアを書き込み、起動すると、スマフォからBTのデバイス一覧にESP32-Speakerと出ました。そして、接続し音を再生してみました。
スピーカが小さいので、いい音とは言えませんが、音が出たので。I2Sでスマフォからの音が出力できたのでこれで実験成功です。(感動)
次回は、I2S信号をスピーカにいい音で出すために、TAS5754を使用したClass-Dアンプの設計をしたいと思います。