IMA4 小筆記

客戶的要求如土石流一樣地來, 既然不能遷村, 就要做好防災的準備, 免得不小心就滅村了. 這次的需求是 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,
其中後 6 bits 預設為 0

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

 

ADPCM 的小註解

根據 Wiki 的說法, 最早是在電話訊號上使用的 8 bit 數位訊號, sampling rate 為 8KHz, 因此產生 64K bit per second 的 PCM 訊號.

這個訊號來源則是 12 或 13 bits 的類比訊號, 經過非線性的映設之後, 變為 8 bits. 此即 m-law 或是 a-law 的壓縮, 通稱 G.711.

ADPCM 可以把 G.711 的 PCM 訊號壓縮為 4 bits, 此即 G.726.

G.726 有 16/24/32/40 Kbps 幾種不同的傳輸速度. 24 和 40 Kbps 屬於 G.723 的範圍, 32 kbps 屬於 G.721 的範圍. 16Kbps 就是 G.726 所獨有的.

由於 bit rate 不同, 它們使用的 bit size、Quantizer 也不一樣. 大概整理如下:

Bit Rate(K bps) Bit size(bit) Quantizer level
16 2 4
24 3 7
32 4 15
40 5 31

 

G.726 encoder 每一 channel 需要 3.5 MIPS, decoder 需要 3.7 MIPS 左右. 

Microsoft 的 ADPCM 支援 4:1 的壓縮, 換言之, 它是 16 –> 4 bits, 也就是專攻 32 Kbps.

詳情看這個網址最好: http://sox.sourceforge.net/AudioFormats-4.html