我尝试使用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);
}
答案 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线程内的加载方法。