1. 程式人生 > >關注IOS、Android網路、音視訊編解碼、特效、Neon演算法優化,DSP等嵌入式驅動開發演算法移植

關注IOS、Android網路、音視訊編解碼、特效、Neon演算法優化,DSP等嵌入式驅動開發演算法移植

(1)音訊格式:典型WAV

封裝格式是每個音訊檔案必不可少的組成部分之一,它給我們提供了以下參考資訊。音訊檔案型別、編解碼方法、單雙聲道、取樣深度、取樣率、量化位數、音訊檔案大小、長度。下面首先來分析一下經典的wav音訊的封裝格式。個人精力有限不可能把每種音視訊格式都一一解析,所以這裡分別挑選了音訊:Wav,視訊Mp4兩種多媒體檔案格式介紹:

下面我們對每一個欄位進行詳細的分析。

整個音訊檔案包括三個主要部分:

(1)    檔案頭描述欄位

(2)    資料頭欄位

(3)    資料欄位

(1)    檔案頭描述欄位:

1.1 Chunk ID:“RIFF”標誌位。佔用4個位元組。資料型別char,偏移地址0x00。儲存方式:大端模式

我們任意開啟一個wav音訊檔案:


利用十六進位制到ASCII轉換工具:

剛好是RIFF

1.2 Chunk Size:檔案大小 。佔用4個位元組。資料型別long int,偏移地址0x04。儲存方式:小端模式

首先要把大小端調整一下:

0035E024. 將其轉換為十進位制:3530788

總檔案大小=3530788+4(RIFF4個位元組)+4(Chunk Size) 4個位元組。

總檔案大小=3530796 Byte

我們對比一下:

1.3 Format:檔案標誌位。佔用4個位元組。資料型別char,偏移地址0x08。儲存方式:大端模式。

對應的英文字母:WAVE

(2)資料頭欄位

2.1 Subchunk1 ID:“FMT”標誌位。佔用4個位元組。資料型別char,偏移地址0x0c。儲存方式:大端模式。

2.2Subchunk1 Size:過渡位元組。佔用4個位元組。資料型別int,偏移地址0x10。儲存方式:小端模式。

2.3Audio Format:聲音格式。佔用2個位元組。資料型別int,偏移地址0x14。儲存方式:小端模式.


01表示pcm格式。當然,模擬訊號轉化為數字訊號可以有不同的格式。比如常用的PCM、ACM、LAW

2.4Num Channels:聲道個數。佔用2個位元組。資料型別int,偏移地址0x16。儲存方式:小端模式。02 00 。對應的2個通道

2.5 Sample Rate:取樣率。佔用4個位元組。資料型別int,偏移地址0x18。儲存方式:小端模式.

0000AC44-》44100 取樣速率。

2.6 Byte Rate:音訊傳輸速率。佔用4個位元組。資料型別long int,偏移地址0x1c。儲存方式:小端模式

音訊傳輸速率:176000  176KB

其實這個根據上面的引數是能計算出來的。

 音訊傳輸速率(每秒傳輸的位元組數)=取樣率(每秒取樣個數)*通道個數*每個取樣點的位元組數(每個取樣點16位,佔2個位元組)

這個引數什麼作用呢?它直接決定播放這種音訊檔案需要多大的頻寬。

頻寬:頻寬指單位時間能通過鏈路的資料量。通常以bps來表示

所以,如果播放這個音訊,大約需要 1.375M 頻寬以上,才能直播音訊。否則只能緩衝來播放了。實際上一般不用WAV,都用AAC等壓縮率高的音訊檔案格式。

2.7 Block Align:資料塊調整。佔用2個位元組。資料型別int,偏移地址0x20。儲存方式:小端模式

2.8 Bits perSample:每個樣本中資料位數。佔用2個位元組。資料型別int,偏移地址0x22。儲存方式:小端模式

10 00這個是啥意思呢?通俗理解就是每個取樣點所佔的位數。這裡是十六。說明44100的取樣點,每個點是16個bit的。

(3)資料欄位

3.1 Subchunk2 ID:“data”識別符號。佔用4個位元組。資料型別char,偏移地址0x24。儲存方式:大端模式

3.1 Subchunk2 Size:音訊檔案長度。佔用4個位元組。資料型別long int,偏移地址0x28。儲存方式:小端模式

一個是檔案長度,一個是音訊資料長度。二者偏移地址分別是0x04 0x28 。剛好相差0x24個位元組。

3.3 Date:為音訊資料。長度等資訊由具體音訊檔案決定。

這裡可以把一些音訊加密等資訊放在這裡。或者把音訊加密的一些key放在音訊檔案頭部。