前些日子由于項目需要,一直在研究iOS CoreAudio相關(guān)的內(nèi)容.在這里記錄一些筆記.現(xiàn)實生活中,我們聽到的聲音都是時間連續(xù)的僻造,我們稱為這種信號叫模擬信號宴树。模擬信號需要進行數(shù)字化以后才能在計算機中使用缘圈。數(shù)字化的過程如下:
采樣 -> 量化 -> 編碼
通過獲取間隔相同時間的某個模擬信號的值穿香,然后對這些采樣以后得到的值進行量化,然后使用一定的bit進行編碼存儲贞岭,整個過程結(jié)束后就會輸出PCM數(shù)據(jù)八毯。在iOS的Core Audio Services中使用的音頻數(shù)據(jù)只能是線性PCM格式的音頻數(shù)據(jù),這是一種未進過壓縮的音頻數(shù)據(jù)格式瞄桨。要理解整個過程就需要理解多個重要概念:采樣頻率和采樣位數(shù)话速,比特率等。
采樣頻率
采樣頻率是指單位時間內(nèi)對聲音模擬信號的采樣次數(shù)芯侥。采樣率類似于視頻的幀數(shù)泊交,比如電影的采樣率是24Hz。當我們把采樣到的一個個靜止畫面再以采樣率同樣的速度回放時,看到的就是連續(xù)的畫面活合。同樣的道理雏婶,把以44.1kHZ采樣率記錄的CD以同樣的速率播放時,就能聽到連續(xù)的聲音白指。顯然留晚,這個采樣率越高,聽到的聲音和看到的圖像就越連貫告嘲。當然错维,人的聽覺和視覺器官能分辨的采樣率是有限的。對同一段聲音橄唬,用20kHz和44.1kHz來采樣赋焕,重放時,可能可以聽出其中的差別仰楚,而基本上高于44.1kHZ采樣的聲音隆判,比如說96kHz采樣,絕大部分人已經(jīng)覺察不到兩種采樣出來的聲音的分別了僧界。之所以使用44.1kHZ這個數(shù)值是因為經(jīng)過了反復實驗侨嘀,人們發(fā)現(xiàn)這個采樣精度最合適,低于這個值就會有較明顯的損失捂襟,而高于這個值人的耳朵已經(jīng)很難分辨咬腕,而且增大了數(shù)字音頻所占用的空間。我們所使用的CD的采樣標準就是44.1k葬荷。
采樣位數(shù)
采樣位數(shù)可以理解為采集卡處理聲音的解析度涨共。這個數(shù)值越大,解析度就越高宠漩,錄制和回放的聲音就越真實举反。我們首先要知道:電腦中的聲音文件是用數(shù)字0和1來表示的。連續(xù)的模擬信號按一定的采樣頻率經(jīng)數(shù)碼脈沖取樣后哄孤,每一個離散的脈沖信號被以一定的量化精度量化成一串二進制編碼流照筑,這串編碼流的位數(shù)即為采樣位數(shù)吹截,也稱為量化精度瘦陈。
在電腦上錄音的本質(zhì)就是把模擬聲音信號轉(zhuǎn)換成數(shù)字信號。反之波俄,在播放時則是把數(shù)字信號還原成模擬聲音信號輸出晨逝。采集卡的位是指采集卡在采集和播放聲音文件時所使用數(shù)字聲音信號的二進制位數(shù)。采集卡的位客觀地反映了數(shù)字聲音信號對輸入聲音信號描述的準確程度懦铺。例如捉貌,同一段音頻信息,使用8bit描述單個采樣信息,那么采樣量化的范圍就是0255,如果使用16bit表示單個采樣值,那么相應的采樣量化的范圍為064k趁窃。與8位采樣位數(shù)相比牧挣,16位采樣的動態(tài)范圍的寬度更小,動態(tài)范圍更寬廣醒陆,聲音的被記錄的更加精細瀑构。一般CD使用的采樣位數(shù)為16位。
16位二進制數(shù)的最小值是0000000000000000刨摩,最大值是1111111111111111寺晌,對應的十進制數(shù)就是0和65535,也就是最大和最小值之間的差值是65535澡刹,也就是說呻征,它量化的模擬量的動態(tài)范圍可以差65535,也就是96.32分貝(20 * lg65535))罢浇,所以陆赋,量化精度只和動態(tài)范圍有關(guān),和頻率響應沒關(guān)系嚷闭。動態(tài)范圍定在96分貝也是有道理的奏甫,人耳的無痛苦極限聲壓是90分貝,96分貝的動態(tài)范圍在普通應用中足夠使用凌受,所以96分貝動態(tài)范圍內(nèi)的模擬波阵子,經(jīng)量化后,不會產(chǎn)生削波失真的胜蛉。
所謂分貝是指兩個相同的物理量(例A1和A0)之比取以10為底的對數(shù)并乘以10(或20)挠进。N = 10lg(A1/A0) 分貝符號為"dB",它是無量綱的誊册。式中A0是基準量(或參考量)领突,A是被量度量。被量度量和基準量之比取對數(shù)案怯,這對數(shù)值稱為被量度量的"級"君旦。亦即用對數(shù)標度時,所得到的是比值嘲碱,它代表被量度量比基準量高出多少"級"金砍。
位速/比特率/碼率
位速/比特率/碼率描述的都是一個東西,是指在一個數(shù)據(jù)流中每秒鐘能通過的信息量麦锯。我們可能看到過音頻文件用 “128–Kbps MP3” 或 “64–Kbps WMA” 進行描述的情形恕稠。Kbps 表示 “每秒千位數(shù)”,因此數(shù)值越大表示數(shù)據(jù)越多:128–Kbps MP3 音頻文件包含的數(shù)據(jù)量是 64–Kbps WMA 文件的兩倍扶欣,并占用兩倍的空間鹅巍。(不過在這種情況下千扶,這兩種文件聽起來沒什么兩樣。原因是什么呢骆捧?有些文件格式比其他文件能夠更有效地利用數(shù)據(jù)澎羞, 64–Kbps WMA 文件的音質(zhì)與 128–Kbps MP3 的音質(zhì)相同。)需要了解的重要一點是敛苇,位速越高煤痕,信息量越大,對這些信息進行解碼的處理量就越大接谨,文件需要占用的空間也就越多摆碉。
從碼率的計算公式中可以清楚的看出碼率和采樣位數(shù)的關(guān)系:
碼率=取樣頻率×量化精度×聲道數(shù)
一張CD,雙聲道,采樣率44.1kHz,每個采樣位數(shù)13bit脓豪,時長74分鐘(4440秒)巷帝,則CD的容量為
13*2*44100*4440
約等于640MB
。
VBR扫夜、ABR楞泼、CBR
VBR(Variable Bitrate)動態(tài)比特率。也就是沒有固定的比特率笤闯,壓縮軟件在壓縮時根據(jù)音頻數(shù)據(jù)即時確定使用什么比特率堕阔。這是新發(fā)展的算法,他們將一首歌的復雜部分用高Bitrate編碼颗味,簡單部分用低Bitrate編碼超陆。主意雖然不錯,可惜新編碼器的VBR算法很差浦马,音質(zhì)與CBR相去甚遠时呀。幸運的是, Lame完美地優(yōu)化了VBR算法晶默,使之成為MP3的最佳編碼模式谨娜。這是以質(zhì)量為前提兼顧文件大小的方式,推薦編碼模式磺陡。
ABR(Average Bitrate)平均比特率趴梢,是VBR的一種插值參數(shù)。Lame針對CBR不佳的文件體積比和VBR生成文件大小不定的特點獨創(chuàng)了這種編碼模式币他。ABR也被稱為“Safe VBR”坞靶,它是在指定的平均Bitrate內(nèi),以每50幀(30幀約1秒)為一段圆丹,低頻和不敏感頻率使用相對低的流量滩愁,高頻和大動態(tài)表現(xiàn)時使用高流量。舉例來說辫封,當指定用192kbps ABR對一段wav文件進行編碼時硝枉,Lame會將該文件的85%用192kbps固定編碼,然后對剩余15%進行動態(tài)優(yōu)化:復雜部分用高于192kbps 來編碼倦微、簡單部分用低于192kbps來編碼妻味。與192kbps CBR相比,192kbps ABR在文件大小上相差不多欣福,音質(zhì)卻提高不少责球。ABR編碼在速度上是VBR編碼的2到3倍,在128-256kbps范圍內(nèi)質(zhì)量要好于CBR拓劝〕猓可以做為 VBR和CBR的一種折衷選擇。
CBR(Constant Bitrate)郑临,常數(shù)比特率栖博,指文件從頭到尾都是一種位速率。相對于VBR和ABR來講厢洞,它壓縮出來的文件體積很大仇让,但音質(zhì)卻不會有明顯的提高。
PCM格式與LPCM格式
PCM(脈沖編碼調(diào)制)是一種將模擬語音信號變換為數(shù)字信號的編碼方式躺翻。主要經(jīng)過3個過程:抽樣丧叽、量化和編碼。抽樣過程將連續(xù)時間模擬信號變?yōu)殡x散時間公你、連續(xù)幅度的抽樣信號踊淳,量化過程將抽樣信號變?yōu)殡x散時間、離散幅度的數(shù)字信號陕靠,編碼過程將量化后的信號編碼成為一個二進制碼組輸出嚣崭。
量化分為線性量化和非線性量化。線性量化在整個量化范圍內(nèi)懦傍,量化間隔均相等雹舀,稱為LPCM。非線性量化采用不等的量化間隔粗俱。量化間隔數(shù)由編碼的二進制位數(shù)決定说榆。例如,CD采用16bit線性量化寸认,則量化間隔數(shù)L=65536签财。位數(shù)(n)越多,精度越高偏塞,信噪比SNR=6.02n+1.76
(dB)也越高唱蒸。但編碼的二進制位數(shù)不是無限制的,需要根據(jù)所需的數(shù)據(jù)率確定灸叼。比如:CD可以達到的數(shù)據(jù)率為2×44.1×16=1411.2Kbit/s神汹。
總而言之庆捺,LPCM格式中的音頻數(shù)據(jù)是未壓縮的線性量化后的音頻數(shù)據(jù)。
用iOS的官方文檔中對幾個關(guān)鍵詞的解釋:
- A sample is single numerical value for a single channel.
- A frame is a collection of time-coincident samples. For instance, a stereo sound file has two samples per frame, one for the left channel and one for the right channel.
- A packet is a collection of one or more contiguous frames. In linear PCM audio, a packet is always a single frame. In compressed formats, it is typically more. A packet defines the smallest meaningful set of frames for a given audio data format.
壓縮過的音頻格式
在常見的音頻格式對PCM原始幀進行封裝時也是以frame幀為單位的屁魏,我們一般將壓縮后的音頻數(shù)據(jù)幀稱為媒體幀滔以,對應原始的PCM數(shù)據(jù)稱為原始幀。每個媒體幀又分成head頭氓拼,body數(shù)據(jù)體你画。在幀頭中,會存儲這個媒體幀中body部分的碼率桃漾,采樣率等解碼必須的信息鸥拧,因此每一個媒體幀都可以獨立于文件存在和播放腋腮。在body中存儲著一個或者多個媒體幀,這些媒體真是若干個PCM原始幀經(jīng)過特定的壓縮算法壓縮得到的。通常情況下砰蠢,我們將單位時間的媒體幀的個數(shù)稱為幀率亏栈。
上文的采樣率和幀率這兩個概念都描述了音頻媒體的“連續(xù)”性岳颇,二者的區(qū)別在于每個音頻的媒體幀中會包含多個音頻采樣(多個PCM data)氧骤,如1個AAC幀中包含1024個采樣。
在學習音頻/視頻相關(guān)內(nèi)容之前,首先需要弄清楚的的是音頻的文件類型和音頻格式是有本質(zhì)區(qū)別的.封裝類型比如.ogg,音頻格式比如.mp3.(具體的區(qū)別可以百度)