Android Soundpool问题

时间:2014-03-22 02:58:05

标签: android audio soundpool

最近我一直在研究一款Android游戏,但在添加音乐和其他声音时遇到了问题。我读到Mediaplayers是背景音乐的最佳选择,效果很好,我读到Soundpool是音效等短音乐剪辑的最佳选择。但是,我无法让Soundpool工作,看起来Soundpool甚至没有加载。

我做了更多研究,发现了很多关于Soundpool缺乏支持的噩梦故事,所以我应该只使用媒体播放器播放所有音频吗?这有效吗?

//My Code
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

    soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int mySoundId, int status) {
            loaded = true;
        }
    });

    if(loaded==true){
     soundId = soundPool.load(this, R.raw.sound1, 1);
     soundPool.play(soundId, 1, 1, 1, 0, 1f);}
    else{
         System.exit(0);
     }
            //Forces the program to exit everytime

2 个答案:

答案 0 :(得分:0)

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int mySoundId, int status) {
        loaded = true;
        soundId = soundPool.load(this, R.raw.sound1, 1);
        soundPool.play(soundId, 1, 1, 1, 0, 1f);
    }
});

因为你的加载变量总是假的,你应该在onLoadComplete中做一些事情。

答案 1 :(得分:0)

SoundPool#load方法是异步的,应该在调用onLoadComplete之后播放声音

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int mySoundId, int status) {        
        soundPool.play(mySoundId, 1, 1, 1, 0, 1f);
    }
});

soundPool.load(this, R.raw.sound1, 1);