Android 音訊系統
http://blog.csdn.net/qianjin0703/article/details/6387662
0. 專用術語
1. 物理結構
2. 系統架構
本文基於Freescale IMX平臺Codec ALC5625為例。
0. 專用術語
ASLA - Advanced Sound Linux Architecture
OSS - 以前的Linux音訊體系結構,被ASLA取代併兼容
Codec - Coder/Decoder
I2S/PCM/AC97 - Codec與CPU間音訊的通訊協議/介面/匯流排
DAI - Digital Audio Interface 其實就是I2S/PCM/AC97
DAC - Digit to Analog Conversion
ADC - Analog to Digit Conversion
DSP - Digital Signal Processor
Mixer - 混音器,將來自不同通道的幾種音訊模擬訊號混合成一種模擬訊號
Mute - 消音,遮蔽訊號通道
PCM - Pulse Code Modulation 一種從音訊模擬訊號轉換成數字訊號的技術,區別於PCM音訊通訊協議
取樣頻率 - ADC的頻率,每秒取樣的次數,典型值如44.1KHZ
量化精度 - 比如24bit,就是將音訊模擬訊號按照2的24次方進行等分
SSI - Serial Sound Interface
DAPM - Dynamic Audio Power Management
1. 物理結構
音訊編解碼器Codec負責處理音訊資訊,包括ADC,DAC,Mixer,DSP,輸入輸出以及音量控制等所有與音訊相關的功能。
Codec與處理器之間通過I2C匯流排和數字音訊介面DAI進行通訊。
I2C匯流排 - 實現對Codec暫存器資料的讀寫。
DAI - 實現音訊資料在CPU和Codec間的通訊。
以Codec作為研究物件,它的輸入有Mic(Microphone),PhoneIn電話訊號等,輸出有耳機HP(HeadPhone),揚聲器Speaker和PhoneOut電話訊號。另外需要注意在Codec與CPU端間也有音訊數字訊號的輸入輸出。
1) 播放音樂
2) 錄音
3) 電話
--- 打電話 --- --- 接聽---
4) 通過藍芽打電話
--- 打電話 --- --- 接聽---
2. 系統架構
Android的音訊系統擁有一個比較標準和健全的架構,從上層應用,java framework服務AudioMananger,本地服務AudioFlinger,抽象層AlsaHAL,本地庫,再呼叫external的Alsa-lib外部支援庫,最後到底層驅動的codec,可謂"五臟俱全"。
以系統啟動AuidoFlinger為例,簡要窺探Alsa Sound的組織架構。
Java服務AudioManager作為服務端,本地服務AudioFlinger作為客戶端,兩者通過Binder機制互動。AudioFlinger對硬體功能的具體實現(比如setMode設定電話/藍芽/錄音等模式)交給硬體抽象層AlsaHAL完成。抽象層可以呼叫本地標準介面,比如mASLADevice->route,或者直接呼叫Alsa-lib庫去操作底層驅動。
Linux的音訊驅動結構相對複雜,原始碼位於核心目錄下的/sound/soc/,其中/codec資料夾下存放與平臺無關的編解碼器驅動,/imx資料夾下存放於freescale imx平臺相關的音訊驅動,主要可分為SSI驅動和DAI驅動。
以音效卡驅動的資料結構為切入點分析,
1) struct snd_soc_codec - 由與平臺無關的codec驅動實現。
2) struct snd_soc_platform - 由與imx平臺相關的DAI驅動實現,主要實現了音訊資料的DMA傳輸功能。
3) struct snd_soc_dai_link - 將平臺相關的DAI與平臺無關的codec聯絡起來。
相關推薦
Android音訊系統適配《C++功能層》
繼上一篇Android音訊系統適配《java邏輯層》之後,我們需要知道整個功能介面的實現路由,其實相對而言要簡單很多。上一篇有提到AudioManager.java所呼叫的介面的最終實現是在AudioSystem.java。本篇我們就從AudioSystem.java開始。
android音訊系統簡介
音訊基礎知識 聲音有哪些重要屬性呢? 響度(Loudness) 響度就是人類可以感知到的各種聲音的大小,也就是音量。響度與聲波的振幅有直接關係。 音調(Pitch) 音調與聲音的頻率有關係,當聲音的頻率越大時,人耳所感知到的音調就越高,否則就越低。 音色(Qualit
android 音訊系統/音效卡驅動 codec
0. 專用術語 1. 物理結構 2. 系統架構 本文基於Freescale IMX平臺Codec ALC5625為例。 0. 專用術語 ASLA - Advanced Sound Linux Architecture OSS - 以前的Linux音訊體系結構,被ASL
Android音訊系統框架簡述
情景1:音效卡驅動比較複雜,提供一個lib層對驅動進行封裝,APP調驅動.。框圖如下: 情景2:廠家對音效卡的配置更瞭解,設定的引數在HAL層,HAL呼叫lib,傳入不同引數,提供給APP.框圖如下: 情景3: 如果多個APP播放聲音,把聲音合成播放,則多了AudioFlinger層。
ANDROID音訊系統散記之三:resample-2
這篇是承接上一篇提到的底層resample處理,以Samsung的tiny alsa-lib為例說明。 tiny alsa-lib 這個tiny alsa-lib位於android2.3.1-gingerbread/device/samsung/crespo/libau
Android 音訊系統:從 AudioTrack 到 AudioFlinger
1. Android 音訊框架概述 Audio 是整個 Android 平臺非常重要的一個組成部分,負責音訊資料的採集和輸出、音訊流的控制、音訊裝置的管理、音量調節等,主要包括如下部分: Audio Application Framework:音訊
Android音訊系統之音訊框架
Android的音訊系統在很長一段時間內都是外界詬病的焦點。的確,早期的android系統在音訊處理上相比於iOS有一定的差距,這也是很多專業的音樂播放軟體開發商沒有推出Android平臺產品的一個重要原因。但這並不代表它的音訊框架一無是處,相反,基於Linux系統的
Android 音訊系統
http://blog.csdn.net/qianjin0703/article/details/6387662 0. 專用術語 1. 物理結構 2. 系統架構 本文基於Freescale IMX平臺Codec ALC5625為例。 0. 專用術語 ASLA - Advanced Sound Linux
Android音訊系統
Muti-media時多種形式的媒體內容(文字、音訊、視訊、圖片、動畫)的組合。多媒體可以是“MediaPlayer和MediaRecorder”的實現,Android的一大特性時高度封裝,提高了軟體的開發效率。這也使得整個多媒體系統顯得異常龐大,各種類定義、C
Android音訊系統之音訊基礎
轉載請註明:LXS, http://blog.csdn.net/uiop78uiop78/article/details/8787779 對於一部嵌入式裝置來說,除了若干基礎功能外(比如手機通話、簡訊),最重要的可能就是多媒體了——那麼一個最簡單的問題,什麼是多媒體呢?
ANDROID音訊系統散記之二:resample
預設的情況下,Android放音的取樣率固定為44.1khz,錄音的取樣率固定為8khz,因此底層的音訊裝置驅動只需設定好這兩個固定的取樣率。如果上層傳過來的取樣率與其不符的話,則Android Framework層會對音訊流做resample(重取樣)處理。 Resamp
Android音訊系統之AudioFlinger(一)
在上面的框架圖中,我們可以看到AudioFlinger(下面簡稱AF)是整個音訊系統的核心與難點。作為Android系統中的音訊中樞,它同時也是一個系統服務,啟到承上(為上層提供訪問介面)啟下(通過HAL來管理音訊裝置)的作用。只有理解了AudioFlinger,才能以此
android 音訊系統—各模組
android 音訊系統java部分程式碼閱讀 音訊系統java相關的程式碼在./frameworks/base/media/java/android/media/目錄下 主要有如下檔案: AudioManager.java 為上層應用提供了聲音設定管理介面. AudioS
ANDROID音訊系統散記之二:resample-1
Android上的resample處理 預設的情況下,Android放音的取樣率固定為44.1khz,錄音的取樣率固定為8khz,因此底層的音訊裝置驅動只需設定好這兩個固定的取樣率。如果上層傳過來的取樣率與其不符的話,則Android Framework層會對音訊流做resample(重取樣)處理。 Re
Android音訊系統學習筆記
1、配置檔案/system/etc/asound.conf alsa體系提供了這樣一種機制:應用層直接改變音訊codec的暫存器,具體而言:linux驅動中建立snd_kcontrol_new控制結構,並關聯到codec暫存器,asound.conf檔案通過
android 音訊系統java部分程式碼閱讀
音訊系統java相關的程式碼在./frameworks/base/media/java/android/media/目錄下主要有如下檔案:AudioManager.java為上層應用提供了聲音設定管理介面.AudioService.java 音訊設定服務, 它在Syst
Android ALSA音訊系統架構分析(1)----從Loopback瞭解Audio
/************************************ Author:劉江明 * Environment:MTK Android 6.0* Date:2017年05月25日***********************************/
Android(4.4)音訊系統之mediaserver服務啟動
在system/core/rootdir/init.rc中有這樣一段:service media /system/bin/mediaserver class main user media group audio camera inet net_bt net
打造一個全命令行的Android構建系統
命令 匹配 pda 符號鏈接 創建 ack https vim ott IDE都是給小白程序猿的,大牛級別的程序猿一定是命令行控,終端控,你看大牛都是使用vim,emacs 就一切搞定” 這話說的盡管有些絕對。可是也不無道理。做開發這行要想效率高,自己主動化還真是
Android常用系統廣播
參考 -s locale pro ebo heads use man 重啟 查看詳情://關閉或打開飛行模式時的廣播Intent.ACTION_AIRPLANE_M;//充電狀態,或者電池的電量發生變化;//電池的充電狀態、電荷級別改變,不能通過組建聲;Intent.ACT