初始化音频
SoundPool sp;
int error_sound;
int del_sound;
int level_complete_sound;
int level_complete_123;
// Аудио
sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
error_sound = sp.load(this, R.raw.error_sound, 1);
del_sound = sp.load(this, R.raw.del_sound, 1);
level_complete_sound = sp.load(this, R.raw.level_complete_sound, 1);
level_complete_123 = sp.load(this, R.raw.level_complete_123, 1);
然后我在按下时重复使用一种或另一种声音
sp.play(error_sound, 1, 1, 0, 0, 1);
一切正常,但偶尔,尤其是当活动重新启动时,声音通过一个,并发生错误
E/AudioMixer: AudioMixer::getTrackName out of available tracks
E/AudioFlinger: no more track names available
E/AudioFlinger: createTrack_l() initCheck failed -12; no control block?
E/AudioTrack: AudioFlinger could not create track, status: -12
E/SoundPool: Error creating AudioTrack
音频文件的大小和持续时间都很小,大约为 3-6 秒。据我了解,错误本身表明由于内存不足而无法加载曲目。但我不明白我到底做错了什么。请告诉我。
明白了。该错误表示已超出下载曲目的限制。该限制是为整个系统设置的,如果我没记错的话,它等于
32。重新启动时,activity每次都会加载声音,从而使我们更接近32音轨的极限。为了消除这种情况,有必要清洁SoundPool.初始化时,我们指定:
并在重启时清理: