Android [Audio] 如何分析音量大小相关的问题

本文详细介绍了Android系统中音量调节的流程,从adjustStreamVolume()开始,涉及到setIndex()和setDeviceVolume()的处理,以及如何针对不同的streamtype和device设置音量。同时,提供了在AudioService.java和AudioPolicyManager.cpp中调试音量问题的方法,包括启用特定的日志输出,以便跟踪index map和设备音量的变化。
摘要由CSDN通过智能技术生成

可以参考下面说明来分析音量大小相关的问题

  1. 调节音量的流程

(1)先要走到adjustStreamVolume(),其中很关键的code ,如下:

1422        int streamTypeAlias = mStreamVolumeAlias[streamType];
1423
1424        VolumeStreamState streamState = mStreamStates[streamTypeAlias];
1425
1426        final int device = getDeviceForStream(streamTypeAlias);

先获取到该streamtype的别名,再将该别名的device 获取到。

别名的来源是

STREAM_VOLUME_ALIAS_DEFAULT

根据streamtype 获取到的device,会不同。 getDeviceForStream()的结果总结如下:

Alias streamtype streamtype 插耳机

STREAM_VOICE_CALL STREAM_VOICE_CALL

STRAEM_RING STREAM_SYSTEM headphone

                                STRAEM_RING        speaker


                               STRAEM_NOTIFICATION  speaker

                               STRAEM_ENFORCED      headphone
                               STRAEM_DTMF               headphone
STRAEM_MUSIC     STRAEM_MUSIC             headphone
STRAEM_MUSIC      STRAEM_TTS                speaker
STRAEM_ALARM     STRAEM_ALARM           speaker
STRAEM_BLUETOOTH_SCO      STRAEM_BLUETOOTH_SCO

= ( == ());(2) 然后会走到 setIndex() , 这个是设置音量到map 里去,每个streamtype 都会对应有一个index map,是存储volume index 的地方。

4442                final boolean currentDevice = (device == getDeviceForStream(mStreamType));
4443                final int numStreamTypes = AudioSystem.getNumStreamTypes();
4444                for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
   
4445                    final VolumeStreamState aliasStreamState = mStreamStates[streamType];
4446                    if (streamType != mStreamType &&
4447                            mStreamVolumeAlias[streamType] == mStreamType &&
4448                            (changed || !aliasStreamState.hasIndexForDevice(device))) {
   
4449                        final int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值