【问题标题】:In ml5 pitch detection using crepe model, how to detect pitch above ±2kHz在使用 crepe 模型的 ml5 音高检测中,如何检测 ±2kHz 以上的音高
【发布时间】:2021-01-26 09:32:43
【问题描述】:

我正在成功使用 ml5 的音高检测功能:

问题:

没有检测到高于 ±2000Hz 的音高。我尝试了多种设备并检查了声音在声波图上是否可见,所以这似乎不是麦克风问题。

我认为这可能是采样率限制/库重新采样的结果,因为奈奎斯特频率(最大“可记录”频率)是采样率的一半。

我在本地托管 ml5 源并尝试修改 PitchDetection class

出于性能原因,我看到采样率似乎被重新采样为 1024Hz。这听起来不对,好像我没记错一样,这只允许检测高达 512hz 的频率。我肯定错过了一些东西(或很多)。

我尝试调整费率,但将其增加到 2048 会导致错误: Error when checking : expected crepe_input to have shape [null,1024] but got array with shape [1,2048].

我的问题是:

ml5 PitchDetection class 中有什么我可以修改、配置(可能是不同的模型)以使用 crepe 模型检测高于 2000Hz 的频率吗?

【问题讨论】:

    标签: tensorflow pitch-detection ml5


    【解决方案1】:

    经过更多调查,CREPE 模型本身支持高达 ~1997Hz(见代码)或 1975.5 Hz(见论文)

    关于 CREPE 的论文: https://arxiv.org/abs/1802.06182

    州:

    360 音高值表示为 c1、c2...,选择 360 以使其覆盖 C1 和 B7 之间 20 分音程的六个八度音阶,对应于 32.70 Hz 和 1975.5 Hz

    JS implementation 有这个映射,它将 360 个间隔映射到 0 - 1997Hz 范围:

    const cent_mapping = tf.add(tf.linspace(0, 7180, 360), tf.tensor(1997.3794084376191))

    这意味着,如果没有重新训练模型,我现在可能无法使用它。


    编辑:

    睡个好觉后,我找到了一个适用于我的简单应用程序的简单解决方案。

    本质上,它是对我的音频缓冲区进行重新采样,使其音高降低 2 倍。 CREPE 将 440Hz 的音高检测为 220Hz,我只需将其乘以 2。

    对于我的实时、嘈杂的应用程序,结果仍然比 YIN 算法更一致。

    【讨论】:

    • 你好,我想问一下你是什么意思“它是重新采样我的音频缓冲区,所以它的音高降低了 2 倍”。对于我的小型应用程序,我也试图让检测适用于高于 2k 的音高,并遇到了您的发现。您介意分享一些代码来说明您对声音处理领域的菜鸟的意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2015-12-12
    • 2011-09-23
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多