Просмотр гитарных табулатур — как это работает
Короткое руководство: что на самом деле делает просмотр гитарных табулатур и, что важнее, чего он не может, имея на входе только MIDI-файл. Если в табулатуре что-то выглядит неправильно или чего-то не хватает — ответ, скорее всего, здесь.
Коротко
MIDI-файл описывает, какие ноты и когда играются и насколько громко. Гитарная табулатура описывает, где на грифе эти ноты брать, каким пальцем и каким приёмом (глушение ладонью, подтяжка, слайд и т. д.). Разрыв между ними велик, и многое из него невозможно восстановить из одного лишь MIDI.
Мы закрываем этот разрыв эвристиками: подбираем разумные позиции на грифе, определяем глушение ладонью по короткой длительности нот, выводим хаммер-оны из соседних нот на одной струне и так далее. Результат читаемый и играбельный, но он редко совпадёт с табулатурой, которую для той же песни написал бы человек.
Что переживает путь через MIDI
Эти данные записаны в стандартном MIDI, и мы используем их как есть:
- Высота и тайминг. Сами ноты песни.
- Смены темпа. В том числе плавные изменения в песнях, где меняется BPM.
- Смены размера. Чередования 4/4, 7/8 и 21/32 отображаются с корректными размерами.
- Маркеры разделов. Подписи «Intro», «Verse 1», «Chorus», «Solo A» над тактами берутся из мета-событий маркеров в MIDI.
- Названия дорожек и инструменты. Показаны на боковой панели.
- Сила нажатия (velocity). Используется для обозначений динамики (f, mf и т. д.) и для определения акцентов.
- Подтяжки высоты (pitch bend). Если в исходном MIDI есть события pitch bend, табулатура рисует кривые подтяжек на соответствующих нотах.
Что мы выч исляем (по мере возможности)
Ничего из этого в MIDI напрямую не записано, поэтому мы догадываемся по рисунку нот. Для типичной рок- и метал-гитары догадки довольно точные, но иногда что-то пропускается или срабатывает ложно:
- Выбор лада и струны. Одну и ту же высоту можно взять в нескольких местах грифа. Для каждой фразы мы подбираем удобную позицию руки поиском «Витерби», который минимизирует перемещения руки.
- Обозначения глушения ладонью («P. M.»). Выводятся из короткой длительности ноты, низкой высоты, средней velocity и плотного ритмического контекста. Хорошо работает на «чаггающих» риффах; одиночные заглушённые ноты пропускает.
- Хаммер-он / пул-офф. Одна струна, соседние атаки, очень маленький промежуток, обе ноты зажаты. Лигу рисует alphaTab.
- Слайды. Одна струна, соседние атаки, выдержанная первая нота, разница в 1–5 ладов.
- Заглушённые ноты («x»). Очень короткая длительность и низкая velocity.
- Акценты («>»). Velocity заметно выше локальной медианы.
- Форшлаги. Очень короткие ноты непосредственно перед более длинными.
- Лиги. Выдержанная нота, пересекающая границу доли, превращается в две доли, соединённые лигой.
Чего MIDI дать не может
Вот эти пробелы. Такую информацию создаёт человек, снимавший или сочинявший партию, а не сама музыка, поэтому из MIDI-файла её не восстановить, каким бы умным ни был алгоритм:
- Конкретная аппликатура, которую выбрал бы живой гитарист. Два музыканта возьмут одни и те же ноты на разных струнах и ладах — в зависимости от окружающей фразы, стиля песни, строя и привычной аппликатуры. Мы выбираем один разумный вариант; человек выбирает тот, что соответствует реальной записи.
- Текстовые пометки. «let ring», «neck pickup for the solo», «rake», «12th-fret harmonic» — это подсказки, написанные человеком для читателя, а не данные MIDI.
- Осмысленные кривые подтяжек. Даже когда в MIDI есть события pitch bend, исходная подпись («full», «½», «release») теряется.
- Дайвы рычагом. Часть из них закодирована как pitch bend, но визуальных обозначений нет.
- Волнистые линии вибрато. В ибрато в MIDI (если оно есть) — это непрерывная модуляция, а не обозначение.
- Головки нот для флажолетов. В MIDI нет такого признака: натуральные, искусственные и пинч-флажолеты звучат достаточно похоже, чтобы ни один кодировщик не записывал их по-разному.
- Направление удара медиатором (∨ / ∧). В MIDI этого нет.
- Скобки триолей («3»). Триольная пульсация — это решение нотной записи; когда в исходном MIDI триоли записаны обычными тиками в позициях 1/24 такта, мы иногда можем их распознать, но распознавание ненадёжное, поэтому сейчас оно отключено — чтобы не ставить «3» над тактами, где триолей на самом деле нет. Сами ноты остаются на месте, теряется только пометка «это триоль».
- Текст песни. В наших MIDI его нет.
Чем этот режим всё же полезен?
Даже с этими пробелами сгенерированная табулатура читается гитаристом быстрее, чем пиано-ролл, и её вполне хватает, чтобы:
- читать с листа и заниматься под знакомую запись;
- быстро понять структуру риффов незнакомой песни;
- разучивать партии ритм-гитары, где точная аппликатура важна меньше, чем ритмический рисунок (темп, размеры, лиги, глушение ладонью и маркеры разделов обычно передаются верно);
- сравнивать несколько инструментов — бас, соло, ритм, ударные — из одного и того же MIDI.
Для идеально точного снятия соло-гитары по-прежнему стоит обращаться к табулатуре, сделанной вручную, или к файлу Guitar Pro.
Настройки и компромиссы
Несколько замечаний о том, как устроены эвристики:
- Позиция на грифе выбирается для каждой фразы так, чтобы уместиться в самое низкое удобное окно, покрывающее большинство нот. Выбивающиеся высокие ноты уходят на тонкие струны. Другой вариант (например, «этот лик всегда играть на 12-м ладу») тоже был бы музыкально верным; узнать, какой из них соответствует записи, мы не можем.
- Определение глушения ладонью требует одновременно короткой длительности ноты И плотного ритмического контекста, чтобы не ставить «P. M.» над каждой короткой нотой в разреженном фрагменте.
- Скобки триолей не отображаются (с м. выше): цена ложных срабатываний на песнях без триольной пульсации слишком высока.
- Ключ табулатуры («T A B») скрыт: он добавляет визуальный шум, но не сообщает ничего нового.
Если что-то выглядит неправильно
Заведите баг-репорт и укажите:
- имя MIDI-файла;
- дорожку и номер такта (он виден слева вверху каждого такта);
- короткое описание того, что показывает табулатура и что вы ожидали увидеть.
Неточности аппликатуры — обычно неизбежное ограничение; ошибки в ритме или высоте нот, как правило, указывают на настоящий баг.