傅立叶变换以转置 wav 文件的密钥
Posted
技术标签:
【中文标题】傅立叶变换以转置 wav 文件的密钥【英文标题】:fourier transform to transpose key of a wav file 【发布时间】:2010-04-12 19:23:54 【问题描述】:我想编写一个应用程序来转置 wav 文件播放的键(为了好玩,我知道有些应用程序已经这样做了)...我对如何实现这一点的主要理解是
1) 将音频文件切成非常小的块(比如每秒 1/10)
2) 对每个块运行 FFT
3) 根据我想要的键将频率空间向上或向下移相
4) 使用逆 FFT 将每个块返回到时域
5) 将所有块粘在一起
但现在我想知道,当我尝试将转换后的块重新粘合在一起时,它们是否会不再连续。有什么想法我应该如何做到这一点以保证连续性,还是我什么都不担心?
【问题讨论】:
【参考方案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 重新粘合在一起。否则,您可能会发现您在块之间获得了点击或弹出。
【讨论】:
是的,这就是我所关心的,但仅仅让它在边界处连续可能还不够好,我怀疑不连续的梯度甚至二阶导数也可能给我带来点击。以上是关于傅立叶变换以转置 wav 文件的密钥的主要内容,如果未能解决你的问题,请参考以下文章