每当用户触摸图 block 时,我的应用程序都会发出短促的蜂鸣声。听起来很完美。然而,如果用户拖动手指,它会快速连续多次发出嘟嘟声,这种方法虽然有效,但也会发出噼啪作响的静态噪音。我正在努力消除裂纹。
我尝试过很多但不起作用的方法:
- 将 SoundPool 最大流增加到 8 或 16 - 没有效果
- 增加 sndPriority 以便每次调用 play() 都使用比上一次更高的优先级 - 没有效果
- 对前一个声音调用 sp.stop(sndPlaying) - 这实际上会使爆裂声变得更糟
- 在具有不同 Android 操作系统版本的两台不同设备上进行测试,裂纹相同
- 我已经在 Audacity 中修改了声音文件,并且我有理由相信爆裂声不是声音文件的问题
代码:
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);
}
最佳答案
噪音的产生是因为最后一次和下一次蜂鸣声之间有一点停顿。因此,实际上您应该降低每次调用的优先级。
这应该会结束最后一次蜂鸣声,并在此之后开始新的蜂鸣声。
仍然有机会听到一些噪音。只要声音在开始或结束时包含(即使是微小的)噪音即可。
关于android - 使用 SoundPool 播放多个声音时如何消除噼啪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202230/