我正在开发一个 Android 应用程序并尝试使用 SoundPool 在后台播放一些音乐(我知道 MediaPlayer 会更好,但我真的想弄清楚如何使用这个类,因为它让我感到沮丧)。我正在尝试使用静态音乐类加载两个 mp3 文件,并将它们的声音 ID 存储在 HashMap 中,以便在它们准备好使用时访问它们。但是,将它们放在 HashMap 中会给我一个 NullPointerException。
public static void play(Context context, int resource) {
if (sp == null) {
sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
loaded = true;
}
});
sounds.put(R.raw.main, sp.load(context, R.raw.main, 1));
sounds.put(R.raw.game, sp.load(context, R.raw.game, 1));
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
float volume = am.getStreamVolume(AudioManager.STREAM_MUSIC) / am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
sp.play(sounds.get(resource), volume, volume, 0, -1, 1.0f);
} else {
float volume = am.getStreamVolume(AudioManager.STREAM_MUSIC) / am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
sp.play(sounds.get(resource), volume, volume, 0, -1, 1.0f);
}
}
具体来说,我得到一个 NullPointerException 就行了sounds.put(R.raw.main, sp.load(context, R.raw.main, 1));
我尝试在加载声音文件后立即使用 while 循环,该循环只是循环直到“加载”为真,但这只会导致应用程序永远挂起。此外,这两个 mp3 文件都是 400 KB 或更少,所以我认为它们的大小不是问题。任何帮助将不胜感激。