问题标签 [pitch-detection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
23 浏览

android - 用于音高检测的带有 Speex 回声消除的 TarsosDSP

在我的情况下,Speex 回声消除工作正常。它提供输出作为缓冲区。我想将该缓冲区作为输入到 TarsosDSP 中,它将检测清洁声音的音高。我该怎么做?

0 投票
0 回答
138 浏览

algorithm - 给定选择标准的复音音高检测算法?

是否有任何已知的音高检测算法来检测代表复调音乐的音频中的多个特定音符?

我看到的所有用于复调音乐的算法,如 MUSIC 或 ESPRIT,都集中在开放式域上,你不知道音频包含哪些音高,并试图使用算法来检测它们。这是可以理解的一个非常困难的问题。

相反,我对一个更受限制的域感兴趣,在那里你会得到一个包含 2-6 个特定注释的列表,你需要检查这些注释是否存在于音频中。我认为这将是一个更容易的问题,尽管仍然不是微不足道的,但是我在查找有关该主题的代码或学术论文时遇到了麻烦。

我的领域是一个应用程序,音乐家将在他们的乐器上演奏特定的音符,程序会向他们提供反馈,表明他们正确地演奏了这些特定的音符。

我目前正在使用一些 NodeJS 和 C++ 代码来执行此操作,而我目前的(幼稚)方法是:

  1. 计算 FFT,并根据所有标准音高的频率范围对频率进行分级。
  2. 计算所有频率的中值幅度以用作噪声过滤的阈值 (T)。幅度低于此的任何频率我都忽略为背景噪声。
  3. 对于我正在搜索的每个音符,我计算前 3 个谐波的频率,查找每个频率的幅度,如果它们都高于平均值,那么我假设该音符存在。

这有点工作,但我遇到的问题是校准 T 阈值。如果它太高,它就会变得过于挑剔,并且不会检测到任何音符,除非它们非常响亮。如果它太低,它的辨别力不够,它会返回误报。

潜在的困难在于,对于许多乐器来说,这些音符的谐波幅度并没有一致的模式。有些具有很大的基波,随后的每个谐波都会迅速减弱。一些低音音符几乎没有基音,而其他泛音则非常缓慢地减弱。因此,当我发现 T 阈值适用于高音时,它不适用于低音,反之亦然。

而且由于我使用中值幅度来进行噪声过滤,当两个音符以不相等的音量一起演奏时,较大的音符可能会导致较柔和的音符被过滤掉,即使较柔和的音符仍然比任何其他音高响亮得多在 FFT 中。很难找到任何甜蜜点。

在这种情况下我应该使用任何信号处理或滤波技术来提高准确性吗?

0 投票
1 回答
38 浏览

swift - 将音节录音修剪到仅元音部分

对于一个中文学习应用程序,我们让用户记录一个音节,然后我们使用语音识别来评估发音是否正确。

每个汉语音节都可以用具有不同含义的不同声调(音高差异)发音。我们发现谷歌翻译和 Swift Speech 框架都不够准确,无法确定发音是否正确。因此,我们使用贝多芬从音频中检测音高,以在语音识别 API 之外进行评估。

挑战在于,在汉语中,声调仅在音节的元音中发音。因此,如果用户只发元音,例如“a”,贝多芬就可以很好地工作。但是在诸如“san”之类的音节中,结果被辅音“s”和“n”所掩盖。

所以我正在寻找一种方法将音节录音修剪为仅元音,以便我们可以仅在元音上使用贝多芬并正确检测中文音调。我也很高兴知道是否有人对如何应对这一挑战有更好的想法。

最好的,保罗

0 投票
0 回答
9 浏览

javascript - 降噪 - Pitchy JS

我有这段代码,它获取麦克风的实时音频,将其转换为频率,最后显示时间与频率图。它工作正常。

我需要做什么?当我从麦克风获取音频时,录制的音频中有噪音,频率波动。

我需要消除/减少噪音/背景干扰并获得更平滑的输出 - 音频。

代码