给定一段音频,如果您要计算音频中所有标准音符频率的频率幅度直方图,您将如何检查音频中是否存在 2-3 个特定音符?
这是一种复音检测,类似于这个问题。除了我没有试图全面找到音频中存在的所有音符。我已经知道我在寻找什么笔记,我只是想看看它们是否存在。
我目前(幼稚)的方法是:
- 计算所有频率的平均幅度,用作噪声过滤的阈值。幅度低于此的任何频率我都忽略为背景噪声。
- 对于我正在搜索的每个音符,我计算前 3 个谐波的频率,查找每个频率的幅度,如果它们都高于平均值,那么我假设该音符存在。
我发现这种方法有效,但不是 100% 可靠。我遇到的主要问题是,鉴于乐器的类型,所有音符谐波的幅度在乐器的范围内可能非常不一致,这使得设置噪声阈值很容易出错。
例如,在原声吉他上弹奏高 E4 音符时,基频非常强,并且比所有其他谐波都大。然而,对于较低的 E2 音符,基频是如此之小,它通常被排除在背景噪声之外。并且低音弦中并不总是有一致的模式。一些低音低音弦音符也具有非常强的基础。
我该如何解决这个问题?我知道开放式实时复音检测是一个非常困难且未解决的问题,但是对于仅检查是否存在一些音符及其特定谐波的受限版本,是否有任何解决方案?