在Media Player中保留多个声音文件(如在SoundPool中)

时间:2014-07-09 20:44:24

标签: android android-mediaplayer soundpool

我的应用目前使用SoundPool来管理所有不同的声音。当用户点击按钮时,应播放声音。由于他可能会非常快速地按下按钮,因此声音应该可以在彼此之上播放 SoundPool无法收听声音整理,也无法获得声音文件的长度。因此我正在考虑使用MediaPlayer 我对MediaPlayer没有经验,但似乎没有那么直接设置快速播放声音的能力。不幸的是我必须检查声音播放完毕的时间,所以我必须使用MediaPlayer重写。

你如何让MediaPlayer能够播放很多短音?

2 个答案:

答案 0 :(得分:0)

媒体播放器的实例一次播放一个声音。最好使用soundpool ..

尝试使用soundpool ...

1)创建一个int,不要让它为null。在onCreate方法之前的某个地方。

2)在onCreate方法中附加资源

3)最后,将逻辑应用于按钮..

    int db1, db2, db3, db4, db5 = 0;

    db1 = sp.load(this, R.raw.snd1, 1);
    db2 = sp.load(this, R.raw.snd2, 1);
    db3 = sp.load(this, R.raw.snd3, 1);
    db4 = sp.load(this, R.raw.snd4, 1);
    db5 = sp.load(this, R.raw.snd5, 1);

    samplebutton5.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

             if (db5 != 0)
              sp.play(db5, 1, 1, 1, 0, 1);


        }
    });

答案 1 :(得分:0)

如果您愿意,若要使用soundpool,可以使用以下方法使用MediaPlayer首先获得声音长度:

private long getSoundDuration(int rawId)
{
    MediaPlayer player =  MediaPlayer.create(activity, rawId);
    int duration = player.getDuration();
    player.release();
    return duration;
}

然后使用处理程序并编写类似:

的内容
handler.postAtTime(this, SystemClock.uptimeMillis() + duration);

处理程序将等到声音完成后再执行下一个任务。