如何在安卓系统中同时播放多个声音

3

我尝试了下面的代码,3个音符同时播放。该方法是由按钮点击触发的。然而,在下一个点击事件上,它只播放一个音符,并且应用程序崩溃。我希望每次点击按钮时都能播放3个不同的音符。(我随机选择了这些)

    player = MediaPlayer.create(this, resIdFirstNote);
    player.start();

    player = MediaPlayer.create(this, resIdSecondNote);
    player.start();

    player = MediaPlayer.create(this, resIdThirdNote);
    player.start();

    player.release();

是播放器实例过载了吗?我需要以不同的方式释放它吗? 还是有其他原因呢?

提前感谢。 Leon

2个回答

2

使用 android.media.SoundPool

public class MyActivity extends Acticity implements SoundPool.OnLoadCompleteListener {
    private SoundPool soundPool;
    private final int maxPlaying = 4;
    private final int volume = 1;
    private final int priority = 1;
    private final int no_loop = 0;
    private final float normal_playback_rate = 1f;
    private final Map<Integer, Integer> loadedSongsCache = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        soundPool = new SoundPool(maxPlaying, AudioManager.STREAM_MUSIC, 0);
        soundPool.setOnLoadCompleteListener(this);

        playSong(R.raw.somethingSound);
        playSong(R.raw.somethingSound2);
        playSong(R.raw.somethingSound3);
    }

    private void playSong(int resourceId){
        Integer sampleId = loadedSongsCache.get(resourceId);
        if (sampleId != null) {
            soundPool.play(sampleId, volume, volume, priority, no_loop, normal_playback_rate);
        } else {
            sampleId = soundPool.load(ColorMixActivity.this, songMix.getResourceId(), priority);
            loadedSongsCache.put(songMix.getResourceId(), sampleId);
        }
    }

    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        if (status == 0)
            soundPool.play(sampleId, volume, volume, priority, no_loop, normal_playback_rate);
    }

    @Override
    protected void onDestroy() {
        soundPool.release();
        super.onDestroy();
    }
}

1
你需要创建三个媒体播放器: mp_1、mp_2、mp_3。
在onCreate()方法中:
     MediaPlayer mp_1, mp_2, mp_3;

    mp_1 = new MediaPlayer();
    mp_2 = new MediaPlayer();
    mp_3 = new MediaPlayer();

    mp_1 = MediaPlayer.create(this, R.raw.mp_1);
    mp_2 = MediaPlayer.create(this, R.raw.mp_2);
    mp_3 = MediaPlayer.create(this, R.raw.mp_3);

            mp_1.start();
            mp_2.start();
            mp_3.start();

我表达不够清楚。我想每次播放三个不同的音符。所以每次我都需要创建三个不同的播放器吗? - Leon Nicetomeetya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接