【问题标题】:Playing sound of a particular frequency in android在android中播放特定频率的声音
【发布时间】:2010-12-13 06:30:45
【问题描述】:

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

【问题讨论】:

    标签: android soundpool javasound


    【解决方案1】:

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

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

    【讨论】:

    • 我会试试这个并在遇到任何困难时回复你,我相信我会找到的.. :p.. 非常感谢 Desiderio... :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这是一个极其复杂的问题,尽管看起来不像。

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

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

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

      【讨论】:

      • 同意。我试图尽可能简单地回答它。只需提及真实仪器的物理建模是可能的,例如使用Karplus-Strong 算法。所以,利用目前安卓智能手机的计算能力,应该可以实现实时合成。
      • 我正在寻找演奏乐器的声音。那么除了你建议的方法之外,没有其他方法了吗?在那种情况下,“样本”的选择将非常重要……?
      • @ashwin 我相信还有 MIDI。
      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多