android - 如何同时调节两个媒体播放器的音量?

标签 android audio android-audiomanager

我同时运行两个媒体播放器来播放两种不同的声音,一种是录音,另一种是音乐。我通过两个搜索栏控制两者的音量。问题是,一次控制一个媒体播放器的音量。当释放一个媒体播放器时,可以调节其他媒体播放器的音量。我想同时调整 这是我的实现。

 public void setMediaPLayers() {
    mediaPlayer = new MediaPlayer(); //TO PLAY VOICE RECORDING
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);

    try {
        mediaPlayer.setDataSource(AudioSavePathInDevice); //VOICE RECORDING FILE PATH
        mediaPlayer.prepare();
        mediaPlayer.start();

    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer2 = MediaPlayer.create(getActivity(), R.raw.sunnysideup); //FOR MUSIC FILE
    mediaPlayer2.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer2.start();
}

在搜索栏中,我使用音频管理器来调整音量。在音乐搜索栏中,通过调整音量,

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0); // i = seekbar progress

改变录音seekbar音量的代码是,

audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, i, 0); // i = seekbar progress

最佳答案

这是同时播放 2 个媒体播放器并通过搜索栏控制其音量的解决方案。

创建变量

MediaPlayer mpOne = null;
MediaPlayer mpTwo = null;
SeekBar seekBarOne, seekBarTwo;

//Path to mp3 file stored in device
String FILE_PATH_ONE = Environment.getExternalStorageDirectory().getPath() + "/music_one.mp3";
String FILE_PATH_TWO = Environment.getExternalStorageDirectory().getPath() + "/music_two.mp3";

初始化和启动媒体播放器的函数:

public void setMediaPlayers() {
    mpOne = new MediaPlayer();
    mpTwo = new MediaPlayer();


    try {
        mpOne.setDataSource(FILE_PATH_ONE);
        mpTwo.setDataSource(FILE_PATH_TWO);
        mpOne.prepare();
        mpTwo.prepare();
        mpOne.start();
        mpTwo.start();

    } catch (IOException e) {
        e.printStackTrace();
    }

}

创建SeekBarChangeListener获取当前进度。

SeekBar.OnSeekBarChangeListener seekBarOneListener = new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        //Lets assume, seekbar's maximum progress is 10.
        //i is the progress of seekbar between 0 to 10.

        float volume = i * 0.10f;

        //Set the volume if media player is  not null
        if (null != mpOne)
            //volume is the float number between 0.0 and 1.0
            mpOne.setVolume(volume, volume);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
};

SeekBar.OnSeekBarChangeListener seekBarTwoListener = new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

        //Lets assume, seekbar's maximum progress is 10.
        //i is the progress of seekbar between 0 to 10.

        float volume = i * 0.10f;

        //Set the volume if media player is  not null
        if (null != mpTwo)
            //volume is the float number between 0.0 and 1.0
            mpTwo.setVolume(volume, volume);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
};

在 Activity 或 fragment 中

seekBarOne = (SeekBar) v.findViewById(R.id.seekBar1);
seekBarTwo = (SeekBar) v.findViewById(R.id.seekBar2);

seekBarOne.setOnSeekBarChangeListener(seekBarOneListener);
seekBarTwo.setOnSeekBarChangeListener(seekBarTwoListener);

//Start media players
setMediaPlayers();

//Completion listeners for releasing media players on completion.
mpOne.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {

            mpOne.reset();
            mpOne.release();
            mpOne = null;
        }
    });
 mpTwo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {

            mpTwo.reset();
            mpTwo.release();
            mpTwo = null;
        }
    });

关于android - 如何同时调节两个媒体播放器的音量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150028/

相关文章:

html - Chrome扩展程序和流式传输<音频>

android - 如何应用于标准音频播放器?

android - 在Android中处理AudioManager的最佳方法

android - 我在特定时间安排本地通知,使用开关但它不会在设定时间触发

java - 将 int 作为 boolean 值返回

bash - 了解bash信号处理

audio - 无法使用HTML5音频元素在Grav中查找媒体文件

android - 通过 AudioManager 访问音频设置会导致其他应用程序的音量降低?

android - 保存到下载文件夹的文件未显示在 "Downloads"应用程序中

android - 如何向按钮添加边框和背景图像