我想编写一个应用程序来转置 wav 文件播放的密钥(为了好玩,我知道有些应用程序已经这样做了)......我对如何实现这一点的主要理解是
1)将音频文件切成非常小的块(比如每秒 1/10)
2) 在每个块上运行 FFT
3)根据我想要的键将频率空间向上或向下移相
4)使用逆FFT将每个块返回到时域
5)将所有块粘在一起
但是现在我想知道当我尝试将它们重新粘合在一起时,转换后的块是否不再连续。有什么想法我应该如何做到这一点以保证连续性,还是我什么都不担心?
将每个块的时间样本重叠一半,以便第一个块之后的每个块由前一个块的最后 N/2 个样本和 N/2 个新样本组成。确保在转换之前对样本应用一些窗口。
移频后,执行逆 FFT 并使用每个块的中间 N/2 个样本。您需要在 IFFT 之后调整最终增益。
当然,将时间样本与正弦波混合,然后进行低通滤波也会在时域中提供相同的偏移。混频器的频率将是所需的频率差。
找到这篇关于该主题的精彩文章,供以后尝试的任何人使用!
您可能必须在块之间找到一个过零点,才能将各个 wav 重新粘合在一起。否则,您可能会发现您在块之间获得点击或弹出。