简体   繁体   中英

Android MediaPlayer setVolume() not working

I have a class called MusicPlayer that has a MediaPlayer and its setVolume() method simply takes a float and applies it to both left and right volume of the MediaPlayer:

public void setVolume(float f) {
    mediaPlayer.setVolume(f, f);
}

In my MainActivity class, I create a SeekBar that calls my setVolume() method to logarithmically change the volume of the 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);
        }
    }); 

The problem is that setVolume() does not seem to be doing anything. I have already debugged to ensure my SeekBar is set up correctly and that the setVolume() method is running at all, but my problem seems to be that the MediaPlayer's setVolume() does nothing. Any suggestions?

EDIT: I forgot to mention that my app is planned to be something like an audio mixer, where the user can change the volume of one MediaPlayer without changing the others. For example, the user wants to increase the volume of a MediaPlayer that handles sound effects while lowering the volume of a MediaPlayer that handles music, so I don't think AudioManager would be the right solution.

This API is recommended for balancing the output of audio streams within an application. Unless you are writing an application to control user settings, this API should be used in preference to setStreamVolume(int, int, int) which sets the volume of ALL streams of a particular type. Note that the passed volume values are raw scalars in range 0.0 to 1.0. UI controls should be scaled logarithmically

http://developer.android.com/reference/android/media/AudioManager.html#setStreamVolume(int , int, int)

U need to use audiomanger AudioManager manager = Context.getSystemService(Context.AUDIO_SERVICE) ;

manager.setStreamVolume(AudioManager.STREAM_MUSIC , int value ,MODE_CURRENT);

  • Max value is can checked using getStreamMaxVolume() for particular stream.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM