到目前为止,我通过设置流量来设置MediaPlayer
音量。我不想再这样做,因为它与用户设置混淆。我现在从SeekBar
(0到100)获取值并执行valueFromSeekBar / 100
以获得0到1之间的float
以在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
中的值都会被忽略,而流的音量(在本例中是警报流)会被使用。当流量设置为max时,最明显的是,我播放两个音频文件,一个带有MediaPlayer.setVolume(1f, 1f)
,另一个带有MediaPlayer.setVolume(0.01f, 0.01f)
。它们几乎无法区分。我需要一种方法让我的用户能够将SeekBar
定位在1并获得几乎听不到的声音,或者在100并且具有最大声音。这是可能的,还是我不得不回去搞乱溪流?
答案 0 :(得分: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);
答案 1 :(得分:0)
你可以拥有两个对象"播放器"和" mediaPlayer"?在这里,我刚刚使用了该API,它的工作原理可以预期。