在我的Launchpad Simulator中,主活动上有很多按钮。
我想在每个按钮上播放声音。如果同时按下按钮,我想同时播放声音。从我的创作到现在,它似乎每当我按下按钮,它确实播放声音,但因为第一个声音是3秒长(例如。一个鼓掌声音文件在播放时间是3秒长)。
在通过按钮产生任何其他声音之前,它等待3秒,如果在3秒后按下任何一个按钮,则播放下一个声音,与其他32个按钮相同。
就像一个发射台,只要我按下按钮,我就想播放声音。在这种情况下,鼓掌声。
以下是Java代码:
MainActivity.java
package com.oniichansblog.launchpadify;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.media.MediaPlayer;
public class MainActivity extends AppCompatActivity {
private MediaPlayer clap1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clap1 = MediaPlayer.create(this, R.raw.clap1);
}
public void clap1(View v){
clap1.start();
}
}我只有一个函数clap1(),每次按下按钮都会被反复调用。

如果您想自己检查它,我有一个存储库:GitHub LaunchPadify库
发布于 2017-02-27 13:48:51
我建议不要定义上面的MediaPlayer。只需创建一个新的临时MediaPlayer --每个ButtonClick
new MediaPlayer.create(this, R.raw.clap).start();它会同时播放声音
更新
如果您想在MediaPlayer播放完声音后销毁它,可以使用以下代码来完成此操作
new MediaPlayer.create(getApplicationContext(), R.raw.test)
.start()
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});发布于 2017-02-27 04:42:22
要同时播放几首歌曲,您应该使用AsyncTask并在THREAD_POOL_EXECUTOR上执行它。
如何做到这一点:
线程类
class PlayThread extends AsyncTask<MediaPlayer, Void, Void>
{
@Override
protected Void doInBackground(MediaPlayer... player) {
player[0].start();
return null;
}
}媒体播放器
MediaPlayer[] players = new MediaPlayer[5];
//Then set source to each player...
//...
//Create objects of Thread class
PlayThread[] playThreads = new PlayThread[5];
for (int i = 0; i < 5; i++)
playThreads[i] = new PlayThread();
//Set Media Players there and start play
for (int i = 0; i < 5; i++)
playThreads[i].executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, players[i]);AsyncTask只能同时执行5个线程,其他线程要排队。
SoundPool缓冲区限制为1Mb,因此根本不是一个解决方案。
非常重要:
要同时播放更多的音频音轨,您应该将它们混合到一个缓冲器中。
方法是:将mp3解码为pcm (流模式下的小缓冲区),将其混合到一个字节缓冲区中,并将其放入AudioTrack进行播放。
https://stackoverflow.com/questions/42477742
复制相似问题