<<トップページへ
■
概要
PCを使用してDSD再生する場合、ドライバ−単体でみれば
WindowsのASIO2ドライバーの方がlinuxのDoP再生方式より優れていたと思います。
そのためlinuxでのDSD再生音はWindows+ASIO2使用環境に比べて劣っている状態が続
いていたが?
kernelとmpdにDSDネイティブ再生を可能とす
るパッチがリリースされ実用に耐えるものとなり
両者を比較しても差を感じる事は無くなったと思います。
通常linuxでDSD再生をする仕組みとして(DoP方式)
DSD信号入力(I2S)入力可能なUSB-DACの殆どのモデルはDoP(DSD over
PCM)という方式で
信号を伝達している。
DoPとはDSD信号を通常のPCMの枠を使って
伝送するという方式の事である。
本来PCM伝送のための枠組みを使って裏技的にDSD信号を通すために色々と弊害?がある。
24ビットデータの先頭に8ビットのMarkerを付加して
DSDデータと判別できるようにしてからホスト側からストリーミングを開始
ホスト側では付加されたMarkerを判断して信号処理を行いアナログ出力へ変換する。
Markerが付加されるのでデータ量は1.5倍強に増える事となり
且つデータが転送されるごとにPCMかDSDかの判断を行なっているため
CPU負荷が大きくなる等の問題があり再生音に影を落とす事となっていた様に思う?!
(DSD64(2.8MHzのデータ)の場合の転送にはPCMの176.4kHzが必要となる)
Dop方式の再生が出る以前にはDSD再
生はPCMに変換して聴いていました。
当時はPCMに変換しないという意味でDop方式をDSDネイティブ再生と呼んでいました。
その後に独Steinberg Media TechnologiesがASIO2.1を開発し
DSDデーターを ASIOドライバーを使って無変換で再生する事が出来るようになりました。
現在ではこの方式をDSDネイティブ再生と呼んでいる様です。
ASIOの使用はOSがWindows環境である事が必要でMACやLINUXで使えません。
参考リンク:https://sites.google.com/site
/digififan/home/lightmpdbbs
参考リンク:https://github.com/lintweaker/xmos-native-dsd
動作確認環境
APU1C/T40E 2GB
具体的作業にかかります。当てるパッチは リアルタイムカーネルを実現させるためのものと
曲間ノイズを減らす為のものです 。
少し前まではDSDネイティブ再生パッチを当てる必要がありましたが
現在は当てなくても問題ありません
- DSD-native再生を可能にするリアルタイムKernelの構築
# pacman -S git wget bc
# wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.20.tar.gz
# tar xvzf linux-4.9.20.tar.gz
# cd linux-4.9.20
# wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/patch-4.9.20-rt16.patch.gz
# zcat patch-4.9.20-rt16.patch.gz | patch -p 1
(リアルタイムkernelにするためのパッチを当てる。)
# patch -p1 < native-dsd-noise.patch
# make localmodconfig
# make -j 5
※ ここまでをAPU1Cではなくコンパイル用の強力PCで行うと作業が早く終わる。
X86-64環境にインストールされたArchlinux環境です。ここまで終わったら
ディレクトリごとAPU1Cの任意の場所にコピーする。
※ここからはAPU1C本体の linux-4.9.20内で作業
# make modules_install
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.9.20-rt16
# mkinitcpio -k 4.9.20-rt16-ARCH -c /etc/mkinitcpio.conf -g /boot/initramfs-4.9.20-rt16.img
# cp System.map /boot/System.map-4.9.20-rt16
※この作業後にこのカーネルで起動するようにブートローダーの設定を行うがそれは各自の環境による。
管理人の環境ではGROUBを使用しない環境、extlinuxを利用したものなのでextlinux.confを編集する。
- チェック用のスクリプトを作成して試してみる
クライアントソフトでDSDソフトを再生
(DSD64)した後にこのスクリプトを実行すると
$ cat CHECK-HW-PARAMS.sh
echo "--------------------------------------
aplay -l | awk '{print $1,$2,$4}' | grep "カード" | sed 's/\[//g' | grep 0
cat /proc/asound/card0/pcm0p/sub0/hw_params
echo ""
echo "--------------------------------------"
echo ""
aplay -l | awk '{print $1,$2,$4}' | grep "カード" | sed 's/\[//g' | grep 1
cat /proc/asound/card1/pcm0p/sub0/hw_params
echo "--------------------------------------"
$ CHECK-HW-PARAMS.sh
--------------------------------------
カード 0: Combo384
access: RW_INTERLEAVED
format: DSD_U32_LE
subformat: STD
channels: 2
rate: 88200 (88200/1)
period_size: 11025
buffer_size: 44100
--------------------------------------
カード 1: DIYINHK
access: RW_INTERLEAVED
format: DSD_U32_BE
subformat: STD
channels: 2
rate: 88200 (88200/1)
period_size: 11025
buffer_size: 44100
--------------------------------------
DSDフォーマットで出力されている事が分かります。