Android 10 版本包含大幅重構音訊。
政策管理工具,以更靈活的方式支援複雜的汽車用途:
- 原始設備製造商 (OEM) 專用的轉送策略。
- 可自訂音量群組 (適用於使用相同磁碟區曲線的舊版串流類型群組)。
- 音訊政策引擎宣告的轉送策略 (而非硬式編碼)。
- 音量曲線和群組是由音訊政策引擎管理。
- 內部重構,為日後在通用程式碼和可設定程式碼之間分割作業做好準備
以及功能更豐富的音訊裝置管理服務比方說,除了使用所有裝置屬性外
政策規則的類型
Android 7.0 推出了適用於
描述音訊拓撲
必須使用以下項目的舊版 Android 版本:
device/<company>/<device>/audio/audio_policy.conf
宣告產品中顯示的音訊裝置 (您可以
這是 Galaxy Nexus 音訊硬體檔案
device/samsung/tuna/audio/audio_policy.conf
)。不過,CONF 是
使用簡單、專屬格式,過度著重說明複雜的拓撲
例如電視和汽車產業
Android 7.0 已淘汰 audio_policy.conf
並加入支援
使用 XML 檔案格式來定義音訊拓撲,
人類可讀、提供多種編輯與剖析工具,而且靈活有彈性
足以描述複雜的音訊拓撲Android 7.0 採用
用於選擇 XML 的 USE_XML_AUDIO_POLICY_CONF
建構旗標
設定檔的格式。
XML 格式的優點
如同 CONF 檔案,XML 檔案可讓您定義數字和類型
例如輸出和輸入串流設定檔、可用於播放和擷取的裝置,以及
音訊屬性。此外,XML 格式還提供下列強化功能:
- 在 Android 10 中,有多個啟用的錄音應用程式
允許同時允許多個物件
- 不會因並行情況而拒絕開始錄製。
registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
回呼會通知用戶端擷取路徑變更。
- 在下列情況中,用戶端會取得靜音音訊樣本:
- 已啟用會保障隱私權的用途 (例如
VOICE_COMMUNICATION
)。
- 用戶端沒有前景服務或前景 UI。
- 特殊角色可由政策認可:
- 無障礙服務:即使已啟用隱私保護用途,也能錄製。
- Google 助理:在頂端顯示使用者介面時,考量隱私權受到保護。
- 音訊設定檔的結構類似於 HDMI 簡單音訊描述元,可帶來不同的
各種音訊格式的取樣率/頻道遮罩組合。
- 裝置和串流之間所有可能的連線都有明確定義。
在過去,隱含規則能讓所有連接到同一個 HAL 的裝置
模組,防止音訊政策控制使用音訊修補程式要求的連線
相互整合XML 格式的拓撲說明定義了連線限制。
- 支援 包括,避免重複提交標準 A2DP、USB 或重新轉送
定義。
- 音量曲線可以自訂。磁碟區資料表原本是以硬式編碼的方式寫入。在 XML 中
磁碟區資料表的相關說明,且可自訂。
這裡的範本
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
其中顯示許多使用中的功能
新的音訊政策設定檔是
audio_policy_configuration.xml
,位於
/system/etc
。以下範例顯示
XML 檔案格式適用於 Android 12 及以下版本
Android 12。
顯示 Android 12 的音訊政策範例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<audioPolicyConfiguration version="7.0" xmlns:xi="http://www.w3.org/2001/XInclude">
<globalConfiguration speaker_drc_enabled="true"/>
<modules>
<module name="primary" halVersion="3.0">
<attachedDevices>
<item>Speaker</item>
<item>Earpiece</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="primary input" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000 16000 48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
<devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER" address="">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" 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="8000 16000 48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
<devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000 16000 48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="Earpiece" sources="primary output"/>
<route type="mix" sink="Speaker" sources="primary output"/>
<route type="mix" sink="Wired Headset" sources="primary output"/>
<route type="mix" sink="primary input" sources="Built-In Mic,Wired Headset Mic"/>
</routes>
</module>
<xi:include href="a2dp_audio_policy_configuration.xml"/>
</modules>
<xi:include href="audio_policy_volumes.xml"/>
<xi:include href="default_volume_tables.xml"/>
</audioPolicyConfiguration>
針對 Android 12 以下版本顯示音訊政策範例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
<globalConfiguration speaker_drc_enabled="true"/>
<modules>
<module name="primary" halVersion="3.0">
<attachedDevices>
<item>Speaker</item>
<item>Earpiece</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="primary input" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="Earpiece" type="AUDIO_DEVICE_OUT_EARPIECE" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
<devicePort tagName="Speaker" role="sink" type="AUDIO_DEVICE_OUT_SPEAKER" address="">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>
<devicePort tagName="Wired Headset" type="AUDIO_DEVICE_OUT_WIRED_HEADSET" 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="8000,16000,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
<devicePort tagName="Wired Headset Mic" type="AUDIO_DEVICE_IN_WIRED_HEADSET" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,16000,48000"
channelMasks="AUDIO_CHANNEL_IN_MONO"/>
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="Earpiece" sources="primary output"/>
<route type="mix" sink="Speaker" sources="primary output"/>
<route type="mix" sink="Wired Headset" sources="primary output"/>
<route type="mix" sink="primary input" sources="Built-In Mic,Wired Headset Mic"/>
</routes>
</module>
<xi:include href="a2dp_audio_policy_configuration.xml"/>
</modules>
<xi:include href="audio_policy_volumes.xml"/>
<xi:include href="default_volume_tables.xml"/>
</audioPolicyConfiguration>
頂層結構包含對應至各個音訊 HAL 的模組
硬體模組,其中每個模組都有混合通訊埠、裝置通訊埠的清單
路徑:
- Mix 通訊埠說明串流的可能設定設定檔
可在音訊 HAL 中開啟以播放及擷取
- 裝置通訊埠是指可連接的裝置
(以及位址和音訊屬性,如適用)。
- 「Routes」與混合通訊埠描述元是分開的。
啟用裝置之間的路徑說明,或可將路線串流至裝置。
磁碟區表是簡單的清單,定義用於翻譯的曲線
從 UI 索引到 dB 中的磁碟區獨立的 include 檔案會提供預設值
但針對特定用途和裝置類別的每個曲線
覆寫。
顯示磁碟區資料表範例
<?xml version="1.0" encoding="UTF-8"?>
<volumes>
<reference name="FULL_SCALE_VOLUME_CURVE">
<point>0,0</point>
<point>100,0</point>
</reference>
<reference name="SILENT_VOLUME_CURVE">
<point>0,-9600</point>
<point>100,-9600</point>
</reference>
<reference name="DEFAULT_VOLUME_CURVE">
<point>1,-4950</point>
<point>33,-3350</point>
<point>66,-1700</point>
<point>100,0</point>
</reference>
</volumes>
顯示磁碟區範例
<?xml version="1.0" encoding="UTF-8"?>
<volumes>
<volume stream="AUDIO_STREAM_VOICE_CALL" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_VOICE_CALL" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_VOICE_CALL" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_VOICE_CALL" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_SYSTEM" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_SYSTEM" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_SYSTEM" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_SYSTEM" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_RING" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA"ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER">
<point>1,-5500</point>
<point>20,-4300</point>
<point>86,-1200</point>
<point>100,0</point>
</volume>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ALARM" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_NOTIFICATION" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_NOTIFICATION" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_NOTIFICATION" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_NOTIFICATION" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_BLUETOOTH_SCO" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_BLUETOOTH_SCO" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_BLUETOOTH_SCO" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_BLUETOOTH_SCO" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ENFORCED_AUDIBLE" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ENFORCED_AUDIBLE" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ENFORCED_AUDIBLE" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ENFORCED_AUDIBLE" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_DTMF" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_DTMF" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_DTMF" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_DTMF" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_TTS" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="SILENT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_TTS" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_TTS" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="SILENT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_TTS" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="SILENT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="DEFAULT_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_REROUTING" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_PATCH" deviceCategory="DEVICE_CATEGORY_HEADSET" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_PATCH" deviceCategory="DEVICE_CATEGORY_SPEAKER" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_PATCH" deviceCategory="DEVICE_CATEGORY_EARPIECE" ref="FULL_SCALE_VOLUME_CURVE"/>
<volume stream="AUDIO_STREAM_PATCH" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA" ref="FULL_SCALE_VOLUME_CURVE"/>
</volumes>
包含的檔案
XML 包容 (XInclude) 方法可用來納入音訊政策
設定資訊。所有包含的檔案都必須
遵循上述結構,並有下列限制:
- 檔案中只能包含頂層元素。
- 檔案不可包含 XInclude 元素。
用途是避免複製標準 Android 開放原始碼計畫 (AOSP)
音訊 HAL 模組設定資訊至所有音訊政策設定
檔案 (較容易發生錯誤)。標準音訊政策設定 XML 檔案
為下列音訊 HAL:
- A2DP:
a2dp_audio_policy_configuration.xml
- 重新轉送子合輯:
rsubmix_audio_policy_configuration.xml
- USB:
usb_audio_policy_configuration.xml
音訊政策程式碼組織
AudioPolicyManager.cpp
分成多個模組
簡化維護和設定流程機構
frameworks/av/services/audiopolicy
包含
後續單元
Module |
說明 |
/managerdefault |
包含全體使用者通用的一般介面和行為實作
應用程式。和包含引擎的 AudioPolicyManager.cpp 類似
以及常見概念 |
/common |
定義基本類別 (例如輸入輸出音訊串流的資料結構)
設定檔、音訊裝置描述元、音訊修補程式,以及音訊連接埠)。這之前
在 AudioPolicyManager.cpp 內定義。 |
/engine |
實作規則,定義要使用的裝置和磁碟區
針對特定用途可透過一般介面實作標準介面,
根據特定播放/擷取用途取得適當裝置,或
設定連線裝置或外部狀態 (即強制使用的呼叫狀態),
可能會變更轉送決策
我們提供兩個版本:「可設定」和「預設」。
如要瞭解如何選取版本,請參閱
使用參數架構進行設定。 |
/engineconfigurable |
採用「參數架構」的政策引擎導入作業 (請見下方說明)。
設定取決於「參數架構」和政策
由 XML 檔案定義 |
/enginedefault |
根據舊版 Android 音訊政策管理工具實作的政策引擎
。這是預設設定,並且包含硬式編碼規則
對應到 Nexus 和 Android 開放原始碼計畫實作項目。 |
/service |
包含使用以下程式碼的繫結器介面、執行緒和鎖定實作:
與架構其餘部分通訊 |
使用參數架構進行設定
音訊政策程式碼有條不紊,方便您理解及
同時支援完全由系統設定的音訊政策
檔案。機構和音訊政策設計是以 Intel 的參數為基礎
處理參數的外掛程式式和規則式架構。
透過可設定的音訊政策,廠商原始設備製造商 (OEM) 可執行以下動作:
- 在 XML 中說明系統的結構及其參數。
- 編寫 (在 C++ 中) 或重複使用後端 (外掛程式) 以存取描述
參數。
- 定義 (使用 XML 或特定網域語言) 條件/規則,
某個參數必須採用指定值。
Android 開放原始碼計畫提供使用 參數的音訊政策設定檔範例
Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml
中的架構。適用對象
請參閱有關
參數架構。
在 Android 10 以下版本中,可設定的音訊政策
是透過建構選項 USE_CONFIGURABLE_AUDIO_POLICY
選取。
在 Android 11 以上版本中,音訊政策的版本
已在 audio_policy_configuration.xml
檔案中選取引擎。
如要選取可設定的音訊政策引擎,請設定 engine_library
的值
將 globalConfiguration
元素的屬性設定為 configurable
如以下範例所示:
<audioPolicyConfiguration>
<globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>
音訊政策路由 API
Android 6.0 導入了公開列舉和選取 API,
並且允許應用程式
開發人員,藉此指示特定裝置輸出或輸入來源的偏好設定
連結的音訊記錄或音軌。
在 Android 7.0 中,CTS 測試會驗證 Enumeration API 和 Selection API
,且延伸至原生 C/C++ (OpenSL ES) 音訊串流轉送。
除了新增
取代、合併及淘汰的 AudioRouting
介面
AudioTrack
專屬的明確轉送方法,以及
AudioRecord
類別。
如要進一步瞭解 Enumeration 和 Selection API,請參閱
Android
設定介面和 OpenSLES_AndroidConfiguration.h
如要進一步瞭解音訊轉送,請參閱
音訊轉送。
多管道支援
如果你的硬體和驅動程式支援透過 HDMI 傳輸多聲道音訊,你可以
將音訊串流直接輸出到音訊硬體 (此方法會略過
因此, AudioFlinger 混音器不會混和到兩個聲道)。音訊 HAL
必須公開輸出串流設定檔是否支援多聲道音訊
即便沒有技術背景,也能因這些工具的功能而受益如果 HAL 公開其功能,則預設的政策管理工具
就能透過 HDMI 多頻道播放內容如需實作詳細資料,請參閱
device/samsung/tuna/audio/audio_hw.c
。
如要表示產品含有多聲道音訊輸出裝置,請編輯
音訊政策設定檔,描述應用程式的多聲道輸出內容
產品。下列範例來自
frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml
顯示「動態」聲道遮罩,表示音訊政策管理工具會查詢頻道
連接後,HDMI 接收器支援的遮罩。
顯示 HDMI 裝置設定範例
<module name="primary" halVersion="2.0">
<attachedDevices>
<item>Speaker</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="direct" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT" />
<mixPort name="tunnel" role="source"
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_HW_AV_SYNC" />
</mixPorts>
<devicePorts>
<devicePort tagName="Speaker" type="AUDIO_DEVICE_OUT_SPEAKER" role="sink" />
<devicePort tagName="Out Aux Digital" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink"
encodedFormats="AUDIO_FORMAT_AC3 AUDIO_FORMAT_IEC61937" />
</devicePorts>
<routes>
<route type="mix" sink="Speaker" sources="primary output"/>
<route type="mix" sink="Out Aux Digital" sources="primary output,direct,tunnel"/>
</routes>
</module>
您也可以指定靜態頻道遮罩,例如:
AUDIO_CHANNEL_OUT_5POINT1
。AudioFlinger 的混音器將
將內容傳送到立體聲的音訊裝置
多聲道音訊。
媒體轉碼器
確認硬體和驅動程式所支援的音訊轉碼器正確無誤
產品範本詳情請參閱
將轉碼器提供給
架構: