MediaPlayer instrumental = new MediaPlayer();
MediaPlayer vocal = new MediaPlayer();
当我点击播放按钮时,我希望这两个对象能够独立工作。
这两个实例应该分别播放。
声音应该有自己的进度条,可以显示其音频的音量而不影响伴奏的音量。
可以将此问题视为使用不同的音量控件运行两个音频。
MediaPlayer instrumental = new MediaPlayer();
MediaPlayer vocal = new MediaPlayer();
当我点击播放按钮时,我希望这两个对象能够独立工作。
这两个实例应该分别播放。
声音应该有自己的进度条,可以显示其音频的音量而不影响伴奏的音量。
可以将此问题视为使用不同的音量控件运行两个音频。
MediaPlayer mp = new MediaPlayer();
...
mp.setVolume(1, 1);
这些参数是用于左右声道。要修改这些值,请尝试按照本文所述计算值:https://dev59.com/iG435IYBdhLWcg3wyzMJ#12075910
MediaPlayer
实例上设置单独的音频流类型来完成。我不知道这是否会产生任何意想不到的后果,我猜你应该为音乐使用 STREAM_MUSIC
...但它有效。seek1 = (SeekBar) findViewById(R.id.seek1);
seek2 = (SeekBar) findViewById(R.id.seek2);
seek1.setOnSeekBarChangeListener(this);
seek2.setOnSeekBarChangeListener(this);
am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
seek1.setMax(am.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seek2.setProgress(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
// Set up your MediaPlayers
// Call the following lines before onPrepare()
instrumental.setAudioStreamType(AudioManager.STREAM_MUSIC);
vocal.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
onSeekBarChangeListener
中。@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (seekBar.equals(seek1)) {
am.setStreamVolume(AudioManager.STREAM_MUSIC, seekBar.getProgress(), 0);
}
else {
am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, seekBar.getProgress(), 0);
}
}