Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在同一活动中播放2个音频文件_Android_Audio_Media Player - Fatal编程技术网

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

Android 在同一活动中播放2个音频文件,android,audio,media-player,Android,Audio,Media Player,当我点击播放按钮时,我需要这2个对象独立工作 这两个实例应分别播放 人声应该有自己的进度条,该进度条将指示其音频的音量,而不会影响乐器的音量 将此问题视为使用不同的音量控制运行两个音频。这可以通过在MediaPlayer实例上设置单独的音频流类型来实现。我不知道这是否会产生任何意外的后果,我想你应该使用流式音乐来播放音乐。。。但它是有效的 MediaPlayer instrumental = new MediaPlayer(); MediaPlayer vocal = new MediaPlay

当我点击播放按钮时,我需要这2个对象独立工作

这两个实例应分别播放

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


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

这可以通过在
MediaPlayer
实例上设置单独的音频流类型来实现。我不知道这是否会产生任何意外的后果,我想你应该使用
流式音乐
来播放音乐。。。但它是有效的

MediaPlayer instrumental = new MediaPlayer();
MediaPlayer vocal = new MediaPlayer();
然后稍后在您的
onseekbarchaneglistener

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

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

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

}

参数用于左和右声音。要修改这些值,请尝试计算本文中提到的值:

您可以添加您的问题吗?啊,我正在尝试将乐器与人声一起演奏。但是在声音方面。我应该通过progressbar控制音量。谢谢你,ken先生,但我要做的是调整vocal的音量,这是资产中的另一个音频文件。这样可以做到。我的手机现在可以用了。使用来自资源的2个音频文件。和2个滑块控制2个单独的流。你试过了吗?有什么问题?使用AudioManager.STREAM\u语音呼叫安全吗?因为除了这个问题,我还有一个录音功能,可以记录我的声音。在播放这两个音频时,据我所知是安全的。我不知道如何控制2个不同的卷流。您将需要不同的流。你可以试试别的。警报等。
MediaPlayer mp = new MediaPlayer();
...
mp.setVolume(1, 1);