2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Linux音頻編程指南肖文鵬(xiaowp@)自由軟件愛好者簡介:簡介:雖然目前Linux的優(yōu)勢主要體現(xiàn)在網(wǎng)絡(luò)服務(wù)方面,但事實(shí)上同樣也有著非常豐富的媒體功能,本文就是以多媒體應(yīng)用中最基本的聲音為對(duì)象,介紹如何在Linux平臺(tái)下開發(fā)實(shí)際的音頻應(yīng)用程序,同時(shí)還給出了一些常用的音頻編程框架。本文的標(biāo)簽:本文的標(biāo)簽:設(shè)備編程標(biāo)記本文!發(fā)布日期:發(fā)布日期:2004年2月01日級(jí)別:級(jí)別:初級(jí)訪問情況訪問情況7117次瀏覽建議:建議:0(添加評(píng)論)

2、平均分(共14個(gè)評(píng)分)一、數(shù)字音頻一、數(shù)字音頻音頻信號(hào)是一種連續(xù)變化的模擬信號(hào),但計(jì)算機(jī)只能處理和記錄二進(jìn)制的數(shù)字信號(hào),由自然音源得到的音頻信號(hào)必須經(jīng)過一定的變換,成為數(shù)字音頻信號(hào)之后,才能送到計(jì)算機(jī)中作進(jìn)一步的處理。數(shù)字音頻系統(tǒng)通過將聲波的波型轉(zhuǎn)換成一系列二進(jìn)制數(shù)據(jù),來實(shí)現(xiàn)對(duì)原始聲音的重現(xiàn),實(shí)現(xiàn)這一步驟的設(shè)備常被稱為模數(shù)轉(zhuǎn)換器(AD)。AD轉(zhuǎn)換器以每秒鐘上萬次的速率對(duì)聲波進(jìn)行采樣,每個(gè)采樣點(diǎn)都記錄下了原始模擬聲波在某一時(shí)刻的狀態(tài),通常

3、稱之為樣本(sample),而每一秒鐘所采樣的數(shù)目則稱為采樣頻率,通過將一串連續(xù)的樣本連接起來,就可以在計(jì)算機(jī)中描述一段聲音了。對(duì)于采樣過程中的每一個(gè)樣本來說,數(shù)字音頻系統(tǒng)會(huì)分配一定存儲(chǔ)位來記錄聲波的振幅,一般稱之為采樣分辯率或者采樣精度,采樣精度越高,聲音還原時(shí)就會(huì)越細(xì)膩。數(shù)字音頻涉及到的概念非常多,對(duì)于在Linux下進(jìn)行音頻編程的程序員來說,最重要的是理解聲音數(shù)字化的兩個(gè)關(guān)鍵步驟:采樣和量化。采樣就是每隔一定時(shí)間就讀一次聲音信號(hào)的幅

4、度,而量化則是將采樣得到的聲音信號(hào)幅度轉(zhuǎn)換為數(shù)字值,從本質(zhì)上講,采樣是時(shí)間上的數(shù)字化,而量化則是幅度上的數(shù)字化。下面介紹幾個(gè)在進(jìn)行音頻編程時(shí)經(jīng)常需要用到的技術(shù)指標(biāo):1.采樣頻率采樣頻率采樣頻率是指將模擬聲音波形進(jìn)行數(shù)字化時(shí),每秒鐘抽取聲波幅度樣本的次數(shù)。采樣頻率的選擇應(yīng)該遵循奈奎斯特(HarryNyquist)采樣理論:如果對(duì)某一模擬信號(hào)進(jìn)行采樣,則采樣后可還原的最高信號(hào)頻率只有采樣頻率的一半,或者說只要采樣頻率高于輸入信號(hào)最高頻率的兩

5、倍,就能從采樣信號(hào)系列重構(gòu)原始信號(hào)。正常人聽覺的頻率范圍大約在20Hz~20kHz之間,根據(jù)奈奎斯特采樣理論,為了保證聲音不失真,采樣頻率應(yīng)該在40kHz左右。常用的音頻采樣頻率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采樣頻率,還可以達(dá)到DVD的音質(zhì)。2.量化位數(shù)量化位數(shù)量化位數(shù)是對(duì)模擬音頻信號(hào)的幅度進(jìn)行數(shù)字化,它決定了模擬信號(hào)數(shù)字化以后的動(dòng)態(tài)范圍,常用的

6、有8位、12位和16位。量化位越高,信號(hào)的動(dòng)態(tài)范圍越大,數(shù)字化后的音頻信號(hào)就越可能接近原始信號(hào),但所需要的存貯空間也越大。無論是OSS還是ALSA,都是以內(nèi)核驅(qū)動(dòng)程序的形式運(yùn)行在Linux內(nèi)核空間中的,應(yīng)用程序要想訪問聲卡這一硬件設(shè)備,必須借助于Linux內(nèi)核所提供的系統(tǒng)調(diào)用(systemcall)。從程序員的角度來說,對(duì)聲卡的操作在很大程度上等同于對(duì)磁盤文件的操作:首先使用open系統(tǒng)調(diào)用建立起與硬件間的聯(lián)系,此時(shí)返回的文件描述符將作

7、為隨后操作的標(biāo)識(shí);接著使用read系統(tǒng)調(diào)用從設(shè)備接收數(shù)據(jù),或者使用write系統(tǒng)調(diào)用向設(shè)備寫入數(shù)據(jù),而其它所有不符合讀寫這一基本模式的操作都可以由ioctl系統(tǒng)調(diào)用來完成;最后,使用close系統(tǒng)調(diào)用告訴Linux內(nèi)核不會(huì)再對(duì)該設(shè)備做進(jìn)一步的處理。?open系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用open可以獲得對(duì)聲卡的訪問權(quán),同時(shí)還能為隨后的系統(tǒng)調(diào)用做好準(zhǔn)備,其函數(shù)原型如下所示:intopen(constpathnameintflagsintmode

8、)參數(shù)pathname是將要被打開的設(shè)備文件的名稱,對(duì)于聲卡來講一般是devdsp。參數(shù)flags用來指明應(yīng)該以什么方式打開設(shè)備文件,它可以是O_RDONLY、O_WRONLY或者O_RDWR,分別表示以只讀、只寫或者讀寫的方式打開設(shè)備文件;參數(shù)mode通常是可選的,它只有在指定的設(shè)備文件不存在時(shí)才會(huì)用到,指明新創(chuàng)建的文件應(yīng)該具有怎樣的權(quán)限。如果open系統(tǒng)調(diào)用能夠成功完成,它將返回一個(gè)正整數(shù)作為文件標(biāo)識(shí)符,在隨后的系統(tǒng)調(diào)用中需要用到該

9、標(biāo)識(shí)符。如果open系統(tǒng)調(diào)用失敗,它將返回1,同時(shí)還會(huì)設(shè)置全局變量errno,指明是什么原因?qū)е铝隋e(cuò)誤的發(fā)生。?read系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用read用來從聲卡讀取數(shù)據(jù),其函數(shù)原型如下所示:intread(intfdbufsize_tcount)參數(shù)fd是設(shè)備文件的標(biāo)識(shí)符,它是通過之前的open系統(tǒng)調(diào)用獲得的;參數(shù)buf是指向緩沖區(qū)的字符指針,它用來保存從聲卡獲得的數(shù)據(jù);參數(shù)count則用來限定從聲卡獲得的最大字節(jié)數(shù)。如果read系統(tǒng)

10、調(diào)用成功完成,它將返回從聲卡實(shí)際讀取的字節(jié)數(shù),通常情況會(huì)比count的值要小一些;如果read系統(tǒng)調(diào)用失敗,它將返回1,同時(shí)還會(huì)設(shè)置全局變量errno,來指明是什么原因?qū)е铝隋e(cuò)誤的發(fā)生。?write系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用write用來向聲卡寫入數(shù)據(jù),其函數(shù)原型如下所示:size_twrite(intfdconstbufsize_tcount)系統(tǒng)調(diào)用write和系統(tǒng)調(diào)用read在很大程度是類似的,差別只在于write是向聲卡寫入數(shù)據(jù),

11、而read則是從聲卡讀入數(shù)據(jù)。參數(shù)fd同樣是設(shè)備文件的標(biāo)識(shí)符,它也是通過之前的open系統(tǒng)調(diào)用獲得的;參數(shù)buf是指向緩沖區(qū)的字符指針,它保存著即將向聲卡寫入的數(shù)據(jù);參數(shù)count則用來限定向聲卡寫入的最大字節(jié)數(shù)。如果write系統(tǒng)調(diào)用成功完成,它將返回向聲卡實(shí)際寫入的字節(jié)數(shù);如果read系統(tǒng)調(diào)用失敗,它將返回1,同時(shí)還會(huì)設(shè)置全局變量errno,來指明是什么原因?qū)е铝隋e(cuò)誤的發(fā)生。無論是read還是write,一旦調(diào)用之后Linux內(nèi)核就

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論