Просмотр гитарных табулатур — как это работает

Короткое руководство: что на самом деле делает просмотр гитарных табулатур и, что важнее, чего он не может, имея на входе только 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-файла;
  • дорожку и номер такта (он виден слева вверху каждого такта);
  • короткое описание того, что показывает табулатура и что вы ожидали увидеть.

Неточности аппликатуры — обычно неизбежное ограничение; ошибки в ритме или высоте нот, как правило, указывают на настоящий баг.