В этот поздний час я хотел бы наконец упрощенно описать как сейчас работает beatless tuner. Он же - AFM mod (
оригинального EPT).
Расчет занимает всего несколько минут. Замечу что после выбора опций и нажания кнопки "Запустить расчет" работа программы происходит автоматически и не требует вмешательства пользователя - вплоть до "изготовления" настроечной кривой.
1. Происходит предварительная обработка ("причесывание") спектров записанного звука -
точно такая же какая производилась и в "родном", энтропийном алгоритме.
2. Выстраивается начальная настроечная кривая с учетом негармонизма - это делается
точно так же как это делалось раньше, в оригинальной программе.
То есть, до сих пор в программе ничего изменено не было.
Далее начинаются важные изменения. И да, после этих кардинальных изменений о слове "энтропия" приходится забыть.
3. По настроечной кривой, выстроенной в п.2 программа прикидывает биения (в виде графиков типа тех которые я уже показывал) всех консонансов. Примерное расположение прикидочных кривых заметно отличается от идеализированных гладких кривых, которые мы могли бы построить если бы не учитывали негармонизм.
И, разумеется, биения в этих кривых лишь приближенно равны "
расчетным", приведенных
в книгах.
Зато эти кривые уже имеют почти нужное нам расположение (наклон, изгиб и т.п.). Но лишь не имеют требующейся нам по условию задачи гладкости, которая означала бы плавное изменение частот биений.
Основная идея алгоритма состоит в том чтобы (экспоненциальной аппроксимацией) изготовить из этих негладких заготовок гладкие шаблоны, которые использовать впоследствии для поиска "наилучшей" настройки, "прижимая" к этим шаблонам получающиеся фактические кривые биений.4. Итак, имеется начальная настроечная кривая. На основе этой же кривой изготовлены шаблоны кривых биений. Будем теперь "подстраивать" ту или иную струну инструмента, все более "улучшая" настройку до тех пор пока дальнейшие улучшения окажутся более невозможными (станут ничтожными). Нужно просто повторять по кругу следующие два действия:
4.1. Выбрать клавишу которую нужно "подстроить" а также направление "подстройки" и насколько сильно это требуется сделать (
в центах или в герцах).
4.2. Оценить произведенное "улучшение" настройки. Если улучшение произошло - запомнить эти изменения и снова перейти к п.4.1.
Ниже я в деталях объясню пп.4.1 и 4.2.
4.1.1. Просматривается вся клавиатура и
"пробуются" все консонансы. Среди всех клавиш клавиатуры производится "голосование".
Каждая проба каждого консонанса может добавить "голосов" для сдвига
верхней или нижней ноты консонанса вверх или вниз. Количество центов сдвига оценивается с помощью калькулятора биений, высчитывающего положение обертонов с помощью масштабирования
как это было описано ранее.
Поводом для добавления "голосов" может послужить наличие "пика" или даже просто "неровности" (вверх или вниз) кривой биений по отношению к соответствующему шаблону.
4.1.2. Все клавиши сортируются по убыванию количества "голосов" и в дальнейшем (п.4.1.3) просматриваются в этом именно порядке - начиная с самых "неправильных".
4.1.3. Таким образом, выбираем самую "неправильную" клавишу и пытаемся ее слегка "сдвинуть" в ту сторону в которую определило ей суммарное "голосование".
К примеру, на 0.5 цента (или даже еще меньше).
4.2.1. Оцениваем произведенное суммарное "улучшение" настройки сразу для всех консонансов
способом суммирования желтых площадей "между" фактическими кривыми биений и их шаблонами.
Если сумма площадей уменьшилась - хорошо. Нет - отменяем действие произведенное в п.4.1.3
4.2.2. Снова переходим к п.4.1.1.
4.2.3. Завершаем наши попытки "улучшения" настройки если при каждом шаге 4.1.3 более не происходит кардинального суммарного уменьшения площадей желтых кусочков из п.4.2.1.
5. Результирующая кривая настройки изготовлена. Шаблоны теперь можно выкинуть а результирующие кривые биений программа дает посмотреть по окончании расчета в "Диаграммах".
P.S.: Прошу прощения за непрофессиональный жаргон.
P.P.S.: Я понимаю что в плане приоритетов алгоритм пока почти ничего такого не учитывает - ни диапазона клавиатуры ни амплитуды обертонов ни типовой частоты биений ни порядкового номера обертонов ни того какой из консонансов приоритетнее. Все это необходимо в него будет добавить при дальнейшей доработке.
Но я ручаюсь что он отсекает обертоны по заданным опциям - по герцам и по децибелам.