為什麼不能像一般資料 CD 一樣「dd」CD 音訊?

為什麼不能像一般資料 CD 一樣「dd」CD 音訊?

我的朋友嘗試使用伺服器透過網路匯出 cdrom 設備nbd,但我們注意到,雖然它適用於資料 CD,但音訊 CD 的行為方式與普通資料磁碟不同。我不是說檔案系統的存在或缺乏,而是在談論原始區塊級存取。

雖然我知道音訊 CD 不能在檔案層級上真正解釋,因此不能真正,我知道它們包含很多特定於音頻的附加信息,並且我知道它們實際上沒有像數據磁碟那樣具有 CRC,所以整個數據讀取過程是不同的,我仍然不太明白為什麼它們不能像普通塊設備一樣從/dev/sr0或讀取/dev/cdrom。 CDDA 有什麼特別之處,以至於普通軟體無法在區塊層級上讀取它們?

我的意思是最終它只是字節流 - 如果不像塊設備那麼就像任何字元設備那麼為什麼dd//cat不能nbd像任何其他塊/字元設備一樣使用它們?是否存在一些實際的技術原因,或者只是因為沒有人找到在 Linux 中實現對 CDDA 媒體的此類存取的合理用例?

答案1

音訊 CD(也稱為CD-DA,在專有技術中指定紅色的書)是最古老的 CD 格式。此格式的靈感來自於音訊記錄,因此您有一個包含連續資料的螺旋軌道,並且與該資料交錯的是定時資訊。沒有正確的塊頭。最小的資訊單位是一幀,即 1/75 秒,包含 2352 個資料位元組(對於 2 個通道,2 個樣本/位元組,44.1 kHz)。

請注意,這不是 2 的冪,甚至不能除以 256 或 512。最重要的是,早期的CD 驅動器並不總是能正確定位,所以如果你告訴它“去讀取12 分4 秒5 1/75 秒的幀”,它有時會提前或晚啟動幾個字節。這就是為什麼有這麼多程式可以「正確」讀取音訊 CD(例如cdparanoia)。

現在將其與資料 CD(也稱為 CD-ROM,在黃皮書中指定)進行比較:它們會擷取 2352 位元組的音訊幀,並使用其中的一些作為標頭資訊來識別區塊。他們還添加了另一級糾錯,因此音訊幀的 2352 位元組變成資料幀的 2048 位元組。

現在我們有 2 的冪作為區塊大小,我們有適當的標頭並且可以進行精確的查找,我們真的可以假裝這只是一個區塊裝置。

因此,這就是為什麼預設情況下音訊 CD 不被視為區塊設備,而資料 CD 則被視為區塊設備的原因。

也就是說,沒有理由不在檔案系統中提供音訊 CD 上的信息,例如,作為每個曲目的 WAV 檔案。事實上,有一些開源項目,例如CDfs,或其他我現在不記得使用FUSE的人,以這種方式表示CD資料。但是,您仍然遇到沒有抖動校正等問題,因此您最好使用類似cdparanoia.

而核心的人也認為這是一個餿主意

答案2

用於音訊 CD 的 CDDA 是在任何人創建 CD-ROM 檔案系統之前創建的(首先是 High Sierra,後來是 ISO 9660)。在此之前,CD 根本不像是普通資料磁碟。在那之後,音訊CD仍然必須向後相容於舊的CD播放器,所以他們無法改變它。

相關內容