我有一个叫做MusicPlayer的类,它有一个MediaPlayer,它的setVolume()方法只需要一个浮点数并将它应用到MediaPlayer的左右两个卷:
public void setVolume(float f) {
mediaPlayer.setVolume(f, f);
}
在我的MainActivity类中,我创建了一个调用我的setVolume()方法的SeekBar,以对数方式改变MusicPlayer的音量:
SeekBar musicVolume = (SeekBar) findViewById(R.id.music_volume);
musicVolume.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
float log1 = (float) (Math.log(maxVolume - progress) / Math.log(maxVolume));
mp.setVolume(1 - log1);
}
});
问题是setVolume()似乎没有做任何事情。我已经调试过以确保我的SeekBar设置正确并且setVolume()方法正在运行,但我的问题似乎是MediaPlayer的setVolume()什么也没做。有什么建议吗?
编辑:我忘记提到我的应用程序计划类似于音频混音器,用户可以在不改变其他MediaPlayer的情况下更改一个MediaPlayer的音量。例如,用户希望增加处理声音效果的MediaPlayer的音量,同时降低处理音乐的MediaPlayer的音量,因此我不认为AudioManager是正确的解决方案。答案 0 :(得分:0)
建议使用此API来平衡应用程序中音频流的输出。除非您正在编写用于控制用户设置的应用程序,否则应优先使用此API,以设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的卷值是0.0到1.0范围内的原始标量。 UI控件应该以对数方式进行缩放
http://developer.android.com/reference/android/media/AudioManager.html#setStreamVolume(int,int,int)
你需要使用audiomanger AudioManager manager = Context.getSystemService(Context.AUDIO_SERVICE);
manager.setStreamVolume(AudioManager.STREAM_MUSIC,int value,MODE_CURRENT);