おまけ

前回の記事で、最近の新しいLinuxカーネルには、「一部のUSBオーディオ基板向けを想定して拡張フォーマットが新たに用意されている」 という旨を述べました。

再生しようとする信号のフォーマットを、ALSAアプリと出力先のデバイス・ドライバとの間で教え合うためのフラグのようなものなのですが、”SNDRV_PCM_FMTBIT_DSD_U32_LE” という「もの」と、”SNDRV_PCM_FMTBIT_DSD_U32_BE” といった「もの」などが追加されているのです。

そこで、とりあえず前者をI2Sコントローラ用に採用して定義しましたが、実は、「一部のUSBオーディオ基板」 にはUDA2基板、USBDAC基板やUSDA_MINI基板を含めることができることに気がつきました。

カーネル・ソースの、/sound/usb/quirks.c のコードに下図の赤丸で囲んだ記述を追加することで、対応サンプリング周波数がDSD256にまで拡張され、同じサンプリング周波数のファイルを再生するためのCPUの仕事量が2/3に減り、かつ16bitにパックしたDSD信号にDoPマーカを付け足すという不毛な仕事からCPUが解放されます。 (すみません、256対応は実験上は未確認です) 。

quirks.c に該当する関数がない場合には、古いソースだと考えられます。また、連動してALSAのライブラリも新しいものにする必要があります・・・。 どうせなので最新版に・・・。

ZYBOのUSBでテストアプリを作って確認できました。他のARM系のボードでもおそらく大丈夫だと思います。BBBやRas-Piでもいけるのではないかと思います。もちろんパソコン上の各種ディストリビューションでも同様に行けるのではないでしょうか。

カーネルの再コンパイルをご自身でやらなければならないので、決してお勧めするわけではありませんが・・・。

もしかしたら、ですが、BBBやRas-Pi上のMPD再生で、音切れ対策に、ひょっとしたらですが、多少効果があるかもしれません。ネットワーク上のトラフィックに変化はないはずですが、USBバス上に送り出す時の負荷は減るはずですので・・・。

※動作を保証するものではございませんので、どうかご了承をお願いします。