Проект "ТРЫНДЕЛКА"

MIDI-гитара своими руками

Главная
Протокол MIDI
Принцип действия
Звукосниматель
Лады и струны
Питание
Аналоговая часть
Контроллер PIC16x74
COM-порт
MIDI-порт
Управление и индикация
Алгоритм детектирования нот

Фотоальбом
MIDI-файлы

Об авторе

Алгоритм детектирования нот

sygnal.gif (1034 bytes)

Данные по струнам поступают с периодичностью порядка 50 раз в секунду. Амплитуда лежит в интервале от 0 до 127, порожек - от 0 до 17.

Примерный вид первичных данных, снимаемых со струны (1 пиксел по горизонтали соответствует одному отсчету времени) показан на рисунке выше. Синий цвет - амплитуда с АЦП, красный - номер порожка. В конце графика видно "скольжение" пальца гитариста с 0 на 5 лад без отпускания струны, при этом струна дергается на 4 ладу, и приходит на 5 уже звучащей. "Трынделка" позволяет использовать такой прием.

При анализе учитывается изменение амплитуды колебаний струны и порожек, на котором она прижата.

А. Анализ амплитуды колебаний струны:

1. Струна начала звучать, если:

а) на следующем отсчете пришел пик - перепад более +10 единиц, при этом после такого пика устанавливается мертвая зона ~ в 5 отсчетов для отсечения двойных пиков, которые могут возникать, например, если на пальцах у гитариста мозоли;

б) суммарный перепад за несколько (3-5) отсчетов превысил +10 единиц.

2. Струна закончила звучать, если:

а) амплитуда колебаний упала ниже порогового значения (естественное затухание колебаний струны);

б) суммарный перепад за несколько (5-7) отсчетов менее -7, т.е. обнаружено устойчивое снижение амплитуды в темпе не менее 1 единица за отсчет (принудительное приглушение струны).

Если накапливаемый суммарный перепад отрицательный,  но пришел очередной перепад более +1, то накопленная сумма сбрасывается и накопление начинается вновь.

Б. Анализ смены порожка:

Смена порожка может привести к смене звучащей ноты, но при этом одновременно струна может быть заглушена. Поэтому вводится обязательная задержка от момента обнаружения смены порожка на время, достаточное для обнаружения приглушения струны по п. A2б.

Если порожек сменился, и уровень сигнала превышает некоторый порог, то включается таймер на ~5 отсчетов. Если по окончании счета таймера сигнал превышает порог нуля и спад амплитуды по п. А2б не детектируется, то начинает звучать нота, соответствующая ТЕКУЩЕМУ порожку, который может отличаться от того, на котором включился таймер.

Если сделать таймер менее чем на 5 отсчетов, то будет слишком много ложных нот, вызванных просто сменой аппликатуры без дерганья за струны. Если выставить задержку более 5 отсчетов, то реакция на смену порожка будет слишком замедленной, и смысл в их анализе пропадет - лучше их не анализировать вообще и заставить исполнителя всегда дергать струны, без использования игры левой рукой - тогда минимизируется количество ложных нот.

Алгоритм не требует наличия буферов не несколько отсчетов на каждую струну - нужно лишь текущее и предыдущее значение амплитуды. Данные занимают в сумме около 70 байт. ОЗУ микроконтроллера хватает с запасом, даже обходимся одним банком.

Достоверного анализа velocity (силы дергания за струну и громкости) пока сделать не удалось. На первый взгляд, все просто. Однако MIDI-нота в случае А1а начинает звучать ДО ТОГО, как амплитуда колебаний струны достигла максимального размаха (и это хорошо, так как нет задержки). К сожалению, пик в 25 единиц может с равным успехом приводить к конечному изменению амплитуды и на 30, и на 60 единиц, поэтому с точки зрения определения velocity, похоже, схема неудачная. А изменить громкость ноты после того, как она начала звучать, позволяют не все синтезаторы (речь про Aftertouch).

<<< Назад   |   Вперед >>>