Android audio系統五 AudioPolicy 策略配置詳解

引用:Android 音頻策略配置文件解析流程

audio_policy_configuration.xml 是 Android 音頻系統的核心配置文件,它定義了音頻硬件接口、設備路由和基本策略。下面我將詳細介紹這個文件的結構、關鍵配置項和實際應用。audio_policy_configuration.xml 是 Android 音頻系統的核心配置文件,它定義了音頻硬件接口、設備路由和基本策略。下面將詳細介紹這個文件的結構、關鍵配置項和實際應用。

1. 文件基本結構

<audioPolicyConfiguration version="1.0"><globalConfiguration speaker_drc_enabled="true"call_volume_behavior="1"/><modules><!-- 音頻模塊配置 --><module name="primary" halVersion="3.0"><!-- 設備、接口和路由配置 --></module><module name="usb" halVersion="3.0"><!-- USB音頻模塊配置 --></module></modules>
</audioPolicyConfiguration>

2. 主要配置部分詳解

(1)globalConfiguration(全局配置)
speaker_drc_enabled 是否啟用揚聲器動態范圍控制 true/false
call_volume_behavior 通話音量行為模式 0-2
volume_down_mute 音量減到最低時是否靜音 true/false

(2)modules(音頻模塊)
每個module代表一個音頻硬件子系統:

<module name="primary" halVersion="3.0"><attachedDevices><item>Speaker</item><item>Built-In Mic</item></attachedDevices><defaultOutputDevice>Speaker</defaultOutputDevice><mixPorts><!-- 混音端口配置 --></mixPorts><devicePorts><!-- 物理設備端口配置 --></devicePorts><routes><!-- 路由規則配置 --></routes>
</module>

attachedDevices 默認連接的設備,常見的類型:Speaker、Built-In Mic、Wired Headset等

mixPorts 混音端口
定義音頻處理接口:

<mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort><mixPort name="record_24bit" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"samplingRates="48000,96000" channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
</mixPort>
  • role:source(輸出)/sink(輸入)
  • flags:特殊標志,如AUDIO_OUTPUT_FLAG_PRIMARY(主輸出)
  • profile:支持的音頻格式、采樣率和聲道配置

devicePorts(設備端口)
定義物理音頻設備:

<devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort><devicePort tagName="Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>

常見設備類型:

  • 輸出設備:AUDIO_DEVICE_OUT_SPEAKER、AUDIO_DEVICE_OUT_WIRED_HEADPHONE
  • 輸入設備:AUDIO_DEVICE_IN_BUILTIN_MIC、AUDIO_DEVICE_IN_WIRED_HEADSET

routes(路由規則)
定義音頻流如何從mixPort路由到devicePort:

<routes><route type="mix" sink="Speaker" sources="primary output"/><route type="mix" sink="Headphones" sources="primary output"/><route type="mix" sink="record_24bit" sources="Built-In Mic"/>
</routes>

3. 完整配置示例

<audioPolicyConfiguration version="1.0"><globalConfiguration speaker_drc_enabled="true"call_volume_behavior="1"/><modules><module name="primary" halVersion="3.0"><attachedDevices><item>Speaker</item><item>Built-In Mic</item></attachedDevices><defaultOutputDevice>Speaker</defaultOutputDevice><mixPorts><mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></mixPort><mixPort name="deep_buffer" role="source" flags="AUDIO_OUTPUT_FLAG_DEEP_BUFFER"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></mixPort><mixPort name="record_24bit" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"samplingRates="48000,96000" channelMasks="AUDIO_CHANNEL_IN_STEREO"/></mixPort></mixPorts><devicePorts><devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></devicePort><devicePort tagName="Headphones" type="AUDIO_DEVICE_OUT_WIRED_HEADPHONE" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></devicePort><devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/></devicePort></devicePorts><routes><route type="mix" sink="Speaker" sources="primary output,deep_buffer"/><route type="mix" sink="Headphones" sources="primary output,deep_buffer"/><route type="mix" sink="record_24bit" sources="Built-In Mic"/></routes></module></modules>
</audioPolicyConfiguration>

4. 常見配置場景

(1)添加USB音頻支持

<module name="usb" halVersion="3.0"><attachedDevices><item>USB Device</item></attachedDevices><mixPorts><mixPort name="usb output" role="source"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="44100,48000,96000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></mixPort></mixPorts><devicePorts><devicePort tagName="USB Device" type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink"><profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="44100,48000,96000"channelMasks="AUDIO_CHANNEL_OUT_STEREO"/></devicePort></devicePorts><routes><route type="mix" sink="USB Device" sources="usb output"/></routes>
</module>

(2)配置多采樣率支持

<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"samplingRates="44100,48000,96000,192000"channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_5POINT1"/>

5. 調試技巧

  • 查看當前配置:
adb shell dumpsys media.audio_policy
  • 檢查音頻路由:
adb shell dumpsys audio
  • 驗證配置文件:
adb shell ls -l /vendor/etc/audio_policy_configuration.xml

注:大多數廠商都有自定義的配置文件,不使用vendor下的原生文件

  • 重新加載配置(需要root):
adb shell killall audioserver

audio_policy_configuration.xml配置文件修改后,必須重啟audioserver才能被重新加載生效

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

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

相關文章

4.21日學習--引用

引用本質&#xff1a;引用的本質在 c 內部實現是一個指針常量。 代碼中 int& ref a; 可以理解為 int* const ref &a;&#xff08;指針常量&#xff09;。 指針常量&#xff1a;指針指向不可變&#xff08;綁定 a 后&#xff0c;不能再指向其他變量&#xff09;&…

2.1 數據處理

1. 數據獲取方法 掌握公開數據集的使用、數據質量評估指標、了解常見的網絡爬蟲技術 &#x1f9e9; 一、公開數據集的使用 ? 常見平臺&#xff08;一定要熟&#xff09; 平臺簡介示例數據集Hugging Face Datasets專注 NLP、CV 領域的大模型訓練數據集庫IMDB、SQuAD、Common …

Qt QWidget和QML實現窗口拖動源碼分享

一、QWidget實現窗口拖動 .hpp QPoint pressedPoint; bool leftBtnPressed false;.cpp bool PetWidget::eventFilter(QObject *obj, QEvent *event) {if(obj this){if(event->type() QEvent::MouseButtonPress){QMouseEvent* e static_cast<QMouseEvent *>(event)…

在pycharm中搭建yolo11分類檢測系統--PyQt5學習(二)

第二部分 測試本地pycharm通過程序連接遠程服務器autodl 模型的推理需要借助遠程服務器autodl&#xff0c;但是界面的運行是在pycharm中&#xff0c;我的設想是按鈕調用一個py文件就好了。 1. 本地運行PyQt5界面。 2. 當需要載入權重時&#xff0c;通過SSH連接到AutodL服務…

前端框架的“快閃“時代:我們該如何應對技術迭代的洪流?

引言&#xff1a;前端開發者的"框架疲勞" “上周剛學完Vue 3的組合式API&#xff0c;這周SolidJS又火了&#xff1f;”——這恐怕是許多前端開發者2023年的真實心聲。前端框架的迭代速度已經達到了令人目眩的程度&#xff0c;GitHub每日都有新框架誕生&#xff0c;n…

基于YOLO11的遛狗牽繩識別預警系統

基于YOLO11的遛狗牽繩識別預警系統 【包含內容】 【一】項目提供完整源代碼及詳細注釋 【二】系統設計思路與實現說明 【三】預訓練模型與數據集說明 【四】需要列出所有的類別&#xff0c;并且加入識別的類別數量&#xff1a;4類 0: dog (狗) 1: leash (牽引繩) 2: person …

Spring MVC 一個簡單的多文件上傳

原始代碼逐行解釋 PostMapping("/uploads") // ① 聲明處理POST請求&#xff0c;路徑為"/uploads" ResponseBody // ② 直接返回數據到響應體&#xff0c;不進行視圖解析 public String uploads(MultipartFile[] files, // …

C++繼承(最詳細)

目錄 1.繼承的概念以及定義 1.1 繼承的概念 1.2 繼承的定義 ?編輯 2.繼承中的作用域 3.基類和派生類間的轉換 4.派生類的默認成員函數 5.實現不被繼承的類 6.継承與友元 ?編輯 7.繼承與靜態成員 8.多繼承及其菱形繼承問題 8.2 虛繼承 8.3 來看一個小題 9.繼承…

day35圖像處理OpenCV

文章目錄 一、圖像預處理17 直方圖均衡化17.1繪制直方圖17.2直方圖均衡化1. 自適應直方圖均衡化2. 對比度受限的自適應直方圖均衡化3. 示例 19 模板匹配 一、圖像預處理 17 直方圖均衡化 直方圖&#xff1a;反映圖像像素分布的統計圖&#xff0c;橫坐標就是圖像像素的取值&…

【音視頻】FFmpeg內存模型

FFmpeg內存模型 從現有的Packet拷貝一個新Packet的時候&#xff0c;有兩種情況&#xff1a; 兩個Packet的buf引用的是同一數據緩存空間&#xff0c;這時候要注意數據緩存空間的釋放問題&#xff1b;兩個Packet的buf引用不同的數據緩存空間&#xff0c;每個Packet都有數據緩存…

1.2軟考系統架構設計師:系統架構的定義與作用 - 練習題附答案及超詳細解析

系統架構定義與作用綜合知識單選題 題目覆蓋核心概念、發展歷程、設計原則、評估標準及易混淆點&#xff0c;附答案解析&#xff1a; 1. 系統架構的標準定義源自于以下哪個標準&#xff1f; A. ISO/IEC 9126 B. IEEE 1471-2000 C. TOGAF 9.2 D. ITIL v4 答案&#xff1a;B 簡…

go語言對http協議的支持

http&#xff1a;無狀態協議&#xff0c;是互聯網中使用http使用http實現計算機和計算機之間的請求和響應 使用純文本方式發送和接受協議數據&#xff0c;不需要借助專門工具進行分析就知道協議中的數據 服務器端的幾個概念 Request&#xff1a;用戶請求的信息&#xff0c;用…

iscsi服務端安裝及配置

1. 安裝targetcli軟件包 yum install -y targetcli 2. 啟動target服務 systemctl start target systemctl enable target 3. 配置防火墻 firewall-cmd --add-port"3260/tcp" 3. 準備一個物理分區&#xff08;或者邏輯分區&#xff09;…

解決 MongoDB 查詢中的 `InvalidMongoDbApiUsageException` 錯誤

您在使用 Spring Data MongoDB 時遇到了 InvalidMongoDbApiUsageException 異常&#xff0c;錯誤信息如下&#xff1a; “由于 com.mongodb.BasicDocument 的限制&#xff0c;您無法添加第二個 ‘null’ 條件。查詢已經包含 ‘{ “KaTeX parse error: Expected }, got EOF at e…

一個關于相對速度的假想的故事-4

回到公式&#xff0c; 正寫速度疊加和倒寫速度疊加的倒寫相等&#xff0c;這就是這個表達式所要表達的意思。但倒寫疊加用的是減法&#xff0c;而正寫疊加用的是加法。當然是這樣&#xff0c;因為正寫疊加要的是單位時間上完成更遠的距離&#xff0c;而倒寫疊加說的是單位距離需…

重學React(一):描述UI

背景&#xff1a;React現在已經更新到19了&#xff0c;文檔地址也做了全面的更新&#xff0c;上一次系統性的學習還是在16-17的大版本更新。所以&#xff0c;現在就開始重新學習吧&#xff5e; 學習內容&#xff1a; React官網教程&#xff1a;https://zh-hans.react.dev/lea…

AI大模型:(二)2.3 預訓練自己的模型

目錄 1.預訓練原理 2.預訓練范式 1.未標注數據 2.標注數據 3.有正確答案、也有錯誤答案 3.手撕transform模型 3.1.transform模型代碼 3.2.訓練數據集 3.3.預訓練 3.4.推理 4.如何選擇模型

gradle可用的下載地址(免費)

這幾天接手一個老項目&#xff0c;想找gradle老版本的&#xff0c;但一搜&#xff0c;雖然在CSDN上搜索出來一堆&#xff0c;但都是收費&#xff0c;有些甚至要幾十積分(吃相有點難看了)。 我找了一個能訪問的地址&#xff0c;特地分享出來&#xff0c;有需要的自取&#xff01…

vue3新增特性

一、Vue 3 新增特性 1. Composition API 概述: Composition API 提供了一種更靈活和強大的方式來組織和復用邏輯。適用于復雜組件和邏輯復用場景。主要功能: setup 函數:組件的入口點,用于定義響應式數據、方法、生命周期鉤子等。響應式 API:ref 和 reactive 提供更細粒度…

前端性能優化全攻略:JavaScript 優化、DOM 操作、內存管理、資源壓縮與合并、構建工具及性能監控

1 為什么需要性能優化&#xff1f; 1.1 性能優化的核心價值&#xff1a;用戶體驗與業務指標 性能優化不僅是技術層面的追求&#xff0c;更是直接影響用戶體驗和業務成敗的關鍵因素。 用戶體驗&#xff08;UX&#xff09;&#xff1a; 響應速度&#xff1a;用戶期望頁面加載時…