近年來,唱吧,全民K歌,QQ音樂,等成爲音頻軟件的主流力量,音頻開發一直是多媒體開發中不可或缺的部分,如爲何這個聲音這麼不清楚,爲何耳機裏有電流聲,爲何錄音時,有時會碰到奇怪的回聲。算法
1音頻開發的主要應用
音頻播放器 :(QQ音樂,網易雲音樂)服務器
錄音機 :(全民K歌)微信
語音電話:(QQ電話,微信電話)網絡
音視頻監控應用:(攝像頭,錄音筆)app
音視頻直播應用:(午夜直播,心靈之聲電臺)框架
音頻編輯/處理軟件:(ktv音效、變聲, 鈴聲轉換)ide
藍牙耳機/音箱 :(耳機、KBOX) 等等。編碼
2音頻開發基礎概念
(1)採樣率(samplerate)spa
是指錄音設備在一秒鐘內對聲音信號的採樣次數。操作系統
採樣頻率越高聲音的還原就越真實越天然。單位用赫茲(Hz)
採樣定理: (奈奎斯特定理)
在進行模擬/數字信號的轉換過程當中,當採樣頻率fs.max大於信號中最高頻率fmax的2倍時(fs.max>2fmax),採樣以後的數字信號完整地保留了原始信號中的信息,通常實際應用中保證採樣頻率爲信號最高頻率的2.56~4倍;
人耳能聽到的聲波的頻率範圍一般? 20~20000Hz
爲了保證聲音不失真,採樣頻率應在40kHz以上.
可是,經常使用的音頻採樣頻率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
例如:電話是標準的8khz採樣率!
話音信號頻率在0.3~3.4kHz範圍內,用8kHz的抽樣頻率,就可得到能取代原來連續話音信號的抽樣信號。
而通常CD採集採樣頻率爲44.1kHz。
目前,通常狀況下的錄音都是採用44100Hz的。
(2)量化精度(位寬)
就是把採樣獲得的聲音信號幅度轉換成數字值,
用於表示信號強度。
量化精度:用多少個二進位來表示每個採樣值,也稱爲量化位數。
聲音信號的量化位數通常是 4,6,8,12或16 bits 。
這個數值的數據類型大小能夠是:4bit、8bit、16bit、32bit等等,位數越多,表示得就越精細,聲音質量天然就越好。
固然,數據量也會成倍增大。
通常採用的是16bit。
(3)聲道數(channels)
因爲音頻的採集和播放是能夠疊加的.
所以,能夠同時從多個音頻源採集聲音,並分別輸出到不一樣的揚聲器,故聲道數通常表示聲音錄製時的音源數量或回放時相應的揚聲器數量。
單聲道(Mono)和雙聲道(Stereo)比較常見,顧名思義,前者的聲道數爲1,後者爲2。
(4)音頻幀(frame)
音頻跟視頻很不同,視頻每一幀就是一張圖像,而從上面的正弦波能夠看出,音頻數據是流式的,自己沒有明確的一幀幀的概念。
在實際的應用中,爲了音頻算法處理/傳輸的方便,通常約定俗成取2.5ms~60ms爲單位的數據量爲一幀音頻。
這個時間被稱之爲「採樣時間」,其長度沒有特別的標準,它是根據編解碼器和具體應用的需求來決定的,咱們能夠計算一下一幀音頻幀的大小:
AAC: 一個AAC幀對應的採樣點個數1024, 採樣率(samplerate)爲 44100Hz 當前一幀的播放時間 = 1024 * 1000000/44100= 22.32ms(單位爲ms) mp3: 每幀均爲1152個字節 當前一幀的播放時間 = 1152* 1000000/44100= 26.122ms(單位爲ms)
3音頻開發的具體內容
·音頻採集/播放
·音頻算法處理(去噪、靜音檢測、回聲消除、音效處理、功放/加強、混音/分離,等等)
·音頻的編解碼和格式轉換
·音頻傳輸協議的開發(SIP,A2DP、AVRCP,等等)
SIP:會話初始協議(Session Initiation Protocol)是一種信令協議,用於初始、管理和終止網絡中的語音和視頻會話
A2DP全名是Advanced Audio Distribution Profile 藍牙音頻傳輸模型協定!A2DP是可以採用耳機內的芯片來堆棧數據,達到聲音的高清晰度。
AVRCP(Audio/Video Remote Control Profile),即音頻/視頻遠程控制規範。
4音頻開發的具體內容
什麼是音頻編碼?
是將音頻採樣數據(PCM等)壓縮成爲音頻碼流,從而下降音頻的數據量。
爲何要音頻編碼?
存儲一秒鐘採樣率爲44.1KHz,位深爲16bit,雙聲道的PCM編碼的音頻信號,須要44100*16bit*2 / 8/1024 = 172.2KB的空間,那麼1分鐘則約爲10.09M。這對大部分用戶是不可接受的。
只有2種方法,下降採樣指標或者壓縮。
下降採樣是不可取的,所以就有了各類各樣的壓縮方式。
有兩類主要的音頻文件格式:
有損和無損。
有損文件格式: 是基於聲學心理學的模型,除去人類很難或根本聽不到的聲音。 無損格式,例如PCM,WAV,ALS,ALAC,TAK,FLAC,APE,WavPack(WV) 有損格式,例如MP3,AAC,WMA,Ogg
根據採樣率和採樣大小能夠得知,相對天然界的信號,音頻編碼最多隻能作到無限接近,至少目前的技術只能這樣了,相對天然界的信號,任何數字音頻編碼方案都是有損的,由於沒法徹底還原。在計算機應用中,可以達到最高保真水平的就是PCM編碼,被普遍用於素材保存及音樂欣賞,CD、DVD以及咱們常見的WAV文件中均有應用。所以,PCM約定俗成了無損編碼,由於PCM表明了數字音頻中最佳的保真水準,並不意味着PCM就可以確保信號絕對保真,PCM也只能作到最大程度的無限接近。
咱們而習慣性的把MP3列入有損音頻編碼範疇,是相對PCM編碼的。
就像用數字去表達圓周率,無論精度多高,也只是無限接近,而不是真正等於圓周率的值。
4 (1)
5音頻算法處理的開源庫
FFmpeg: Fast Forward MPEG
Moving Picture Experts Group 先進視頻編碼標準
FFmpeg是一套能夠用來記錄、轉換數字音頻、視頻,並能將其轉化爲流的開源計算機程序。
採用LGPL或GPL許可證。
它提供了錄製、轉換以及流化音視頻的完整解決方案。
它包含了很是先進的音頻/視頻編解碼庫libavcodec,爲了保證高可移植性和編解碼質量。
不只能夠採集視頻採集卡或USB攝像頭的圖像,還能夠進行屏幕錄製,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體服務器,支持直播應用。
FFmpeg在Linux平臺下開發,但它一樣也能夠在其它操做系統環境中編譯運行,包括Windows、Mac OS X等。
FFmpeg組成組件
6Android中音頻開發相關的API
音頻採集:MediaRecoder,AudioRecord
音頻播放:SoundPool,MediaPlayer,AudioTrack
音頻編解碼:MediaCodec
NDK API:OpenSL ES
播放流程: 獲取流–>解碼–>播放
錄製播放路程: 錄製音頻視頻–>剪輯–>編碼–>上傳服務器 別人播放.
直播過程 : 錄製音視頻–>編碼–>流媒體傳輸–>服務器—>流媒體傳輸到其餘app–>解碼–>播放
幾個重要的環節:
錄製音頻 AudioRecord
視頻剪輯 fmpeg
音頻編碼 aac
上傳流文件 網絡框架,進度監聽,斷點續傳
流媒體傳輸 流媒體傳輸協議rtmp rtsp hls
音頻解碼 aac
渲染播放 MediaPlayer