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 线程内的加载方法。
我正在尝试使用 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 线程内的加载方法。