android - 使用 SoundPool 播放多个声音时如何消除噼啪声

标签 android soundpool

每当用户触摸图 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/

相关文章:

android - 将 screenOrientation 设置为纵向不起作用

Android:如何混合 2 个音频文件并使用 soundPool 重现它们

android - SoundPool 声音只停止一次?

android - 如何同时播放多个声音文件?

android - 如何以编程方式更改 AppCompat v21 工具栏主题?

java - 如何解决 android Admob 中的无广告配置问题?

android - 如果背景上有图像,则不显示文本

java - 为什么android.database.DatabaseUtils不会抛出SQLException等异常?

java - 单独的类来播放声音

android - SoundPool 正在加载声音,但每次我播放它时它都显示 "sample ___ is not ready"?