音频策略 AudioPolicy

本文深入探讨了Android的AudioPolicy,包括AudioStream、AudioStrategy、AudioAttributes和GetDeviceForStrategy的概念。AudioPolicy用于管理音频输入输出,如手机内部和外部设备、蓝牙设备等。通过Log分析,展示了不同输出设备的配置、HW Modules硬件模块信息,以及音频路由Audio Route的解析。Policy Engine的dump揭示了音频输出设备选择的策略。
摘要由CSDN通过智能技术生成

一、AudioPolicy

手机本身有听筒和扬声器作为音频输出,手机本身可能有底部(双)Mic、顶部Mic、背部Mic作为音频输入。

手机可能连接有线耳机、多个蓝牙耳机、多个WiFi音频外设,或者车载设备、VR设备、投屏设备等。

AudioPolicy提供了一个音频输入、输出管理的中心,当然它还有一些其他的作用。

1.1 AudioStream

AudioStream在Audio Base.h中有定义,包含以下内容:

20typedef enum {
   
21    AUDIO_STREAM_DEFAULT = -1, // (-1)
22    AUDIO_STREAM_MIN = 0,
23    AUDIO_STREAM_VOICE_CALL = 0,
24    AUDIO_STREAM_SYSTEM = 1,
25    AUDIO_STREAM_RING = 2,
26    AUDIO_STREAM_MUSIC = 3,
27    AUDIO_STREAM_ALARM = 4,
28    AUDIO_STREAM_NOTIFICATION = 5,
29    AUDIO_STREAM_BLUETOOTH_SCO = 6,
30    AUDIO_STREAM_ENFORCED_AUDIBLE = 7,
31    AUDIO_STREAM_DTMF = 8,
32    AUDIO_STREAM_TTS = 9,
33    AUDIO_STREAM_ACCESSIBILITY = 10,
34#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
35    /** For dynamic policy output mixes. Only used by the audio policy */
36    AUDIO_STREAM_REROUTING = 11,
37    /** For audio flinger tracks volume. Only used by the audioflinger */
38    AUDIO_STREAM_PATCH = 12,
39#endif // AUDIO_NO_SYSTEM_DECLARATIONS
40} audio_stream_type_t;

1.2 AudioStrategy

AudioStrategy在Engine.cpp中有定义:

172routing_strategy Engine::getStrategyForStream(audio_stream_type_t stream)
173{
   
174    // stream to strategy mapping
175    switch (stream) {
   
176    case AUDIO_STREAM_VOICE_CALL:
177    case AUDIO_STREAM_BLUETOOTH_SCO:
178        return STRATEGY_PHONE;
179    case AUDIO_STREAM_RING:
180    case AUDIO_STREAM_ALARM:
181        return STRATEGY_SONIFICATION;
182    case AUDIO_STREAM_NOTIFICATION:
183        return STRATEGY_SONIFICATION_RESPECTFUL;
184    case AUDIO_STREAM_DTMF:
185        return STRATEGY_DTMF;
186    default:
187        ALOGE("unknown stream type %d", stream);
188    case AUDIO_STREAM_SYSTEM:
189        // NOTE: SYSTEM stream uses MEDIA strategy because muting music and switching outputs
190        // while key clicks are played produces a poor result
191    case AUDIO_STREAM_MUSIC:
192        return STRATEGY_MEDIA;
193    case AUDIO_STREAM_ENFORCED_AUDIBLE:
194        return STRATEGY_ENFORCED_AUDIBLE;
195    case AUDIO_STREAM_TTS:
196        return STRATEGY_TRANSMITTED_THROUGH_SPEAKER;
197    case AUDIO_STREAM_ACCESSIBILITY:
198        return STRATEGY_ACCESSIBILITY;
199    case AUDIO_STREAM_REROUTING:
200        return STRATEGY_REROUTING;
201    }
202}

在之前的版本中,AudioStream对应AudioStrategy,AudioStrategy选择音频输出设备。

在现在的新版本中,AudioStream仅用来标识音频的音量,使用音频属性AudioAttributes和AudioStream共同决定AudioStrategy。

204routing_strategy Engine::getStrategyForUsage(audio_usage_t usage)
205{
   
206    // usage to strategy mapping
207    switch (usage) {
   
208    case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY:
209        return STRATEGY_ACCESSIBILITY;
210
211    case AUDIO_USAGE_MEDIA:
212    case AUDIO_USAGE_GAME:
213    case AUDIO_USAGE_ASSISTANT:
214    case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
215    case AUDIO_USAGE_ASSISTANCE_SONIFICATION:
216        return STRATEGY_MEDIA;
217
218    case AUDIO_USAGE_VOICE_COMMUNICATION:
219        return STRATEGY_PHONE;
220
221    case AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING:
222        return STRATEGY_DTMF;
223
224    case AUDIO_USAGE_ALARM:
225    case AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE:
226        return STRATEGY_SONIFICATION;
227
228    case AUDIO_USAGE_NOTIFICATION:
229    case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
230    case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT:
231    case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED:
232    case AUDIO_USAGE_NOTIFICATION_EVENT:
233        return STRATEGY_SONIFICATION_RESPECTFUL;
234
235    case AUDIO_USAGE_UNKNOWN:
236    default:
237        return STRATEGY_MEDIA;
238    }
239}

1.3 AudioAttributes

https://blog.csdn.net/weixin_38663354/article/det

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值