我有一个按钮,当按下时,SoundPool发出短暂的声音效果。该文件是一个16k的MP3。
声音效果适用于数百次按键点击,但在某些时候我收到此错误(声音不再播放点击次数):
E/AudioFlinger( 34): no more track names available
E/AudioTrack( 904): AudioFlinger could not create track, status: -12
E/SoundPool( 904): Error creating AudioTrack
W/AudioFlinger( 34): write blocked for 81 msecs, 4573 delayed writes, thread
xb3f0
的onCreate:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
soundpool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundpool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
// TODO Auto-generated method stub
loaded = true;
}
});
//save the effect somewhere:
MyUtil.regularSound = soundpool.load(this, R.raw.regular_click,1);
的onClick:
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVol = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVol = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float vol = actualVol/maxVol;
if (loaded) {
soundpool.play(MyUtil.regularSound,vol,vol,1,0,1f);
}
在开始另一个意图之前:
Intent i = new Intent(con, EndScreen.class);
if (soundpool != null) {
soundpool.release();
soundpool = null;
}
startActivity(i);
答案 0 :(得分:3)
我只是花了好几个小时处理同样的问题。
-12错误表示分配给应用程序的声音内存不足。使用.finish()
不会释放SoundPool的内存。您必须使用.release()
。
在我的应用程序中,我在启动下一个活动的onclick方法上有一个soundPool.release(),
更改声音格式对我来说也不起作用。
答案 1 :(得分:0)
我得到了同样的错误。我做的是尝试重新取样轨道,将其转换为OGG格式并将质量更改为0.我使用Audacity完成了所有这些
答案 2 :(得分:0)
你尝试编码:这里
/*
private SoundPool mSoundPool;
private SparseArray<Integer> mSoundPoolMap;
private AudioManager mAudioManager;
*/
public static void clear() {
if (mSoundManager != null) {
mSoundManager.mSoundPool = null;
mSoundManager.mAudioManager = null;
mSoundManager.mSoundPoolMap = null;
}
mSoundManager = null;
}