Volumio でダイレクト DSD 再生
なんと BBB 版 Volumio の 2.194 バージョンでは I2S のダイレクト DSD 再生が可能になっていました。:-P
普通にオフィシャル Web サイトからダウンロードしてインストールすれば OK です。インストールはこちらを参照してください。
Botic 7 がリリースされたときbbb.ieero.com の記述を参考に BBB の P9_27 ピンと B3D-A4495/S 基板の FPGA にミュート信号を割り付けていました。そして Botic 7 で試したのですがうまく動作させることができなかったので諦めていたのでした。
最近、Botic のサポートフォーラムで miero さんが Volumio の今のカーネルは mute_pin をサポートしているよと言っていたので Volumio で試してみようと最新バージョンをインストールし MPD のバージョンを確認すると
volumio@volumio:~$ mpd -V Music Player Daemon 0.20.6 (4e23dd2-dirty) ・ ・ 略 ・ ・
となっていたのでもしや DSD に対応したのではと思って試してみたら再生できたということです。このバージョンがリリースされたのは2017年の6月ですので半年以上も前から Volumio はダイレクト DSD モードをサポートしていたのですね。CHANGELOG を確認したら 2.163(06-05-2017) には NEW FEATURES として Direct DSD Playback と書かれていました。他でもあまり話題になっていないようなのでスルーでしたね。
ミュートピン
Mute_pin を確認してみます。
カーネルオプションの snd_soc_davinci_mcasp.mute_pin パラメーターに 3 を指定すると BBB の P6_27 ピンにミュート信号を出力させることができます。
現在bbb.ieero.com では mute_pin パラメーターの値に対するピンの割り当ては

のようになっていますが、この内容は実装されているコードと異なっているようです。現在サポートされている値は -1,0,+1,+2,+3,+4 で -1 はミュート機能をディセーブル、0 で P9_30、1 で P9_41、2 で P9_42 または P9_28、3 で P9_27、4 で 2 と 3 の両方となっているようです。筆者は 3 でしか試していません。論理はアクティブ High ('1' でミュート)でインバートする指定 +16777216 はサポートされていないようです。
Botic 7 で確認したときはbbb.ieero.com を参考にしていたので P9_27 に出力させるのに 8 を設定していたため何の変化も起きなかったのです。と思って Botic 7 で 3 を指定したのですが何も起きませんでした。:-(
ミュートの効果
ミュートの効果を確認する前に、Arch-Botic と lightMPD-Botic で snd_soc_davinci_mcasp.mute_pin=3 を uEnv.txt に追加してオシロスコープで確認しました。その結果は、Arch-Botic、lightMPD-Botic ともミュートピンが動作していました。但し uEnv.txt の optargs を以下のようにしています。
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MM-- snd_soc_botic.dsd_format_switch=3 snd_soc_davinci_mcasp.mute_pin=3
特に Arch-Botic の場合デフォルトで serconfig パラメータの値が MMMM となっているところを MM-- あるいは MD-- とする必要があります。また、optargs 行は一行で記述することに注意してください。
B3D-S4495S の FPGA のプログラミングを変更して確認しました。結果から言うと期待したほど大きな改善はありませんでした。しかし、小さな改善は確認できました。具体的には、変更前はDSD 再生中に曲の頭出しや STOP、PAUSE 操作で「ボツ」というノイズが一様に発生していましたが、変更後の PAUSE 操作では「プチ」というようにノイズの発生音が小さくなっています。:-) 波形で見たのが以下の写真です。わかりやすいように DSD128 の 1kHz のサイン波を再生しています。そしてミュート回路後の出力波形(画面下)をP9_27 ピン(画面上)と一緒に見ています。
頭出しの波形を見るとノイズはミュートがオンになる約 50 ミリ秒前に発生しています。つまりミュートが間に合ってないです。

拡大してみるとノイズの発生期間は約500 マイクロ秒です。

再生中からの PAUSE 操作ではノイズとミュート信号がほぼ同時です。

拡大してみるとノイズの発生期間は約 60 マイクロ秒程度ですがやはりミュートは間に合っていません。発生するノイズ期間は約 500 マイクロ秒と一緒なのですがミュート回路で 400 マイクロ秒程ノイズを除いています。そのため「プチ」というように発生音が小さくなっています。

頭出しや PLAY/PAUSE をクリックされたのを検知したらこれら処理をする前にミュート信号をオンすることができればノイズをなくす手はありそうですね。