【发布时间】:2013-09-12 17:22:52
【问题描述】:
您好,我是音频相关编码方面的菜鸟,我正在研究音高跟踪 DLL,我将使用该 DLL 来尝试创建一种开源版本的视频游戏 Rocksmith 作为学习体验。
到目前为止,我已经设法让 FFT 工作,因此我可以检测音高频率 (Hz),然后通过使用算法和下表,我可以设法确定八度音阶(第 2 到第 6)和音符(C 到B) 演奏音符。
下一步是检测琴弦,以便确定音品。
我一直在考虑它,理论上我可以使用它,我会知道用户何时演奏正确的音符,但游戏可能是“Hack”,因为仅使用 Hz 游戏无法检测一个音符是否在正确的字符串中播放。例如 5 弦 + 1 品 = C4 261.63Hz 等于 6 弦 + 5 品 = C4 261.63Hz。
让用户在错误的字符串中弹奏音符并使其正确的可能性很低,但我认为了解字符串非常好,这样我可以在用户弹错时向用户提供一些错误反馈字符串(就像你应该向上或向下移动一个字符串)。
你知道我可以做些什么来检测字符串吗?在此先感谢:)
[编辑]
我们使用的吉他和琴弦会影响音色,因此分析音色似乎不是检测琴弦的简单方法:
“吉他音色的变化是由许多因素造成的,包括拾音器设计和位置、吉他的自然共振和阻尼由于使用的木材(这是一种不同的木材!)和它的结构和形状、琴弦的规格和年龄、演奏技巧、按弦和拨弦的位置等等。”
【问题讨论】:
-
我不确定这是否可行,因为如果调整得当,两个琴弦都会发出相同的音符。不知道这个时候电脑能不能检测出音色上的差异。
-
同意 NWard - 同一个音符在较低的琴弦上演奏时会有不同(稍微圆润)的音色,但我怀疑你会很幸运地检测到这一点 - 它可能会稍微容易一些一种单一的、已知的乐器。我假设您对定制皮卡不感兴趣? :)
-
我只会将它用于标准调音的电吉他。从快速研究看来,音色检测是一项过于复杂的任务......我可能必须创建一个算法,以便最好地识别用户错误,将播放的音符与预期音符附近的音符进行比较。
标签: c# audio fft guitar pitch-tracking