版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Linux音頻編程指南肖文鵬(xiaowp@)自由軟件愛好者簡介:簡介:雖然目前Linux的優(yōu)勢主要體現(xiàn)在網(wǎng)絡(luò)服務(wù)方面,但事實上同樣也有著非常豐富的媒體功能,本文就是以多媒體應(yīng)用中最基本的聲音為對象,介紹如何在Linux平臺下開發(fā)實際的音頻應(yīng)用程序,同時還給出了一些常用的音頻編程框架。本文的標(biāo)簽:本文的標(biāo)簽:設(shè)備編程標(biāo)記本文!發(fā)布日期:發(fā)布日期:2004年2月01日級別:級別:初級訪問情況訪問情況7117次瀏覽建議:建議:0(添加評論)
2、平均分(共14個評分)一、數(shù)字音頻一、數(shù)字音頻音頻信號是一種連續(xù)變化的模擬信號,但計算機只能處理和記錄二進制的數(shù)字信號,由自然音源得到的音頻信號必須經(jīng)過一定的變換,成為數(shù)字音頻信號之后,才能送到計算機中作進一步的處理。數(shù)字音頻系統(tǒng)通過將聲波的波型轉(zhuǎn)換成一系列二進制數(shù)據(jù),來實現(xiàn)對原始聲音的重現(xiàn),實現(xiàn)這一步驟的設(shè)備常被稱為模數(shù)轉(zhuǎn)換器(AD)。AD轉(zhuǎn)換器以每秒鐘上萬次的速率對聲波進行采樣,每個采樣點都記錄下了原始模擬聲波在某一時刻的狀態(tài),通常
3、稱之為樣本(sample),而每一秒鐘所采樣的數(shù)目則稱為采樣頻率,通過將一串連續(xù)的樣本連接起來,就可以在計算機中描述一段聲音了。對于采樣過程中的每一個樣本來說,數(shù)字音頻系統(tǒng)會分配一定存儲位來記錄聲波的振幅,一般稱之為采樣分辯率或者采樣精度,采樣精度越高,聲音還原時就會越細(xì)膩。數(shù)字音頻涉及到的概念非常多,對于在Linux下進行音頻編程的程序員來說,最重要的是理解聲音數(shù)字化的兩個關(guān)鍵步驟:采樣和量化。采樣就是每隔一定時間就讀一次聲音信號的幅
4、度,而量化則是將采樣得到的聲音信號幅度轉(zhuǎn)換為數(shù)字值,從本質(zhì)上講,采樣是時間上的數(shù)字化,而量化則是幅度上的數(shù)字化。下面介紹幾個在進行音頻編程時經(jīng)常需要用到的技術(shù)指標(biāo):1.采樣頻率采樣頻率采樣頻率是指將模擬聲音波形進行數(shù)字化時,每秒鐘抽取聲波幅度樣本的次數(shù)。采樣頻率的選擇應(yīng)該遵循奈奎斯特(HarryNyquist)采樣理論:如果對某一模擬信號進行采樣,則采樣后可還原的最高信號頻率只有采樣頻率的一半,或者說只要采樣頻率高于輸入信號最高頻率的兩
5、倍,就能從采樣信號系列重構(gòu)原始信號。正常人聽覺的頻率范圍大約在20Hz~20kHz之間,根據(jù)奈奎斯特采樣理論,為了保證聲音不失真,采樣頻率應(yīng)該在40kHz左右。常用的音頻采樣頻率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采樣頻率,還可以達到DVD的音質(zhì)。2.量化位數(shù)量化位數(shù)量化位數(shù)是對模擬音頻信號的幅度進行數(shù)字化,它決定了模擬信號數(shù)字化以后的動態(tài)范圍,常用的
6、有8位、12位和16位。量化位越高,信號的動態(tài)范圍越大,數(shù)字化后的音頻信號就越可能接近原始信號,但所需要的存貯空間也越大。無論是OSS還是ALSA,都是以內(nèi)核驅(qū)動程序的形式運行在Linux內(nèi)核空間中的,應(yīng)用程序要想訪問聲卡這一硬件設(shè)備,必須借助于Linux內(nèi)核所提供的系統(tǒng)調(diào)用(systemcall)。從程序員的角度來說,對聲卡的操作在很大程度上等同于對磁盤文件的操作:首先使用open系統(tǒng)調(diào)用建立起與硬件間的聯(lián)系,此時返回的文件描述符將作
7、為隨后操作的標(biāo)識;接著使用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)核不會再對該設(shè)備做進一步的處理。?open系統(tǒng)調(diào)用系統(tǒng)調(diào)用系統(tǒng)調(diào)用open可以獲得對聲卡的訪問權(quán),同時還能為隨后的系統(tǒng)調(diào)用做好準(zhǔn)備,其函數(shù)原型如下所示:intopen(constpathnameintflagsintmode
8、)參數(shù)pathname是將要被打開的設(shè)備文件的名稱,對于聲卡來講一般是devdsp。參數(shù)flags用來指明應(yīng)該以什么方式打開設(shè)備文件,它可以是O_RDONLY、O_WRONLY或者O_RDWR,分別表示以只讀、只寫或者讀寫的方式打開設(shè)備文件;參數(shù)mode通常是可選的,它只有在指定的設(shè)備文件不存在時才會用到,指明新創(chuàng)建的文件應(yīng)該具有怎樣的權(quán)限。如果open系統(tǒng)調(diào)用能夠成功完成,它將返回一個正整數(shù)作為文件標(biāo)識符,在隨后的系統(tǒng)調(diào)用中需要用到該
9、標(biāo)識符。如果open系統(tǒng)調(diào)用失敗,它將返回1,同時還會設(shè)置全局變量errno,指明是什么原因?qū)е铝隋e誤的發(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)識符,它是通過之前的open系統(tǒng)調(diào)用獲得的;參數(shù)buf是指向緩沖區(qū)的字符指針,它用來保存從聲卡獲得的數(shù)據(jù);參數(shù)count則用來限定從聲卡獲得的最大字節(jié)數(shù)。如果read系統(tǒng)
10、調(diào)用成功完成,它將返回從聲卡實際讀取的字節(jié)數(shù),通常情況會比count的值要小一些;如果read系統(tǒng)調(diào)用失敗,它將返回1,同時還會設(shè)置全局變量errno,來指明是什么原因?qū)е铝隋e誤的發(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)識符,它也是通過之前的open系統(tǒng)調(diào)用獲得的;參數(shù)buf是指向緩沖區(qū)的字符指針,它保存著即將向聲卡寫入的數(shù)據(jù);參數(shù)count則用來限定向聲卡寫入的最大字節(jié)數(shù)。如果write系統(tǒng)調(diào)用成功完成,它將返回向聲卡實際寫入的字節(jié)數(shù);如果read系統(tǒng)調(diào)用失敗,它將返回1,同時還會設(shè)置全局變量errno,來指明是什么原因?qū)е铝隋e誤的發(fā)生。無論是read還是write,一旦調(diào)用之后Linux內(nèi)核就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java音頻編程
- linux多線程編程
- linux系統(tǒng)編程答案
- linux下c編程詳解
- linux下c編程高效手冊
- 《linux與unixshell編程指南》005
- linux_bash腳本編程大全
- linux的應(yīng)用及shell編程
- linux系統(tǒng)編程試卷答案
- linux c編程常用api接口 函數(shù)
- linux安全體系分析與編程
- linux高級編程實驗實驗2報告
- gnu linux編程課件 第10章
- linux系統(tǒng)及編程基礎(chǔ)習(xí)題答案
- 公眾廣播數(shù)字編程音頻矩陣設(shè)計.pdf
- linux網(wǎng)絡(luò)編程實驗指導(dǎo)書
- linux安全體系分析與編程
- linux系統(tǒng)及編程基礎(chǔ)課后答案
- linux_shell(腳本)編程入門_實例講解詳解
- linux-unix系統(tǒng)編程手冊(上、下冊)-
評論
0/150
提交評論