Linux Computing
  1. ホーム
  2. Volumio でダイレクト DSD 再生

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 パラメーターの値に対するピンの割り当ては

mute_pin.jpg(44704 byte)

のようになっていますが、この内容は実装されているコードと異なっているようです。現在サポートされている値は -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 行は一行で記述することに注意してください。

追記 2018年2月26日

B3D-S4495S の FPGA のプログラミングを変更して確認しました。結果から言うと期待したほど大きな改善はありませんでした。しかし、小さな改善は確認できました。具体的には、変更前はDSD 再生中に曲の頭出しや STOP、PAUSE 操作で「ボツ」というノイズが一様に発生していましたが、変更後の PAUSE 操作では「プチ」というようにノイズの発生音が小さくなっています。:-) 波形で見たのが以下の写真です。わかりやすいように DSD128 の 1kHz のサイン波を再生しています。そしてミュート回路後の出力波形(画面下)をP9_27 ピン(画面上)と一緒に見ています。

頭出しの波形を見るとノイズはミュートがオンになる約 50 ミリ秒前に発生しています。つまりミュートが間に合ってないです。

mute_wave0.jpg(29466 byte)
図1 再生中からの頭出し

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

mute_wave2.jpg(28758 byte)
図3 再生中からの頭出し(拡大)

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

mute_wave1.jpg(29315 byte)
図2 再生中からの PAUSE 操作

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

mute_wave3.jpg(28802 byte)
図4 再生中からの PAUSE(拡大)

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

このページは2018年2月18日にはじめてアップされました。

関連するページ
目次
PR
コンテンツ
最近のトピック
週間アクセスランキング
デル株式会社
Copyright (C) 2018 Linux Computing All rights reserved