【问题标题】:audio pitch change in androidandroid中的音频音高变化
【发布时间】:2023-03-29 21:46:02
【问题描述】:

我正在开发一个与声音相关的应用程序。我正在尝试将音频声音更改为完全不同的声音,例如机器人声音或使音频回声。我试过 soundpool ,但不知道,有人知道如何实现吗?我只需要一个基本的想法来实现这一点,请帮忙。非常感谢。

【问题讨论】:

  • 您是否考虑过数据的本地 (C) 处理,将其保存到文件(例如 wav)并播放?数据的输入格式将有助于确定最佳实施方式。

标签: android


【解决方案1】:

音高和回声是两个不同的东西。

间距:

您可以通过修改播放速率来改变音高。您可以通过 2 种方式进行操作,使用 audioTracksetPlayBackRate 或使用 SoundPoolsetRate。根据您的需要,AudioTrack 允许对大文件进行更大范围的音调(从 1hz 到 x2),SoundPool 用于音效和 picth 可以在 x0.5 和 x2 之间变化。

回声/混响:

您可以使用AudioEffect 从 API lvl 9 开始通过将其附加到 AudioTrack 或 MediaPlayer 实例来归档它。

【讨论】:

    【解决方案2】:

    对于机器人效果,您需要为音频设置一个恒定的音高。 IE。进行 FFT,将所有内容移入单个频率区间,然后进行逆 FFT 以返回时域。

    对于回声效果,您可以保留一个单独的缓冲区,该缓冲区与您想要的回声延迟一样长。对于每个示例,请执行以下操作(伪代码):

    output = mix(currentSample, echoBuffer[echoPos]*echoVolume)
    echoBuffer[echoPos] = mix(currentSample, echoBuffer[echoPos]*echofeedback)
    echoPos += 1
    

    【讨论】:

      【解决方案3】:

      我正在做一个类似的项目,我可以说你需要研究 DSP(数字信号处理)、PCM 16 格式,最好是傅立叶变换。

      可以使用 AudioRecord 类回送音频(运行一个线程不断填充 AudioTrack 上的缓冲区)

      但是对于您要完成的工作而言,延迟可能太大了。

      祝你一切顺利!

      一些非常好的建议: Android AudioRecord class - process live mic audio quickly, set up callback function

      【讨论】:

      • 我能得到一些链接在哪里可以得到关于 DSP 的介绍
      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2012-11-02
      • 2013-09-30
      • 2012-01-20
      相关资源
      最近更新 更多