每当用户触摸瓷砖时,我的应用会发出一声短促的哔声。听起来很完美。然而,如果用户拖动他们的手指,它将快速连续多次发出哔哔声,这也起作用,但也会产生噼啪声,静态的噪音。我正试图摆脱噼啪声。
我尝试了许多不工作的东西:
代码:
public void setup() {
sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
sndBeep = sp.load(panel.act.getApplicationContext(), R.raw.beep, 1);
}
public void play() {
// sp.stop(sndPlaying); -- this actually makes the crackling noise worse
// sndPriority++; -- this had no effect
sndPlaying = sp.play(sndBeep, 1.0f, 1.0f, sndPriority, 0, sndFreq);
}
答案 0 :(得分:2)
噪音的发生是因为最后一声和下一声蜂鸣声之间的暂停。所以,实际上你应该减少每次通话的优先级。
这应该完成最后一次哔哔声并在此之后开始新的哔哔声。
还有机会得到一些噪音。如果声音在开始或结束时包含 - 甚至是微小的噪音,那就简单了。
答案 1 :(得分:0)
我不知道爆裂的原因,但我有两点建议:
将maxStreams设置为大于1,重新递增优先级并查看它是否有一些效果。
在加载声音文件之前设置setOnLoadCompleteListener:
sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundpool, int sampleId, int status) {
loaded = true;
}
});
然后在播放文件之前检查标志,
if (loaded)
sndPlaying = sp.play(sndBeep, 1.0f, 1.0f, sndPriority, 0, sndFreq);