【问题标题】:Real time pitch shifting from scratch using python使用python从头开始实时音高转换
【发布时间】:2020-07-15 10:24:00
【问题描述】:

我需要一个由两部分组成的项目的帮助:

  1. python 中的实时音高移位器(从头开始)。
  2. 切换来自 2 个不同扬声器的 2 个声音的音高。

我有两个问题:

  1. 我找不到音高转换背后的正确数学方法来从头开始实现它,因此希望能提供简单的解释。
  2. 我需要从 2 个声音中提取音高来切换它们还是有更简单的解决方案?如果没有说明如何从声音中正确提取音高并进行切换,我们将不胜感激。

提前致谢。

【问题讨论】:

    标签: python pitch-shifting pitch-detection


    【解决方案1】:

    librosa 这样做。来源在

    https://github.com/librosa/librosa/blob/main/librosa/effects.py#L253

    评论总结了那里使用的算法,

    # Stretch in time, then resample
    

    为了进一步解释这一点,您可以通过在水平方向上“拉伸”(或挤压)波形来改变音高。例如,这将使中音 C(262 Hz)的振动相距更远,因此频率更低——结果,音高也更低。将其拉伸到两倍(然后填充样本以使采样率保持不变)会将音高降低一个八度音阶到 131Hz 的 C3。

    看起来困难的部分是有效地重采样,但代码中提到了各种算法。

    【讨论】:

    • 感谢您的回答。阅读源代码和你的解释以及一些谷歌搜索让我通过了问题 1。你能帮我解决第二个问题吗?
    • 音高检测与音高调整是不同的问题。您可能需要诸如“进行傅立叶变换并选择最高频率”之类的东西来进行音高检测,但我敢打赌,还有比这更好的算法。
    【解决方案2】:

    需要临时代码的第一部分完成here

    对于两个声音,您肯定需要两个音高,但是,您可以进行无人监督的训练以识别说话者,这样并不难。

    如果它们是混合的并且您想在没有机器学习方法的情况下这样做,您也可以使用包含他们的声音的帧。

    还有很多更强大的方法可以通过 ML 找到扬声器,其中最著名的是 MFCC,在 here 中进行了解释。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 2010-11-09
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多