2016-12-14 5 views
0

Я одновременно запускаю двух медиаплееров, чтобы воспроизводить два разных звука, один - аудиозапись, а вторая - музыка. Я контролирую объем обоих через два поисковых балласта. Проблема в том, что одновременно контролируется объем одного медиаплеера. Когда один медиаплеер будет выпущен, можно отрегулировать громкость другого медиаплеера. Я хочу настроить ОДНОВРЕМЕННО Вот моя реализация.Как настроить громкость двух медиаплееров одновременно?

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(); 
} 

В поисковых барах я использую аудио-менеджер для настройки томов. В музыкальном SeekBar, громкость регулируется с помощью,

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

Код для изменения объема записи SeekBar является,

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

ответ

0

Вот решение играть 2 медиаплееры одновременно и контролировать их объем через seekbars.

Создать переменные

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) { 

    } 
}; 

В активности или фрагмента

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; 
     } 
    }); 
Смежные вопросы