问题标签 [pitch-tracking]

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 投票
3 回答
3215 浏览

c# - 在电吉他上进行音高跟踪时如何检测弦?

嗨,我是音频相关编码方面的菜鸟,我正在研究音高跟踪 DLL,我将使用它来尝试创建一种开源版本的视频游戏 Rocksmith 作为学习体验。

到目前为止,我已经设法让 FFT 工作,因此我可以检测音高频率 (Hz),然后通过使用算法和下表我可以设法确定八度音阶(第 2 到第 6)和音符(C 到 B)演奏音符。

下一步是检测琴弦,以便确定音品。

在此处输入图像描述

我一直在考虑它,理论上我可以使用它,我会知道用户何时演奏正确的音符,但游戏可能是“Hack”,因为仅使用 Hz,游戏无法检测到音符以正确的字符串播放。例如第 5 弦 + 1 品 = C4 261.63Hz等于6 弦 + 5 品 = C4 261.63Hz

让用户在错误的字符串中弹奏音符并使其正确的可能性很低,但我认为知道字符串真的很好,这样我可以在用户弹奏错误的字符串时向用户提供一些错误反馈(比如你应该向上或向下移动一个字符串)。

你知道我能做些什么来检测字符串吗?提前致谢 :)

[编辑]

我们使用的吉他和琴弦会影响音色,因此分析音色似乎不是检测琴弦的简单方法:

“吉他音色的变化是由许多因素造成的,包括拾音器设计和位置、吉他的自然共振和阻尼,由于使用的木材(这是一种不同的木材!)以及它的结构和形状,你的弦的规格和年龄,你的演奏技巧,你在哪里按弦和拨弦,等等。”

0 投票
1 回答
172 浏览

java - 如何使用 FFT 变换数组检测音高?

所以我有一个转换后的复数数组。我不知道如何处理返回的数据。我尝试计算每个元素的幅度,将具有最高元素的元素指定为正确频率,但发现我经常得到像 5,000hz 这样的奇怪数字。我可以对返回的数据执行更好的操作来确定音高吗?

注意:我想将音调用作语音活动检测算法的一部分。

0 投票
0 回答
232 浏览

android - 如何计算android中声音的最大振幅?

我在这里寻找一种计算最大幅度出拳声音的功能。我在我的演示应用程序中使用了 android 语音识别 API,但它正在计算所有声音(噪音),并且计数运行得像子弹速度一样。我只想计算影响沙袋声音的拳击并且不想错过任何拳击,这个计数不会改变音乐、说话和打喷嚏的声音。

0 投票
1 回答
6772 浏览

matlab - 谐波乘积谱的 MATLAB 代码

有人能告诉我如何使用 MATLAB 实现谐波乘积谱,以在存在谐波的情况下找到音符的基频吗?我知道我应该对我的信号进行多次下采样(当然是在执行 fft 之后),然后将它们与原始信号相乘。

说我的fft信号是“FFT1”

那么代码大致是这样的

这段代码正确吗???我想知道我是否正确地进行了下采样,并且由于每个变量的长度不同,因此将它们相乘会导致矩阵维度错误。我真的需要一些真正的快速帮助,因为它对于项目工作...真的很绝望....谢谢提前....

0 投票
3 回答
4583 浏览

c# - 音频音高分析

我对声音分析非常陌生,实际上我第一次这样做我需要做的就是分析 mp3 文件或任何其他格式并检测音高变化。只是我想修剪出现高音的音频文件。

声波

我已经尝试过 NAudio 和几篇文章,但无济于事,所以如果有人指导我朝着正确的方向学习一些教程和使用什么 API。

0 投票
1 回答
1322 浏览

matlab - 基于音高跟踪找到音高同步窗口

如评论链接中所见,通过 Talkin 的语音盒中音高跟踪的鲁棒算法(函数名称为“fxrapt”)提取了音高。

http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/doc/voicebox/fxrapt.html

但是,我需要通过检测每个音调周期内的最大幅度来找到 LP 误差信号中的音调脉冲。对于每个音调脉冲,两个音调周期长的汉明窗。如果 T(i-1), T(i), T(i+1) 表示三个连续音调脉冲的位置。如何设计跨度从 T(i-1) 到 T(i+1) 的音调脉冲的分析窗口,如下面的链接图所示?

在此处输入图像描述

我正在寻找它的 MATLAB 代码。如果有人可以帮助我,我将不胜感激。谢谢。

0 投票
2 回答
8873 浏览

matlab - 在语音帧中查找音高

我有一个语音框架。当我计算 LP 残差时,我无法真正估计音高。我需要找到每一帧的音高周期。但是,当我使用频域和时域时,它们都不能正常工作。有人可以帮我吗?我需要它来查找基于音高跟踪的音高同步窗口

我的代码的结果就像在此处输入图像描述 谢谢

MATLAB代码如下:

或者

0 投票
3 回答
898 浏览

audio - 通过自动相关的音高检测在更高的音高上失败

我正在尝试使用自相关从录制的语音(44.1 kHz)中获取音高等级。我在做什么基本上在这里描述:http://cnx.org/content/m11714/latest/也在这里实现:http ://code.google.com/p/yaalp/source/browse/trunk/csaudio /WaveAudio/WaveAudio/PitchDetection.cs(使用PitchDetectAlgorithm.Amdf的部分)

因此,为了检测音级,我建立了一个具有 C2 到 B3 频率(2 个八度音阶)的归一化相关性的数组,并选择具有最高值的数组(首先进行“1 - 相关性”转换,因此不搜索最小但最大)

我用生成的音频(简单的窦)测试了它:

但它只适用于低于 B4 的输入频率。研究生成的数组,我发现从 G3 开始,另一个 peek 进化了,最终变得比正确的更大。并且我的 B4 被检测为 E。更改分析频率的数量根本没有帮助。

我的缓冲区大小为 4000 个样本,B4 的频率约为 493Hz,所以我想不出失败的原因。频率或缓冲区大小是否有更多限制?那里出了什么问题?

我知道我可以像 Performous 一样使用 FFT,但是使用这种方法看起来很简单,并且还提供了可用于显示可视化的加权频率。我不想那么轻易地把它扔掉,至少明白为什么会失败。

更新:使用的核心功能:

使用该功能,音高/音调是(伪代码)

我还尝试使用实际的自相关:

但是除了 B4 作为 E 之外,还没有获得 A3 作为 D

注意:我不是除以 Bufferlength 而是除以实际比较的样本数。不确定这是否正确,但这似乎是逻辑。

0 投票
0 回答
1023 浏览

signal-processing - 计算时域与 FFT 的自相关

我正在使用 ACF 和 AMDF 的组合进行音高检测。
首先,我在时域中使用 ACF,如下所示:

并对要考虑的所有滞后重复最后 2 个步骤。(实际上是对非整数滞后进行插值)

现在我发现你可以使用 FFT 来计算 ACF:

然后 actBuf[lag] 是该滞后的 ACF 值。

我预计结果将相同或至少相似。但他们不是。例如,对于 65.4Hz 正弦波(注意 C2),我使用时域方法得到 ~0.2,对应的滞后为 674.25,使用 fft 得到 ~536.795。

我错过了什么?还是两者都不一样?

0 投票
2 回答
874 浏览

matlab - 在 MATLAB 中比较乐器的“音调”

我试图找到一种方法来比较使用 MATLAB 在不同乐器上播放的相同音符的短 500 毫秒录音的相似性。

详细讨论这个特定主题:我是一名音乐专业的学生,​​我的任务是客观地确定各种现代低铜管乐器的音调,以确定什么乐器应该取代过时的“ophicleide”或低音键号角。我首先对它的光谱仪和其他 6 种仪器进行了视觉比较,但这种方法过于主观。

我用相同的麦克风、设备、增益电平和相同的音符录制了所有乐器。出于这个原因,我相信信号足够相似,可以使用 MATLAB 工具。

我相信比较将fft是最准确的计算。我首先尝试了频域相关性,并测试了相同音调的不同片段(eueu2是变量)

这是朝着正确方向迈出的一步,但是当我比较不同的信号时,我似乎得到了相反的结果:(上低音号和 ophicleide 听起来几乎相同)

次中音号和低音单簧管听起来完全不同,但这显示出更高的相关性

我尝试了一个我在网上找到的归一化最大互相关幅度公式,但我得到了相同的结果

比较其他样本时,我得到了类似的结果

相比

上低音号和低音单簧管 (basscl) 具有完全不同的声音和完全不同的谐波系列,但这些公式显示出比上低音号和 Ophicleide 更紧密的相关性,它们的频段看起来几乎是相同的匹配。

我担心这些相关性显示了真实音高的相关性(我在所有这些乐器上演奏相同的音符,但 Ophicleide 可能失调高达 1 Hz)它也可能是相位的原因,甚至总振幅。

有谁知道比较这些复杂波形的谐波比例的更好的清晰方法?

还是我在叫错树?