客戶的要求如土石流一樣地來, 既然不能遷村, 就要做好防災的準備, 免得不小心就滅村了. 這次的需求是 IMA4, priority 大概第 40 順位.
這個 IMA4 是什麼東西呢? 它是 Apple Quick Time 所支援的 ADPCM 格式. 一般是 1~2 聲道, 左聲道 block 放完才放右聲道 block, 然後反覆左右, 左右 的 blocks 直到檔尾. 每個 block 由 64 個 nibble 所組成, 1 nibble 也就是 1/2 bytes or 4 bits.
為何要選 nibble 為單位呢? 據說是為了要避免 endian 的問題, 只要把 data 以 4 bits 為單位組裝起來, 就可以依據平台來解釋它是 big endian 或是 little endian. Apple 號稱這個設計有 cross-platform 的功效.
[離題一下] 話說 nibble 很像另外一個單字 nipple (奶頭), 有位前同事就把這兩者搞混了, 也誤導了我一陣子. 不過人非聖賢, 孰能無過. 身為一個工程師, 程式沒錯就很偷笑了, 偶爾打印一些 FETAL ERROR, 或是程式裡面命名一些 Globle 變數也是難免的. 反正看久就習慣了, 見怪不怪真可以說是中華文化根深蒂固的一個部分. 哈哈!
name | bits | structure | note |
preamble | 16 | ppppppp piiiiiii |
p 代表 9 bits signed predictor, i 代表 7 bits initial step index. |
block | 32×8 | n1n0 n3n2 …. | 左聲道, nibble 0 在 nibble 1 的後面, 但是要先解, 依此類推. |
block | 32×8 | n1n0 n3n2 …. | 右聲道, 單聲道就沒有這部分, 換下一個左聲道的 block. |
欲了解 IMA4 的全貌, 最好參考 Apple 的網頁.
http://developer.apple.com/mac/library/technotes/tn/tn1081.html