alsapcm參數(shù)設(shè)置_第1頁
alsapcm參數(shù)設(shè)置_第2頁
alsapcm參數(shù)設(shè)置_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、Alsa 中 PCM參數(shù)設(shè)置(2010-06-09 14:47) 分類:Alsa1) PCM設(shè)備的句柄.2) 指定同時可供回放或截獲的PCM流的方向3) 提供一些關(guān)于我們想要使用的設(shè)置選項的信息,比如緩沖區(qū)大小,采樣 率,PCM數(shù)據(jù)格式等4) 檢查硬件是否支持設(shè)置選項.4.1) 初始化PCM變量4.2) 分配hwparams結(jié)構(gòu)4.3) 打開PCM設(shè)備4.4) 以聲卡的全部設(shè)置選項空間來初始化hwparams結(jié)構(gòu)4.5) 指定訪問類型,采樣格式,采樣率,聲道號碼,周期數(shù)目以及周期大小a) 訪問類型:指定了哪一個多聲道數(shù)據(jù)儲存在緩沖區(qū)的方法* 對于交錯訪問,緩沖區(qū)里的每一個幀為聲道容納連續(xù)的采樣

2、 數(shù)據(jù)* 對于非交錯訪問,每一個周期為第一個聲道容納所有采樣數(shù) 據(jù)接著是第二個聲道的采樣數(shù)據(jù)b) 緩沖區(qū)尺寸的單元依賴于函數(shù).一些時候是字節(jié),一些時候是必 須指定的幀的數(shù)目.一個幀是對所有聲道的采樣數(shù)據(jù)數(shù)組.對于16位立體聲數(shù)據(jù),一 個幀的長度是4個字節(jié).如果你的硬件不支持2的N次方的緩沖區(qū)大小,你可以使用snd_pcm_hw_params_set_buffer_size_near 函數(shù).這個函數(shù)工作起來與 snd_pcm_hw_params_set_rate_near 相似.5) 為PCM設(shè)備申請由pcm_handle指向的設(shè)置選項備注資料:設(shè)備命名API庫使用邏輯設(shè)備名而不是設(shè)備文件。設(shè)備

3、名字可以是真實的硬件名字也 可以是插件名字。硬件名字使用hw:i,j這樣的格式。其中i是卡號,j是這 塊聲卡上的設(shè)備號。第一個聲音設(shè)備是 hw:0,0.這個別名默認引用第一塊聲 音設(shè)備并且在本文示例中一真會被用到。插件使用另外的唯一名字。比如 plughw:,表示一個插件,這個插件不提供對硬件設(shè)備的訪問,而是提供像采 樣率轉(zhuǎn)換這樣的軟件特性,硬件本身并不支持這樣的特性。聲音緩存和數(shù)據(jù)傳輸每個聲卡都有一個硬件緩存區(qū)來保存記錄下來的樣本。當(dāng)緩存區(qū)足夠滿時, 聲卡將產(chǎn)生一個中斷。內(nèi)核聲卡驅(qū)動然后使用直接內(nèi)存(DMA)訪問通道將樣本 傳送到內(nèi)存中的應(yīng)用程序緩存區(qū)。類似地,對于回放,任何應(yīng)用程序使用DM

4、A 將自己的緩存區(qū)數(shù)據(jù)傳送到聲卡的硬件緩存區(qū)中。這樣硬件緩存區(qū)是環(huán)緩存。也就是說當(dāng)數(shù)據(jù)到達緩存區(qū)末尾時將重新回到緩存區(qū)的起始位置。ALSA維護一個指針來指向硬件緩存以及應(yīng)用程序緩存區(qū)中 數(shù)據(jù)操作的當(dāng)前位置。從內(nèi)核外部看,我們只對應(yīng)用程序的緩存區(qū)感興趣, 所以本文只討論應(yīng)用程序緩存區(qū)。應(yīng)用程序緩存區(qū)的大小可以通過 ALSA庫函數(shù)調(diào)用來控制。緩存區(qū)可以很大, 一次傳輸操作可能會導(dǎo)致不可接受的延遲,我們把它稱為延時(latency)。為 了解決這個問題,ALSA將緩存區(qū)拆分成一系列周期(period)(OSS/Free 中叫 片斷fragments).ALSA 以period為單元來傳送數(shù)據(jù)。一個周

5、期(period)存儲一些幀(frames)。每一幀包含時間上一個點所抓取的 樣本。對于立體聲設(shè)備,一個幀會包含兩個信道上的樣本。16 perods圖1展示了分解過程:一個緩存區(qū)分解成周期,然后是幀,然后是樣本。圖 中包含一些假定的數(shù)值。圖中左右信道信息被交替地存儲在一個幀內(nèi)。這稱 為交錯(in terleaved)模式。在非交錯模式中,一個信道的所有樣本數(shù)據(jù)存儲在另外一個信道的數(shù)據(jù)之后。period(周期):硬件中中斷間的間隔時間。它表示輸入延時。聲卡接口中有一個指針來指示聲卡硬件緩存區(qū)中當(dāng)前的讀寫位置。只要接口 在運行,這個指針將循環(huán)地指向緩存區(qū)中的某個位置。frame size = si

6、zeof( one sample) * n Cha nn elsalsa中配置的緩存(buffer) 和周期(size)大小在run time中是以幀(frames) 形式存儲的。period_bytes = frames_to_bytes(ru ntime, ru ntime->period_size); bytes_to_frames()The period and buffer sizes are not depe ndent on the sample format because they are measured in frames; you do not n eed to

7、cha nge them.Over and Un der Run當(dāng)一個聲卡活動時,數(shù)據(jù)總是連續(xù)地在硬件緩存區(qū)和應(yīng)用程序緩存區(qū)間傳輸。 但是也有例外。在錄音例子中,如果應(yīng)用程序讀取數(shù)據(jù)不夠快,循環(huán)緩存區(qū) 將會被新的數(shù)據(jù)覆蓋。這種數(shù)據(jù)的丟失被稱為overrun.在回放例子中,如果 應(yīng)用程序?qū)懭霐?shù)據(jù)到緩存區(qū)中的速度不夠快,緩存區(qū)將會 "餓死"。這樣的錯 誤被稱為"underrun"。在ALSA文檔中,有時將這兩種情形統(tǒng)稱為"XRUN。適 當(dāng)?shù)卦O(shè)計應(yīng)用程序可以最小化 XRUN并且可以從中恢復(fù)過來Start thresholdThe start thre

8、shold parameter is used to determ ine the start point in stream. For playback, if samples in ring buffer is equal or greater tha n the start threshold parameters and the stream is not running, the stream will be started automatically from the device. For capture, if the application wants to read cou

9、nt of samples equal or greater the n the stream will be started. If you want to use explicit start ( snd_pcm_start), you can set this value greater than ring buffer size (in samples), but use the constant MAXINT is not a bad idea.Stop thresholdSimilarly, the stop threshold parameter is used to autom

10、atically stop the running stream, whe n the available samples crosses this boundary. It means, for playback, the empty samples in ring buffer and for capture, the filled (used) samples in ring buffer.播放的過程大致如下:Snd_pcm_f_ops_playback.write 即 snd_pcm_write 調(diào)用 snd_pcm_lib_write snd_pcm_lib_write 調(diào)用 Snd_pcm_lib_write1Snd_pcm_lib_write1 通過 snd_pcm_lib_write_transfer把數(shù)據(jù)寫入 DMAbuffer中,"然后調(diào)用snd_pcm_start開始DmA專輸數(shù)據(jù)到WM971里去。錄音的過程大致如下:Snd_pcm_f_ops_capture.read 即 sn

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論