gpt4 book ai didi

java - Android SoundPool load()返回null

转载 作者:行者123 更新时间:2023-12-03 02:17:11 24 4
gpt4 key购买 nike

我正在开发一个Android应用程序,并尝试使用SoundPool在后台播放一些音乐(我知道MediaPlayer对此会更好,但我真的想弄清楚如何使用此类,因为这让我感到沮丧)。我正在尝试使用静态Music类加载两个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);
}
}

具体来说,我在 sounds.put(R.raw.main, sp.load(context, R.raw.main, 1));行上收到了NullPointerException

我已经尝试在加载声音文件之后立即使用while循环,该循环只是一直循环直到“loaded”为真,但这只会导致应用程序永久挂起。此外,两个mp3文件的大小均不超过400 KB,因此我认为它们的大小不是问题。任何帮助将不胜感激。

最佳答案

试试这个

sounds.load(collection.getContext(), R.raw.main, 1);

还是这个方法
int sound_id = mContext.getResources().getIdentifier("myownsound", "raw",
mContext.getPackageName());
soundPool.load(mContext, sound_id, 1);

或看看这个链接

Soundpool

关于java - Android SoundPool load()返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com