ALSA音訊工具編譯安裝
========================================================================
ALSA音訊工具編譯安裝
========================================================================
Step 1. 設定 capture steam數目 在alsa_xxx_init()
err = snd_pcm_new(xxx[pcm_idx].card,
pcm_names[pcm_idx], // PCM ID string
1. Codec簡介
在移動設備中,Codec的作用可以歸結為4種,分別是:
ASoC 對Codec的這些功能都定義好了一些列相應的介面,以方便地對Codec進行控制。ASoC對Codec驅動的一個基本要求是:驅動程式的程式碼必須要做到平臺無關性,以方便同一個Codec的程式碼不經修改即可用在不同的平臺上。以下的討論基於wolfson的Codec晶片WM8994,kernel的版本3.3.x。
前面一節的內容我們提到,ASoC被分為Machine、Platform和Codec三大部分,其中的Machine驅動負責Platform和 Codec之間的耦合以及部分和設備或板子特定的程式碼,再次引用上一節的內容:Machine驅動負責處理機器特有的一些控制項和音訊事件(例如,當播放音 頻時,需要先行打開一個放大器);單獨的Platform和Codec驅動是不能工作的,它必須由Machine驅動把它們結合在一起才能完成整個設備的 音訊處理工作。
ASoC的一切都從Machine驅動開始,包括音效卡的註冊,綁定Platform和Codec驅動等等,下面就讓我們從Machine驅動開始討論吧。
1. ASoC的由來
ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援嵌入式處理器和移動設備中的音訊Codec的一套軟體體系。在ASoc出現之前,核心對於SoC中的音訊已經有部分的支援,不過會有一些局限性:
ASoC正是為瞭解決上述種種問題而提出的,目前已經被整合至核心的程式碼樹中:sound/soc。ASoC不能單獨存在,他只是建立在標準ALSA驅動上的一個它必須和標準的ALSA驅動框架相結合才能工作。
Control介面主要讓使用者空間的應用程式(alsa-lib)可以訪問和控制音訊codec晶片中的多路開關,滑動控制項等。對於Mixer(混音)來說,Control介面顯得尤為重要,從ALSA 0.9.x版本開始,所有的mixer工作都是通過control介面的API來實現的。
ALSA已經為AC97定義了完整的控制介面模型,如果你的Codec晶片只支援AC97介面,你可以不用關心本節的內容。
1. PCM是什麼
一. 概述
ALSA是Advanced Linux Sound Architecture 的縮寫,目前已經成為了linux的主流音訊體系結構,想瞭解更多的關於ALSA的這一開源專案的資訊和知識,請查看以下網址:http://www.alsa-project.org/。
在內核設備驅動層,ALSA提供了alsa-driver,同時在應用層,ALSA為我們提供了alsa-lib,應用程式只要調用alsa-lib提供的API,即可以完成對底層音訊硬體的控制。
1. Platform驅動在ASoC中的作用
前面幾章內容已經說過,ASoC被分為Machine,Platform和Codec三大部件,Platform驅動的主要作用是完成音訊資料的管理,最終通過CPU的數位音訊介面(DAI)把音訊資料傳送給Codec進行處理,最終由Codec輸出驅動耳機或者是喇叭的音信信號。在具體實現上,ASoC有把Platform驅動分為兩個部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver負責管理音訊資料,把音訊資料通過dma或其他操作傳送至cpu dai中,dai_driver則主要完成cpu一側的dai的參數配置,同時也會通過一定的途徑把必要的dma等參數與 snd_soc_platform_driver進行交互。
ALSA是Linux音效卡驅動的架構,下面基於linux-2.6.32描述下ALSA系統架構。ALSA系統可以分為alsa-lib、 alsa-driver,而alsa-driver又分為core層和底層硬體層。作為開發者,我們只需移植底層硬體層,根據自己硬體特性,實現底層的移 植。而core層基本屬於ALSA標準框架,不需要自己實現。介紹ALSA框架,下面是大體框架圖。
period(週期):硬體中中斷間的間隔時間。它表示輸入延時。
音效卡介面中有一個指標來指示音效卡硬體緩存區中當前的讀寫位置。只要介面在運行,這個指標將迴圈地指向緩存區中的某個位置。
輸入: PulseAudio, Jack, GStreamer, Xine, SDL, ESD
輸出: Hardware, OSS
首先,讓我們從了解alsa(Advanced Linux Sound Architecture, 高級linux音頻架構)開始。 alsa直接和內核通信,並提供音頻接口功能以供調用。但是,似乎alsa做了“比當好一個驅動程序”更多的事情:為系統混音,為其他程序提供音頻輸出輸出接口,為程序員提供api。他的目標好像要同Windows的ASIO或者OS X的CoreAudio一樣,作為一個底層而穩定的後台程序運行。