【问题标题】:fourier transform to transpose key of a wav file傅立叶变换以转置 wav 文件的密钥
【发布时间】:2010-04-12 19:23:54
【问题描述】:

我想编写一个应用程序来转置 wav 文件播放的键(为了好玩,我知道有些应用程序已经这样做了)...我对如何实现这一点的主要理解是

1) 将音频文件切成非常小的块(比如每秒 1/10)

2) 对每个块运行 FFT

3) 根据我想要的键将频率空间向上或向下移相

4) 使用逆 FFT 将每个块返回到时域

5) 将所有块粘在一起

但现在我想知道,当我尝试将转换后的块重新粘合在一起时,它们是否会不再连续。有什么想法我应该如何做到这一点以保证连续性,还是我什么都不担心?

【问题讨论】:

    标签: wav fft transpose


    【解决方案1】:

    将每个块的时间样本重叠一半,以便第一个块之后的每个块由前一个块的最后 N/2 个样本和 N/2 个新样本组成。请务必在转换之前对样本应用一些窗口。

    移频后,执行逆 FFT 并使用每个块的中间 N/2 个样本。您需要在 IFFT 之后调整最终增益。

    当然,将时间样本与正弦波混合,然后进行低通滤波也会在时域中提供相同的偏移。混频器的频率将是所需的频率差。

    【讨论】:

    • 我认为混音器可能更符合 OP 的要求。但如果涉及过滤器,则重叠保存 FFT 技巧非常好。有关详细信息,请参阅en.wikipedia.org/wiki/Overlap-save_method。如果你做对了,你也不需要一个窗口——这个窗口更适合分析应用程序。
    • @larry 我不明白这是如何解决不连续性的......看起来结果信号通常与过去的块不同步。至于混频正弦波,我不熟悉这种方法。
    【解决方案2】:

    对于语音,您可能想查看PSOLA - 这是pitch-shifting 和/或time stretching/compression 的流行算法,它比基本的重叠添加方法稍微复杂一点,但并不复杂。

    如果您需要处理非语音样本,例如音乐,然后有several possibilities,但是其他答案中提到的重叠添加FFT/修改/IFFT方法可能是最好的选择。

    【讨论】:

    • 我的印象是 PSOLA 主要用于语音而不是音乐。这是正确的吗?
    • @tom10: 好点 - 我不知道它有多好用,例如音乐。我想如果这是针对语音以外的应用程序,则更基本的重叠添加方法可能更合适。我会相应地编辑我的答案。
    【解决方案3】:

    在该主题上找到this great article,供以后尝试的人使用!

    【讨论】:

      【解决方案4】:

      您可能必须在块之间找到一个过零点,才能将各个 wav 重新粘合在一起。否则,您可能会发现您在块之间获得了点击或弹出。

      【讨论】:

      • 是的,这就是我所关心的,但仅仅让它在边界处连续可能还不够好,我怀疑不连续的梯度甚至二阶导数也可能给我带来点击。
      猜你喜欢
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多