Подумайте о MIDI как о том, как определить ключи для фортепиано. Коды и ключи взаимно однозначны. Это не похоже на гитару или скрипку, где один и тот же тон можно воспроизводить в нескольких местах.
Если вы хотите представить большую свободу, которую вы имеете на гитаре в каком-то формате данных, вам придется найти или изобрести другой формат. MIDI не будет кодировать то, что вы хотите.
Тем не менее, есть косвенный способ, которым вы можете это сделать, и это связано с разработкой эвристики относительно того, где играть заметку, учитывая скользящее окно заметок, которое было раньше. В зависимости от того, что вы только что играли, данная нота может быть проще в той или иной последовательности, и вы можете рассчитать, что с учетом модели руки и пальцев. Исходя из этого, вы можете конвертировать MIDI в гитару таким образом, чтобы MIDI легче всего играть. Если у вас есть часть гитарной музыки, которая уже следует этим правилам, вы можете закодировать ее на MIDI и затем декодировать ее позже.
Но, возможно, ваш вопрос более общий. Да, вы можете нанести MIDI-ноту на гитару. Наивный метод состоит в том, чтобы сделать отображение каждой ноты, играемой на гитаре, и вы решаете между эквивалентными альтернативами, выбирая ближайшую к гайке. Это было бы простое сопоставление «один к одному», но не всегда было бы самым легким в игре.
Если вы действительно хотите сделать это правильно, вы тщательно проанализируете музыку, чтобы определить оптимальную позицию рук и место, где должно измениться положение руки, а затем вы будете ассоциировать MIDI-ноты с ладами и строками на основе на что легче всего достичь на основе позиции руки. Оптимальное решение, вероятно, NP-полное или худшее, вы, вероятно, захотите разработать приблизительное решение, основанное на некоторых правилах о том, как часто и как далеко вы можете изменить положение рук.
Будет ли это работать с острыми нотами, а также является ли вход для getIdealFingering номером ноты миди? – JavaTime
Я переписал его, чтобы использовать номера MIDI-нот. Он отлично поддерживает острые предметы или квартиры. Это зависит от вашего приложения, чтобы выяснить, является ли данный номер примечания резким или плоским, это просто думает в полутонах (или половину шагов, если вы предпочитаете). – cutchin
Это кажется отличным, спасибо. У вас есть ссылка на миди-ноту на гитарную карту. Тот, который я, кажется, противоречит выводам вашей программы. Например, строка C на A, как примечание midi, это C октава 5, но выход вашей программы дает, где C октава 3 должна быть на гитаре. – JavaTime