blog 遷移算法
聲音是介質振動在聽覺系統中產生的反應。聲音總能夠被分解爲不一樣頻率不一樣強度正弦波的疊加(傅里葉變換)。
複製代碼
聲音基本的兩個屬性:app
振幅:聲音的振幅就是音量ide
頻率:聲音的頻率就是音調的高低單位 Hz性能
模擬音頻:上圖藍色曲線,在時間和振幅都是連續的。好比:磁帶,唱片等。ui
數字音頻:上圖紅色點,經過採樣和量化得到離散性數據。好比:CD,MP3 等數字格式。編碼
經過上圖來介紹一下幾個基礎的概念:spa
採樣率 Sampling Rate:單位時間內的採樣點,即上圖一個區間內紅點的個數,單位爲 kHz,每秒千個採樣。3d
量化深度 Depth :每一個樣本的二進制位數,即上圖紅點的 Y 座標的值,位數越多,振幅能區分的更細,一般量化深度爲 4,8,16,32 bit,代理
聲道數 Channel Num :每次生成一個採樣數據,爲單聲道,多個聲道能夠重現出聲音的位置。code
Nyquist-Shannon Sampling Theorem 採樣定理
當採樣頻率fs.max大於信號中最高頻率fmax的2倍時,數字信號就能完整的保留原始信號中的信息。
而 44.1khz * 0. 5 爲 22.05 khz,基本包含了人聲能聽到的頻率範圍( 14-15 khz)。
深度信息爲位信息,即每一個採樣值的長度,即 depth,位信息越長,質量越高同時越消耗系統的性能。
聲音的碼率就是 depth * sample rate = bkhz
好比一張 CD ,2 x 16 x 44100 = 1,411,200 比特每秒 ,即每秒 172 kb
和圖片有顏色通道同樣,聲音也有通道:左聲道,右聲道。
而 5.1 聲道的信號包括 6 個聲道:先後的左右聲道,中間聲道,無方向的低頻聲道。
數字音頻編碼 PCM ( pulse code modulation) ,採樣率爲 1s 以內有多少個採樣值,最多見的是 44.1 kHz,即 1s 內存在 44,100 個採樣。採樣率越高越接近聲音真實的頻率。
對聲音進行採樣、量化過程被稱爲脈衝編碼調製(Pulse Code Modulation),簡稱PCM。PCM數據是最原始的音頻數據徹底無損,因此PCM數據雖然音質優秀但體積龐大,爲了解決這個問題前後誕生了一系列的音頻格式,這些音頻格式運用不一樣的方法對音頻數據進行壓縮,其中有無損壓縮(ALAC、APE、FLAC)和有損壓縮(MP三、AAC、OGG、WMA)兩種。
全部的聲道數據組成 音頻幀 。
在一些壓縮的聲音格式中,會對多個音頻幀,組合成一個包,進行特殊的算法處理,來實現數據壓縮的功能,不過這樣的音頻就不是無損的了。
如咱們常見的 MP3, AAC 格式等,
這邊容易搞混的是
音頻編碼 Audio Codec :
音頻壓縮格式 Audio Coding Format :如 MP3, AFLAC,FLAC等
通常狀況下咱們能見到的確定都是 波形圖
這個又稱爲 時域圖 ,即在時間領域的聲音數據模型。
x 軸是時間,y軸是聲音的大小
控制聲音的大小就是要將其幅度進行縮小 進行固定 scale 的縮放就能控制聲音的音量。
控制時間,就是調整齊播放的速度,能夠實現快放和慢放。
而在咱們平常生活中聽到的聲音,是由不一樣頻率的聲音疊加起來,最終獲得咱們人耳聽見混合以後的聲音。
固然,這樣三維的圖片,查看起來確定不方便,因此便有了下面這種頻譜圖:
x 軸爲時間
y 軸是頻域
對應點的顏色表明着該時間點的該頻率的峯值,顏色越深,表明峯值越高。能夠理解爲將上面的 3D 圖,拍扁以後的效果。
音頻格式: iOS 默認錄製的音頻採樣格式爲 16 bit 的 線性 PCM 格式。
經過 AVCaptureAudioDataOutput 能獲得錄製後的 CMSampleBufferRef 格式的 RAW 音頻文件。
CMSampleBuffer 介紹 developer.apple.com/documentati…
包含 0 或多個採樣數據,格式多是 音頻或視頻等。
CMSampleBuffer 爲音視頻的 Raw Data 即源數據。有以下來源和用法
AVCaptureDataOutput 讀經過代理提供 CMSampleBuffer
AVAssetReader 讀取本地文件的 CMSampleBuffer
AVAssetWriter 寫文件
內部包含了數據格式
CVImageBuffer / CVPixelBuffer 視頻幀
CMBlockBuffer 任何數據(聲音,字幕,timecode)