複製鏈接
請複製以下鏈接發送給好友

音頻數據

鎖定
數字化的聲音數據就是音頻數據。
數字化聲音的過程實際上就是以一定的頻率對來自microphone 等設備的連續的模擬音頻信號進行模數轉換(ADC)得到音頻數據的過程;數字化聲音的播放就是將音頻數據進行數模轉換(DAC)變成模擬音頻信號輸出。在數字化聲音時有兩個重要的指標,即採樣頻率(Sampling Rate)和採樣大小(SamplingSize)。
採樣頻率即單位時間內的採樣次數, 採樣頻率越大, 採樣點之間的間隔越小, 數字化得到的聲音就越逼真, 但相應的數據量增大, 處理起來就越困難;採樣大小即記錄每次樣本值大小的數值的位數, 它決定採樣的動態變化範圍, 位數越多, 所能記錄聲音的變化程度就越細膩, 所得的數據量也越大。
中文名
音頻數據
外文名
voice data
實    質
數字化的聲音數據
常見格式
wave
播    放
模轉換為模擬音頻數據輸出
錄    製
MCI指令、低音頻函數

音頻數據基本概念

音頻數據音頻

音頻是多媒體中的一種重要的媒體,是聲音信號的形式。作為一種信息的載體,音頻可分為語音、音樂和其它聲音三種類型。不同的類型將具有不同的內在特徵,這些內在特徵可劃分為三級,即就是最低層的物理樣本級,中間層的聲學特徵級和最高層的語義級。物理樣本級包含的特徵有采樣頻率、時間刻度、樣本、格式、編碼等;聲學特徵級包含的特徵有感知特徵和聲學特徵,其中感知特徵有音調、音高、旋律、節奏等,聲學特徵包含能量、過零率、LPC 係數及音頻的結構化表示等;語義級包括音樂敍事、音頻對象描述、語音識別文本等。 [1] 

音頻數據數字化聲音

傳統的聲音處理方法是通過話筒等設備把聲音的振動轉化成模擬的電流, 經過放大和處理, 然後記錄到磁帶或傳至音箱等設備發聲。這種方法失真較大, 且消除噪音困難, 也不易被編輯和修改。聲音卡的出現解決了模擬方法中存在的問題, 它採用數字化方法來處理聲音。數字化的聲音數據就是音頻數據。
數字化聲音的過程實際上就是以一定的頻率對來自microphone 等設備的連續的模擬音頻信號進行模數轉換(ADC)得到音頻數據的過程;數字化聲音的播放就是將音頻數據進行數模轉換(DAC)變成模擬音頻信號輸出。在數字化聲音時有兩個重要的指標,即採樣頻率(Sampling Rate)和採樣大小(SamplingSize)。採樣頻率即單位時間內的採樣次數, 採樣頻率越大, 採樣點之間的間隔越小, 數字化得到的聲音就越逼真, 但相應的數據量增大, 處理起來就越困難;採樣大小即記錄每次樣本值大小的數值的位數, 它決定採樣的動態變化範圍, 位數越多, 所能記錄聲音的變化程度就越細膩, 所得的數據量也越大。 [2] 

音頻數據常見格式

數字化的聲音數據這裏稱音頻數據, 可在內存中被編輯或修改, 也可以文件形式存放在磁盤上, 稱為wave 文件, 其擴展名為“ .wav” , 它採用Microsoft 定義的資源互換文件格式(RIFF 格式), 具體結構如圖1 。
 圖1 WAVE 文件結構  圖1 WAVE 文件結構
整個文件可以看成是一個RIFF 塊, 該RIFF 塊的形式類型為“WAVE” , 共包含了兩個子塊即“ fmt ” 和“ data”子塊。文件的開始4 個字節為字符串“ RIFF” ,接着的4 個字節為RIFF 塊的大小, 即“ fmt ” 子塊和“ data”子塊所佔字節之和, 然後的4 個字節是字符串“WAVE” 。“fmt ” 子塊的偏移地址為0CH -23H, 開始的4 個字節為字符串“ fmt ” , 接着的4 個字節是“ fmt ”子塊的大小, 為10H 或12H ,“ fmt ” 子塊的數據為組成PCMWAVEFORMAT 的數據。PCMWAVEFORMAT結構如下:
typedef struct {
WAVEFORM AT wf ;
WORD wBitsPerSample ;//樣本值位數
}PCM WAVEFORMAT
typedef struct {
WORD  wFormatT ag ; //WAVE 格式
WORD nChannels ;//聲道數
DWO RD nSamplesPerSec ;//採樣頻率
DWO RD nAvgBytesPerSec;//每秒數據量
WORD nBlockAlig n;//數據塊字節數
}WAVEFORMAT ;
當w FormatTag 為WAVE_RORMAT_PCM 時,nBlockAlig n 的值應等於nChannels 和w BitsPerSample之積除以8。“ data” 子塊是WAVE 文件中最大的塊,開始的4 個字節為字符串“ data” , 然後是音頻數據的字節數, 佔4 個字節, 最後是數字化的音頻數據, 偏移地址從24H 至文件尾。 [2] 

音頻數據音頻數據處理

音頻數據音頻數據存取

可以用傳統的對文件存取的方法將內存緩衝區中錄製的音頻數據以wave 格式文件的形式存在磁盤上,或將磁盤上wave 文件中音頻數據調入內存緩衝區。為了編程方便, 在MMS YSTEM .DLL 中專門提供一組多媒體文件操作函數。如表1 所示。通過表1 的函數也可以很方便地實現打開、讀、寫和定位RIFF 文件。 [2] 
表1 多媒體文件輸入輸出函數 表1 多媒體文件輸入輸出函數

音頻數據音頻數據錄製

圖2  音頻數據錄音流程圖 圖2  音頻數據錄音流程圖
除了使用MCI 指令外, 也可用低層音頻函數錄製音頻數據, 流程如圖2。
先檢查系統是否有錄製音頻數據的設備及音頻輸入設備的性能;如正常則打開音頻輸入設備, 若操作成功, 則返回音頻輸入設備句柄,然後調用函數waveI nPrepareHeader 生成WAVE 音頻信息頭結構WAVEHDR
waveInAddBuffer 函數將從輸入設備獲得的數據寫入WAVEHDR;作完準備工作後開始錄音;錄音完成後要清除WAVEHDR, 釋放內存資源並且還要關閉音頻輸入設備。打開音頻輸入設備函數的原型為:
MM RESULT waveInOpen(
LPHWAVEIN phwi , //設備句柄指針
UINT uDeviceID, //設備ID
LPWAVEFORMAT EX pw fx , // 波形格式
DWORD dwCallback , // 回調函數地址
DWORD dwCallbackInstance , //
DWORD fdwOpen // 打開設備的標誌
);
pwfx 指向波形格式WAVEFORMATEX 結構, 該結構比前面介紹的WAVEFORMAT 結構多了一個域WORD cbSize, 其值為WAVEFORMATEX 結構的大小。執行該函數時, 需要事先設置pwfx 中各域的值指定格式, uDeviceID 通常設為WAVE_MAPPER。
另外, 錄音時, 通常錄音的時間是不固定的, 而錄音得到的數據量非常大, 合理地使用內存是必須要解決的難題。幸好, 低層音頻服務提供了對音頻處理的回調機制, 即在打開音頻設備時, 可通過指定fdw Open 參數為CALLBACK_FUNCTION 或CALLBACK_WINDOW來指定一個函數或窗口作為回調對象, dxCallback參數説明回調對象句柄或函數地址, 設備驅動程序不斷向回調對象發送消息, 通知音頻數據的處理狀態。
為了合理使用內存, 通常是在內存中定義一個能存放100MS 音頻數據的緩衝區, 每當該緩衝區錄滿數據時, 驅動程序就向回調對象即指定的窗口或回調函數分別發WM_WIM_DATA 消息或WIM_DATA 消息,由回調對象將音頻數據緩衝區中的數據取走存放到另一個地方。當執行關閉音頻設備函數時, 驅動程序向回調窗口發送MM_WIM_C LOSE 消息, 或向回調函數發送WIM_CLOSE 消息, 由回調對象負責釋放內存資源, 並且如果需要, 即將所錄製的音頻數據存入磁盤。 [2] 

音頻數據音頻數據播放

表2  低層音頻函數列表 表2  低層音頻函數列表
音頻數據的播放比錄製要簡單, 過程非常相似, 部分低層音頻播放函數如表2。
待播放的音頻數據一般有兩種來源, 要麼來自wave 文件, 要麼是應用程序剛錄製的音頻數據。如果是前者, 那麼, 播放非常簡單,Windows 提供了一個高層的音頻數據播放函數Play Sound(), 該函數能播放由給定的文件名、資源或系統事件所聲明的波形聲音, 如果播放成功, 返回TRUE;否則返回FALSE, 其原型為:
BOOL P laySound (
LPCSTR pszSound , // 聲音名稱
HM ODU LE hmod , // 模塊句柄
DWO RD fdwSound //播放標誌
);
pszSound 指定播放的聲音, 如果為NULL, 則將停止當前正在播放的聲音。Fdw Sound 説明播放聲音的方式, 當其為SND_SYNC 時, 同步播放聲音, 即聲音播放完後才返回;當其為SND_ASYNC 時異步播放聲音。如果音頻數據是位於內存中, 則需要用表2 中介紹的低層音頻函數進行播放。
過程與錄製時非常相似, 也要先檢查播放設備是否存在及其性能, 打開播放設備, 生成WAVE 音頻信息頭數據塊WAVEHDR, 調用函數waveOutWrite 將WAVEHDR 數據寫入輸出設備, 進行播放;播放結束後, 也需釋放分配的資源和關閉音頻輸出設備。 [2] 

音頻數據音頻數據空間特徵模型

音頻特徵模型要求感知上直觀、物理意義明確;支持儘可能多的應用;特徵元素容易取得。因此,在構建空間特徵模型時,儘可能選擇彼此正交的特徵以降低特徵空間的維,同時能夠保留最多的信息量

音頻數據提出

文獻 [3-4]  中對音頻提出了9 種描述方案,分別是:ScaIeTree,音頻描述框架,AudioSegment,靜聲,會話內容,音色,聲音效果,旋律輪廓,其它處於CE 階段的描述方案。這些描述方案中前三種是比較通用的,後面的一些描述方案適用於特定的場合。例如音頻描述框架是低級音頻描述符的集合。
文獻 [5]  中提到的“ 基於信號統計的匹配”和“ 基於變換的索引”,並採用了短時Fourier 變換或窗口Fourier 變換作為索引的方法,同時提到用MatIab 中的小波變換函數產生音頻數據索引的方法。用MatIab 中的小波變換函數進行實驗表明,用這種方法產生的索引,其檢索精度依然很低。 [1] 

音頻數據空間特徵模型

利用小波分析的方法提取波形聲音信號的小波近似係數,並在這些小波係數的基礎之上構建了下述的音頻空間特徵模型,產生音頻數據索引。 [1] 
音頻特徵 =(六級近似小波係數,平均幅度,過零率,最好基)
公式定義的音頻空間特徵模型中包含四種元素,分別是六級近似小波係數,平均幅度,過零率和最好基。

音頻數據視音頻數據處理

音頻數據捕獲

VFW(Video tor Windows,簡稱vFw)是微軟為開發人員提供的專門用於視頻捕獲、視頻編輯和視頻播放的軟件開發工具。VFW的AVICAP模塊主要用於視頻圖像和音頻數據的捕獲。利用該模塊的AVIcap窗口類創建捕獲窗口。如果捕獲窗口與視頻採集設備驅動程序連接,捕獲窗口的客户區用於顯示採集設備捕獲的實時視頻圖像。視頻圖像有OverLay和Pre—view兩種顯示模式:在OverLay模式下,實時圖像直接由採集設備傳至顯存中,不佔用CPU資源,顯示速度較快;在Preview模式下,實時圖像由採集設備傳至系統內存,此時可對圖像數據進行壓縮、編輯和傳輸等操作,然後顯示圖像。如果捕獲窗口與音頻錄入設備驅動程序連接,捕獲窗口調用低層音頻服務進行波形音頻的捕獲。
在進行音頻數據捕獲之前,應用程序只需指定音頻數據緩衝區的大小和個數,當緩衝區錄製滿數據時,驅動程序通過發送消息等方式通知應用程序,應用程序就可以對捕獲的數據進行各種處理。AVIcap窗口提供的各種消息對應着驅動程序相應的接口函數,應用程序若控制視音頻採集設備的驅動程序,只需調用AVICAP模塊中的消息宏函數向AVIcap窗口發出信息,由AVIcap窗口調用設備驅動程序自動完成指定的操作。 [6] 

音頻數據回放

音頻數據的回放採用MDK提供的與設備無關的音頻函數。回放時,應用程序將1個數據緩衝區提交給播放設備驅動程序,當驅動程序播放數據完畢時,就通過應用程序查詢、觸發事件或驅動程序發送消息等方式通知應用程序,應用程序再次提交1個數據緩衝區給驅動程序,如此循環。回放音頻數據時,應根據實際情況設定多個數據緩衝區,否則當設備驅動程序播放完畢返回此緩衝區,應用程序在準備此緩衝區期間,驅動程序處於等待狀態.這將會出現聲音斷續。
音頻數據的回放包括以下幾個步驟:①WaveOutOpen()用於打開波形數據回放設備,指定回放的波形數據的格式,設置設備驅動程序完成指定動作後通知應用程序的方法,通常情況下有驅動程序發送消息給指定窗口、回調函數、線程和事件等四種方法;②WaveOutPre—pareHeader()為波形播放設備準備回放緩衝區和數據,並設置數據長度、數據地址和各種標誌等;③WaveOutWrite()將波形數據發送給播放設備,當設備驅動程序完成數據回放後,將按照WaveOutOpen()指定的方式通知應用程序,由應用程序進行下一步處理;④當音頻數據塊回放完畢後,由WaveOutUnPrepareHeader()清除WaveOutPrepareHeader()準備的數據緩衝區;⑤若停止回放,應先調用WaveOutReset()將所有的數據塊標誌設置為回放完畢並返回應用程序,再調用WaveOutClose()關閉渡形數據播放設備。 [6] 

音頻數據壓縮和解壓縮

通過ACM實現音頻數據的實時壓縮、解壓縮等功能時,基本包括幾個步驟:①通過acre—DriverEnum()和acmFormatEnum0函數遍歷系統提供的音頻壓縮解壓縮器,可根據不同的需要獲取指定音頻壓縮懈壓縮器的句柄;②根據遍歷結果,利用獲得的句柄使用aCE—DriverOpen()打開指定音頻壓縮解壓縮器驅動程序.若函數成功將獲得用於與壓縮解壓縮器通信的事例指針;⑧指定輸入、輸出的音頻格式使用acmStreamOpen()打開選取的ACM轉換流;④acmStreamPrepareHeader()為音頻數據的壓縮和解壓縮提供信息頭,信息頭包括源數據的長度,源數據和目標數據的地址等信息;⑤調用acmStreamConvcrt()函數完成音頻數據的壓縮解壓縮,在調甩acmStreamConvert()時可以指定回調函數,以便在轉換過程中顯示進度等信息;⑥音頻數據壓縮解壓縮完畢後,應用程序可以將緩衝區中的數據寫入文件、進行網絡傳輸或回放等操作.最後通過acmStreamClose()和aemDriverC[ose()函數關閉轉換流和驅動程序。 [6] 
參考資料
  • 1.    程凱, 李應, 黃樟欽. 音頻數據的一種空間特徵模型[J]. 計算機應用, 2004, 24(1):143-146.
  • 2.    毋茂盛, 王靜, 劉潤生. 音頻數據處理編程技術[J]. 計算機技術與發展, 2000(5):37-40.
  • 3.    Herrera P, Serra X. A ProposaI for the Description of Audio in the Context of MPEG_7 [ A] . Proc. European Workshop on Content - based MuItinedia Indexing[ C] . 1999
  • 4.    周宏, 潘亞濤, 陳健. 基於內容的音頻描述[ J] . 計算機工程. 2001, 27( 10)
  • 5.    Subramanya SR. Indexing And Searching Schemes For Audio Data in Audio / MuItimedia Databases( MuItimedia Database) [ D] . George Washington University, 1999.
  • 6.    王柏春, 顧大權, 侯太平,等. 遠程會商系統中視音頻數據的處理[J]. 網絡新媒體技術, 2002, 23(4):223-230.