使用QAudioFormat類中的一些必備音頻知識

從官方的文檔,我們可以知道,這個類是用來提供音頻流的一些信息(參數);使用很簡單,無非是 1、創造對象2、設定有關參數。

設定參數是有一定講究的,這個類裏面只提供了六個變量的設定接口。

 (1)setByteOrder

這個是用來設定高低位的,分爲LittleEndian(低位優先)/LargeEndian(高位優先),這個我沒有找到相關很精確的資料,實際使用中LittleEndian在我的 win8-64bit Qt5.3環境中可以正常工作,據說這個參數設定和操作系統或平臺本身有關,希望高手幫忙解答。

(2)setChannelCount

這個是用來設定聲道數目,mono(平聲道)的聲道數目是1;stero(立體聲)的聲道數目是2。

(3)setCodec

這個用來設置編碼器,"audio/pcm"在所有的平臺都支持,也就相當於音頻格式的WAV,以線性方式無壓縮的記錄捕捉到的數據。如想使用其他編碼格式 ,可以通過QAudioDeviceInfo::supportedCodecs()來獲取當前平臺支持的編碼格式。

(4)setSampleRate/setSampleSize

這兩個我準備放在一塊說。它們都和採樣精度有關。採樣率是每秒鐘對聲音的採樣次數,越大當然越精細,常用的即爲44100HZ(標準CD級),做我這一塊的音視頻傳輸,爲了網絡通暢,不要求那麼高的精確度,我暫時使用的是8000HZ(對於人說話的聲音已足夠)的採樣率(每秒鐘採集8000個聲波的點);採樣位數呢,就是將聲音振幅量子化(好吧,電腦裏面的東西都是一份份的),QAudioFormat支持的有8/16bit,即將聲音振幅化爲256/64k個等級。多說一句,可能有人會疑惑,聲音不是還有個比特率嗎?如我們日常所見的128 k/196k,其實它們表示壓縮格式的傳輸速率,和我們這一節提到的單純聲音參數關係不大,相關內容我會在以後的流媒體傳送中詳述。

(5)setSampleType

用來設置採樣類型,分爲QAudioFormat::SignedInt/QAudioFormat::UnSignedInt/QAudioFormat::Float,這個需要根據採樣位數來設定,如果是平聲道(8bit),QAudioFormat::UnSignedInt已足夠。

這次寫的差不多了,源碼我不會放出,只是爲了遏制抄代碼風的瀰漫,歡迎任何學術交流。

email:[email protected]


2014/12/12日補充:

對於pcm,我想多提兩句,如下面兩圖:



發佈了35 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章