2016-12-14 98 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(); 
} 

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

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

代码变更记录搜索条的体积,

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; 
     } 
    }); 
相关问题