Android中的声音池

时间:2015-11-06 15:52:37

标签: java android soundpool

我尝试使用Sound Pool制作一个有很多短音(超过20个)的应用。 但是,当我加载声音时,加载它需要3-10秒。 如何提高装载速度? 这是加载功能

private int loadSound(String filename) {
    AssetFileDescriptor assetFileDescriptor;
    try {
        assetFileDescriptor = assetManager.openFd(filename);
    }
    catch (IOException e){
        e.printStackTrace();
        return -1;
    }
   return soundPool.load(assetFileDescriptor,1);
}

1 个答案:

答案 0 :(得分:1)

  • 以最低的采样率使用.OGG文件,例如96kb / s。这将创建最小的文件,以便加载更快。使用.WAV文件加载/播放声音时出现了很多问题,当我将它们转换为.OGG文件时它们都消失了。

  • 从主UI线程中加载声音。如果您需要知道何时加载声音,请使用OnLoadCompleteListener

    mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            Log.d(TAG, "soundpool onLoadComplete, sampleId = " + sampleId + ", status = " + status);
    
            // ... sound is ready to play            
        }
    });
    
    // sound load should happen off the UI thread
    new Thread() {
        @Override
        public void run() {
            mSoundId = mSoundPool.load(getActivity(), R.raw.sound1, 1);
            // ... load other sounds here
        }
    }.start();
    

    我嵌入了音频文件,因此我可以使用原始资源ID。如果必须从文件加载,请获取所有文件名并将其发送到非UI线程内的加载方法。