android 中的声音池

Sound Pool in android

我正在尝试使用 Sound Pool 制作一个带有很多短声音(超过 20 个)的应用程序。 但是当我加载声音时,加载它需要 3-10 秒。 我怎样才能提高加载速度? 这是 loading

的功能
private int loadSound(String filename) {
    AssetFileDescriptor assetFileDescriptor;
    try {
        assetFileDescriptor = assetManager.openFd(filename);
    }
    catch (IOException e){
        e.printStackTrace();
        return -1;
    }
   return soundPool.load(assetFileDescriptor,1);
}
  • 以您可以容忍的最低采样率使用 .OGG 文件,例如 96kb/s。这将创建最小的文件,因此它们加载速度更快。我在使用 .WAV 文件的 loading/playing 声音方面遇到了很多问题,当我将它们转换为 .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 线程内的加载方法。