SoundPool和MediaPlayer音量对应问题

问题描述 投票:0回答:1

[在具有Android 6.0.1的阿尔卡特POP 4+中,我的SoundPool声音音量很小,而MediaPlayer声音的音量很高,只需要播放声音就不会改变音量。在其他设备和模拟器中,它可以完美运行。

我正在使用带有声音池的SFX进行播放:

soundPool.play(soundID[sound], 1, 1, 0, loop, 1);

以及音乐使用此:

mPlayer.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mPlayer.start();
    }
});

您可以看到我没有指定音量,但是在具有Android 6.0.1的阿尔卡特POP 4+中,SFX(SoundPool)的音量非常低。

我尝试将MediaPlayer的卷1指定为mPlayer.setVolume(1, 1);,但结果相同。

如何解决?

android android-mediaplayer android-6.0-marshmallow soundpool
1个回答
0
投票

确保MediaPlayerSoundPool都在同一音频流上播放。这是通过将Android 5以下的int streamType设置为Android 5+上的AudioAttributes来完成的。

[streamType将成为stream constants中的AudioManager之一,例如STREAM_MUSIC

使用builder构造AudioAttributes对象。您不再直接处理流类型。 Android会根据您在setUsagesetContentType中传递的内容为您的播放器分配一个流,例如

new AudioAttributes.Builder()
         .setUsage(AudioAttributes.USAGE_MEDIA)
         .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
         .build()

对于Lollilop之前的SoundPool,使用现在不建议使用的constructor

new SoundPool(maxStreams, streamType, 0)

对于棒棒糖使用SoundPool后的builder

new SoundPool.Builder()
        .setMaxStreams(maxStreams)
        .setAudioAttributes(audioAttributes)
        .build()

对于棒棒糖之前调用MediaPlayer之前的setAudioStreamType(int streamType)setAudioStreamType(int streamType)

对于棒棒糖之后prepare之前调用MediaPlayersetAudioAttributes(AudioAttributes)。>>


通常是在setAudioAttributes(AudioAttributes)上播放音乐,在prepare上响起电话,在STREAM_MEDIA上响起警报,依此类推。执行用户期望的操作。

[没有播放任何声音时,音量按钮控制STREAM_RING。当使用STREAM_ALARM进行操作时,音量按钮可以控制音量。至少在运行Android 8的手机上,我不确定Android 9或10的情况已经改变。

© www.soinside.com 2019 - 2024. All rights reserved.