1

到目前为止,我一直在MediaPlayer通过设置流音量来设置音量。我不想再这样做了,因为它会混淆用户设置。我现在从 a SeekBar(0 到 100) 中取值,然后做0 到 1 之间valueFromSeekBar / 100的 afloat来使用 in MediaPlayer.setVolume(float, float)

问题是音量级别似乎没有改变。这是我设置的方法MediaPlayer

player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.setLooping(true);
player.prepare();

float alarmVolume = AudioUtils.getMediaPlayerScaledVolume(100, alarm.volume);
if(NetworkUtils.isInCall(context)) {
    alarmVolume = IN_CALL_VOLUME;
}
mediaPlayer.setVolume(alarmVolume, alarmVolume); //I've even tried hardcoding 0.1f

无论我做什么,我输入的值似乎MediaPlayer.setVolume都被忽略了,而是使用了流的音量(在这种情况下是警报流)。当流音量设置为最大时最明显,我播放两个音频文件,一个MediaPlayer.setVolume(1f, 1f)使用MediaPlayer.setVolume(0.01f, 0.01f). 它们几乎无法区分。我需要一种方法让我的用户能够将SeekBar1 定位并获得几乎听不见的声音,或者定位 100 并获得最大声音。这是可能的,还是我将不得不回去搞乱流?

4

2 回答 2

0

你有两个对象“播放器”和“媒体播放器”吗?在这里,我只是使用了那个 API,它按预期工作。

于 2015-05-01T13:31:22.160 回答
0

设置音量:

它将最大值(100)设置为警报流。

amanager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
amanager.setStreamVolume(AudioManager.STREAM_ALARM, amanager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_PLAY_SOUND);
于 2013-11-07T04:59:24.657 回答