在安卓系统中播放特定频率的声音

3

我希望能够在安卓设备上根据用户输入播放特定频率的声音,有点类似于吉他应用程序。有人可以告诉我如何做吗?我需要在res\raw文件夹中拥有所有频率声音吗?

3个回答

4
不需要将其存储在资源中。我认为更好的方法是实时合成音调。为此,您需要以下内容:
  • java.lang.Math用于三角函数计算,以使用正确的音调填充缓冲区(在从浮点数转换为PCM(int)后)
  • android.media.AudioTrack用于播放音频(来自缓冲区)。我想静态模式可能是您需要的-响应更快,操作更容易。然而,音频播放绝不是简单的任务,因此您需要了解有关Android上的音频系统的更多信息。当然,一些关于信号处理的基础知识更加受欢迎。
  • 您甚至可以使用android.media.audiofx添加一些酷炫效果

我会尝试这个并在遇到任何困难时与您联系,我相信我会找到困难。。:p.. 非常感谢 Desiderio... :) - Ashwin

2
将声音发送到一个AudioTrack实例并实时更改其采样率。

1

尽管它看起来并不复杂,但这是一个非常复杂的问题。

当你说“声音”时,你只是指简单的音调(例如正弦、方波、三角波、锯齿波),还是想播放像吉他、钢琴等“真实”的乐器声音?

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

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


1
同意。我尽可能简单地回答了这个问题。只是提一下,使用Karplus-Strong算法可以对真实乐器进行物理建模。因此,利用当前Android智能手机的计算能力,应该可以实现实时合成。 - Zelimir
我正在寻找播放乐器声音的方法。那么除了你建议的方法,还有其他方法吗?如果是这样,选择“样本”的选择将非常重要,对吧? - Ashwin
@ashwin 我相信还有MIDI。 - ksoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接