Native Instruments Reaktor: синтез пилообразных, квадратных, треугольных и синусоидальных волн

    intro

    Статья посвящена синтезу четырех основных звуковых волн: пилообразной (saw), квадратной (square), треугольной (triangle) и синусоидальной (sine). Для работы понадобится программная среда обработки звука Reaktor от компании Native Instruments. Демо версию можно скачать на официальном сайте Native Instruments (ограничение работы — 30 минут, сохранение проекта отключено). Информация будет полезна не только обладателям этого софта, но и тем, кто интересуется программированием и обработкой звука в целом. Подкатом прилично скриншотов, осторожно, трафик!

    Теория


    Предполагается, что прежде чем приступить к работе, вы ознакомились с мануалом, основными модулями и интерфейсом Reaktor'а. В программе возможны два уровня работы: Primary Level (первичный) и Core Level (внутренний). Отличия говорят сами за себя — на уровне Primary все решения уже готовы (генераторы волн, огибающие амплитуды, эффекты и т.д.), в то время как на уровне Core есть возможность создать все самому. Core Level — это свой собственный язык программирования, созданный компанией разработчиков NI. В нем присутствуют такие же операторы, циклы и переменные как и в других средах программирования.

    Мы знаем, что цифровой звук отличается от аналогового. Аналоговый сигнал является непрерывным в отличие от цифрового, поэтому для преобразования первого во второй применяется такое понятие, как частота сэмплирования SR.R (Sample Rate). Частота сэмплирования (или частота дискретизации) — это количество сэмплов в секунду, требуемое для преобразования непрерывного сигнала в дискретный. Соответственно чем больше частота сэмплирования, тем более богат спектр дискретного сигнала. В Reaktor'е для удобства работы существует еще такое понятие как событие частоты сэмплирования SR.C (Sample Rate Clock): SR.C = 1/SR.R.

    Если у нас стандартная частота сэмплирования 44100 Hz, это значит, что событие частоты сэмплирования происходит 44100 раз за 1 секунду. Таким образом Reaktor распознает два уровня сигналов — аудио сигнал (Audio) и сигнал события (Event). С первым все понятно, а второй тип сигнала можно сравнить со вспышкой, которая происходит при запуске фейерверка. Сигнал события никак не звучит — это просто цифра со значением в определенный промежуток времени, поэтому и SR.C это событие со значением 0.

    Пилообразная волна


    Синтез в Reaktor'е проще всего начать с пилообразной волны (saw). Дело в том, что ее фаза является основополагающей для построения фаз всех других волн.

    saw

    Из рисунка понятно, что из себя представляет звуковая волна в целом и она характеризуется двумя основными показателями — фаза и амплитуда. Это некая функция с повторяющейся цикличностью (фаза с определенной частотой), которая в данном случае принимает значения от 0 до 1 (амплитуда). Частота фазы может быть выражена как в Герцах, так и в высоте звука (Pitch). Высота звука измеряется в тонах и принимает значения от 0 до 127. Например, ноте С (до) на 3ей октаве соответствует тон 48, что приблизительно равно 130,8137 Гц. Амплитуда также может быть представлена как в виде числового значения (1), так и в Децибелах (0 dB). На практике нам надо чтобы каждый раз при событии частоты сэмплирования мы получали какое-то значение от 0 до 1 в соответствии с функцией, изображенной на рисунке. Использование готовых решений в Reaktor'е строго карается неписаными правилами.

    scheme1

    scheme2

    scheme3

    * — для работы я использовал новую версию Reaktor'а, так как стал обладателем новой лицензионной бета-версии после покупки старой, но по интерфейсу уровней Core и Primary она ничем не отличается от предыдущей.

    Дла начала нам нужно создать новый проект (File — New Ensemble). Скриншоты представлены в соответствии с глубиной открытого уровня проекта. На первом скриншоте показан главный инструмент, подключенный к выходам аудиокарты (в старой версии он выглядит немного иначе). На втором скриншоте уже показаны внутренности главного инструмента (Primary уровень). Все модули могут быть вызваны правой кнопкой мыши. Модули Note Pitch и Gate, находящиеся в разделе Built-in Module — MIDI In, отвечают за поступление MIDI-сигнала с клавиатуры или MIDI-контроллера, т.е. Note Pitch получает значения от 0 до 127 и отвечает за тон высоты звука, а Gate — от 0 до 1 и отвечает за амплитуду звука (на клавиатуре как правило от 0 до 0.6299). Внутри модуля Saw Waveform находится непрерывная фаза пилообразной волны, поэтому мы используем модуль Multiply (умножение) в совокупности с модулем Gate, чтобы сигнал был под контролем MIDI-устройства, а не звучал непрерывно. Третий скриншот самый интересный, т.к. именно здесь происходит реализация фазы волны. Первая часть структуры — это преобразование высоты звука в частоту фазы. Вычисление производится по следующей формуле:

    formula1

    Рассмотрим структуру на конкретном примере. При высоте звука 48 в наш цикл, который начинается с события частоты сэмплирования SR.C, поступают следующие данные: F = 130,8128, 2/SR.R = 0,000045351 (при стандартной частоте сэмплирования 441000 Hz) — Частота Найквиста (частота, равная половине частоты сэмплирования), F * Частота Найквиста = 0,0059325.

    Если значение, поступающее в модуль суммы (+) превышает единицу, оно направляется в модуль разницы, где из него вычитается единица. Таким образом наша функция принимает строгий диапазон от 0 до 1. После этого значение сохраняется в модуле памяти (Write) и снова поступает в модуль чтения памяти (Read), где при очередном событии частоты сэмплирования суммируется с предыдущим значением. Если подключить к выходу Core модуля (Phase) осциллограф (модуль Micro Scope) мы получим точно такую же функцию, как на графике пилообразной волны. При следующем цикле имеем: 0,0059325 + 0,0059325 = 0,011865, 0,011865 + 0,0059325 = 0,0177975 и т.д.

    * — важное замечание: в статье опускается вопрос анстиалиасинга (сглаживания звука), т.к. это тема отдельных обсуждений

    Квадратная волна


    pulse

    В отличие от пилообразной квадратная волна принимает значения равные только 0 или 1. Не сложно догадаться, как синтезировать эту волну, используя фазу предыдущей: если значение фазы пилообразной волны больше 0.5, то значение фазы квадратной волны равно 1, если меньше — 0.

    scheme4

    scheme5

    Треугольная волна


    triangle

    Чтобы преобразовать фазу пилообразной волны в треугольную, необходимо преобразовать первую, чтобы она принимала отрицательные значения, а после этого взять ее модуль. Все достаточно просто — мы отнимаем от значений фазы пилообразной волны 0.5, получая диапазон значений от -0.5 до 0.5, берем абсолютное значение этого диапазона и умножаем на 2, возвращаясь к диапазону значений от 0 до 1. Преобразования происходят внутри все того же Core модуля Square.

    scheme6

    Синусоидальная волна


    sine

    С синтезом синусоидальной волны дела обстоят немного сложнее. Дело в том, что функция синуса является непрерывной и периодической с основным периодом 2π, в отличие от других функций. Одним из решений является разложение функции синуса при помощи Ряда Тейлора, т.е. ее преобразование в бесконечную сумму степенных функций. Выглядит это следующим образом:

    formula2

    Преобразовывая фазу пилообразной волны в 2π и смещая функцию для преобразования, получаем в Reaktor'е следующую картину:

    scheme7

    На этой схеме суммы 6, 120, 5040 и 362880 — это факториалы чисел 3!, 5!, 7! и 9! соответственно, x — это используемая для удобства шина Quick Bus (добавляется через вызов дополнительного меню), а числовые преобразования в конце формулы — это преобразование в функции в привычный нам диапазон от 0 до 1.

    Использованные ресурсы

    Wikipedia:

    Waveform
    Высота звука
    Частота
    Амплитуда
    Частота Найквиста
    Ряд Тейлора

    Другие ресурсы (в том числе мои проекты) — на английском:

    Reaktor For You Archive (мой архив статей для Reaktor) * — доступны только пользователям лицензионных версий

    Мои темы на официальном форуме Reaktor'а:

    Уроки для начинающих
    Создание звуковых волн на уровне Core

    Дополнительный ресурс:

    Reaktor Community в России
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 1

    Only users with full accounts can post comments. Log in, please.