Привет, я новичок в кодировании, связанном со звуком, и я работаю над DLL для отслеживания высоты тона, которую я буду использовать, чтобы попытаться создать своего рода версию видеоигры Rocksmith с открытым исходным кодом в качестве учебного опыта.
До сих пор мне удалось заставить работать БПФ, чтобы я мог определить частоту основного тона (Гц), а затем, используя алгоритм и приведенную ниже таблицу, мне удалось определить октаву (со 2-й по 6-ю) и ноту (от C до B) для сыгранная нота.
Следующим шагом будет обнаружение струны, чтобы я мог определить лад.
Я думал об этом, и теоретически я могу работать с этим, я буду знать, когда пользователь играет правильную ноту, но игра может быть «взломана», потому что, просто используя Hz, игра не может определить, если нота играется в правой струне. Например, 5-я струна + 1-й лад = C4 261,63 Гц равно 6-я струна + 5-й лад = C4 261,63 Гц.
Вероятность того, что пользователь сыграет ноту на неправильной струне и сделает ее правильно, невелика, но я думаю, что было бы действительно хорошо знать струну, чтобы я мог предоставить пользователям обратную связь об ошибках, когда они играют не на той струне (например, вы должны идти на строку вверх или вниз).
Вы знаете, что я могу сделать, чтобы обнаружить строку? Заранее спасибо :)
[править]
Гитара и струны, которые мы используем, влияют на тембр, поэтому анализ тембра кажется непростым способом определения струн:
«Вариации тембра на вашей гитаре вызваны огромным количеством факторов: дизайном и положением звукоснимателя, естественными резонансами и демпфированием в вашей гитаре из-за используемого дерева (это другой вид древесины!) форму, толщину и возраст ваших струн, вашу технику игры, то, как вы нажимаете и защипываете струну, и т. д.".