alsa編程

alsa 編程

分類: linux 124人閱讀 評論(0) 收藏 舉報
編程parametersbufferloopsaccessplayback

轉載自:http://blog.csdn.net/spygg/article/details/7824750

?

ALSA(Advanced Linux Sound Architecture)是由內核驅動,標準的API庫和一系列實用程序組成.因為涉及到版權和BUG的問題Linux 2.6內核拋棄了舊的OSS,ALSA作為聲音編程的生力軍被作為了合并到了內核中.

?

數字音頻基礎:

音頻是由電器設備(麥克風等)將空氣的變化轉化成的電信號.模數轉換器(A/D)將模擬電壓轉化成一系列不連續的值稱之為采樣,然后將采樣值送往數模轉化器(D/A)從而將聲音還原.采樣的頻率是影響數字聲音質量的一個關鍵因素,由Nyquist采樣定理知,采樣的頻率至少是信號中最高頻率的2倍方能的還原原始信號.

ALSA基礎知識:

?ALSA由許多聲卡的聲卡驅動程序組成,同時它也提供一個稱為libasound的API庫。應用程序開發者應該使用libasound而不是內核中的ALSA接口。因為libasound提供最高級并且編程方便的編程接口。并且提供一個設備邏輯命名功能,這樣開發者甚至不需要知道類似設備文件這樣的低層接口。相反,OSS/Free驅動是在內核系統調用級上編程,它要求開發者提供設備文件名并且利用ioctrl來實現相應的功能。為了向后兼容,ALSA提供內核模塊來模擬OSS,這樣之前的許多在OSS基礎上開發的應用程序不需要任何改動就可以在ALSA上運行。另外,libaoss庫也可以模擬OSS,而它不需要內核模塊。ALSA包含插件功能,使用插件可以擴展新的聲卡驅動,包括完全用軟件實現的虛擬聲卡。ALSA提供一系列基于命令行的工具集,比如混音器(mixer),音頻文件播放器(aplay),以及控制特定聲卡特定屬性的工具.

?

ALSA接口:

控制接口:用來管理已注冊的聲卡并檢查其可用的設備

?

PCM接口:用來管理數字音頻的錄音和回放,這是一個用的最廣泛的接口,我們將在下文中著重介紹.

?

原始 MIDI 接口:支持標準MIDI(Musical Instrument Digital Interface),提供了訪問聲卡MIDI的接口.

?

時間接口:用來聲卡的計時聲音事件的同步

?

Sequencer接口:高級MIDI和聲音合成接口,可以處理更多的MIDI協議

?

混音接口:用來聲卡設備的信號處理和音量,建立在控制接口之上

?

設備命名:

?API庫使用邏輯設備名而不是設備文件。設備名字可以是真實的硬件名字也可以是插件名字。硬件名字使用hw:i,j這樣的格式。其中i是卡號,j是這塊聲卡上的設備號。第一個聲音設備是hw:0,0.這個別名默認引用第一塊聲音設備并且在本文示例中一直會被用到。插件使用另外的唯一名字。比如plughw:,表示一個插件,這個插件不提供對硬件設備的訪問,而是提供像采樣率轉換這樣的軟件特性,硬件本身并不支持這樣的特性。

?

聲音緩存和數據傳輸:

??每個聲卡都有一個硬件緩存區來保存記錄下來的樣本。當緩存區足夠滿時,聲卡將產生一個中斷。內核聲卡驅動然后使用直接內存(DMA)訪問通道將樣本傳送到內存中的應用程序緩存區。類似地,對于回放,任何應用程序使用DMA將自己的緩存區數據傳送到聲卡的硬件緩存區中。

?? ? ?這樣硬件緩存區是環緩存。也就是說當數據到達緩存區末尾時將重新回到緩存區的起始位置。ALSA維護一個指針來指向硬件緩存以及應用程序緩存區中數據操作的當前位置。從內核外部看,我們只對應用程序的緩存區感興趣,所以本文只討論應用程序緩存區。

?

?? ? ?應用程序緩存區的大小可以通過ALSA庫函數調用來控制。緩存區可以很大,一次傳輸操作可能會導致不可接受的延遲,我們把它稱為延時(latency)。為了解決這個問題,ALSA將緩存區拆分成一系列周期(period)(OSS/Free中叫片斷fragments).ALSA以period為單元來傳送數據。

?

?? ? ?一個周期(period)存儲一些幀(frames)。每一幀包含時間上一個點所抓取的樣本。對于立體聲設備,一個幀會包含兩個信道上的樣本。圖1展示了分解過程:一個緩存區分解成周期,然后是幀,然后是樣本。圖中包含一些假定的數值。圖中左右信道信息被交替地存儲在一個幀內。這稱為交錯(interleaved)模式。在非交錯模式中,一個信道的所有樣本數據存儲在另外一個信道的數據之后。

設置參數,參數設置不當將會導致音頻設備無法正常工作。在設置參數前,我們需要了解一下各個參數的含義以及一些基本概念。

樣本長度(sample):樣本是記錄音頻數據最基本的單位,常見的有8位和16位。

?

通道數(channel):該參數為1表示單聲道,2則是立體聲。

楨(frame):楨記錄了一個聲音單元,其長度為樣本長度與通道數的乘積。

采樣率(rate):每秒鐘采樣次數,該次數是針對楨而言。

周期(period):音頻設備一次處理所需要的楨數,對于音頻設備的數據訪問以及音頻數據的存儲,都是以此為單位。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Fiddler4入門——手機抓包

一、下載工具包 百度搜索”fiddler 下載“ ,安裝最新版本 下載的軟件安裝包為“fiddler_4.6.20171.26113_setup.exe”格式,雙擊安裝。安裝成功,在“開始”-“所有程序”,就會看見這樣的圖標,若是常用的話,也…

Node.js Performance

https://blog.risingstack.com/node-js-performance-monitoring-with-prometheus/轉載于:https://www.cnblogs.com/skating/p/7544838.html

(五)DOM4j進行XML文件的解析及生成

DOM4j本身還是需要使用SAX建立解析器,然后通過文檔依次找到根節點,再通過根節點查找每一個節點的內容. 1.寫操作 import java.io.File;import java.io.FileOutputStream;import java.util.Iterator; import org.dom4j.Document;import org.dom4j.Documen…

Linux系統基礎.作業

要求以root用戶登錄系統,右擊桌面打開終端,查看當前登陸Linux系統所使用的用戶名 查看哪些用戶在系統上工作 修改當前時間為2018年8月26號11:28 查看2015年10月份日歷 使用兩種方法查看ls命令的使用說明 清除屏幕 ctrlL使用“useradd tom”命令新建tom用…

Alsa中PCM參數設置

分類: LINUX 1) PCM設備的句柄.2) 指定同時可供回放或截獲的PCM流的方向3) 提供一些關于我們想要使用的設置選項的信息,比如緩沖區大小,采樣率,PCM數據格式等4) 檢查硬件是否支持設置選項.4.1) 初始化PCM變量4.2) 分配hwparams結構4.3) 打開PCM設備4.4) 以聲卡的全部…

java5

java基礎(五)命名規則: 名字中只能包含->字母、_、數字、$,且開頭不能為數字包名必須都小寫文件名首字母和后面英文文件單詞首字母都要大寫變量和方法名 首字母小寫,后面英文單詞首字母大寫java中的方法&#xff1a…

最新歷史版本 :H.265

原來對264有深入的研究,現在想詳細了解下265啦,愿265盡快廣泛的使用起來,人們可以享受無處不在的視覺盛宴。 H.265是ITU-T VCEG 繼H.264之后所制定的新的視頻編碼標準。H.265標準圍繞著現有的視頻編碼標準H.264,保留原來的某些技術…

凱撒密碼、GDP格式化輸出、99乘法表

1.愷撒密碼的編碼 sinput(請輸入明文:) print(密文為:) for i in s:print(chr(ord(i)3),end)運行結果為: 2.國家名稱 GDP總量(人民幣億元) 中國 ¥765873.4375 澳大利亞 ¥ 78312.4375 (國家名稱左對齊&am…

【BZOJ3453】XLkxc [拉格朗日插值法]

XLkxc Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss]Description 給定 k,a,n,d,p  f(i)1^k2^k3^k......i^k  g(x)f(1)f(2)f(3)....f(x)  求(g(a)g(ad)g(a2d)......g(and))mod p Input 第一行數據組數,(保證小于6)  以下每行四個整數 …

hive安裝

雷頓學院大數據雷頓學院大數據:http://www.leidun.site/hive安裝下載hivehttp://mirror.bit.edu.cn/apache/hive/下載后解壓配置命令將hive加入命令vim ~/.bash_profile添加如下命令export HIVE_HOME/usr/local/Cellar/hive/1.2.1/libexec保存文件mysql數據庫驅動cu…

JavaFX常用匯總

1. 描述備注 1.1 參考教程 博客 易百教程 JavaFX中國 1.5 安裝 a). 在線安裝e(fx)clipse插件 b). 下載安裝SceneBuilder c). eclipse重啟以后,windows->preference->javaFx->SceneBuilder executable選擇 上一步中安裝后的exe文件 2. 快速入門示例-MVC a). *.fxml文件…

Alsa驅動分析(轉)

1. Abstract 2. Introduction 3. 音頻驅動框架介紹 3.1 音頻設備的注冊 3.2 音頻驅動的注冊 3.2.1 Probe函數的調用 3.2.2 Soc_probe函數 4. 通常的使用流程的分析 4.1.1 open過程介紹 4.1.2 snd_pcm_hw_params流程分析 4.1.3 …

bzoj2744[HEOI2012]朋友圈

題目鏈接:bzoj2744 題目大意: 兩個國家看成是AB兩國,現在是兩個國家的描述: 1.A國:每個人都有一個友善值,當兩個A國人的友善值a、b,如果a xor b mod 21,那么這兩個人都是朋友&#x…

Linux之父為過去的言行道歉,宣布離開社區反思

9月17日,Linux 4.19-rc4發布,成為Linux 4.19最新的開發測試內核。這是現階段一個相當常規的內核更新,但令人震驚的是,Linux之父Linus Torvalds宣布將暫時離開內核維護社區,Greg Kroah-Hartman將接管接下來的Linux 4.19…

[BZOJ] 1620: [Usaco2008 Nov]Time Management 時間管理

1620: [Usaco2008 Nov]Time Management 時間管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 850 Solved: 539[Submit][Status][Discuss]Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs con…

面試-接口和純虛類的區別

相關資料:1.https://zhidao.baidu.com/question/91157279.html 純虛類:1.一個子類只能繼承一個抽象類(虛類)。2.一個抽象類可以有構造方法。 3.一個抽象類中的方法不一定是抽象方法,即其中的方法可以有實現(有方法體&a…

TCP研究

tcp協議本身是可靠的,并不等于應用程序用tcp發送數據就一定是可靠的.不管是否阻塞,send發送的大小,并不代表對端recv到多少的數據 在阻塞模式下, send函數的過程是將應用程序請求發送的數據拷貝到發送緩存中發送并得到確認后再返回.但由于發送緩存的存在,表現為:如果發送緩存大…

DDR工作原理

DDR SDRAM全稱為Double Data Rate SDRAM,中文名為“雙倍數據流SDRAM”。DDR SDRAM在原有的SDRAM的基礎上改進而來。也正因為如此,DDR能夠憑借著轉產成本優勢來打敗昔日的對手RDRAM,成為當今的主流。本文只著重講講DDR的原理和DDR SDRAM相對于…

8.1 文件查找local;find使用

文件查找: 在文件系統上查找符合條件的文件。 文件查找:locate, find 非實時查找(數據庫查找):locate實時查找:find locate 1 查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db2 依賴于事先構建的索引 索引的構建是在…

hdu 5273 Dylans loves sequence 逆序數 區間dp

點擊打開鏈接 題意&#xff1a;給n個數&#xff0c;q次詢問&#xff0c;&#xff08;L&#xff0c;R&#xff09;區間內的逆序數。 思路&#xff1a; 區間dp 代碼一&#xff1a; 1 #include <bits/stdc.h>2 using namespace std;3 typedef long long ll;4 const int maxn…