【流媒體】音頻相關概念詳解

文章目錄

      • 一、前言
      • 二、概述
      • 三、音頻相關概念
        • 1、采樣率(Sampling rate)
        • 2、位深度(Bit depth)
        • 3、比特率(Bit rate)
        • 4、聲道(Audio channel)
        • 5、音頻幀
        • 6、音頻編碼
        • 7、音頻解碼

一、前言

嵌入式音視頻開發過程中涉及到的音視頻相關概念有很多,本文對音頻一些常見的術語和概念進行詳細的介紹和總結。

二、概述

如何采集聲音?

通過模數轉換原理,聲音模數轉換是將聲音信號從模擬形式轉換為數字形式的過程。它是數字聲音處理的基礎,常用于語音識別、音頻編碼等應用中。

為什么音視頻采集完之后,不能直接傳輸,要進行編碼?

在音視頻采集完之后,通常不會直接傳輸原始數據,而是要經過編碼處理,主要原因有以下幾個:
?
數據量過大: 原始音視頻數據量非常龐大。例如,未經壓縮的高清(1080p)視頻,每秒的數據量可以達到數百MB,即使是未經壓縮的音頻數據也會占用較大的帶寬。直接傳輸這些數據會占用過多的網絡資源,甚至可能無法進行實時傳輸。
?
帶寬限制: 大多數網絡環境(尤其是互聯網或無線傳輸環境)都存在帶寬限制。將原始數據進行壓縮編碼可以大幅減少數據量,從而使得在有限的帶寬內能夠流暢地傳輸音視頻數據。
?
存儲空間: 原始音視頻數據的存儲需求極大,經過編碼壓縮后,可以顯著減少所需的存儲空間,使得數據更易于存儲和管理。
?
傳輸可靠性和錯誤恢復: 編碼協議中往往包含糾錯和恢復機制,能夠在傳輸中出現數據丟失或錯誤時進行恢復,確保接收到的音視頻數據質量。這是原始數據所不具備的優勢。
?
兼容性和標準化: 編碼格式通常是標準化的,這意味著不同設備和平臺之間可以互相兼容。例如,H.264是廣泛應用的視頻編碼標準,不同的設備和軟件都可以編碼和解碼這種格式的數據,提高了互操作性。
?
實時性要求: 為了滿足實時傳輸的需求,編碼算法可以進行優化,使數據傳輸和解碼過程更為迅速,從而減少延時。這在實時通信(如視頻通話、直播)中尤為重要。
?
安全性和版權保護: 編碼過程中可以加入加密和數字版權管理(DRM)措施,保護數據的安全性和版權。這在商業應用和版權保護方面具有重要意義。
?
綜合以上原因,對于大部分應用場景來說,通過編碼壓縮方式傳輸音視頻數據既節省了傳輸帶寬和存儲空間,同時又能保證數據傳輸的效率和可靠性。因此音視頻在采集完之后,通常都需要進行一定的編碼處理,再進行傳輸。

三、音頻相關概念

1、采樣率(Sampling rate)

當我們想要數字化的記錄聲音時,需要將聲音的模擬信號轉換成數字信號,這個過程就是采樣。采樣率指的是在單位時間內(每一秒)采集的樣本數量,通常用赫茲(Hz)表示。例如44100Hz,指的就是每秒采樣數為44100,也常被簡稱為44.1KHz。

在這里插入圖片描述
藍色代表模擬音頻信號,紅色的點代表采樣得到的量化數值。采樣頻率越高,紅色的間隔就越密集。

具體來說,采樣率越高,數字化的聲音信號就越接近原始聲音,所以采樣率越高聲音質量就越好,但是數字化文件的大小也會越大。常見的采樣率有8kHz、16kHz、44.1kHz、48kHz等。語音通話、監控攝像頭等,這些場景下,音頻采樣率一般只有8KHz,這個頻率雖然聽音樂是一種折磨,會一卡一卡的,但是對聽清別人說話倒是一點問題沒有。

2、位深度(Bit depth)

位深度,也叫位寬,采樣精度,單位為Bit。上圖中,每一個紅色的采樣點,都需要用一個數值來表示大小,這個數值的數據類型大小可以是:4bit、8bit、16bit、24bit等等,位數越多,則位深度越大,記錄的樣本數據精度就越高,表示得就越精細,聲音質量自然就越好,當然,數據量也會成倍增大。

位深影響信號的信噪比和動態范圍,也決定了文件的大小,理論上來說,位深越高,質量越好,同時其所生成的文件也越大。

筆者借用網絡上看過的一個總結:聲波,有頻率和振幅,頻率高低決定音調,振幅大小決定響度,采樣率是對頻率采樣,位深是對振幅采樣。

3、比特率(Bit rate)

比特率俗稱碼率。顧名思義,比特率就是Bit的速率的意思,意思為單位時間內(每一秒)傳輸或處理的Bit的數量。比如一個單聲道,用44.1KHz/16Bit的配置來說,它的比特率就為 44100*16*1=705600,單位是bit/s,因為通常計算出來的數字都比較大,大家就用kbit/s了,也就是705.6kbit/s(也有人用bps,或者kbps來當比特率的單位,意思是一樣的,bps是比特/秒(bits per second)的縮寫,表示每秒鐘傳輸的比特數)。

何為比特數?就是比特率乘以時長即可。1Byte(字節)等于8個Bit。通常情況下,文件大小的算法是這樣的,比如,所選擇的采樣率為44100,位深為16Bit,單軌道,時長為60s,則Bits(比特數)的值為44100*16*1*60=42336000,然后我們再將Bits(比特數)轉換成Byte(字節),直接除以8等于5292000個Byte,有了Byte我們就可以將其轉換成KB或者M(結果大約是5168KB,5M左右)。

計算公式:Bits(比特數) = 采樣率 x 位深 x 通道數 x 時長

以上計算的是不壓縮的原始音頻數據。

4、聲道(Audio channel)

聲道,是指在不同空間位置錄制或播放聲音時采集或播放的獨立音頻信號。通俗的講就是:聲道數就是聲源個數。比如:單聲道(Mono),采集源只有一個;雙聲道也稱為立體聲(Stereo),采集源有兩個,分別為左和右;多聲道即環繞聲(Surround Sound),采集源有多個。

每個聲道的聲音樣本都會單獨記錄,一般雙聲道的采樣數是單聲道的兩倍,多聲道同理。在數字音頻處理中,立體聲(左右通道)的采樣數據可以有不同的排列方式,具體取決于音頻文件的格式和存儲標準。這里是兩種常見的排列方式:

交錯排列(Interleaved):
在交錯排列方式中,左右通道的采樣數據是交替存儲的,每個通道的采樣點依次排在一起。這是最常見的一種格式,廣泛應用于WAV、AIFF等音頻文件中。
例如,對于一個包含4個采樣點的立體聲樣本,數據排列如下:

數據在內存中的實際排列方式為:L1, R1, L2, R2, L3, R3, L4, R4。
?
非交錯排列或平面排列(Non-Interleaved or Planar):
在這種方式中,每個通道的數據是連續存儲的,即所有左通道的數據存儲在一起,然后是所有右通道的數據。某些專業音頻處理軟件和格式(如某些版本的FLAC)可能會使用這種方式。
使用相同的例子,數據排列如下:
在這里插入圖片描述
數據在內存中的實際排列方式為:L1, L2, L3, L4, R1, R2, R3, R4。
?
以上兩個排列方式各有優缺點,交錯排列方式通常在播放和處理過程中更具效率,因為其數據連續性可以減少緩存缺失(cache miss)。而非交錯排列方式可能在某些批處理或信號處理算法中略微簡化操作,但在實時播放和任意讀取時可能稍顯復雜。
?
總的來說,交錯排列(interleaved)是更為常見和普遍使用的方式,特別是在需要實時播放和處理的情況下。

聲道越多,播放的音頻效果越立體,但是存儲的數據越大。

5、音頻幀

理論上,音頻并不需要音頻幀的概念,因為音頻采樣數據和采樣率已經可以把音頻播放描述清楚了。

但是音視頻文件播放時,為了保證音視頻同步,程序需要根據每幀的播放時間戳進行有序播放。由于每個音頻采樣數據太小了,如果每個采樣數據都記錄播放時間戳的話,那么就得不償失了。畢竟一個時間戳數據的大小比一個音頻采樣數據都大,所以就有了音頻幀的概念。

音頻幀的概念沒有視頻幀那么清晰,幾乎所有視頻編碼格式都可以簡單的認為一幀就是編碼后的一幅圖像。但音頻幀跟編碼格式相關,它是各個編碼標準自己實現的。

音頻幀實際上就是把一小段時間的音頻采樣數據打包起來,如每20ms的音頻采樣數據合并成一幀。這里的具體時間間隔是具體編碼碼格式決定的,一般不需要特別關心。
在這里插入圖片描述

如果以PCM(未經編碼的音頻數據)來說,它根本不需要幀的概念,根據采樣率和采樣精度就可以播放了。比如采樣率為44.1kHz,采樣精度為16bit的音頻,你可以算出bitrate(比特率)是44100*16 bps,每秒的音頻數據是固定的44100*16/8字節。

對采樣率為44.1kHz的AAC音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內。通常是按1024個采樣點一幀。
分析:
1、 AAC
AAC(高級音頻編碼)采用了一種稱為MDCT(修正離散余弦變換)的技術來處理音頻信號。MDCT在AAC中的一個幀長度為1024個采樣點,是出于技術性能、壓縮效率、音質以及標準化等多方面的考慮。

音頻幀的播放時長 = 一個AAC幀對應的采樣點個數 / 采樣頻率(單位為s)

一個AAC原始幀包含某段時間內1024個采樣點相關數據。
44.1kHz采樣率,表示每秒44100個采樣點,則當前一幀的播放時長 = 1024*1000/44100 = 22.32ms。
48kHz采樣率,則當前一幀的播放時長 = 1024*1000/48000 = 21.32ms。
22.05kHz采樣率,則當前一幀的播放時長 = 1024 *1000/220500 = 46.43ms。

2、MP3
mp3每幀包含1152個采樣點,則每幀播放時長 = 1152*1000/sample_rate(采樣率)。
例如:sample_rate = 44100Hz時,計算出每幀播放時長 = 1152*1000/441000 = 26.122ms,這就是經常聽到的mp3每幀播放時間固定為26ms的由來。

詳細請看下圖:
在這里插入圖片描述

6、音頻編碼

音頻編碼是將原始的未壓縮音頻數據轉換為壓縮格式的一系列過程,目的是減少數據量,以便更高效地存儲和傳輸。以下是常見的音頻編碼流程:

1、采樣和量化(Sampling and Quantization)
采樣:音頻信號是連續的模擬信號,采樣是將其在時間軸上以固定的間隔進行離散化,也就是每秒鐘記錄一定數量的音頻樣本,這個過程生成一系列離散的數據點。采樣率通常以赫茲(Hz)為單位,例如44.1kHz表示每秒采樣44100次。
量化:將這些離散的采樣點的電壓值轉化為數字格式,通常是用二進制數表示。量化級別決定了每個采樣點的精度,通常稱為比特深度(bit depth),例如16位或24位越高的比特深度能表示的音頻細節就越多。
?
2、預處理(Pre-processing)
過濾和去噪(Filtering and Denoising):優化音頻信號的質量,對采樣數據進行提前處理,包括去除噪音和不必要的頻段。
分幀(Framing):將音頻數據分割成小的幀(幀通常包含數百到數千個采樣點),以便于后續處理。
?
3、變換和特征提取(Transformation and Feature Extraction)
變換(Transformation):通過數學變換(如快速傅里葉變換FFT或離散余弦變換DCT)將音頻信號從時域轉換到頻域,這可以使得某些頻率特性更容易被分析和處理。
?
4、壓縮(Compression)
無損壓縮(Lossless Compression):在不損失任何音頻信息的前提下壓縮數據,例如FLAC。如果需要保留音頻的全部細節,可以選擇無損壓縮,但壓縮率不高。
有損壓縮(Lossy Compression):通過丟棄人耳不易察覺的音頻信息來達到更高的壓縮比例,例如MP3、AAC。這種方法有效減小文件大小,但會損失一些音質。
?
5、編碼(Coding)
音頻編碼器(Audio Encoder):采用特定的編碼算法將壓縮后的音頻數據轉換為一種標準格式,這會涉及使用例如熵編碼(Entropy Coding)(如哈夫曼編碼)等技術,提高數據的壓縮效率。
元數據添加(Adding Metadata):往編碼數據中加入相關的元數據,如采樣率、比特率、聲道數等,以及文件的其他信息如標題、藝術家、專輯等。
?
6、封裝(Packaging)
容器格式(Container Format):將編碼后的音頻數據和元數據存儲在某種容器格式中。例如WAV、MP3、AAC等。
?
7、存儲和傳輸(Storage and Transmission)
存儲在本地或者通過網絡傳輸。編碼后的音頻文件由于體積較小,因此能夠高效地在各種平臺和設備之間進行傳輸和共享。
?
總結
音頻編碼通過一系列復雜的處理步驟,大幅減少了音頻數據量。這一過程涉及采樣、量化、預處理、變換、壓縮和編碼等多個階段,其目標是在音質和數據量之間取得平衡,以便更高效地存儲和傳輸音頻數據。無論是用于實時傳輸的有損編碼,還是用于高保真存儲的無損編碼,不同的編碼方式和技術滿足了不同應用的需求。

音頻編碼標準

音頻編碼標準描述
PCM (Pulse Code Modulation)基本的脈沖編碼調制方式,無損編碼,采樣率高,文件較大
G711 (A-law 和 μ-law)G.711是一種關鍵的音頻編碼標準,憑借其高語音質量、低延遲和廣泛的兼容性,成為電話網絡和VoIP服務中的重要組成部分,G.711并不是嚴格意義上的無損編碼,G.711的語音質量通常被認為是接近于原始模擬信號的
MP3 (MPEG-1 Audio Layer 3)有損壓縮音頻編碼,流行的音頻格式,文件小,保留較高音質
AAC (Advanced Audio Coding)高級音頻編碼標準,有損壓縮,音質優秀,常用于在線音頻流媒體
OGG Vorbis開源音頻編碼,有損壓縮,提供高音質,文件相對小
FLAC (Free Lossless Audio Codec)無損音頻編碼,保留原始音頻質量,文件較大,用于音頻編輯和存檔
Opus開放式、免專利的音頻編碼標準,支持廣泛的比特率,適用于語音通話和音頻流傳輸
WMA (Windows Media Audio)微軟開發的音頻編碼標準,有損壓縮,適用于 Windows 平臺
AC3 (Dolby Digital)杜比數字音頻編碼標準,多用于 DVD、藍光光盤等視頻音頻壓縮
DTS (Digital Theater Systems)數字影院系統音頻編碼標準,提供高質量環繞聲音效果
ALAC (Apple Lossless Audio Codec)蘋果無損音頻編碼標準,保留音頻原始質量,適用于蘋果設備
7、音頻解碼

音頻解碼的流程總體上可以分為以下幾個步驟:

1、接收編碼數據: 通過網絡下載、存儲設備讀取等方式獲取到編碼的音頻文件。通常,這些文件使用各種壓縮和編碼技術對原始音頻數據進行了處理,以減少文件大小并便于傳輸。
?
2、解析文件格式: 了解音頻文件的格式(如MP3、AAC、FLAC等),并準確解析文件頭,以獲取編碼信息、采樣率、聲道數、比特率等關鍵參數。
?
3、提取編碼數據: 從音頻文件中提取出實際的音頻數據流,這部分數據是經過壓縮和編碼后的,需要還原成原始的未壓縮音頻數據。
?
4、解碼音頻數據: 使用相應的解碼算法將壓縮的音頻數據還原成原始的PCM (Pulse Code Modulation) 數字音頻信號。這一步驟需要了解具體的編碼/解碼算法,比如MP3的霍夫曼編碼、AAC的MDCT轉換等。
?
5、音頻處理(可選): 根據需求,對解碼后的音頻數據進行處理,比如增益調整、均衡、混音等。
?
6、輸出音頻: 將解碼并處理過的PCM音頻數據傳輸到音頻輸出設備,比如揚聲器、耳機等,或者存儲為新的音頻文件。
?
這是一個較為簡化的描述,各種編碼格式和解碼器可能有些具體操作上的差異,但大致流程一致。

有建議或疑問,評論區溝通交流。

該專欄下一篇文章我們對嵌入式音視頻開發中視頻相關概念進行詳解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23861.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【vuejs】$nextTick的原理分析和使用場景

1. $nextTick 概述 Vue.js 框架中的 $nextTick 是一個非常重要的 API,它允許開發者延遲回調函數的執行直到下次 DOM 更新循環之后。這意味著,當開發者在 Vue 組件中更改了數據,并且想要在 DOM 更新完成后執行某些操作時,可以使用…

總結開發過程遇到問題有哪些渠道可以尋找解決方案

羅列一下 百度、ChatGPT/訊飛星火等AI、Stack Overflow、github isssue 平時開發過程遇到問題的主要解決方式都是百度或者詢問ChatGPT,當然在java中這兩個方式也能解決百分之80的問題,畢竟java的社區圈夠熱鬧。 如何優雅地使用 Stack Overflow 一、學…

搭建自己的DNS服務器

個人名片 🎓作者簡介:java領域優質創作者 🌐個人主頁:碼農阿豪 📞工作室:新空間代碼工作室(提供各種軟件服務) 💌個人郵箱:[2435024119qq.com] &#x1f4f1…

腺苷調節合成高密度脂蛋白用于三陰性乳腺癌的化學免疫治療

引用信息 文 章:Adenosine-modulating synthetic high-density lipoprotein for chemoimmunotherapy of triple-negative breast cancer 期 刊:Journal of Controlled Release(影響因子:10.8) 發表時間&am…

深入探索:十種流行的深度神經網絡及其運作原理

算法 深入探索:十種流行的深度神經網絡及其運作原理一、卷積神經網絡(CNN)基本原理工作方式 二、循環神經網絡(RNN)基本原理工作方式 三、長短期記憶網絡(LSTM)基本原理工作方式 四、門控循環單…

jupyter notebook默認工作目錄修改

jupyter notebook默認工作目錄修改 1、問題2、如何修改jupyter notebook默認工作目錄 1、問題 anaconda安裝好之后,我們啟動jupyter notebook會發現其默認工作目錄是在C盤,將工作目錄放在C盤會讓C盤很快被撐爆,我們應該將jupyter notebook默…

進階篇01——存儲引擎

MySQL體系結構 存儲引擎 引擎有多種類型,MySQL支持多種存儲引擎,默認的存儲引擎為innodb。不同的存儲引擎有不同的特點,適用不同的場景。 innodb存儲引擎 簡介 innodb的邏輯存儲結構 MYISAM存儲引擎 memory存儲引擎 三種引擎特點對比&…

2024華為數通HCIP-datacom最新題庫(變題更新③)

請注意,華為HCIP-Datacom考試831已變題 請注意,華為HCIP-Datacom考試831已變題 請注意,華為HCIP-Datacom考試831已變題 近期打算考HCIP的朋友注意了,如果你準備去考試,還是用的之前的題庫,切記暫緩。 1、…

融合創新:Web3如何重新定義網絡生態

隨著區塊鏈技術的不斷發展和Web3時代的到來,我們正在見證著互聯網生態的巨大變革。Web3將傳統的互聯網架構轉變為去中心化、開放、透明的新網絡生態,為創新和合作提供了全新的可能性。本文將深入探討Web3如何重新定義網絡生態,探索融合創新的…

Flutter中防抖動和節流策略

什么是防抖和節流? 函數節流(throttle)與 函數防抖(debounce)都是為了限制函數的執行頻次,以優化函數觸發頻率過高導致的響應速度跟不上觸發頻率,出現延遲,假死或卡頓的現象 是應對頻…

WeTrade亮相Traders Fair展會菲律賓站

2024年5月25日,菲律賓交易博覽會在馬尼拉的Edsa香格里拉酒店圓滿落幕。 WeTrade作為本次交易博覽會的重要戰略合作伙伴、參展商和贊助商,吸引了全球各界人士的廣泛關注。 現場,我們的菲律賓團隊與客戶進行了親密的面對面交流,并…

優思學院|精益生產學習過程中如何提高自己的能力水平?

精益生產是一項實踐多過理論的課題。 優思學院認為實踐并不限于實際的工作,日常的思考同樣重要,例如我們會要求學員在學習時不斷思考各種事物,不限于自己的企業。例如當你去到一家餐廳,你能夠觀察到什么浪費?你可否把…

Docker pull鏡像一直在Waiting無法下載,根本解決方法

1、現象描述: docker pull 拉去鏡像一直在等待,無法下載,最后失敗如下: [rootlocalhost docker]# docker pull zookeeper Using default tag: latest latest: Pulling from library/zookeeper 2ec76a50fe7c: Retrying in 1 seco…

特征交叉系列:DCN-Mix 混合低秩交叉網絡理論和實踐

DCN-Mix和DCN-V2的關系 DCN-Mix(a mixture of low-rank DCN)是基于DCN-V2的改進版,它提出使用矩陣分解來降低DCN-V2的時間空間復雜度,又引入多次矩陣分解來達到類似混合專家網絡MOE的效果從而提升交叉層的表征能力,若讀者對DCN-V2不甚了解可…

linux shell腳本啟動springboot服務

1.腳本代碼 xx.sh,自己隨意命名 #!/bin/bash# 設置變量 JAR_NAME"xssq-1.0.0.jar" JAR_PATH"./$JAR_NAME" PID0#檢查程序是否在運行 is_exist(){PIDps -ef|grep $JAR_NAME|grep -v grep|awk {print $2} #如果不存在返回1,存在返回0…

評價GPT-4的方案

評價GPT-4的方案 引言: 隨著人工智能技術的不斷發展,自然語言處理領域取得了顯著的突破。其中,GPT-4作為最新的大型語言模型之一,備受關注。本方案旨在對GPT-4進行全面評價,包括其技術特點、性能表現、應用場景以及潛在的影響等方面。 一、技術特點 1. 模型規模和參數數…

微信小程序使用自定義tabbar被組件遮擋調試層級沒有用

在我自定義使用tabbar的時候,發現使用vant weapp環形進度條的時候把tabbar給遮擋了,查看了文章說沒什么好的解決辦法,但是也有,鏈接在此 我是直接修改的自定義組件的標簽view標簽和image標簽都使用cover- image和cover-view代替就…

部署kubesphere報錯

安裝kubesphere報錯命名空間terminted [rootk8smaster ~]# kubectl apply -f kubesphere-installer.yaml Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16, unavailable in v1.22; use apiextensions.k8s.io/v1 CustomResourceDefini…

618科技好物清單:物超所值的產品推薦,總有一款適合你!

隨著科技的不斷發展,我們生活中涌現出了越來越多的科技創新產品。這些產品不僅讓我們的生活變得更加便捷,還提升了我們的生活品質。而在即將到來的618購物節,正是我們購買這些物超所值科技好物的絕佳時機。 本文將為您推薦一些在618期間值得關…

軟光敏的程序實現

軟光敏的程序實現通常涉及到使用攝像頭或其他圖像捕捉設備的內部sensor來感應環境光線,并結合軟件算法來控制補光燈或其他相關設備的開關。以下是一個簡化的軟光敏程序實現的示例流程,使用偽代碼來描述: pseudo 初始化攝像頭 while 攝像頭開…