摘要:模擬音頻信號經(jīng)過數(shù)字化后,會(huì)產(chǎn)生很大的數(shù)據(jù)量,不適合存儲和傳輸?shù)男枰?shù)字音頻的壓縮編碼已經(jīng)成為一門非常重要的技術(shù)。該文主要介紹數(shù)字音頻信號的常用壓縮編碼方法,如MPEG-1、MPEG-2、AC-3數(shù)字音頻壓縮編碼標(biāo)準(zhǔn),并闡述了各自的性能特點(diǎn)及應(yīng)用領(lǐng)域。然后結(jié)合應(yīng)用軟件——Delphi,介紹制作音頻播放器的過程,并利用音頻播放器實(shí)現(xiàn)mp3等格式音頻文件的播放。
關(guān)鍵詞:音頻信號;數(shù)字音頻壓縮編碼;音頻播放器
中圖分類號:TP37文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2011)04-0875-03
Digital Audio Compression Coding and Playing Audio Files in Software
JIANG Shang-ting1, JIN Yi-ren2
(1.Computer Center,Anhui Vocational College of Press and Publication, Hefei 230601, China; 2.School ofElectric Engineering and Automation, Hefei University of Technology, Hefei 230009, China)
Abstract: A quantity of data are present after analog audio signal is digitized.It is not convenient for transmission and storge of signal. Digital audio compression coding has became an very important technology.The paper mainly introduces the digital audio signal compression coding methods, such as MPEG-1, MPEG-2, AC-3 digital audio compression coding standards, and describes their performanes and applies fields.Then introduces the process of making audio-player and playing mp3 files and other kinds of files in Delphi application software.
Key words: audio signal; digital audio compression coding; audio-player
多媒體技術(shù)就是計(jì)算機(jī)交互式綜合處理多種媒體信息——文本、圖形、圖像和聲音,使多種信息建立邏輯連接,集成為一個(gè)系統(tǒng)并具有交互性。簡言之,多媒體技術(shù)就是計(jì)算機(jī)綜合處理聲、文、圖信息的技術(shù),具有集成性、實(shí)時(shí)性和交互性。隨著計(jì)算機(jī)技術(shù)和大規(guī)模集成電路的飛速發(fā)展,多媒體技術(shù)也得到了日新月異的發(fā)展。隨著計(jì)算機(jī)數(shù)據(jù)處理能力的不斷增強(qiáng),音頻處理技術(shù)受到重視并得到廣泛的應(yīng)用。現(xiàn)在流行的音頻播放器集各種功能于一體,可以播放mid、mp3、wav、wma等各種格式的文件。
1 音頻信號處理基本概念
1.1 模擬音頻與數(shù)字化音頻
自然的聲音是連續(xù)變化的,它是一種模擬量。比如當(dāng)人們對麥克風(fēng)講話時(shí),麥克風(fēng)能根據(jù)它周圍空氣壓力的不同變化而輸出相應(yīng)連續(xù)變化的電壓值,這種變化的電壓值是對人講話聲音的一種模擬,稱為模擬音頻。要將模擬音頻變?yōu)橛?jì)算機(jī)能存儲和處理的對象,必須將模擬音頻數(shù)字化。
數(shù)字化音頻的獲得是通過每隔一定的時(shí)間測一次模擬音頻的值并將其數(shù)字化,通常包括采樣、量化和編碼。每秒鐘采樣的次數(shù)稱為采樣頻率。根據(jù)采樣定理,只要采樣頻率等于或大于模擬音頻信號中最高頻率成分的兩倍,信息量就不會(huì)丟失,即可以由采樣后的離散信號不失真地重建原始連續(xù)的模擬音頻信號,否則就會(huì)產(chǎn)生不同程度的失真。采樣定律用公式表示為:fs≥2f或Ts≤T/2,其中f為被采樣信號的最高頻率。
我們將由模擬量轉(zhuǎn)變?yōu)閿?shù)字量的過程稱為模-數(shù)轉(zhuǎn)換。計(jì)算機(jī)要利用數(shù)字音頻信息驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,還需要將離散的數(shù)字量再轉(zhuǎn)變?yōu)檫B續(xù)的模擬量,該過程稱之為數(shù)-模轉(zhuǎn)換。在大多數(shù)計(jì)算機(jī)中,這些功能是通過聲卡來完成的。音頻信號的一般處理如圖1所示。
1.2 數(shù)字化音頻信號的壓縮編碼
1.2.1 數(shù)字化音頻信號壓縮編碼簡介
數(shù)字化的音頻信號必須經(jīng)過壓縮編碼處理才能適應(yīng)存儲和傳輸要求,才能在再生時(shí)得到最好音質(zhì)的聲音聽覺。音頻信號壓縮編碼主要依據(jù)人耳的聽覺特性。人的聽覺系統(tǒng)中存在一個(gè)聽覺閾值電平,低于這個(gè)電平的聲音信號人耳聽不到,可以不必保留這部分信號;當(dāng)幾個(gè)強(qiáng)弱不同的聲音同時(shí)存在時(shí),強(qiáng)聲使弱聲難以聽到,當(dāng)聲音在不同時(shí)間先后發(fā)生時(shí),強(qiáng)聲使其周圍弱聲難以聽見。聲音編碼算法就是通過這些特性來去掉冗余數(shù)據(jù),從而達(dá)到壓縮數(shù)據(jù)的目的。
1.2.2 常見音頻壓縮編碼方式
常見的音頻壓縮編碼有MPEG-1音頻壓縮編碼、MPEG-2音頻壓縮編碼、杜比數(shù)字AC-3音頻壓縮編碼等。
1) MPEG-1音頻壓縮編碼
ISO/IEC的MPEG音頻編碼的標(biāo)準(zhǔn)化采用了2種編碼算法:MUSICAM和ASPEC。以這兩種算法為基礎(chǔ)形成了三個(gè)不同層次的音頻壓縮算法,對應(yīng)不同的應(yīng)用要求并具有不同的編碼復(fù)雜度。在MPEG-1的音頻編碼標(biāo)準(zhǔn)中,按復(fù)雜度規(guī)定了三種模式:層1、層2、層3。層1采用MUSICAM算法,典型碼流為384kbps,典型碼流為256kbps~192kbps。層3是綜合了層2和ASPEC的優(yōu)點(diǎn)提出的混合壓縮技術(shù),它的復(fù)雜度相對較高,編碼不利于實(shí)時(shí)。如今流行的MP3音樂就是一種采用MPEG-1層3編碼的高質(zhì)量的數(shù)字音樂,它能以10倍左右的壓縮比降低高保真數(shù)字聲音的存儲量,使一張普通的CD光盤上可以存儲大約100首MP3歌曲。層3是MUSICA和ASPEC兩個(gè)算法的結(jié)合,典型碼流為64kbps。
MPEG壓縮等級與壓縮比率如表1所示。
ISO/MPEG音頻編碼(層3)結(jié)構(gòu)圖如圖2所示。
MPEG-1層3中采用改進(jìn)余弦變換MDCT。MDCT的表達(dá)式為:,其中k=0,…,N/2; (固定時(shí)間偏移量)。余弦變換在邊界處存在固有的不連續(xù)性,導(dǎo)致在塊邊界處產(chǎn)生較大噪聲,MDCT采用時(shí)域混疊抵消TDAC技術(shù),有利于消除這種噪聲。做MDCT前要進(jìn)行加窗處理: ω(n)是窗函數(shù),它的長度等于變換塊N的長度),從而降低邊界效應(yīng)對譜分析的影響,提高頻率選擇性。窗函數(shù)ω(n)的選擇必須滿足。窗函數(shù)越長,編碼效率就越高,但是過長會(huì)使時(shí)域分辨率下降,選擇窗函數(shù)應(yīng)該兼顧編碼效率和時(shí)域分辨率。
PCM數(shù)據(jù)輸入經(jīng)過分析濾波組被分割成若干子頻帶信號,同時(shí)數(shù)據(jù)流經(jīng)過FFT變換模塊,動(dòng)態(tài)求出每個(gè)編碼頻帶的掩碼閾值。MDCT對濾波器組的不足作了一定的補(bǔ)償,把子帶的輸出在頻域里進(jìn)一步細(xì)分以達(dá)到更高的頻域分辨率。比例設(shè)置和量化器模塊根據(jù)掩碼閾值對子頻帶信號進(jìn)行量化,量化后得到的數(shù)據(jù)分別經(jīng)過Huffman編碼模塊和邊信號編碼器模塊進(jìn)行編碼,再經(jīng)過多路復(fù)用器MUX得到碼流。
2) MPEG-2音頻壓縮編碼
MPEG-2的音頻壓縮編碼采用與MPEG-1相同的編譯碼器,層1、層2、層3的結(jié)構(gòu)也相同,但它能支持5.1聲道和7.1聲道的環(huán)繞立體聲。
MPEG-2 BC是一種類似MP3的音頻壓縮算法。MPEG-2 BC壓縮編碼主要是在MPEG-1和CCIR Rec.755的基礎(chǔ)上發(fā)展起來的。與MPEG-1相比較,MPEG-2主要在兩方面做了重大改進(jìn),一是支持多聲道聲音形式;二是為某些低碼率應(yīng)用場合,進(jìn)行低采樣率擴(kuò)展。同時(shí),標(biāo)準(zhǔn)規(guī)定的碼流形式還可與MPEG-1的第1和第2層前、后向兼容,并可依據(jù)CCIR Rec.755與雙聲道、單聲道形式的向下兼容,還能夠與Dolby Surround 形式兼容。
3) 杜比數(shù)字AC-3音頻壓縮編碼
杜比數(shù)字AC-3是美國杜比實(shí)驗(yàn)室開發(fā)的多聲道全頻帶聲音編碼系統(tǒng),采用第三代ATC技術(shù),被稱為感覺編碼系統(tǒng),它將特殊的心理音響知識、人耳效應(yīng)的最新研究成果與先進(jìn)的數(shù)碼信號處理技術(shù)很好地結(jié)合起來,形成了這種數(shù)字多聲道音頻處理技術(shù)。它提供的環(huán)繞立體聲系統(tǒng)由5個(gè)(或7個(gè))全頻帶聲道加一個(gè)超低音聲道組成,所有聲道的信息在制作和還原過程中全部數(shù)字化,信息損失很少,細(xì)節(jié)十分豐富,具有真正的立體聲效果,在數(shù)字電視、DVD和家庭影院中被廣泛使用。
AC-3編碼原理結(jié)構(gòu)圖如圖3所示。
1.3 聲音的重構(gòu)
模擬音頻要經(jīng)過采樣、量化和編碼,就能得到便于計(jì)算機(jī)處理的數(shù)字語音信息,如果要重新播放數(shù)字化語音,必須經(jīng)過解碼、D/A轉(zhuǎn)換和插值,其中解碼是編碼的逆過程,又稱解壓縮。以ISO/MPEG音頻解碼(層3)為例,結(jié)構(gòu)圖如圖4所示。D/A轉(zhuǎn)換是將數(shù)字量再轉(zhuǎn)換為模擬量便于驅(qū)動(dòng)揚(yáng)聲器發(fā)聲;而插值是為了彌補(bǔ)在采樣過程中引起的語音信2音頻播放器簡介:
本文中介紹的音頻播放器如圖6所示,該音頻播放器能實(shí)現(xiàn)mp3、wav、mid、wma等格式音頻文件的播放。
2 音頻播放器制作過程簡介
2.1 音頻播放器制作中所需控件及變量設(shè)置介紹
1) 所需控件:
TMediaPlayer控件(可以通過MCI播放多種多媒體文件,如MID、MP3、WAV、CD音樂文件和AVI、WMV文件等)、三個(gè)TEdit控件(分別顯示正在播放文件的時(shí)間進(jìn)度、正在播放文件的信息、重復(fù)播放區(qū)域的設(shè)置)、若干TBitBtn控件(用于對文件進(jìn)行操作)、TListBox控件(用于顯示播放列表)、TTrackBar控件(用于控制播放的音量和播放的進(jìn)度)、以及TTimer控件和TOpenDialog控件。
2) 設(shè)置變量(說明:在程序代碼中出現(xiàn)的其它變量為控件中的局部變量):
在Form中設(shè)置全局變量:
SongDir:array [0..999] of Variant;//播放的文件的路徑(不包括播放的文件名)
mode:integer;//播放的模式,是正常播放還是重復(fù)播放指定區(qū)域
sound_sign:integer;//靜音的標(biāo)志
startpos,endpos:integer;//正常播放時(shí)播放的起始位置和結(jié)束位置
startpos1,endpos1:integer;// 重復(fù)播放指定區(qū)域的起始位置和結(jié)束位置
flag:integer;//暫停的標(biāo)志
addfileflag:integer;//是否第一次添加播放文件的標(biāo)志
2.2 音頻播放器各功能模塊介紹(在此僅介紹較為復(fù)雜的功能)
1) 文件打開功能模塊:該模塊的功能是打開若干需要播放的文件,并把這些文件加載到ListBox當(dāng)中,形成播放列表。若列表框中無任何文件,則直接將打開的文件加載到列表框中;若列表框中已有文件,則將打開的文件與列表框中已有的文件逐個(gè)進(jìn)行比對,判斷文件是否已經(jīng)加載過,若已經(jīng)加載過,則不加載。在此功能模塊中,需要利用數(shù)組變量SongDir記錄加載進(jìn)去的文件的路徑(不包括文件名),并利用變量addfileflag判斷是否為第一次添加播放文件,如果是則自動(dòng)選中播放列表中的第一首歌曲并顯示該文件的信息,同時(shí)改變變量addfileflag的值,保證以后添加進(jìn)去的播放文件不影響正在播放的文件。文件打開功能模塊處理流程如圖7所示。
2) 靜音功能模塊:該模塊的功能是在播放文件時(shí),按下此按鈕,則產(chǎn)生靜音效果,再次按下時(shí),聲音恢復(fù)。從而實(shí)現(xiàn)靜音的功能。實(shí)現(xiàn)此功能需要在該模塊程序中控制變量sound_sign的變化。該功能是通過Windows API函數(shù)waveoutsetvolume來實(shí)現(xiàn),在使用該函數(shù)之前,必須引用mmsystem單元。并且為該按鈕在靜音和非靜音時(shí)加載不同的圖片,從而清楚地顯示聲音處于何種狀態(tài)。
3) 設(shè)置重復(fù)播放的開始位置功能,設(shè)置重復(fù)播放的結(jié)束位置功能,清除重復(fù)播放區(qū)域,播放重復(fù)區(qū)域功能:
① 設(shè)置重復(fù)播放的開始位置主要需要將TrackBar2.Position即播放的當(dāng)前位置記錄在變量startpos1中,并將開始時(shí)間點(diǎn)顯示在Edit3當(dāng)中。部分程序代碼及說明如下:
startpos1:=TrackBar2.Position;//記錄開始位置
Edit3.Text:='重復(fù)播放:'+calculate(startpos1)+'->'+'結(jié)束點(diǎn)'+' 請?jiān)O(shè)置';//顯示開始時(shí)間點(diǎn)
設(shè)置重復(fù)播放的結(jié)束位置主要需要將TrackBar2.Position即播放的當(dāng)前位置記錄在變量endpos1中,并將結(jié)束時(shí)間點(diǎn)顯示在Edit3當(dāng)中。部分程序代碼及說明如下:
endpos1:=TrackBar2.Position; //記錄結(jié)束位置
Edit3.Text:='重復(fù)播放:'+calculate(startpos1)+'->'+calculate(endpos1);// 顯示結(jié)束時(shí)間點(diǎn)
運(yùn)行時(shí)設(shè)置好的重復(fù)播放區(qū)域如圖1中A所示。
② 在顯示設(shè)置的開始時(shí)間點(diǎn)和結(jié)束時(shí)間點(diǎn)時(shí),需要用到自定義函數(shù)calculate(),該函數(shù)的功能主要是根據(jù)提供的播放進(jìn)度,將其轉(zhuǎn)換為時(shí)間格式的字符串,以方便顯示。播放進(jìn)度是以毫秒(Milliseconds)為計(jì)數(shù)單位的。輸入播放進(jìn)度,返回字符串類型的時(shí)間數(shù)。該自定義函數(shù)calculate()在后面講述的歌曲信息的顯示以及文件播放時(shí)間進(jìn)度的顯示中也有重要的應(yīng)用。
③ 清除重復(fù)播放區(qū)域主要需要將變量startpos1、endpos1設(shè)置為0,并將播放模式變量mode設(shè)置為0,即正常播放模式。
④ 播放重復(fù)區(qū)域主要用到TMediaPlayer控件的StartPos、EndPos、Position屬性以及Play方法。StartPos屬性設(shè)置為StartPos1,EndPos屬性設(shè)置為EndPos1,Position屬性設(shè)置為StartPos1,并將播放模式變量mode設(shè)置為1,即重復(fù)播放指定區(qū)域模式。
3) 逐個(gè)刪除歌曲播放列表中歌曲的功能,全部刪除歌曲播放列表中歌曲的功能:實(shí)現(xiàn)逐個(gè)刪除功能需要判斷ListBox1中的歌曲條目是否處于選中狀態(tài),如處于選中狀態(tài),則調(diào)用ListBox1的Delete方法來完成選中歌曲的刪除。實(shí)現(xiàn)全部刪除功能只需要利用ListBox1.Clear即可。
4) 歌曲信息的顯示功能:
歌曲信息的顯示主要是通過調(diào)用自定義過程ShowInfo(Sender)來實(shí)現(xiàn)的。自定義過程ShowInfo(Sender)主要需要設(shè)置TMediaPlayer控件的FileName屬性、調(diào)用TMediaPlayer控件的Open方法、在窗體的標(biāo)題欄上顯示完整的文件路徑、調(diào)用自定義函數(shù)calculate()在Edit2中顯示文件的時(shí)間長度及文件名、設(shè)置全局變量startpos和endpos的值、設(shè)置TrackBar2的min和max屬性。歌曲信息的顯示如圖1中B所示。
5) 自動(dòng)加載歷史播放記錄功能:
在實(shí)際情況中,媒體播放器都是應(yīng)該有記憶功能的,即保存文件播放列表,在下次打開播放器的時(shí)候自動(dòng)加載該列表。要想實(shí)現(xiàn)這一功能,需要在退出程序的時(shí)候,將文件播放列表保存到INI文件當(dāng)中,當(dāng)再次運(yùn)行程序時(shí),從INI文件中讀取信息即可。在Delphi中提供了TIniFile類用于操作INI文件,該類在inifiles單元文件中,在使用該類文件時(shí),需要引用inifiles單元。
在窗體關(guān)閉過程FormClose(FormClose過程需要映射為OnClose)中,需要在該項(xiàng)目生成的可執(zhí)行文件目錄下創(chuàng)建名為——recentplay.ini的文件,用于存放播放列表。并將每首歌曲的文件路徑(不包括文件名)、每首歌曲的文件名、播放列表中文件的總數(shù)記錄在recentplay.ini文件中。保存文件播放列表處理流程如圖8所示。
3 結(jié)束語
隨著經(jīng)濟(jì)與科技的飛速發(fā)展,促使計(jì)算機(jī)技術(shù)和電子技術(shù)的發(fā)展突飛猛進(jìn)。音頻信號的處理做為多媒體處理的一個(gè)重要分支,已經(jīng)深入到人們的工作、學(xué)習(xí)、生活當(dāng)中。我們根據(jù)不同的應(yīng)用場合或者不同的技術(shù)要求,可以采用不同的數(shù)字音頻壓縮編碼技術(shù)。我們在音頻信號處理方面的研究仍待繼續(xù)深入,提出新的數(shù)字音頻壓縮編碼方法或者改進(jìn)現(xiàn)行的壓縮編碼方法以適應(yīng)實(shí)際應(yīng)用的需求。本文中利用應(yīng)用軟件Delphi設(shè)計(jì)的音頻播放器,經(jīng)過調(diào)試和測試,實(shí)現(xiàn)各種音頻文件的播放和文中所述的各種功能,具有一定實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn):
[1] 陳洪光,林嘉宇,易波.數(shù)字音頻壓縮技術(shù)研究[J].通信技術(shù),2000(2):68-71.
[2] 房建,左濤,陳婷.數(shù)字音頻壓縮編碼技術(shù)及其應(yīng)用[J].信息技術(shù),2004,28(2):9-11.