DSD native 與 DoP 差在哪?Linux MPD 設定與 bit-perfect 驗證

DSD 是什麼?

你可能有看過標著「DSD64」、「DSD128」的數位音樂專輯,或是自己備份一張 SACD 抓成 .dsf。

很多人以為 DSD 就是「更高級的 CD」,bit 數更多、數字更大。

這其實是錯誤的理解,DSD 跟 CD 走的是兩套完全不同的編碼。

DSD 全名是 Direct Stream Digital,是 Sony 跟 Philips 開發的編碼方式,最早是拿來做類比母帶的數位典藏,就是後來被稱為 SACD(Super Audio CD)的音訊格式。

以前常見的 CD、FLAC 存的是 PCM,也就是一般數位音訊的編碼方式,它是用好幾個 bit 描述每一個取樣點,像 16-bit、24-bit。

而 DSD 剛好反過來,每個取樣點只有 1 個 bit,不是 0 就是 1,靠「1 出現的密度」來表示訊號的大小。

「DSD64」的 64,說的就是這個速度,像是取樣率 2.8224 MHz,剛好是 CD 那個 44.1 kHz 的 64 倍,換成 DSD128 是 5.6448 MHz,DSD256 是 11.2896 MHz,數字越大,取樣越密。

通常副檔名會是 .dsf 跟 .dff 兩種,裝的都是 DSD,差別在容器格式,.dsf 可以存 ID3 標籤,.dff 在標籤這塊的支援就比較有限。

所以 DSD 不是「更高 bit 數的 CD」,它是另一套用速度換解析度的編碼,它跟 PCM 是兩種不同的格式。


native DSD 跟 DoP 差在哪裡?

同一個 DSD 檔案,你會在播放器或 DAC(數位類比轉換器)的設定裡看到兩個選項,native(原生)跟 DoP。

很多人第一眼就把它讀成「高音質」跟「低音質」,網路上「DoP 音質比 native 差」的說法也一直沒斷過。

這是錯誤的理解,如果你把 DSD 想成一批貨物,就很好懂了。

native:ALSA(Linux 的音訊子系統)把這批 DSD 貨直接交給 DAC,中間不貼標籤、不摻任何非音訊的東西,傳輸線上跑的每一個 bit 都是音樂本身。

DoP(DSD over PCM):把同一批 DSD 貨裝進「PCM 的箱子」再寄出去,上面會貼一張標籤,讓 DAC 認得這「PCM 的箱子就是 DSD」,當 DAC 收到後會撕掉標籤、把貨拆出來,還原成原本的 DSD。

這套做法最早是 dCS 在 2011 年提出的點子,2012 年由 dCS、Playback Designs、Channel D 三家起草成開放標準,支持名單上一共十九個廠商與個人,包含這三家起草者。

所以 DoP 不是「比較差的音質」,只是換了個運法,貨送到 DAC 那一刻,native 跟 DoP 還原出來的是同一份 DSD bits。

在算法上是這樣:176.4 kHz 乘上每箱 16-bit 的貨物,剛好就是 DSD64 那 2.8224 MHz 的位元量,換句話說,用 24-bit、176.4 kHz 的 PCM 通道就能把 DSD64 完整載過去,DSD 的取樣率還是 2.8224 MHz,一個 bit 都沒少。

那 native 跟 DoP 到底差在哪?主要是下面這三件事:

頻寬:
DoP 每個箱子都要多貼 8-bit 標籤,24-bit 裡只有 16-bit 是真貨,照 DoP 標準算,位元率是 native 的 1.5 倍。

傳輸線或介面頻寬吃緊的時候,DoP 會比 native 先撞牆,最典型的就是 DSD256,native 送得過去的機器,走 DoP 卻得開到 705.6 kHz 的 PCM 通道,PCM 上限只到 384 kHz 的 DAC 就吃不下了。

相容性:
這是 DoP 最大的優點,它能穿過那些「只懂 PCM」的軟體、作業系統跟傳輸層。

MPD 官方文件講得更精準:走 DoP,ALSA 跟音效晶片完全不必支援 DSD,只要能 bit-perfect 傳 24-bit PCM 就行,native 則是一路上每一關都得支援 DSD,貨物才送得到。

DAC 支援:
有些 DAC 只吃 DoP、有些偏好 native,要看廠商怎麼做。

native 跟 DoP 的差別在「怎麼運送」,不在「運送的是什麼」。


在官方 MPD 怎麼正確設

搞懂 native 跟 DoP 之後,問題來了:在 MPD 裡到底要怎麼設?

官方版的 MPD,決定 DSD 怎麼送出去的設定只有兩個:

  • dop "yes|no"(預設 no):要不要走 DoP。
  • allowed_formats:限定輸出格式的白名單,可以在某幾種格式後面加 =dop,指定它們走 DoP。

還有個 dsd_usb,那是 0.18 以前的舊名字,0.19 起改叫 dop。

設定值參考:

你在網路找到的官方 MPD 設定
dop "yes"✅ 官方選項
allowed_formats✅ 官方選項
dsd_native "yes"❌ 非官方 patch 才有
dsd_native_type "2"❌ 非官方 patch 才有
dsd_usb "yes"⚠️ 0.18 以前的舊名,文件已不列
thesycon_dsd_workaround "yes"⚠️ 0.24.14 起已移除

那 native DSD 要怎麼開?答案是:你不用「開」。

只要條件具備,native DSD 會自動啟用,下游(ALSA 加上你的 DAC)撐得住,它就直接走 native。

真正需要動手的只有三種情形:

(a) 你的 DAC 走 native DSD 沒問題 → 什麼都不用設,連 allowed_formats 都不用寫,讓 MPD 自己判斷。

(b) 你的 DAC 只吃 DoP → 最簡單的做法,就是在 audio_output 區塊裡寫 dop "yes",所有 DSD 一律走 DoP。

(c) 只有某幾種 DSD 要走 DoP(比如 DSD64/DSD128 走 DoP、DSD256 走 native)→ 這時才輪到 allowed_formats:

audio_output {
    type            "alsa"
    name            "DAC"
    device          "hw:0,0"
    dop             "no"
    allowed_formats "*:24:* dsd64:*=dop dsd128:*=dop *:dsd:*"
}

這裡有個小細節,一旦寫了 allowed_formats,要不要走 DoP 就完全看清單裡對上的那一項有沒有 =dop,區塊裡的 dop 設定反而不管用了。

範例裡留著 dop "no" 只是讓人一眼看出「DoP 預設不開」,寫不寫都不影響結果。

順帶一提,官方手冊有一份 bit-perfect 的檢查清單,一共六項:用 ALSA 輸出、指定 hw: 這種硬體裝置、不要用軟體音量(mixer_type)、不要用 Replay Gain、不要強迫 MPD 用特定的音訊格式,還有第六項,自己去驗證。


DoP 的風險

網路上流傳一種說法:DoP 反正包在 PCM 裡,DAC 看不懂大不了沒聲音,開了也不會怎樣。

這句話一半對,一半會害到你。

MPD 在官方兩份文件裡各講了一件事。

plugin 參考文件講的是風險:DoP 把 DSD 樣本包進假的 24-bit PCM 裡,有些支援 DSD 的器材看得懂,但對其他硬體可能有害,所以預設關閉,要開就自負風險。

使用者手冊則是說,為什麼不乾脆自動開:MPD 沒辦法替你確認你那台 DAC 到底認不認得這個箱子,既然沒辦法確認,就一律先關起來,把決定權交回給你。

實務上要分兩層來看。

第一層:DoP 就算被認錯也沒太大影響。

這是最常被講錯的地方,DoP 標準裡有 0x05/0xFA 這組交替值,就是為了把「被誤讀成 PCM」時的爆音壓到最小。

就算 DAC 認錯、把 DoP 當成 PCM 播,還是可以播放,只不過是音量變低跟失效,實務上多半是小聲的雜訊,背景還夾著隱約的音樂。

最典型的失效,就是訊號路徑上有人動到那張標籤,dCS 官方點名的情形,就是「電腦端做了音量調整」。

音量一調,最高位那 8-bit 標籤跟著被改寫,0x05/0xFA 的交替斷掉,DAC 認不出來,整箱退回當普通 PCM 拆。

好消息是它不會炸,但會讓你以為自己在聽 DSD,其實聽的是一堆低音量雜訊配上隱約的音樂,而且很容易誤判成「這張母帶錄得不好」。

所以走 DoP 有一條鐵律,MPD 之後的每一層都不能碰音量,也不能重新取樣或混音。

第二層:「安全失效」有前提。

它不是隨貨附贈的保險,成立的條件是「DAC 收得下這個 PCM 格式,只是沒認出標籤」,最容易踩過這條線的,就是前面講頻寬時提過的,把 DSD256 硬塞進 DoP。

好在官方 MPD 在這裡還算謹慎,它設定 DoP 時會檢查 ALSA 給回來的格式是不是跟要求的一模一樣。

對不上就直接放棄 DoP,退回一般流程,能走 native 就走 native,不行就把 DSD 解碼成 PCM,必要時再降頻。

結果是你多半不會聽到爆音,而是被悄悄降級,你會以為自己在聽 DSD256,其實聽的是 PCM。

那真正的「白噪音」是從哪來的?關鍵在於有沒有那層箱子。

如果裸 DSD 位元流沒貼標籤、也沒裝進 PCM 的箱子,一旦被當成普通 PCM 讀,每一個取樣值幾乎都是亂數,鋪滿整個動態範圍,那聽到的就會是白噪音。

還有一種常被誤會成「爆音」的狀況,訊號路徑上餵資料餵不及,一路 xrun,聽起來就是斷斷續續的破音。

MPD 官方討論區就有人播 DSD256 踩到這個坑,維護者判斷是延遲問題,把 ALSA 的緩衝區調大之後改善很多,但卻沒有完全消失。

值得一提的是,那個案例的 DSD256 根本沒走 DoP,他的 DAC 在 Linux 下走不了 native,DoP 又只撐到 DSD128。

這正是前面情形 (c) 講的「沒對上就套第一項」,只是他是刻意這樣用的,所以那個破音既不是 DoP 的錯,也不是 DAC 壞掉,純粹是餵資料跟不上。

要排除的話順序很簡單:先查 DAC 支援 native DSD 還是 DoP,再決定開哪一條,兩個都拿不準的話,就先走 native 自動那條路,邊播邊用下一節的方法驗。


取樣率轉換的真相

還有一件事,你以為 MPD 會幫你做、其實它不會做,那就是把 DSD「轉成另一個 DSD 取樣率」。

很多人從 PCM 世界帶著一個習慣過來,覺得播放器會自動「轉成 DAC 吃得下的格式」。

對 PCM 來說,MPD 確實有取樣率轉換器(像 libsamplerate、soxr 那一類),能幫你把 96 kHz 降成 48 kHz。

但那個轉換器只吃 PCM。

MPD 對 DSD 只有三條路,官方文件有說到:native 直送、DoP 包裝,或解碼成 PCM。

它不會把 DSD 重新取樣成「另一個 DSD 取樣率」;如果中間真的得動格式(比如 DAC 接不了那個 DSD 頻率),它的做法是把 DSD 解碼成 PCM。

反過來,把 PCM 升頻「編碼成 DSD」,官方 MPD 也沒有這個功能。

那 native DSD 卡住,就不會是 MPD,會在更底下那一層。

至於「把 CD 升頻成 DSD 會不會更好聽」?

一首 44.1 kHz、16-bit 的歌,能裝的細節就那麼多,你用軟體把它升頻成 DSD256,檔案會變大、數字也會變漂亮。

但錄音時就沒錄進去的高頻、沒留下來的動態,不會因為換了包裝就長回來。

換格式是換包裝,不是補上貨物。

MPD 不會把 DSD 換成另一個 DSD 頻率,它唯一的退路是解碼成 PCM。

所以訊號路徑要自己弄對,也要自己驗。


怎麼驗證它真的 bit-perfect 直送

要怎麼知道這台機器「實際上」真的在直送、沒被偷偷轉過呢?

不能只看播放器介面打了勾,也不要只憑 DAC 面板那盞燈就下結論,播放器介面只能證明「出貨單填了」,不能證明「貨真的照單送到」。

可以參考 DAC 上的燈號,DoP 的標籤只要斷掉一個,DAC 就會跳回 PCM 模式,所以 DSD 燈穩穩亮著,代表標籤一路完好。

只是很多 DAC 的燈分不出你走的是 native 還是 DoP,也不一定告訴你是哪個取樣率。

官方手冊也提醒過:ALSA 有可能騙 MPD,說某個格式有支援。

想知道真正在跑的是什麼,Linux 上有一招最直接,而且什麼都不用另外裝,就是直接讀核心當下實際在用的格式。

bit-perfect 講的是位元一個都沒被動過、原封不動送到 DAC。

下面這行指令能讓你確認格式、取樣率有沒有被偷換。

cat /proc/asound/card*/pcm*p/sub*/hw_params

沒在播的那幾張卡會顯示 closed,正在播的那張才有內容。

讀數對照表:

format 顯示rate 顯示代表含意
DSD_ 開頭(DSD_U32_BE 等)88200/176400/352800✅ native 直出
S24_LE/S24_3LE/S32_LE176400✅ 播 DSD64 時:DoP 在送
S24_LE/S24_3LE/S32_LE352800⚠️ 三種可能,見下方說明
S16_LE/S32_LE 等44100、48000 之類❌ 播 DSD 時:被解碼又降頻,離原始訊號最遠(播 CD rip 則本來就長這樣)

能一眼確定的只有一種:要判斷「有沒有走 native」,看 format 那一行是不是 DSD_ 開頭就夠了。

至於 rate 顯示什麼,先別急著拿來下結論,下面兩個坑,第一次驗的人幾乎都會踩。

第一個坑:native 播 DSD64,rate 顯示的是 88200,不是 2822400。

第一次看到的人幾乎都會嚇一跳,以為自己被降頻了。

其實沒有,這裡有兩套算法疊在一起:

一套是 MPD 自己的,官方手冊特別交代過,MPD 算 DSD 的取樣率是數 byte,不是數 bit。

所以 DSD64 那 2822400 個 bit,在 MPD 設定檔的語境裡是 352800(44100 × 64 ÷ 8)。

另一套是 ALSA 的,hw_params 裡的 rate 算的是每秒幾個 frame,而 DSD_U32 每個聲道的一格裝 32 個 bit,2822400 ÷ 32 就是 88200。

因此 rate 會顯示多少,要看驅動用哪一種 DSD 格式送:

ALSA 的 DSD 格式播 DSD64 時 rate 顯示
DSD_U8352800
DSD_U16_LE/DSD_U16_BE176400
DSD_U32_LE/DSD_U32_BE88200

三個數字都正常,都是 native,XMOS 那一類的 USB DAC 最常見的是 DSD_U32_BE,88200 就是你最可能看到的數字。

第二個坑:S24_LE/S32_LE 加上 352800,可能是三件完全不同的事。

MPD 把 DSD 解碼成 PCM 時,是每 8 個 DSD bit 換成 1 個 PCM 取樣,所以 DSD64 解出來剛好就是 352.8 kHz。

偏偏 DoP 在送 DSD128 時,用的也正好是 352.8 kHz 的 PCM 通道。

再加上 DXD 這種本來就是 352.8 kHz 的高解析 PCM 檔,三者在 hw_params 上的讀數一模一樣。

看到這組數字,一定要對照你現在播的是哪個檔:

播 DSD128 → 那是 DoP。

播 DSD64 → 那是被解碼成 PCM 了,訊號已經不是原本那份 DSD。

播 DXD → 那就是它本來的樣子,什麼事都沒發生。

所以這裡說一個觀念 bit-perfect 不是做為「信仰」用的,是要親手驗的。

格式有沒有被偷換,cat 一行就讀得出來,MPD 自己有沒有動手,翻 verbose log 就知道,整條訊號路徑,Linux 讓你自己開箱驗。


DSD 值不值得你這樣搞?

聽 DSD「一定比較好」嗎?

有幾件事先攤開來說:

高取樣率、超音波那一段(20 kHz 以上,多數人耳聽不到的範圍),到底有沒有讓你「聽」到更多,科學上一直有爭議。

而且 DSD 這邊還有個常被忽略的技術細節:1-bit 編碼得靠 noise shaping 把量化雜訊往高頻推,所以 DSD64 在 20 kHz 以上的雜訊其實是往上翹的。

很多 DAC 跟擴大機會先把那一段濾掉,你以為買到的「更多資訊」,有一部分本來就是要被丟掉的。

真正用 DSD 錄音、混音一路做到底的專輯,沒有想像中那麼多,市面上不少標著 DSD 的檔,是從 PCM 母帶後製轉出來的。

就算你拿真正的 DSD 去升成更高的 DSD 率,本質也沒變。

頂多是把雜訊推到更高的頻段,讓後面的濾波好做一點,這屬於優化,不是本質上的改變,原本沒錄到的東西一樣不會多出來。

再加上 DoP 多吃的那一截頻寬、多一道查 DAC 的手續,這些功夫都是實實在在要花的。

所以我的看法是,如果你手上本來就有從平台購買的 DSD 音樂,想原汁原味把它播出來,那就很值得。

如果你只是想「把所有歌都升頻成 DSD,聽聽看會不會變好」,那可以省點力氣。

重點從來不是 DSD 高人一等,是你搞懂了它、並且設定正確,還能自己驗證有沒有被動過。

值不值得,你可以自己判斷。


想把 DSD 一次設對?

不要在官方 MPD 裡照抄一個它根本不認的選項,也別還沒查清楚 DAC 就硬把 DSD 送出去。

當你把 native、DoP、取樣率這三件事分清楚,DSD 在 Linux 上就能播得乾乾淨淨,而且整條訊號路徑都在你手上、都看得見。

這正是「高階音樂播放系統 — 實作課」帶你一步步做的事。

我也要拿回我的音樂播放權 → lingyinaudio.net

page image office 07

訂閱電子報-新

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *