2019年10月6日日曜日

ネットワークオーディオプレーヤーの製作 (4) Raspberry Pi 3B+のI2S出力トラブル

ネットワークオーディオプレーヤーを自作する話、第4回はRaspberry Pi 3B+(以下RasPi)からI2S信号を出力する話です。

RasPiにはVolumioというオーディオ向けディストリビューションをインストールして使います。Volumio のインストール方法については他に詳しいサイトが多くあるのでここでは省略しますが、基本的に全てGUIで完結でき、大変楽でびっくりしました。かつて初代RasPi Bを購入しCUIと睨めっこして結局何もできなかった思い出が嘘のようです。

さて、Volumioのインストールまでは順調だったのですが、RasPiとES9038Q2Mを繋いで音を出すところで躓いてしまいました。
Volumioの設定で出力先としていろいろなDACを選択できるのですが、もちろん中華ES9038Q2M基板というような選択肢は無いため、とりあえずGeneric I2S DACを選択したところ、DACからは雑音しか出てこないのです。更にいろいろ試していると、雑音が出るのは音源が16bitである場合で、24bit音源なら正常に再生できることが分かりました。しかし私の手持ちの音源の大半は16bitなので、24bitなら再生できると言われても困ります。
これはI2Sのフォーマットが微妙におかしい可能性が高い…と判断してオシロで見てみると、こんな感じでした。黄色がBCLK, 紫色がLRCLKです。

16bit音源

24bit音源

お分かりいただけたでしょうか?
24bit音源ではBCLKが64fsなのに、16bit音源では32fsになっています。一方ES9038Q2M側はというと、常時64fsのBCLKを必要とする32bitモードで動作しています。
これが16bit音源再生の不具合につながっていました。

RasPi側で出力を常時24bitにすることで解決できますが、それもあまり気持ちの良い方法では無い気がした(元のデータをそのまま出したい)ので、別の方法を考える必要があります。といってもあっさりしたもので、DACをGeneric I2S DACからR-PI DACに変えるだけでした。


いろいろ試していて偶然見つけた方法ですが、これで16bitだろうと24bitだろうと問題なく再生されるようになりました。
-----
最後に、メモ代わりにピン配置など。
BCLK…GPIO18 (12pin)
LRCLK…GPIO19 (35pin)
DATA…GPIO21 (40pin)
MCLK…なし(!)
※電源が5Vなので勘違いしやすいのですが、ラズパイのGPIOは3.3Vです。

0 件のコメント:

コメントを投稿