Введение

Визуальный язык программирования
язык программирования
С добавлением внешней графической среды для мультимедиа (GEM) и внешних модулей, разработанных для работы с ней (таких как Pure Data Packet / PiDiP для Linux, Mac OS X), framestein для Windows, GridFlow (как n-мерная матричная обработка, для Linux, Mac OS X, Windows), можно создавать и обрабатывать видео, графику OpenGL, изображения и т.д. в реальном времени с широкими возможностями для интерактивного взаимодействия с аудио, внешними сенсорами и т.д. Pd изначально разработан для обеспечения совместной работы в сетях или через Интернет, позволяя музыкантам, подключенным по LAN или даже находящимся в разных частях света, создавать музыку вместе в реальном времени. Pd использует FUDI в качестве сетевого протокола.

Сходство с Максом

Pure Data и Max — это примеры языков программирования с потоковой передачей данных. Языки потоковой передачи данных моделируют программу как ориентированный граф, представляющий поток данных между операциями. В Pure Data и Max функции или "объекты" соединяются или "патчатся" друг с другом в графической среде, которая моделирует поток управления и аудио. Однако, в отличие от оригинальной версии Max, Pd изначально разрабатывался для обработки управления и аудио на центральном процессоре хоста, а не для переноса задач звукового синтеза и обработки сигналов на цифровой процессор сигналов (DSP), такой как Ariel ISPW, который использовался для Max/FTS. Код Pd является основой для расширений MSP Дэвида Зикарелли к языку Max, предназначенных для программной обработки аудио. Как и Max, Pd имеет модульную кодовую базу внешних объектов, которые используются в качестве строительных блоков для программ, написанных в этой среде. Это делает программу произвольно расширяемой через публичный API и стимулирует разработчиков добавлять свои собственные алгоритмы управления и аудио на языке программирования C или с помощью других внешних библиотек на Python, Scheme, Lua, Tcl и многих других языках. Тем не менее, Pd также является самостоятельным языком программирования. Модульные, повторно используемые фрагменты кода, написанные непосредственно на Pd, называемые "патчами" или "абстракциями", используются как независимые программы и свободно распространяются среди сообщества пользователей Pd, и для эффективного использования Pd не требуются какие-либо другие навыки программирования.

Языковые особенности

Как и Max, Pd — это язык программирования потоков данных. Как и в большинстве программного обеспечения для цифровой обработки сигналов (DSP), существует две основные скорости передачи данных: частота дискретизации (аудио), обычно 44 100 образцов в секунду, и скорость управления, равная 1 блоку на 64 образца. Контрольные сообщения и аудиосигналы обычно передаются сверху вниз по экрану между «объектами», соединенными через входы и выходы. Pd поддерживает четыре основных типа текстовых сущностей: сообщения, объекты, атомы и комментарии. Атомы являются наиболее базовой единицей данных в Pd и состоят либо из числа с плавающей точкой, символа, либо указателя на структуру данных (в Pd все числа хранятся как 32-битные числа с плавающей точкой). Сообщения состоят из одного или нескольких атомов и предоставляют инструкции объектам. Специальный тип сообщения с пустым содержимым, называемый «bang», используется для инициирования событий и передачи данных в поток, подобно нажатию кнопки. Собственные объекты Pd варьируются от основных математических, логических и побитовых операторов, встречающихся в любом языке программирования, до общих и специализированных функций DSP, работающих в аудиочастотном диапазоне (обозначаются символом тильды (~)), таких как волновые генераторы, быстрое преобразование Фурье (fft~) и ряд стандартных фильтров. Данные могут быть загружены из файла, считаны с аудиоинтерфейса, MIDI, через Open Sound Control (OSC) по FireWire, USB или сети, либо генерироваться в реальном времени и храниться в таблицах, которые затем могут быть прочитаны и использованы в качестве аудиосигналов или управляющих данных.

Структуры данных

Одним из ключевых нововведений в Pd по сравнению с его предшественниками стало введение графических структур данных. Их можно использовать самыми разными способами: от создания музыкальных партитур и последовательностей событий до разработки визуальных эффектов для сопровождения Pd-патчей или даже расширения графического интерфейса Pd. В соответствии с названием Pd, структуры данных позволяют пользователям создавать произвольно сложные статические, а также динамические или анимированные графические представления музыкальных данных. Подобно структурам в языке C, структуры Pd состоят из любой комбинации чисел с плавающей точкой, символов и массивов данных, которые могут использоваться в качестве параметров для описания внешнего вида структуры данных или, наоборот, для управления сообщениями и аудиосигналами в Pd-патче. Как выразился Пакетт:

Pd разработан для обеспечения чрезвычайно неструктурированной среды для описания структур данных и их графического представления. Основная идея заключается в том, чтобы позволить пользователю отображать любые данные, которые он захочет, связывая их любым способом с отображением. Для этого Pd вводит графическую структуру данных, похожую на структуру данных из языка программирования C, но с возможностью добавления к данным фигур и цветов, чтобы пользователь мог визуализировать и/или редактировать их. Сами данные можно создавать с нуля, импортировать из файлов, генерировать алгоритмически или получать в результате анализа входящего звука или других потоков данных. |Миллер Пакетт|

Языковые ограничения

Хотя Pd — мощный язык, в реализации объектно-ориентированных концепций у него есть определенные ограничения. Например, очень сложно создавать массово-параллельные процессы, поскольку создание экземпляров и манипулирование большими списками объектов (создание, запуск и т. п.) невозможно из-за отсутствия функции конструктора. Кроме того, массивы Pd и другие сущности подвержены конфликтам имен, так как передача идентификатора экземпляра патча требует дополнительных действий и иногда бывает затруднительна.

Проекты с использованием чистых данных

Pure Data использовался в качестве основы для ряда проектов, а также в качестве языка прототипирования и звукового движка. Интерфейс Reactable и заброшенное приложение для iPhone RjDj используют Pd в качестве звукового движка. Многие звукорежиссеры применяли Pd для прототипирования звука в видеоиграх. Например, EAPd – это внутренняя версия Pd, используемая в Electronic Arts (EA), и она также была встроена в EA Spore. Pd также применялся для сетевых выступлений в библиотеке сетевых ресурсов для совместной импровизации (NRCI).

Примеры кодов

Первый патч выводит на дисплей текст "hello world". Второй патч применяет реверберацию к входящему сигналу с канала 1, а затем отправляет его на каналы 1 и 2. Последний, более сложный патч фильтрует белый шум на частоте 9000 Гц (с добротностью 20), затем плавно увеличивает и уменьшает его громкость каждую секунду в течение полусекунды. В Pd время измеряется в миллисекундах, таким образом, '1000' соответствует одной секунде, а '500' – половине секунды.