Введение
Визуальный язык программирования
язык программирования
С добавлением внешней графической среды для мультимедиа (GEM) и внешних модулей, разработанных для работы с ней (таких как Pure Data Packet / PiDiP для Linux, Mac OS X), framestein для Windows, GridFlow (как n-мерная матричная обработка, для Linux, Mac OS X, Windows), можно создавать и обрабатывать видео, графику OpenGL, изображения и т.д. в реальном времени с широкими возможностями для интерактивного взаимодействия с аудио, внешними сенсорами и т.д. Pd изначально разработан для обеспечения совместной работы в сетях или через Интернет, позволяя музыкантам, подключенным по LAN или даже находящимся в разных частях света, создавать музыку вместе в реальном времени. Pd использует FUDI в качестве сетевого протокола.
programming language
With the addition of the Graphics Environment for Multimedia (GEM) external, and externals designed to work with it (like Pure Data Packet / PiDiP for Linux, Mac OS X), framestein for Windows, GridFlow (as n dimensional matrix processing, for Linux, Mac OS X, Windows), it is possible to create and manipulate video, OpenGL graphics, images, etc., in realtime with extensive possibilities for interactivity with audio, external sensors, etc. Pd is natively designed to enable live collaboration across networks or the Internet, allowing musicians connected via LAN or even in disparate parts of the globe to create music together in real time. Pd uses FUDI as a networking protocol.
Сходство с Максом
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' – половине секунды.