Введение
Немного общей информации
Чистые данные — язык визуального программирования для создания интерактивных программ (в этом случае их чаще называют «патчами»), используемых для исполнения и записи компьютерной музыки, звукового дизайна и визуализации.Люди, знакомые, например, с Max/MSP, узнают знакомый им графический код, поскольку PureData — один из MAX-подобных языков.
Если говорить просто и слегка утрированно, то это язык, предназначенный для программирования синтезаторов и эффектов.
В этой статье я опишу некоторые элементы языка, а также основные принципы, на которых основана работа со звуком в PureData. PureData кроссплатформенна, есть сборки для Windows, МакОС, Линукс И FreeBSD ; работает как со стандартными драйверами( АЛСА, ММИО ), и с Джек , АСИО , передача также поддерживается миди .
Все версии доступны для скачивания с сайта Официальный веб-сайт .
Рекомендую скачать расширенную версию, так как она "из коробки" содержит большой набор внешних библиотек, крайне необходимых в большинстве случаев.
Цифровая аудиопрезентация
И тут можно вспомнить граммофон и пластинку.Каков принцип записи звука на винил? Фреза, царапающая виниловый диск, вынуждена колебаться под воздействием определенного источника (например, сигнала микрофона), из-за чего разрез на поверхности диска становится извилистым, и этот след идеально повторяет колебания резак.
В дальнейшем по мере движения иглы по этой извилистой траектории она совершает колебания, в точности повторяя колебания источника.
Те.
игла прозвучит. Итак, если мы представим этот трек в виде графика, а координаты точек графика запишем с небольшим шагом, то получим звуковой файл.
Таким образом, WAV — это не что иное, как массив чисел, являющихся точками определенной кривой.
Этот процесс разбиения волны на точки называется дискретизацией, а частота, с которой берутся точки для записи в файл, — частотой дискретизации.
Именно из этого и рождается первый аспект синтеза программного обеспечения : математически описать звук как некую линию, которая является графическим изображением нужных нам вибраций.
Этот подход универсален и может быть реализован на любом языке, имеющем библиотеки для взаимодействия с аудиоустройствами.
Хотя на самом деле в этом нет необходимости, поскольку массив значений можно просто добавить в файл, используя расширение WAV. Эта идея логична и универсальна, но не всегда удобна.
Гораздо проще и удобнее управлять работой программного синтезатора, если взаимодействие элементов интерфейса напоминает модульный синтезатор.
Для тех, кто не в курсе: модульный синтезатор — это устройство, состоящее из различных независимых компонентов (так называемых модулей: генераторов, фильтров, преобразователей и т. д.), соединенных между собой проводами.
При этом исполнитель знает, какой модуль за что отвечает, в каком порядке они следуют друг за другом, и, что немаловажно, конфигурацию можно менять «в горячем виде».
Именно такой подход с точки зрения построения кода реализован в MAX-подобных языках:
Так, Второй аспект синтеза программного обеспечения на ПД: взаимодействие элементов языка строится по аналогии с модульным синтезатором.
На практике эти два подхода находятся в симбиозе, дополняя друг друга.
Итак, узнав, с чем мы будем иметь дело, приступим непосредственно к PureData.
Элементы языка PureData
а+б=?
В целом программирование на PureData сводится к трем вещам: передаче «импульсов», чисел и сигналов.Основных элементов языка тоже немного, четыре: объекты, числовые поля, окна сообщений и связи, похожие на провода.
Давайте напишем простую программу и заставим PD сложить два числа.
Итак, в окне с новым патчем создадим объект (Ctrl-1), поместим куда-нибудь этот прямоугольник и введем там [bng] (он же хлопнуть ).
Без этого объекта невозможно сделать практически ни один патч.
Его задача – создать и послать импульс.
Теперь разберемся, где и почему.
Теперь создадим два блока с сообщениями (Ctrl-2) и впишем туда два произвольных числа, соединив хлопнуть с каждым из блоков.
Итак, теперь эти цифры необходимо сложить.
Для этого создайте объект заново и введите в него «+».
Ожидаемо, правда? Соединим числовые блоки с объектом "+" .
Теперь осталось только отобразить результат. Это можно сделать либо в консоли, используя объект Распечатать , или оставить его внутри патча, отправив в поле с номером (Ctrl-3).
Чтобы проверить патч в действии, нужно его заблокировать (Ctrl-E) и нажать на объект хлопнуть .
Итак, в консоли или в numbreBox мы видим результат. Если это неверно, не пугайтесь, мы все разберем в строке ниже.
Что произошло, когда я нажал на хлопнуть , мы создавали импульс, который приходил через соединения с блоками сообщений и передал их объекту сложения и т. д. Теперь попробуем понять, почему у некоторых из нас результаты сложения неверные.
Просто нажмите еще раз.
Теперь это правда? Дело в том, что на правильность выполнения арифметических действий влияет порядок соединения элементов.
При построении патча, подобного нашему, гарантируется корректность, если объекты соединялись справа налево.
Это чертовски неудобно, невозможно отладить и найти ошибки.
Но всего этого можно избежать, если использовать другой объект, задача которого — разбить вход на несколько потоков и отправлять импульсы одновременно.
Это объект курок .
Давайте создадим объект с этим именем.
Теперь запишем рядом, что нужно передать (bang — импульс, float — числовое значение, ничего — любое).
Поскольку мы разбиваем импульс на два, содержимое объекта принимает вид триггер бах бах , сокращенно т б б .
Осталось соединить выходы с цифрами.
Теперь результат будет правильным независимо от порядка подключения.
Это, конечно, все здорово, но что делать, если мы хотим вычислить длинное выражение или использовать математические функции? Ведь простая программа, написанная с использованием описанного выше метода, например, для поиска корней квадратных уравнений, будет слишком сложной и запутанной.
Для таких случаев есть объект в ПД выражение или выражение .
С помощью этого объекта можно описывать математические и логические выражения, а также их комбинации.
Давайте рассмотрим тот же пример со сложением.
$f1 и $f2, как вы могли догадаться, являются переменными и считаются слева направо.
Крайний левый вход — $f1, и далее по порядку.
Количество входов объекта выражение равно количеству переменных, используемых в выражении.
Послесловие и F1
Сегодня мы рассмотрели самый минимум возможных и поняли разницу в представлениях; в следующей статье я опишу работу условной логики и простейшие объекты, связанные с работой с сигналами.Осталось рассказать вам о справочной системе.
Справкой приходится пользоваться постоянно, а чтобы увидеть информацию об объекте, достаточно щелкнуть по нему правой кнопкой мыши и выбрать «помощь».
Он будет содержать описание и, в большинстве случаев, примеры использования.
Полный список объектов и библиотек доступен по адресу Pd справочный браузер или горячей клавишей Ctrl-b.
Следующие статьи и уроки, посвящённые PureData, я постараюсь публиковать хотя бы раз в неделю.
Всего наилучшего.
Теги: #Звук #учимся программировать #учимся программировать #музыка #звуковой дизайн
-
Янменхакпха
19 Oct, 24 -
Планы Google В Азии
19 Oct, 24 -
Карусель На Vanilla.js. Часть 2
19 Oct, 24