【iOS 音頻處理 (1)】音頻基礎信息

blog 遷移算法

1.什麼是聲音?

聲音是介質振動在聽覺系統中產生的反應。聲音總能夠被分解爲不一樣頻率不一樣強度正弦波的疊加(傅里葉變換)。
複製代碼

聲音基本的兩個屬性:app

  • 振幅:聲音的振幅就是音量ide

  • 頻率:聲音的頻率就是音調的高低單位 Hz性能

音頻又分爲:

  • 模擬音頻:上圖藍色曲線,在時間和振幅都是連續的。好比:磁帶,唱片等。ui

  • 數字音頻:上圖紅色點,經過採樣和量化得到離散性數據。好比:CD,MP3 等數字格式。編碼

經過上圖來介紹一下幾個基礎的概念:spa

  • 採樣率 Sampling Rate:單位時間內的採樣點,即上圖一個區間內紅點的個數,單位爲 kHz,每秒千個採樣。3d

  • 量化深度 Depth :每一個樣本的二進制位數,即上圖紅點的 Y 座標的值,位數越多,振幅能區分的更細,一般量化深度爲 4,8,16,32 bit,代理

  • 聲道數 Channel Num :每次生成一個採樣數據,爲單聲道,多個聲道能夠重現出聲音的位置。code

爲何 CD 的採樣率是 44.1 khz ?

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等

2.怎麼展現音頻?

波形圖

通常狀況下咱們能見到的確定都是 波形圖

音頻的聲音是 波形的幅度 幅度越大 表明着聲音越大

這個又稱爲 時域圖 ,即在時間領域的聲音數據模型。

x 軸是時間,y軸是聲音的大小

控制聲音的大小就是要將其幅度進行縮小 進行固定 scale 的縮放就能控制聲音的音量。

控制時間,就是調整齊播放的速度,能夠實現快放和慢放。

時域的效果

頻域

而在咱們平常生活中聽到的聲音,是由不一樣頻率的聲音疊加起來,最終獲得咱們人耳聽見混合以後的聲音。

固然,這樣三維的圖片,查看起來確定不方便,因此便有了下面這種頻譜圖:

頻譜圖

x 軸爲時間

y 軸是頻域

對應點的顏色表明着該時間點的該頻率的峯值,顏色越深,表明峯值越高。能夠理解爲將上面的 3D 圖,拍扁以後的效果。

3.在 iOS 中的音頻

音頻格式: 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)

參考:idup.club/avfoundatio…

相關文章
相關標籤/搜索