Android音量曲线设置

1、调用逻辑

安卓java部分的音量设置首先调用到AudioManager.java中
在这里有两种方法可以设置音量setStreamVolume和adjustStreamVolume
setStreamVolume:传入index直接设置音量等级
adjustStreamVolume:传入direction,根据direction和获取到的步长设置音量。

这2中方式都会call到native 层的AudioPolicyManager.cpp中的setStreamVolumeIndex()。

2、分析

status_t AudioPolicyManager::setStreamVolumeIndex(audio_stream_type_t stream,
                                                  int index,
                                                  audio_devices_t device)
{
            ........

            if (applyVolume) {
                //FIXME: workaround for truncated touch sounds
                // delayed volume change for system stream to be removed when the problem is
                // handled by system UI

                //调用checkAndSetVolume设置音量
                status_t volStatus =
                        checkAndSetVolume((audio_stream_type_t)curStream, index, desc, curDevice,
                            (stream == AUDIO_STREAM_SYSTEM) ? TOUCH_SOUND_FIXED_DELAY_MS : 0);
                if (volStatus != NO_ERROR) {
                    status = volStatus;
                }
            }
}

3、调整音量曲线有2种方式:

(1)8.0以前老版本修改code方式

(2)Android 8.0往后的版本,使用xml的方式

具体参考下面链接:

Android8.0的音量曲线设置_m0_37437363的博客-CSDN博客_音量曲线

4、在audio_policy_configuration.xml里include了下面2个xml

 <xi:include href="audio_policy_volumes.xml"/>
    <xi:include href="default_volume_tables.xml"/>

举例:音量等级index 0~100,对应的衰减量-4200~0  (0是不衰减)

<volumes>
    <volume stream="AUDIO_STREAM_VOICE_CALL" deviceCategory="DEVICE_CATEGORY_HEADSET">
        <point>0,-4200</point>
        <point>33,-2800</point>
        <point>66,-1400</point>
        <point>100,0</point>
    </volume>


5、音量音量

java层实际上调节的是挂在stream上的device的index值,挂在stream上的每个device都有一个音量曲线,native层是将index值转化为音量曲线中的值:

                |--> device1 (index) --> curve1
                |--> device2 (index) --> curve2
    stream1 --> |--> device3 (index) --> curve3
                |--> device4 (index) --> curve4
                |--> device5 (index) --> curve5
                
                |--> device1 (index) --> curve6
                |--> device2 (index) --> curve7
    stream2 --> |--> device3 (index) --> curve8
                |--> device4 (index) --> curve9
                |--> device5 (index) --> curve10

6、如何找对应的音量曲线

 

7、音量曲线

下面的数组为对应音量的曲线,比如扬声器曲线等,数组第一位为1~100的具体音量值,第二位为衰减增益
比如{0, -24.0f}(音量为0时,衰减24db输出),{100, 0.0f}(音量为100时,无衰减输出)
举例 {0, -24.0f}, {33, -16.0f}, {66, -8.0f}, {100, 0.0f}

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Android Studio中设置音量条,你需要首先在XML布局文件中添加一个SeekBar控件,用来显示和控制音量大小。在布局文件中可以这样添加: ```xml <SeekBar android:id="@+id/volumeSeekBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" /> ``` 然后在相应的Activity或Fragment中,你需要找到SeekBar控件,并添加相应的监听器来处理音量的变化。这可以通过以下代码来实现: ```java SeekBar volumeSeekBar = findViewById(R.id.volumeSeekBar); AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); volumeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // do something when start tracking touch } @Override public void onStopTrackingTouch(SeekBar seekBar) { // do something when stop tracking touch } }); ``` 在这段代码中,我们首先获取了SeekBar控件和AudioManager实例,然后添加了一个SeekBar监听器来监听音量条的变化。在`onProgressChanged`方法中,我们调用了`setStreamVolume`方法来设置音量大小。这样,当用户拖动音量条时,音量会相应地发生变化。 这就是在Android Studio中设置音量条的简单代码实现。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学如逆水行舟,不进则退3038

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值