在同一活动中播放 2 个音频文件

问题描述 投票:0回答:2
MediaPlayer instrumental = new MediaPlayer();
MediaPlayer vocal = new MediaPlayer();

当我单击

Play Button
时,我需要这 2 个对象独立工作,并且应该单独播放。

人声应该有自己的进度条,它将指示其音频的音量,而不影响乐器的音量。

将此问题视为运行两个具有不同音量控制的音频。

android audio media-player
2个回答
2
投票

您可以使用 MediaPlayer 的 setVolume() 方法控制其音频。示例:

MediaPlayer mp = new MediaPlayer();
...
mp.setVolume(1, 1);

该参数适用于左、右声音。要修改这些值,请尝试计算本文中提到的值:https://stackoverflow.com/a/12075910/582083


1
投票

这可以通过在

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

}
© www.soinside.com 2019 - 2024. All rights reserved.