3

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

4

3 回答 3

4

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

  • java.lang.Math 用于三角函数计算以用正确的音调填充缓冲区(从浮点数转换为 PCM (int) 后)
  • android.media.AudioTrack 用于音频播放(来自缓冲区)。我想静态模式将是您所需要的 - 更快的响应和更容易操作。但是,音频播放根本不是一件小事,因此您需要了解更多有关 Android 音频系统的信息。当然,一些关于信号处理的基本知识是非常受欢迎的。
  • 你甚至可以使用 android.media.audiofx 添加一些很酷的效果
于 2010-12-13T08:05:23.683 回答
2

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

于 2010-12-13T16:21:04.287 回答
1

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

当您说“声音”时,您只是指一种音调(例如,正弦波、方波、三角波、锯齿波)还是您希望演奏吉他、钢琴等“真实”乐器的声音?

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

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

于 2010-12-13T08:56:52.377 回答