マイコン1個でJBLスピーカーをAirPlay対応に、USBで音を直接送る

Bluetoothスピーカーは手軽だが、圧縮された音を無線で飛ばすため、音質やわずかな遅れが気になることがある。手持ちのJBLスピーカーに、iPhoneやMacからAppleのAirPlayで、より安定したデジタル音声を送れないか。ある開発者が、小型のマイコンを1個使ってこれをやってのけた。

wasdwasd0105氏が公開したのは、Seeed StudioのマイコンボードXIAO ESP32S3を、AirPlay対応のUSBオーディオアダプターに仕立てる方法だ。ESP32S3を選んだ理由は、USB機能を標準で内蔵しており、外付けの変換基板なしにUSB経由で音を送れる点と、本体が小さい点にある。USB-Cケーブルでこのボードをスピーカー「JBL Charge 6」のUSB端子につなぐと、ボードがUSBオーディオの音源として認識され、パソコンやスマホをつないだときと同じように音を流せる。

ソフトウェアは、rbouteiller氏が公開したAirPlay受信ファームウェア「airplay-esp32」を土台にした。このファームは、機器の発見や音声の同期といった手間のかかるAirPlayの処理一式をすでに実装している。ゼロから書くのは大変なため、既存の実装を使い、音声の出口だけを作り替えた。元のファームは、デコードした音をI2Sという規格で外部のDACチップに渡す設計だ。wasdwasd0105氏は、音声のデータがデコードされた地点に手を入れ、I2Sに渡す代わりに、TinyUSBというライブラリを使ってUSBオーディオの信号として送り出すように変えた。

JBL Charge 6側では、有線でデジタル音声を受け取るための切り替え操作が要る。スピーカーの電源を入れ、Playボタンを押したままUSB-Cケーブルを差し込むと、確認音が鳴ってBluetoothの表示が消え、有線のデジタル音声を受け付ける状態になる。この状態にすると、スピーカーはESP32S3を通常のUSBオーディオ機器として扱い、追加のドライバーなしで音が鳴る。Wi-Fiの設定には元のファームの機能をそのまま使い、初回起動時にボードが作る無線アクセスポイントにスマホでつなぎ、自宅のWi-Fi情報を入力すれば、以降は自動で接続する。

wasdwasd0105氏は、苦労した点も率直に記している。最も難しかったのは、I2Sの出力をUSBに置き換えつつ音声を途切れさせないことで、USBの機器情報(サンプルレートやビット深度、チャンネル数)をスピーカーが期待する値と正確に合わせる必要があった。Wi-Fiの速度によっては音が途切れることがあり、XIAO ESP32S3は動作中に熱を持つためヒートシンクが要るという。AirPlayの処理の大部分は元のプロジェクトに支えられており、今後は複数の部屋で同時に鳴らす構成も試す予定だとしている。ソースコードはGitHubで公開されている。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次