最近在做音頻采樣這部分的內容,涉及錄制、轉碼、降頻、重采樣等內容。
在處理wav音頻文件時發現,iOS的 “AVAudioRecorder” 在錄制 “kAudioFormatLinearPCM” 音頻格式輸出的.wav文件時,添加的文件頭并不是大家通用的44字節,而是4096字節,我通過逐個字節的解析,發現了多出的兩個部分 “JUNK” 和 “FLLR” 。
- 文件內容詳解
5249 4646 RIFF
f8bf 0300 文件size(小端)
5741 5645 WAVE
//此處開始為多出的“JUNK”片段
{4a55 4e4b JUNK
1c00 0000 計數為28字節
0000 0000 0000 0000 0000 0000 0000 0000 字節內容(28byte)
0000 0000 0000 0000 0000 0000
}
666d 7420 fmt
1000 0000 過渡字節(不定)
0100 格式類別,為1時表示線性PCM編碼,大于1時表示有壓縮的編碼。
0200 聲道數,1為單聲道,2為雙聲道
44ac 0000 采樣率,采樣頻率,這里是44100
10b1 0200 位數,Byte率=采樣頻率*音頻通道數*每次采樣得到的樣本位數/8,00005622H,也就是176400Byte/s=44100*2*16/8。
0400 一個采樣多聲道數據塊大小,塊對齊=通道數*每次采樣得到的樣本位數/8,也就是4=2*16/8
1000 一個采樣占的bit數,樣本數據位
//此處開始為多出的“FLLR”片段
{464c 4c52 FLLR
a80f 0000 計數為4008字節
0000 0000 0000 0000 0000 0000 0000 ...此處省略 //字節內容(4008byte)
}
6461 7461 data
00b0 0300 語音數據的長度(241664 byte)
//以上共4096字節,之后才是文件內容,也就是PCM音頻格式的內容
0000 ....//正文內容(省略)
格式化文件內容后發現,是多出了一段ID為“JUNK”的數據段,加起來正好36字節。
之后在其他的一篇關于AVI視頻格式的文章中看到對JUNK的解釋:“無用數據,用于字節對齊。”
- 對齊的定義
現代計算機中內存空間都是按照byte劃分的,從理論上講似乎對任何類型的變量的訪問可以從任何地址開始,但實際情況是在訪問特定類型變量的時候經常在特定的內存地址訪問,這就需要各種類型數據按照一定的規則在空間上排列,而不是順序的一個接一個的排放,這就是對齊。