Детектив.
Это интересное упражнение чтобы почесать мозг.
Так как кубейса у меня нет, ограничился доступными мне тремя хостами, это Logic, Reaper и Ableton.
Глубокий математический аппарат мне тоже не слишком близок, поэтому буду говорить своими словами, тем более из доступных методов анализа имеется только сложение в противофазе.
Краткие выводы, которые удалось сделать.
Онлайн рендер миди имеет свою строгую, неслучайную структуру у каждого из хостов, эта структура во всех случаях совпадать не может.
В онлайн рендере миди влияющими факторами являются BPM и Sample Rate проекта, еще точнее – их соотношение.
Логику поведения как минимум одного секвенсора удается предсказывать, на другие пока нет достаточного количества времени (жду помощи).
Противофаза внутри одного проекта складывается в ноль при аккуратном расположении старта аудио-фрагментов исключающим влияние положения курсора при запуске рендера.
Прочитав топик захотел проверить лоджик, в котором работаю. Описываю так, чтобы желающие могли повторить, скажу сразу – это было интересно.
Создём проект с произвольным BPM (104), загружаем штатный сэмплер и отключив в нем обработку расставляем бочку 8-ми на несколько тактов. Сейчас нужно заметить, что 104 BPM некратно сэмплрэйту проекта 44100 Гц, это означает, что в одном такте содержится не целое число отсчетов, и тем более не целое число отсчетов содержится в более мелких делениях – восьмых, шестнадцатых и тп, но для чистоты эксперимента считайте, что я этого пока не знаю. После расстановки бочки отрендерил аудио, вставил в соседнюю дорожку, инвертировав фазу, запустил с первого такта – вычитается в ноль, звука нет. Скопировал оба региона, и аудио и миди далее – вычитаются первые регионы, копии – не вычитаются, притом с плавающей фазой. Задумался. Зациклил отрезок, который вычитается – первый цикл вычитается, следующие – не вычитаются, от цикла к циклу фаза меняется. Задумался.
Удалил скопированные регионы, проиграл второй раз сначала оригинальные – вычитаются в ноль. Подвинул регионы на несколько тактов вперед, с привязкой к тактам – затем выставил курсор комбинацией клавиш, завязанной на бары/биты/тики BPM в начало регионов, при проигрывании – не вычитается, картина та же, как и с копиями раньше. Поставил копии обоих регионов в начало проекта на первый такт – вычитается в ноль.
Вывод – регионы копируются правильно, но в связи с нецелочисленной соотношением Sample Rate и BPM на вычитаемость влияет положение курсора относительно регионов при запуске. Максимально увеличив масштаб и отвязав курсов от BPM поставил его точно перед началом регионов, в предыдущий сэмпл – вычитается в ноль при любом положении регионов в такте, ошибок не происходит. Если поставить не точно в тот отсчет, где находится начало аудио и миди регионов, а в предыдущий отсчет (до начала) или в следующий (уже после начала) – не вычитается, с разными фазовыми сдвигами. Следовательно, мы выясняем, что положение курсора при запуске имеет значение. Также удалось пронаблюдать, что при случайной постановке курсора до начала регионов, но при определенном количестве отсчетов до них, вычитание в ноль происходит, и повторяемо – при сохранении позиции курсора (например командой Stop and go to last position) – всё достоверно вычитается сколько угодно раз, фаза не двигается.
Задумался. Пока что мы обнаружили, что имеется некоторая модель поведения, но её количественные характеристики нам не доступны, предсказать что-либо конкретное невозможно.
Так давайте уточним. Для простоты ставим регионы в начало проекта. Проверяем с первого такта – всё вычитается. Увеличиваем масштаб почти до максимального – в лоджике есть возможность отмасштабировать так, что отсчеты уже видны, но при воспроизведении экран не будет двигаться вместе с курсором, а будет перепрыгивать по-тактово, точнее – по восьмым нотам, при этом начало каждого такта будет постоянно отображаться на экране на одной позиции, что удобно для визуализации изменений в аудио волне от такта к такту. Так вот увеличиваем, и наблюдаем при воспроизведении, что начало волны от удара к удару сдвигается на некоторое количество отсчетов. Секунды за две удалось увидеть закономерность – первый удар и пятнадцатый совпадают по началу волны, затем цикл изменений повторяется. Не трогая миди-регион обрезаем аудио-регион ровно перед пятнадцатым ударом, и копируем следом начальный отрезок аудио, удостоверившись, что драг-н-дроп привязан не к тактам, а к сэмплам. Если всё сделано правильно – второй аудио-отрезок будет вычитаться. И третий, поставленный ровно следом за вторым, и четвертый, пятый… а вот в шестом – первый удар не на месте. Увеличиваем, смотрим – ага! Это не в шестом первый удар не на месте, это в пятом – последний уже не подходит. Не буду утомлять вас математикой, ну не математик я, в общем, после пары кружек кофе и нескольких мозолей в голове, удалось посчитать, что у лоджика при 104 BPM накапливается определенная погрешность округления (44100 кГц помножить на 60 секунд и разделить на 104 удара в минуту), так вот погрешность накапливается внутри такта – вот откуда 15 ударов в цикле, затем цикл перезапускается, и всё хорошо – ровно до следующей ошибки, которая накапливается к 73-му удару восьмыми нотами (такт 9.3.3.1) – там ошибка исправляется тем же методом, что и внутри такта, сдвигом на некоторое количество сэмплов. С 73-го удара цикл повторяется – если отвязать все привязки, поставить очень точно первый аудио-регион – будет вычитаться (в проекте 104 выделено цветом). И так далее.
Были таким же способом испытаны проекты в 103, 147 и 186 BPM с частотой дискретизации 44,1 кГц, результаты подобны, наблюдается полная вычитаемость.
В общем, эта погрешность округления отношения частоты дискретизации проекта к количеству ударов в минуту, не знаю какой термин правильный. Видимо, она по-разному обрабатывается каждым секвенсором, поэтому в проектах с некратными соотношениями Sample Rate и BPM получить вычитание если и возможно, то весьма непросто. Более точно пока сказать не могу, но на примере лоджика удалось найти закономерности при разных значениях BPM.
Что же будет с проектами, в которых это соотношение является целым числом?
Легко проверить. Создадим проект, где 8-е ноты будут иметь целое количество сэмплов. 44100 х 60 / 8 = 330750, откуда вероятный BPM, например, 125, что дает нам длительность 8-ой ноты равной 2646 отсчетов. Схема проекта – та же самая, что в первом примере. но теперь при копировании регионов или при цикле размером в такт или половину такта – наблюдается полное вычитание в противофазе.
Проблемы начинаются только при попытке зациклить 1/8 такта – и при максимальном увеличении видно, что все четные восьмушки рендерятся с небольшим отставанием от нечетных, поэтому максимально возможный цикл в данном проекте составляет 1/4 такта. Его можно как угодно копировать и двигать – всё работает. Скорее всего я что-то напутал с расчетами разрешающей способности хоста, либо такое поведение запланировано.
По наблюдениям за подобными целочисленными проектами в других секвенсорах – Ableton и Reaper, могу сказать только, что внутри хостов файлы вычитаются без проблем, иногда только бывает краткий звук в самом начале воспроизведения, вы по-любому лучше меня знаете что это, возможно что-то с фейдами или особенностями распределения приоритетов между аудио и миди.
Нецелочисленные проекты в этих хостах живут своей жизнью, удалось заметить некоторые закономерности в исправлении погрешности округления, но эти принципы совсем не похожи на лоджиковские. Предполагаю, что в разных хостах реализованы разные схемы, в том числе в кубейсе. Повторить вычитаемость в таких проектах внутри других секвенсоров кроме лоджика пока не пробовал, нет достаточного опыта работы чтобы исключить нелепости. Но, повторюсь, в лоджике удаётся найти закономерности, думаю в других хостах ситуация похожа.
Уточню, что вычитаемость в лоджике проверял на слух, на достаточной громкости, но за математическую точность ручаться не могу.
Прикладываю два лоджиковских проекта в 104 и 125 BPM, с дополнительными рендерами из рипера и аблетона, а также сэмпл которым пользовался. Учтите, аудио из этих хостов – только для визуального сравнения, заниматься уровнями и огибающими было некогда, но буду благодарен, если специалисты аблетона, кубейса, рипера, протулса и других хостов предоставят свои рендеры с этим сэмплом. BPM которые меня интересуют – 103, 104, 125, 147, 186.