Android13 Audio框架

一、Android 13音頻代碼結構

1、framework:

android/frameworks/base

1.AudioManager.java :音頻管理器,音量調節、音量UI、設置和獲取參數等控制流的對外API

2.AudioService.java :音頻系統服務(java層),音量調節、音量UI、音頻設備插拔等控制流的具體實現

3.AudioSystem.java :音頻控制的入口,是native層對上服務的接口

android/frameworks/av

1.AudioFlinger.cpp :音頻系統的核心一,承擔音頻數據流AudioTrack和AudioRecord的混音、重采、輸送等責任

2.AudioPolicyService.cpp :音頻系統的核心二,負責音頻策略,包含Audio HAL的加載,音頻路由的選擇等

2、HAL

android/hardware/aw/audio/ :AudioFlinger與音頻驅動之間的對接層,匹配android系統與硬件的關鍵層

3、整體框圖

其中運行在AudioServer進程中的AudioFlinger和AudioPolicyService,以及運行在SystemServer進程中的AudioService這三個模塊是Android音頻子系統的核心

(1)播放

通過C++類AudioTrack將音頻數據寫入AudioTrack和AudioFlinger都能訪問的共享內存中,該共享內存由audio_track_cblk_t管理。AudioFlinger在接收到數據后,調過自己的播放線程輸出

(2)錄音:

硬件設備采集PCM數據,AudioFlinger使用AudioStreamIn將數據讀取到共享內存,AudioRecord則從共享內存中在讀取這些數據。

HAL----->AudioFlinger------->共享內存------>AudioRecord

二、ASoC音頻驅動構成

1、ASoC音頻驅動由三部分構成:platform,codec,machine

(1)Machine

????????單獨的 Platform 和 Codec 驅動是不能工作的,它必須由 Machine 驅動把它們結合在一起才能完成整個設備的音頻處理工作。

Machine :可以理解為對開發板的抽象,開發板可能包括多個聲卡,對應Machine部分包含多個link。

dai_link:machine驅動中定義的音頻數據鏈路,它指定用到的cpu_dai、codec_dai

(2)Platform

????????它包含了該 SoC 平臺的音頻 DMA 和音頻接口的配置和控制(I2S,PCM 等等);一般不包含與板子或 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進行交互。

cpu dai:在嵌入式系統里面通常指CPU的I2S、PCM總線控制器,負責將音頻數據從I2S tx FIFO搬運到CODEC(回放的情形,錄制則方向相反)。cpu_dai通過snd_soc_register_dai()來注冊。

(3)Codec

????????它包含了一些音頻的控件 (Controls),音頻接口,DAMP(動態音頻電源管理)的定義和某些 Codec IO 功能。為了 保證硬件無關性,任何特定于平臺和機器的代碼都要移到 Platform 和 Machine 驅動中。

2、PCM數據流

回放

錄音

3、ASoC音頻驅動注冊流程

?主要步驟為下述部分:

4、 ALSA設備文件結構??

contro1C0   ------> ? ? ? ? ? ? ?用于聲卡的控制,例如通道選擇,混音,麥克風的控制等。pcmC0D0c    ------> ? ? ? ? ? ? ?用于錄音的pcm設備pcmC0D0p    ------> ? ? ? ? ? ? ?用于播放的pcm設備seq ??????  ------> ? ? ? ? ? ? ?音序器timer?????? ------> ? ? ? ? ? ? ? 定時器

? ? ? ? 其中,C0D0代表的是聲卡0中的設備0,pcmC0D0c最后一個c代表capture,pcmC0D0p最后一個p代表playback,這些都是alsa-driver中的命名規則。

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

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

相關文章

多模態論文閱讀-LLaVA

Visual Instruction Tuning Abstract1. Introduction2. Related Work3. GPT-assisted Visual Instruction Data Generation4. Visual Instruction Tuning4.1 Architecture4.2 Training 5 Experiments5.1 Multimodal Chatchot5.2 ScienceQA 6 Conclusion Abstract 使用機器生成…

JS中判斷是否存在逗號,如果存在給去掉

.includes() 方法判斷是否存在 split("需要去掉的字符串").join(" ") 去重的方法 去重復 劃分后拼接

網絡——DHCP服務器、DNS服務器實驗

網絡——DHCP服務器、DNS服務器實驗 一、DHCP服務器實驗 DHCP——動態主機配置協議,用來管理ip地址的分配。網絡中的每臺計算機都有至少一個ip地址。在Windows網絡連接對話框中可以設置成自動獲取ip地址,這樣主機作為DHCP client就可以自動從DHCP server獲取ip地址了。 DHC…

live555學習 - 環境準備

環境:Ubuntu 16.04.7 ffmpeg-6.1 1 代碼下載 最新版本: http://www.live555.com/liveMedia/public/ 歷史版本下載 https://download.videolan.org/pub/contrib/live555/ 選擇版本live.2023.01.19.tar.gz ps:沒有選擇新版本是新版本在…

數據庫優化建議

盡量控制單表數據量的大小,建議控制在 500 萬以內 500 萬并不是 MySQL 數據庫的限制,過大會造成修改表結構,備份,恢復都會有很大的問題。可以用歷史數據歸檔(應用于日志數據),分庫分表&#xf…

阿里開源的Java診斷利器Arthas

一.什么是Arthas 1.為什么需要Arthas 通常,本地開發環境無法訪問生產環境。如果在生產環境中遇到問題,則無法使用 IDE 遠程調試。更糟糕的是,在生產環境中調試是不可接受的,因為它會暫停所有線程,導致服務暫停。 開…

探索Apple Vision Pro:創新技術帶來的多彩應用世界

Apple Vision Pro是一款具有前沿技術的設備,可以與現實世界進行交互,讓用戶在虛擬世界中享受各種應用。以下是一些值得注意的Vision Pro應用: AR演示環境:Vision Pro上的AR應用主要是基于AR的演示環境,這些應用可以讓用戶在現實世界中體驗虛擬世界。游戲:Vision Pro上有一…

c語言統計字符

本題要求編寫程序,輸入10個字符,統計其中英文字母、空格或回車、數字字符和其他字符的個數。 輸入格式: 輸入為10個字符。最后一個回車表示輸入結束,不算在內。 輸出格式: 在一行內按照 letter 英文字母個數, blank 空格或回車個數, d…

鴻蒙Harmony應用開發—ArkTS聲明式開發(鼠標事件)

在鼠標的單個動作觸發多個事件時,事件的順序是固定的,鼠標事件默認透傳。 說明: 從API Version 8開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。目前僅支持通過外接鼠標觸發。 onHover onHover(event: …

vue中element-ui中的el-button自定義icon圖標

實現&#xff1a; button的icon屬性自定義一個圖標名稱&#xff0c;這個自定義的圖標名稱會默認添加到button下i標簽的class上&#xff0c;我們只需要設置i標簽的樣式就可以了。 1. 控制臺顯示的代碼 2 .圖片展示 3. 按鈕上使用自定義的icon 完整代碼&#xff1a; <el-but…

postman切換成黑色主題

postman安裝以后默認是白色背景&#xff0c;如果想要切換成黑色的&#xff0c;大家可以按照下圖箭頭指示來操作。 1打開設置 2在Themes頁面選擇黑色主題

物聯網常見協議篇

在物聯網環境中&#xff0c;物聯網協議承擔著關鍵作用&#xff0c;而新手了解物聯網協議如傳輸協議、通訊協議和行業協議等。 一、物聯網協議 物聯網協議是物聯網環境中的關鍵組成部分&#xff0c;它承擔著設備間通信和數據傳輸的重要任務。這些協議根據其作用的不同&#xff…

Day06:基礎入門-抓包技術HTTPS協議APP小程序PC應用WEB轉發聯動

目錄 HTTP/HTTPS協議抓包工具 Web瀏覽器抓包 APP應用抓包 WX小程序&PC應用抓包 思維導圖 章節知識點&#xff1a; 應用架構&#xff1a;Web/APP/云應用/三方服務/負載均衡等 安全產品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墻/殺毒等 滲透命令&#xff1a;文件上傳下載…

關于webpack的一些記錄

文章目錄 webpack基礎配置開發模式的一些配置實際生產的一些優化提升開發體驗提升打包構建速度減少代碼體積優化代碼運行性能 webpack 是一個用于現代 JavaScript 應用程序的靜態模塊打包工具。當 webpack 處理應用程序時&#xff0c;它會在內部構建一個依賴圖(dependency grap…

最佳實踐:Websocket 長連接狀態如何保持

WebSocket 是一種支持通過單個 TCP 連接進行全雙工通信的協議&#xff0c;相較于傳統的 HTTP 協議&#xff0c;它更適合需要實時交互的應用場景。此協議在現代 Web 應用中扮演著至關重要的角色&#xff0c;尤其是在需要實時更新和通信的場合下維持持久連接。本文將探討 WebSock…

圖神經網絡/生物信息交叉 Paper reading

目錄 1. SMILES字符串 2. 利用圖馬爾可夫神經網絡&#xff08;GMNN&#xff09;來進行關聯性預測 3. 圖池化算法 4. 合成致死性&#xff08;SL&#xff09;預測 5. 蛋白質溶解度研究 6. 藥物疾病關聯預測&#xff08;DAA&#xff09; 7. tRNA-疾病關系預測 8.異構體功能…

安卓手機安裝termux、kali linux及基本配置

相關閱讀&#xff1a;Termux 高級終端安裝使用配置教程 | 國光 百度安全驗證 該文安裝的 kali liunx 應該是簡易版的&#xff0c;沒有相關工具 一、下載安裝termux 建議通過 f-droid 應用市場下載鏈接termux&#xff0c;點擊即直接下載。 二、配置termux 1.更換鏡像源 te…

如何訪問內網服務器?

訪問內網服務器是在網絡架構中常見的需求。內網服務器是指在一個局域網中運行的服務器&#xff0c;可以提供各種服務&#xff0c;如文件共享、網站托管等。由于安全性的考慮&#xff0c;內網服務器一般不直接暴露在公網中&#xff0c;所以需要通過特定的方法來訪問。 一種常見的…

1. 開發環境搭建

文章目錄 前端 前后端分離項目 前端&#xff1a;管理端web頁面 &#xff0c; 用戶端小程序后端&#xff1a;SpringBoot 前端 基于Nginx運行

TypeError: `dumps_kwargs` keyword arguments are no longer supported

TypeError: dumps_kwargs keyword arguments are no longer supported 1. 問題描述2. 解決方法 1. 問題描述 使用 FastChat 啟動私有大語言模型&#xff0c;通過一些 UI 工具進行訪問時&#xff0c;報以下錯誤。 略 2024-02-29 09:26:14 | ERROR | stderr | yield f"…