Android MediaPlayer setVolume()不起作用

时间:2015-07-20 18:17:39

标签: java android

我有一个叫做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是正确的解决方案。

1 个答案:

答案 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);

  • 可以使用最大值检查 特定流的getStreamMaxVolume()。