Pure Data ( Pd ) — язык визуального программирования , разработанный Миллером Пакеттом в 1990-х годах для создания интерактивной компьютерной музыки и мультимедийных произведений. Пакетт является основным автором программы, а Pd — проект с открытым исходным кодом и большой базой разработчиков, работающих над новыми расширениями. Он выпущен в соответствии с пунктом BSD-3 . Он работает на Linux , MacOS , iOS , Android и Windows . Существуют порты для FreeBSD и IRIX .
Pd по объему и дизайну очень похож на оригинальную программу Max Пакетта, разработанную во время его работы в IRCAM , и в некоторой степени совместим с Max/MSP, коммерческим предшественником языка Max. Их можно рассматривать вместе как членов семейства языков Patcher [2] .
С добавлением внешнего графического окружения для мультимедиа (GEM) и внешних устройств, предназначенных для работы с ним (таких как Pure Data Packet/PiDiP для Linux, Mac OS X ), фреймштайна для Windows, GridFlow (в качестве n-мерной матричной обработки, для Linux, Mac OS X , Windows), можно создавать и манипулировать видео, графикой OpenGL , изображениями и т. д. в реальном времени с широкими возможностями интерактивности со звуком, внешними датчиками и т. д.
Pd изначально разработан для обеспечения живого сотрудничества через сети или Интернет, позволяя музыкантам, подключенным через локальную сеть или даже в разных частях земного шара, вместе создавать музыку в режиме реального времени. Pd использует FUDI в качестве сетевого протокола.
Pure Data и Max являются примерами языков программирования потоков данных . Языки потоков данных моделируют программу как ориентированный граф данных, передаваемых между операциями. В Pure Data и Max функции или «объекты» связаны или «соединены» вместе в графической среде, которая моделирует поток управления и звука. Однако, в отличие от исходной версии Max, Pd всегда разрабатывался для управления скоростью и обработки звука на главном центральном процессоре (ЦП), а не перегрузки синтеза звука и обработки сигналов на плату цифрового сигнального процессора (DSP) ( например, Ariel ISPW , который использовался для Max/FTS). Код Pd составляет основу расширения MSP Дэвида Зикарелли к языку Max для программной обработки звука. [3]
Как и Max, Pd имеет модульную кодовую базу внешних объектов или объектов, которые используются в качестве строительных блоков для программ, написанных в программном обеспечении. Это делает программу произвольно расширяемой через общедоступный API и побуждает разработчиков добавлять свои собственные процедуры управления и звука на языке программирования C или с помощью других внешних средств, в Python , Scheme , Lua , Tcl и многих других. Однако Pd также является языком программирования. Модульные, многократно используемые блоки кода, написанные на Pd, называемые «патчами» или «абстракциями», используются как автономные программы и свободно распространяются среди сообщества пользователей Pd, и для эффективного использования Pd не требуется никаких других навыков программирования.
Как и Max, Pd — это язык программирования потоков данных. Как и в большинстве программ DSP , существует две основные скорости передачи данных: частота дискретизации (аудио) , обычно равная 44 100 выборок в секунду, и контрольная частота, равная 1 блоку на 64 выборки. Управляющие сообщения и звуковые сигналы обычно передаются сверху экрана вниз между «объектами», подключенными через входы и выходы.
Pd поддерживает четыре основных типа текстовых объектов: сообщения, объекты, атомы и комментарии. Атомы — это самая базовая единица данных в Pd, и они состоят либо из числа с плавающей запятой , символа или указателя на структуру данных (в Pd все числа хранятся как 32-битные числа с плавающей запятой). Сообщения состоят из одного или нескольких атомов и предоставляют инструкции объектам. Особый тип сообщения с нулевым содержимым, называемый взрывом, используется для инициирования событий и передачи данных в поток, подобно нажатию кнопки.
Собственные объекты Pd варьируются от основных математических , логических и побитовых операторов, встречающихся в каждом языке программирования, до общих и специализированных функций DSP со скоростью звука (обозначаемых символом тильды (~)), таких как таблично-волновые генераторы, быстрое преобразование Фурье (fft ~), а также ряд стандартных фильтров . Данные могут быть загружены из файла, считаны с аудиоплаты, MIDI , через Open Sound Control (OSC) через FireWire , USB или сетевое соединение, или сгенерированы на лету и сохранены в таблицах, которые затем можно прочитать обратно. и используются в качестве аудиосигналов или управляющих данных.
Одним из ключевых нововведений в Pd по сравнению с его предшественниками стало введение графических структур данных . Их можно использовать самыми разными способами: от создания музыкальных партитур, упорядочения событий до создания визуальных эффектов для сопровождения патчей Pd или даже расширения графического интерфейса Pd .
В соответствии с названием Pd, структуры данных позволяют пользователям Pd создавать произвольно сложные статические, а также динамические или анимированные графические представления музыкальных данных. Подобно структурам C , структуры Pd состоят из любой комбинации чисел с плавающей запятой, символов и данных массива, которые можно использовать в качестве параметров для описания визуального внешнего вида структуры данных или, наоборот, для управления сообщениями и звуковыми сигналами в патче Pd. По словам Пакетта:
Pd разработан, чтобы предложить крайне неструктурированную среду для описания структур данных и их графического внешнего вида. Основная идея состоит в том, чтобы позволить пользователю отображать любые данные, которые он или она хочет, любым образом связывая их с отображением. Для этого Pd вводит графическую структуру данных, что-то вроде структуры данных из языка программирования C, но с возможностью присоединения к данным форм и цветов, чтобы пользователь мог визуализировать и/или редактировать их. Сами данные можно редактировать с нуля или импортировать из файлов, генерировать алгоритмически или получить в результате анализа входящих звуков или других потоков данных.
- Миллер Пакетт, [4]
Несмотря на то, что Pd является мощным языком, он имеет определенные ограничения в реализации объектно-ориентированных концепций. [5] Например, очень сложно создавать массово параллельные процессы, поскольку создание экземпляров и манипулирование большими списками объектов (порождение и т. д.) невозможно из-за отсутствия функции-конструктора. Кроме того, массивы Pd и другие объекты подвержены конфликтам пространств имен, поскольку передача идентификатора экземпляра исправления является дополнительным шагом, и иногда его трудно выполнить.
Pure Data использовался в качестве основы ряда проектов, в качестве языка прототипирования и звукового движка. Табличный интерфейс под названием Reactable [6] и заброшенное приложение для iPhone RjDj используют Pd в качестве звукового движка.
Ряд аудиодизайнеров использовал Pd для создания прототипов звука для видеоигр. Например, EAPd — это внутренняя версия Pd, которая используется в Electronic Arts (EA). Он также был встроен в EA Spore . [7]
Pd также использовался для сетевого исполнения в библиотеке сетевых ресурсов для совместной импровизации (NRCI). [8]