周六下午_珂實(shí)驗(yàn)三_第1頁(yè)
周六下午_珂實(shí)驗(yàn)三_第2頁(yè)
周六下午_珂實(shí)驗(yàn)三_第3頁(yè)
周六下午_珂實(shí)驗(yàn)三_第4頁(yè)
周六下午_珂實(shí)驗(yàn)三_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)三 音頻驅(qū)動(dòng)及應(yīng)用實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆誙DAl341TS 音頻工作原理熟悉linux 音頻驅(qū)動(dòng)程序?qū)崿F(xiàn)方法熟悉軟件編程基本知識(shí)二、實(shí)驗(yàn)內(nèi)容介紹音頻工作原理和音頻器的基本工作原理,剖析音頻驅(qū)動(dòng)程序的實(shí)現(xiàn)過(guò)程。三、預(yù)備知識(shí)掌握在Linux 集成開發(fā)環(huán)境中編寫和調(diào)試程序的基本過(guò)程。了解S3C2410 的S 總線結(jié)構(gòu)。四、實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S128M。實(shí)驗(yàn)儀,PC機(jī)Pentumn500以上, 硬盤40G以上,內(nèi)存大于軟件:PC機(jī)操作系統(tǒng)REDHINUX 9.0 AMRLINUX開發(fā)環(huán)境五、實(shí)驗(yàn)原理1、音頻驅(qū)動(dòng)硬件體系結(jié)構(gòu)IIS音頻接口 音頻系統(tǒng)設(shè)計(jì)包括軟件設(shè)計(jì)和硬件設(shè)

2、計(jì)兩方面,在硬件上使用了基于IIS總線的音頻系統(tǒng) 體系結(jié)構(gòu)。IIS(er-IC Sound bus)又稱I2S,是菲利浦公司提出的串行數(shù)字音頻總線協(xié) 議。目前很多音頻和MCU都提供了對(duì)IIS的支持。圖5.7.1是UP-NETARM2410-S音頻接線圖。圖5.7.1 UP-NETARM2410-S 音頻接線圖IIS總線只處理聲音數(shù)據(jù)。其他信號(hào)(如控制信號(hào))必須單獨(dú)傳輸。為了使的引出管腳盡可能少,IIS 只使用了四根串行總線。IIS音頻接口總線共有四根線:串行數(shù)據(jù)輸入(IISDI)、串行數(shù)據(jù)輸出(IISDO)、左右聲道選擇(IISLRCK)和串行位時(shí)鐘(IISCLK)。 由主控設(shè)備提供IISLR

3、CK 和IISCLK。UDAl341TS除了提供 IIS 接口和麥克風(fēng)揚(yáng)聲器接口,還提供 L3 接口控制音量等。L3接口分別連到 S3C2410 的 3 個(gè)通用數(shù)據(jù)輸出引腳上。IISCON 寄存器的設(shè)置和位描述如表5.7.1,5.7.2所示所示:表 5.7.1 IISCON 寄存器的設(shè)置表 5.7.2 IISCON 寄存器的位描述參考:prescaler enable,打開DMA服務(wù)請(qǐng)求IISMOD 寄存器IISMOD寄存器的設(shè)置和位描述如表5.7.3和表5.7.4所示。表 5.7.3 IISMOD 寄存器的設(shè)置寄存器地址R/W描述復(fù)位值IISMOD0 x01D18004(Li/W, Li/H

4、W, Bi/W)0 x01D18006(Bi/HW)R/WIIS 模式寄存器0 x0IISCON位描述初始化狀態(tài)左/右聲道指示(只讀)80 =左聲道 1 =右聲道1發(fā)送 FIFO 準(zhǔn)備好標(biāo)志(只讀)70=FIFO 沒(méi)準(zhǔn)備好(空) 1=FIFO 準(zhǔn)備好(非空)0接收 FIFO 準(zhǔn)備好標(biāo)志(只讀)60=FIFO 沒(méi)準(zhǔn)備好(滿) 1=FIFO 準(zhǔn)備好(非滿)0發(fā)送DMA 服務(wù)請(qǐng)求使能50=請(qǐng)求1=請(qǐng)求使能0接收DMA 服務(wù)請(qǐng)求使能40=請(qǐng)求1=請(qǐng)求使能0發(fā)送聲道空閑信號(hào)3在閑置狀態(tài) IISLRCK 是停止的(暫停 Tx)。只有在 IIS 是主控時(shí)這一位才有效。 0=產(chǎn)生IISLRCK1=不產(chǎn)生0接收

5、聲道空閑信號(hào)2在閑置狀態(tài) IISLRCK 是停止的(暫停 Rx),只有在 IIS 是主控時(shí)這一位才有效。 0=產(chǎn)生IISLRCK1=不產(chǎn)生0IIS 比率使能10 = 比率1 = 比率使能0IIS 接口使能 IIS (開始)00=IIS(停止) 1=IIS 使能(開始)0寄存器地址R/W描述復(fù)位值IISCON0 x01D18000(Li/HW, Li/W, Bi/W)0 x01D18002(Bi/HW)R/WIIS 控制寄存器0 x100表 5.7.4 IISMOD 寄存器的位描述參考:發(fā)送模式,16位數(shù)據(jù),串行位頻率為32fs,主控時(shí)率為384fsIISPSR 寄存器IISPSR寄存器的設(shè)置和

6、位描述如表5.7.5和表5.7.6所示,它的除數(shù)因子如表5-39所示。表5.7.5 IISPSR 寄存器的設(shè)置表 5-38 IISPSR 寄存器的位描述表 5.7.6 IISPSR 寄存器的除數(shù)因子IISPSR位描述初始化狀態(tài)預(yù)分頻系數(shù) A7:4預(yù)分頻系數(shù)A 的預(yù)分頻除數(shù)因子 一個(gè)時(shí)鐘的預(yù)分頻系數(shù) A=MCLK/0 x0預(yù)分頻系數(shù)B3:0預(yù)分頻系數(shù)B 的預(yù)分頻除數(shù)因子 一個(gè)時(shí)鐘的預(yù)分頻系數(shù) B=MCLK/0 x0寄存器地址R/W描述復(fù)位值IISPSR0 x01D18008(Li/B, Li/HW, Li/W, Bi/W)0 x01D1800A(Bi/HW)0 x01D1800B(Bi/B)R/

7、WIIS 預(yù)比例寄存器(預(yù)分頻寄存器)0 x0IISMOD位描述初始化狀態(tài)主/從動(dòng)模式選擇80=主模式(IISLRCK 和 IISCLK 為輸出)1=從動(dòng)模式(IISLRCK 和 IISCLK 為輸入)0傳送/接收模式選擇7:600=無(wú)轉(zhuǎn)移 01=接收模式 10=傳輸模式 11=傳輸和接收模式00左/右聲道有效電平50=左聲道低(右聲道高)1=左聲道高(右聲道低)0串行接口模式40=IIs 兼容格式1=MSB(左)-對(duì)齊格式0每通道串行數(shù)據(jù)位30 = 8-位1 = 16-位0主時(shí)率選擇20 = 256fs1 = 384fs(fs : 采樣頻率)0串行位時(shí)率選擇1:000 = 16fs10 =

8、4801 = 32fs11 = N/Afs (fs : 采樣頻率)00參考:在本實(shí)驗(yàn)中,主要是44.1kHz(IISLRCK)的16位雙聲道音頻,系統(tǒng)時(shí)鐘為67.5MHz,采用384fs模式,所以分頻值為4。時(shí)率的對(duì)照如表5.7.7所示。表 5.7.7 時(shí)率對(duì)應(yīng)表IISFCON 寄存器IISFCON寄存器的設(shè)置和位描述如表5.7.8和5.7.9所示:表5.7.8 IISFCON 寄存器的設(shè)置表5.7.9 IISFCON 寄存器的位描述IISFCON位描述初始化狀態(tài)寄存器地址R/W描述復(fù)位值IISFCON0 x01D1800C(Li/HW, Li/W, Bi/W)0 x01D1800E(Bi/H

9、W)R/WIIS FIFO 接口寄存器0 x0IISLRCK(fs)8.000KHz11.02KHz16.00KHz22.05KHz32.000KHz44.100KHz48.000KHz64.000KHz88.200KHz96.000KHzCODECLK (MHz)256fs2.0482.8224.0965.6458.19211.28912.28816.38422.57924.576384fs3.0724.2336.1448.46712.28816.93418.43224.57633.86836.864IISPSR3:0 / 7:4除數(shù)因子IISPSR3:0 / 7:4除數(shù)因子0000b210

10、00b10001b41001b0010b61010b3*0011b81011b0100b101100b5*0101b121101b0110b141110b7*0111b161111b參考:DMA模式,打FIFODMA 數(shù)據(jù)傳輸方式DMA(Direct Memory Acs)技術(shù)是一種代替微處理器完成器與外部設(shè)備或器之 間大數(shù)據(jù)量傳送的方法,也稱直接器存取方法。知道,在微機(jī)系統(tǒng)內(nèi),要把外設(shè) 的數(shù)據(jù)讀到內(nèi)存或把閃存數(shù)據(jù)送別外設(shè)。一般是通過(guò) CPU 執(zhí)行一段程序來(lái)完成的。但利用DMA 技術(shù)則可不用 CPU 介入就能實(shí)現(xiàn)外設(shè)與內(nèi)存之間數(shù)據(jù)的直接傳送。一般認(rèn)為,相對(duì)于CPU 執(zhí)行程序?qū)崿F(xiàn)外設(shè)與之間的數(shù)據(jù)

11、傳送而言,DMA 直接數(shù)傳速率要更高,但這點(diǎn)并不是DMA技術(shù)的主要優(yōu)點(diǎn)。因?yàn)橄鄬?duì)于CPU執(zhí)行程序的速度來(lái)講,外設(shè)數(shù)據(jù)傳輸?shù)乃俾释潜容^慢的,而且目前在一些高檔微機(jī)系統(tǒng)中,CPU 對(duì)內(nèi)存的讀寫速率可能還要高于 DMA傳送速率。DMA 的主要優(yōu)點(diǎn)是當(dāng)需要把一個(gè)外設(shè)的大量數(shù)據(jù)送到指定內(nèi)存時(shí),它可以自的動(dòng)完成傳送任務(wù)。也就是說(shuō)外設(shè)發(fā)出一個(gè)DMA請(qǐng)求,則DMA電路暫停CPU操作,并控制外 設(shè)與內(nèi)存之間進(jìn)行一次傳數(shù),然后再讓CPU繼續(xù)執(zhí)行程序。這樣就使CPU節(jié)省了大量對(duì)外 設(shè)查詢時(shí)間,從而提高了系統(tǒng)的整體性能。從這點(diǎn)上看,似乎與微機(jī)的中斷功能有點(diǎn)類似。 但實(shí)際上,在數(shù)據(jù)量很大且數(shù)傳速率較高的情況下,頻繁

12、的中斷會(huì)大大降低系統(tǒng)的執(zhí)行效 率,同時(shí)數(shù)傳速率也不可能高。S3C2410X有4個(gè)DMA控制器,其中DMA1(數(shù)據(jù)輸入)和DMA2(數(shù)據(jù)輸出)可用于IIS的 控制。通過(guò)設(shè)置CPU的IISFCON寄存器可以使IIS接口工作在DMA模式下此。模式下FIFO寄存器 組的控制權(quán)掌握在DMA控制器上。當(dāng) FIFO滿時(shí),由 DMA控制器對(duì)FIFO中的數(shù)據(jù)進(jìn)行處理。 DMA模式的選擇由IISCON寄存器的第四和第五位控制。DCONO寄存器的設(shè)置和位描述如表5.7.10和5.7.11所示:表5.7.10 DCONn 寄存器的設(shè)置寄存器地址讀/寫描述復(fù)位值傳送 FIFO模式選擇110=標(biāo)準(zhǔn)模式 1=DMA模式0接

13、收 FIFO模式選擇100=標(biāo)準(zhǔn)模式 1=DMA模式0傳送 FIFO 使能90=FIFO1=FIFO 使能0接收 FIFO 使能80=FIFO1=FIFO 使能0傳送 FIFO 數(shù)據(jù)計(jì)數(shù)(只讀)7:4數(shù)據(jù)計(jì)數(shù)值=0 8000接收 FIFO 數(shù)據(jù)計(jì)數(shù)(只讀)3:0數(shù)據(jù)計(jì)數(shù)值=0 8000表5.7.11 BDCON0 寄存器的位描述DCONn位描述初始化狀態(tài)DMD_ HS31Select one betn Demand mode and Handshake mode. 0: Demand mode iected.1: Handshake mode iected.0In both modes, DM

14、A controller starts its transfer and asserts DACK for a given asserted DREQ. The difference betn the two modes is whether it waits for the deasserted DACK or not.he Handshake mode, DMA controller waits for the deasserted DREQ before starting a new transfer. If it finds the deasserted DREQ, it deasse

15、rts DACK and waits for another asserted DREQ. In contrast,he Demand mode, DMA controller does not wait until the DREQ is deasserted. It just deasserts DACK and then starts another transfer if DREQ is asserted. Wemend using Handshake mode for external DMA request sourto preventun ended starts of new

16、transfers.SYNC30Select DREQ/DACK synchronization. 0: DREQ and DACK are synchronized to PCLK (APB clock). 1: DREQ and DACK are synchronized to HCLK (AHB clock). Therefore, for deviattached to AHB system bus, this bis to be set to 1, while for those attached to APB system, it should be set to 0. For t

17、he deviattached to external systems, the user should select this bit depending on which the externalsystem is synchronized with betn AHB system and APB system.029Enable/Disable theerrupt setting for CURR_TC (terminal count) 0:CURR_TCerrupt is disabled. The user has to view the transfer count he s us

18、 register (i.e. polling). 1:errupt request is generated whenall the transfer is done (i.e. CURR_TCes 0).0TSZ28Select the transfer size of an atomic transfer (i.e. transferformed each time DMA owns the bus before releasing the bus). 0: a unit transfer is performed. 1: a burst transfer of length four

19、is performed.0SERVMODE27Select the service mode betn Single service mode and Wholeservice mode.0DCON00 x4B000010R/WDMA 0 控制寄存器0 x00000000DCON10 x4B000050R/WDMA 1 控制寄存器0 x00000000DCON20 x4B000090R/WDMA 2 控制寄存器0 x00000000DCON30 x4B0000D0R/WDMA 3 控制寄存器0 x000000000: Single service mode iected in which a

20、fter each atomic transfer (single or burst of length four) DMA stops and waits for another DMA request. 1: Whole service mode iected in which one request gets atomic transfers to be repeated until the transfer count reaches to 0. In this mode, additional request are not required. Notet evenhe Whole

21、service mode, DMA releases the bus after each atomic transfer and then trie-get the bus to prevent starving of other bus masters.HWSR CSEL26:24Select DMA request source for each DMA.DCON0: 000 nXDREQ0 001:UART0 010:SDI 011:Timer 100:USBdevice EP1DCON1: 000 nXDREQ1 001:UART1 010:I2SSDI 011:SPI 100:US

22、Bdevice EP2DCON2: 000:I2SSDO 001:I2SSDI 010:SDI 011:Timer 100:USB device EP3DCON3: 000:UART2 001:SDI 010:SPI 011:Timer 100:USB device EP4These bits control the 4-1 MUX to select the DMA request source of each DMA. These bitse meanings only if H/W request mode isselected by DCONn23.00SWHW_ SE L23Sele

23、ct the DMA source betn software (S/W request mode) and hardware (H/W request mode). 0: S/W request mode iected and DMA is triggered by setting SW_TRIG bit of DMASKTRIG control register. 1: DMA sourelected by bit26:24 triggers the DMA operation.0RELOAD22Set the reload on/off option. 0: auto reload is

24、 performed when a current value of transfer countes 0 (i.e. all the required transfers are performed). 1: DMA channel (DMA REQ) is turned off when a current value of transfer count es 0. The channel on/oit (DMASKTRIGn1) is set to 0 (DREQ off) to prevent un endedfurther start of new DMA operation.0DS

25、Z21:20Data size to be transferred. 00 = Byte 01 = Half word 10 = Word 11 =00圖5.7.2是S3C2410X與菲利浦公司的UDAl341TS音頻的連接示意圖。圖 5.7.2 UDAl341TS 音頻的連接在這系結(jié)構(gòu)中,為了實(shí)現(xiàn)全雙工,數(shù)據(jù)傳輸使用兩個(gè) DMA 通道。數(shù)據(jù)傳輸(以回放為例)先由內(nèi)部總線送到內(nèi)存,然后傳到BDMA 控制器通道1,再通過(guò)IIS 控制器寫入IIS 總線并 傳輸給音頻。通道2用來(lái)。2、音頻設(shè)備底層軟件設(shè)計(jì)音頻設(shè)備驅(qū)動(dòng)程序的主要任務(wù)是控制音頻數(shù)據(jù)在硬件中,并為音頻應(yīng)用提供標(biāo)準(zhǔn)接口。由于系統(tǒng)資源有限,且

26、處理器能力不強(qiáng),所以在音頻設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)中,合理分配系統(tǒng)資源是難點(diǎn)。在三星公司的ARM中,IO設(shè)備的寄存器作為內(nèi)存空間的一部分,可以使用普通的內(nèi)存語(yǔ)句讀寫 IO 寄存器,進(jìn)而控制外部設(shè)備。這是該系統(tǒng)與傳統(tǒng)的基于el處理器的PC最大的不同。音頻設(shè)備驅(qū)動(dòng)程序功能: 設(shè)備驅(qū)動(dòng)程序中需要完成的任務(wù)包括:對(duì)設(shè)備以及對(duì)應(yīng)資源初始化和;應(yīng)用程序 傳送給設(shè)備文件的數(shù)據(jù)并回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)。這需要在用戶空間、內(nèi)核空間、總線 及外設(shè)之間傳輸數(shù)據(jù)。TC19:0Initial transfer count (or transfer beat). Notet the actual number of bytes

27、t are transferred is computed by the following equation: DSZ x TSZ x TC. Where, DSZ, TSZ (1 or 4), and TC represent data size (DCONn21:20), transfer size (DCONn28), and initial transfer count, respectively. This value will be loadedo CURR_SRC only if the CURR_SRC is 0 and the DMA ACK is 1.00000驅(qū)動(dòng)程序構(gòu)

28、架:Linux驅(qū)動(dòng)程序中將音頻設(shè)備按功能分成不同類型,每種類型對(duì)應(yīng)不同的驅(qū)動(dòng)程序。UDAl341TS音頻提供如下功能: 數(shù)字化音頻。這個(gè)功能有時(shí)被稱為 DSP或Codec設(shè)備。其功能是實(shí)現(xiàn)或錄制聲音。數(shù)字化聲音文 件 混頻器。用來(lái)控制各種輸入輸出的音量大小,在本系統(tǒng)中對(duì)應(yīng)L3接口。在 Linux 設(shè)備驅(qū)動(dòng)程序?qū)⒃O(shè)備看成文件,在驅(qū)動(dòng)程序中將結(jié)構(gòu) file_operations 中的各個(gè)函數(shù)指針與驅(qū)動(dòng)程序?qū)?yīng)例程函數(shù)綁定,以實(shí)現(xiàn)虛擬文件系統(tǒng) VFS 對(duì)邏輯文件的操作。數(shù)字音頻設(shè)備(audio)、混頻器(mixer)對(duì)應(yīng)的設(shè)備文件分別是devdsp和devmixer。設(shè)備的初始化和卸載:對(duì)devds

29、p的驅(qū)動(dòng)設(shè)計(jì)主要包含:設(shè)備的初始化和卸載、內(nèi)存與 DMA緩存區(qū)的管理、設(shè) 備無(wú)關(guān)操作(例程)的實(shí)現(xiàn)以及中斷處理程序。 在設(shè)備初始化中對(duì)音頻設(shè)備的相關(guān)寄存器初始化,并在設(shè)備中使用了兩個(gè)設(shè)備函 數(shù)register sound_dsp()和regiter_sound_mixer()音頻設(shè)備和混頻器設(shè)備。這兩個(gè) 函數(shù)在22以上版本的內(nèi)核driverssoundsound_corec文件中實(shí)現(xiàn)。其作用是設(shè)備,得到設(shè)備標(biāo)識(shí),并且實(shí)現(xiàn)設(shè)備無(wú)關(guān)操作的綁定。在這些函數(shù)里使用的第一個(gè)參 數(shù)都是 structfile_operations 類型的參數(shù)。該參數(shù)定義了設(shè)備無(wú)關(guān)接口的操作。 設(shè)備卸載時(shí)使用注銷函數(shù)。注銷時(shí)

30、用輸入時(shí)得到的設(shè)備號(hào)即可。在注銷時(shí)還必須驅(qū)動(dòng)程序使用的各種系統(tǒng)資源包括DMA、設(shè)備中斷等。DMA 緩存區(qū)設(shè)計(jì)和內(nèi)存管理:在音頻設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)中,DMA 緩存區(qū)設(shè)計(jì)和內(nèi)存管理部分最為復(fù)雜。由于音頻設(shè)備有很高的實(shí)時(shí)性要求,所以合理地使用內(nèi)存能加快對(duì)音頻數(shù)據(jù)的處理,并減少時(shí)延。 三星公司的DMA控制器沒(méi)有內(nèi)置DMA區(qū)域,在驅(qū)動(dòng)程序中必須為音頻設(shè)備分配DMA緩 存區(qū)。這樣就能通過(guò)DMA直接將需要回放或是錄制數(shù)據(jù)存放在內(nèi)核的DMA緩存區(qū)中。設(shè)備無(wú)關(guān)操作:設(shè)備無(wú)關(guān)操作對(duì)應(yīng)于file_operations指向的各個(gè)例程,它讓用戶用文件的方式設(shè)備。對(duì)設(shè)備的打開和讀寫是啟動(dòng)程序?yàn)橛脩舫绦蛱峁┑淖钪饕涌?,?/p>

31、別對(duì)應(yīng)于file_operations中的open、read和write例程。在open例程中需要完成的任務(wù)主要是 設(shè)備初始化,包括:(1)通過(guò)設(shè)置IIS寄存器控制音頻設(shè)備的初始化,并且初始化設(shè)備的工作參數(shù)(包括速度、聲道、采樣寬度);為設(shè)備分配DMA通道;根據(jù)采樣參數(shù)計(jì)算出緩存內(nèi)段的大小(程序也可以指定緩存內(nèi)段的大小); 當(dāng)緩存區(qū)和DMA設(shè)置好后,讀寫操作主要對(duì)緩存操作。 對(duì)設(shè)備的操作除了讀寫操作外,還 有音頻播放中的暫停和繼續(xù)。這兩個(gè)操作在ioctl接口中實(shí)現(xiàn),通過(guò)對(duì)相應(yīng)的IIS總線控 制器(IISCON寄存器)操作實(shí)現(xiàn)。在對(duì)音頻操作時(shí)還要注意:一次采樣得到的數(shù)據(jù)必須一次 處理,否則不能正

32、確數(shù)據(jù)。3、WAV 音樂(lè)格式在 Windwos 環(huán)境下,大部分的多“資源互換文件格式”( resour文件都依循著一種結(jié)構(gòu)來(lái)存放信息,這種結(jié)構(gòu)稱為erchange file format , 簡(jiǎn)稱 RIFF)。例如聲音 的WAV文件、的 AVI文件等等均是由此結(jié)構(gòu)衍生出來(lái)的。RIFF 可以看作是一種樹狀結(jié) 構(gòu),其基本為 ck ,猶如樹狀結(jié)構(gòu)中的節(jié)點(diǎn),每個(gè) ck 由“辨別碼”、“數(shù) 據(jù)大小”及“數(shù)據(jù)”所組成。辨別碼由 4 個(gè) ASCII 碼所,數(shù)據(jù)大小則標(biāo)示出緊跟其后 數(shù)據(jù)的長(zhǎng)度(為Byte),而數(shù)據(jù)大小本身也用掉4 個(gè)Byte,所以事實(shí)上一個(gè) ck的長(zhǎng) 度為數(shù)據(jù)大小加 8。一般而言,ck 本身

33、并不允許內(nèi)部再包含 ck,但有兩種例外,分 別為以“RIFF”及“LIST”為辨別碼的ck 。而針對(duì)這兩種ck,RIFF又從原先的“數(shù) 據(jù)”中切出4個(gè)Byte。這 4個(gè)Byte 稱為“格式辨別碼”,然而 RIFF又規(guī)定文件中僅能有 一個(gè)以“RIFF”為辨別碼的ck。只要是依循這一結(jié)構(gòu)的文件,均稱之為RIFF文檔。 這種結(jié)構(gòu)提供了一種系統(tǒng)化的分類。如果和 MS-DOS 文件系統(tǒng)作比較,“RIFF”c一臺(tái)硬盤的根目錄,其格式辨別碼便是此硬盤的邏輯代碼(C:或D:),而“LIST”ck 就好 比是k 即為其下的子目錄,其他的 c的函數(shù)。視窗下的各種多錄下僅能放何種數(shù)據(jù)。k則為一般的文件。至于在 RI

34、FF文件的處理方面,微軟提 供了相關(guān)文件格式就如同在磁盤上規(guī)定僅能放怎樣的目錄, 而在該目WAV 為waveform(波形)的縮寫。聲音文件的結(jié)構(gòu)如表5.7.12所示,“RIFF”的格式辨別 碼為“WAVE”。整個(gè)文件由兩個(gè) c符?。┘啊癲ata”。k 所組成:辨別碼“fmt ”(注意,最后一個(gè)是空白 字表 5.7.12WAV 文件結(jié)構(gòu)“RIFF”“WAVE”“fmt”sizeof(PCMWAVEFORMAT)struct of PCMWAVEFORMATdatawave form data在“fmt”的ck下包含了一個(gè)PCMWAVE-FORMAT數(shù)據(jù)結(jié)構(gòu),其定義如下:其意義分別為:wForm

35、at Tag:著此聲音的格式代號(hào),例如WAVE- FORMAT- PCM,WAVE- FORAM-CM 等等。nChannels:聲音的通道數(shù)。nSamplesPerSec:每秒取樣數(shù)。nAvgBytesPerSec:位。每秒的數(shù)據(jù)量。 nBlockAlign:區(qū)塊的對(duì)齊單wBitsPerSample:每個(gè)取樣所需的位數(shù)?!癲k 包含著真正數(shù)據(jù)。Windows 目前僅提供 WAVE- FORMAT- PCM 一種數(shù)據(jù)格式,所代表的意義是脈沖編碼調(diào)制(pulse code modulation)。針對(duì)這種格式,Windows定義了在“data”的ck 中數(shù)據(jù)的存放情形,圖 5.7.3 中列出了四

36、種不同通道數(shù)及取樣所需的位元數(shù)以及位元位置的安排。typedef structpcmwaveformat-tag WAVEFOR MAT wf;WORD wBitsPerSample;PCMWAVEFORMAT;typedef struct waveformat-tag WORD wFormat Tag ; WORD nChannels;DWORD nSamplesPerSec;DWORD nAvgBytesperSec;圖5.7.3PCM 文件中位元安排方式第一排表示單聲道8位元,第二排表示雙聲道8位元,第三排表示單聲道16位元,第四排 表示雙聲道16位元。8位元代表音量大小由8個(gè)位元所表示

37、,16位元?jiǎng)t代表音量大小由 16 個(gè)位元所表示。理論上8位元可以表示0255,16位元可表示065535,不過(guò)Windows 規(guī)定 16 位元其值的范圍為-3216832167。此外尚有一點(diǎn)要注意的是,0 并不一定代表無(wú) 聲,而是由中間的數(shù)值來(lái)決定,也就是在8位元時(shí)為128,16 位元時(shí)為0才是無(wú)聲。所以, 若程序設(shè)計(jì)時(shí)需放入無(wú)聲的數(shù)據(jù),需特別注意聲音格式是16或是8位元,以放入適當(dāng)?shù)闹怠?、MP3文件格式概述:MP3 文件是由幀(frame)的,幀是 MP3 文件最小的組成。MP3 的全稱應(yīng)為 MPEG1Layer-3 音頻文件,MPEG(Moving Picture Experts Gro

38、up)在漢語(yǔ)中譯為活動(dòng)圖像組,特指活動(dòng)影音壓縮標(biāo)準(zhǔn),MPEG音頻文件是MPEG1 標(biāo)準(zhǔn)中部分,也叫MPEG 音頻層,它根據(jù)壓縮質(zhì)量和編碼復(fù)雜程度劃分為三層,即 Layer-1、Layer2、Layer3,且分別對(duì)應(yīng)MP1、MP2、MP3 這三種聲音文件,并根據(jù)不同的用途,使用不同層次的編碼。MPEG 音頻編碼的層次越高,編越復(fù)雜,壓縮率也越高,MP1 和 MP2 的壓縮率分別為 4:1 和 6:1-8:1,而 MP3 的壓縮率則高達(dá) 10:1-12:1,也就是說(shuō),一分鐘 CD 音質(zhì)的音樂(lè),壓縮需要10MB的空間,而經(jīng)過(guò)MP3 壓縮編碼后只有1MB 左右。不過(guò)MP3 對(duì)音頻信號(hào) 采用的是有損壓縮

39、方式,為了降低聲音失真度,MP3 采取了“感官編碼技術(shù)”,即編碼時(shí) 先對(duì)音頻文件進(jìn)行頻譜分析,然后用過(guò)濾器濾掉噪音電平,接著通過(guò)量化的方式將剩下的 每一位打散排列,最后形成具有較高壓縮比的MP3 文件,并使壓縮后的文件在回放時(shí)能夠達(dá)到比較接近原音源效果。MP3整個(gè) MP3 文件結(jié)構(gòu):文件大體分為三部分:TAG_V2(ID3V2),F(xiàn)rame, TAG_V1(ID3V1),如表5.7.13所示:表 5.7.13 MP3 文件組成MP3的 FRAME 格式:每個(gè)FRAME 都有一個(gè)幀頭FRAMEHEADER,長(zhǎng)度是4BYTE(32bit),幀頭后面可能有兩個(gè)字 節(jié)的CRC 校驗(yàn),這兩個(gè)字節(jié)的是否存

40、在決定于FRAMEHEADER 信息的第16bit,為0 則幀頭 后面無(wú)校驗(yàn),為 1 則有校驗(yàn),校驗(yàn)值長(zhǎng)度為 2 個(gè)字節(jié),緊跟在 FRAMEHEADER 后面,接著就 是幀的實(shí)體數(shù)據(jù)了,格式如表5.7.14:表 5.7.14 FRAME 的格式幀頭 FRAMEHEADER 格式如下:AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMMMAIN_DATA:MAIN_DATA 部分長(zhǎng)度是否變化決定于FRAMEHEADER 的bitrate 是否變化,一首 MP3 歌曲, 它有三個(gè)版本:96Kbps(96 千比特位每秒)、128Kbps 和 192Kbps。Kbps(比特位速率), 表明了音樂(lè)每秒的數(shù)據(jù)量,Kbps 值越高,音質(zhì)越好,文件也越大

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論