Android Soundpool Issue

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Soundpool Issue相关的知识,希望对你有一定的参考价值。

最近,我一直在从事android游戏,但是在添加音乐和其他声音时遇到了问题。我读到Mediaplayers是背景音乐的最佳选择,效果很好,并且我读到Soundpool对于诸如音效之类的短音乐片段是最佳的。但是,我无法使Soundpool正常工作,似乎Soundpool甚至没有加载。

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

//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
答案
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);
    
);

因为您的已加载变量始终为false,所以应在onLoadComplete中执行操作。

另一答案

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

以上是关于Android Soundpool Issue的主要内容,如果未能解决你的问题,请参考以下文章

Android 上 SoundPool 的奇怪错误

Android 11 上的 SoundPool 问题

Android:应用程序终止后 SoundPool 不工作

Android Studio 中的 SoundPool 到 MediaPlayer

Android开发之SoundPool使用详解

Android - MediaPlayer/SoundPool 性能?