Pure Data ( Pd ) — визуальный язык программирования , разработанный Миллером Пакеттом в 1990-х годах для создания интерактивной компьютерной музыки и мультимедийных произведений. Хотя Пакетт является основным автором программы, Pd — это проект с открытым исходным кодом с большой базой разработчиков, работающих над новыми расширениями. Он выпущен под BSD-3-Clause . Он работает на Linux , MacOS , iOS , Android и Windows . Существуют порты для FreeBSD и IRIX .
Pd очень похож по масштабу и дизайну на оригинальную программу Пакетта Max , разработанную во время его работы в IRCAM , и в некоторой степени совместим с Max/MSP, коммерческим предшественником языка Max. Их можно совместно обсуждать как членов семейства языков Patcher [2] .
Благодаря добавлению внешней графической среды для мультимедиа (GEM) и внешних средств, предназначенных для работы с ней (например, Pure Data Packet / PiDiP для Linux, Mac OS X ), Framestein для 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-битные числа с плавающей точкой). Сообщения состоят из одного или нескольких атомов и предоставляют инструкции объектам. Специальный тип сообщения с нулевым содержимым, называемый bang, используется для инициирования событий и помещения данных в поток, что очень похоже на нажатие кнопки.
Собственные объекты 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]