你好,我是一个音频编码方面的新手,正在开发一个音高追踪DLL,我将使用它来尝试创建一种类似于视频游戏Rocksmith的开源版本,以此作为学习经验。
到目前为止,我已经成功地让FFT工作了,所以我可以检测出音高频率(Hz),然后通过使用算法和下表,我可以确定演奏音符的八度(2至6)和音符(C至B)。
下一步是检测弦,以便我可以确定品位。
我一直在思考,在理论上,我可以处理这个问题,我将知道用户何时演奏正确的音符,但是游戏可能会被“黑客攻击”,因为仅使用Hz,游戏无法检测是否在正确的弦上演奏音符。例如第五弦+第一品位=C4 261.63Hz等同于第六弦+第五品位=C4 261.63Hz。
用户在错误的弦上演奏正确的音符并得分的机会很低,但我认为了解弦很重要,这样我就可以在他们弹奏错误的弦时向用户提供一些错误反馈(例如,您应该向上或向下移动弦)。
你知道我能做什么来检测弦吗?先谢谢了:)
[编辑]
我们使用的吉他和琴弦会影响音色,因此分析音色似乎不是检测弦的简单方法:
"吉他音色的变化由许多因素产生,包括拾音器的设计和位置、由于所使用的木材(这是一种不同类型的木材!)以及其结构和形状而产生的自然共鸣和阻尼、弦的规格和年龄、您的演奏技巧、您按弦和弹弦的位置等等。"