在android中播放特定频率的声音

时间:2010-12-13 06:30:45

标签: android soundpool javasound

我想根据用户输入在android中播放特定频率的声音,有点类似于吉他应用。谁能告诉我怎么做?我需要在res \ raw文件夹中包含所有freq声音吗?

3 个答案:

答案 0 :(得分:4)

不,您不需要将其存储在资源中。我认为更好的方法是实时合成音调。为此,您需要以下内容:

  • java.lang.Math用于三角函数计算以正确的音调填充缓冲区(从float转换为PCM(int)之后)
  • android.media.AudioTrack用于音频播放(来自缓冲区)。我认为静态模式将是您所需要的 - 更快的响应和更容易操作。然而,音频播放根本不是一项微不足道的任务,因此您需要了解有关Android上音频系统的更多信息。当然,有关信号处理的一些基本知识非常受欢迎。
  • 您甚至可以使用android.media.audiofx
  • 添加一些很酷的效果

答案 1 :(得分:2)

将声音发送到AudioTrack实例并动态更改其采样率。

答案 2 :(得分:1)

这是一个非常复杂的问题,即使它看起来不像。

当你说'声音'时,你只是指一个音调(例如正弦,方形,三角形,锯齿波)或你是否想播放吉他,钢琴等“真实”乐器的声音?

如果它是第一个(简单的音调),那么Desiderio的答案可能会在正确的轨道上,但如果你想要“真正的”insrument声音,那么你需要在/ res / raw或你的中有一个简短的'样本' / assets目录。

您可以将它们加载到SoundPool实例中并使用它以不同的“速率”进行播放,例如,2的“速率”将是速度的两倍,频率加倍,从而增加一个八度。 '速率'为0.5将是速度的一半,因此将声音降低八度。