# Pure Data

Pure Data (en abrégé pd) est un logiciel de programmation graphique pour la création musicale et multimédia en temps réel. Il permet également de gérer des signaux entrants dans l'ordinateur (signaux de capteurs ou événements réseau par exemple) et de gérer des signaux sortants (par des protocoles de réseau ou protocoles électroniques pour le pilotage de matériels divers). Ce logiciel permet un suivi de partition.

## Origine

Il tire son origine de l'éditeur Patcher écrit par Miller Puckette en 1988 à l'IRCAM en France. Le logiciel a été cédé à la société américaine Opcode, où il a été réécrit par David Zicarelli, sous le nouveau nom de Max/MSP. Miller Puckette a décidé de reprendre la conception de Patcher pour faire un logiciel libre et portable à des fins musicales en temps réel.
Il est distribué librement sur le Web, maintenu par Puckette, maintenant directeur-associé du CRCA (Center for Research in Computing and the Arts (en)) de l'Université de Californie. De nombreux développeurs se sont, par la suite, joints au projet.

## Fonctionnement

Pure Data est un système conçu de façon modulaire. Chaque utilisateur peut ainsi adapter le logiciel selon ses besoins. Il exploite un langage de programmation non procédural avancé (programmation orientée objet) qui permet à l'utilisateur d'effectuer des modifications au code en temps réel sans que celui-ci doive chaque fois être recompilé. Cependant, la non-linéarité de cette approche peut parfois causer des difficultés dans la conception des patchs, surtout à l'étape de composition. Elle peut notamment entraîner de la confusion dans la compréhension et dans la gestion de l'ordre des opérations.
Techniquement ce n'est pas un langage de programmation en tant que tel, mais un environnement d'implémentation, où l'utilisateur assemble des bouts de codes créés par d'autres, ce qui permet un prototypage ultra-rapide. L'interface du logiciel est donc une représentation visuelle de la logique qui sous-tend la programmation.

## Communauté

Autour de Pure Data gravite une communauté composée à la fois de développeurs et d'utilisateurs, puisqu'il s'agit d'un logiciel libre. Les premiers créent de nouveaux objets en langage C ou contribuent à améliorer le fonctionnement général du programme. Les seconds l'utilisent à des fins artistiques liées, entre autres, à la performance musicale et vidéo ainsi qu'aux installations interactives.
Depuis 2004, et la première convention organisée à Graz en Autriche, ont eu lieu les conventions de Montréal (2007), Sao Paulo (2009), Weimar (2011) et New-York (2016).

## Documentation

L'apprentissage comme la documentation de référence de Puredata sont disponibles sous la forme de patches d'aide exécutables directement depuis le programme. Ils ne sont cependant disponibles qu'en langue anglaise. À la suite d'un booksprint organisé par l'association FLOSS Manuals France avec le soutien de l'OIF, il existe un manuel d'apprentissage français de ce langage de programmation, fruit du travail de représentants de la communauté des utilisateurs et des développeurs venus du Québec, de France, de Belgique et de Tunisie.

## Bibliothèques

Autour du logiciel de Miller Puckette, ont été développées de nombreuses bibliothèques ajoutant de nouvelles fonctionnalités. Ces bibliothèques permettent d'utiliser la vidéo, le sample, les capteurs, etc.
Hans-Christoph Steiner en a réuni de nombreuses dans ses installateurs « tout-en-un» connus sous le nom de Pd-extended. La distribution Linux Puredyne offre une installation optimisée de Pure Data avec de nombreuses bibliothèques distribuées sous forme de paquets indépendants.
À la suite de l'arrêt d'une maintenance régulière de Pd-extented en 2014, Ivica Bukvic, Jonathan Wilkes et Albert Graef décidèrent de lancer le développement de PurrData en 2016, une refonte de Pure Data régulièrement mise à jour et basée sur la distribution utilisée par le Virginia Tech's Linux Laptop Orchestra (Pd-L2Ork).

### Bibliothèques audio

* Zexy
* IEM lib
* Flext
* Xsample
* fftease
* dyn~
* creb
* Cyclone

### Bibliothèques vidéo
#### GEM

compatible Linux - Win - Mac OS
« GEM » signifie Graphics Environment for Multimedia (en français « environnement graphique pour le multimédia »). Elle a été écrite par Mark Danks pour la production d'images en temps réel, particulièrement pour les compositions audiovisuelles. Elle permet la manipulation d'objets de synthèse, d'images et de vidéos via l'utilisation d'OpenGL. Les formats de fichier lisibles dépendent grandement de la plateforme pour laquelle la bibliothèque a été compilée, le codec Photo-JPEG dans un container QuickTime restant le plus largement répandu. La lecture de flux (streams) vidéo en est encore à un stade très expérimental.
La version stable actuelle 0.92.3 supporte également l'utilisation des shaders GLSL et permet également d'implémenter directement des commandes OpenGL.

#### PDP/PiDiP

compatible Linux - Mac OS
Pure Data Packet (pdp en abrégé) est dédiée au traitement de la vidéo écrite par Tom Schouten. PiDiP en est une extension écrite par Yves Degoyon. Elle permet d'utiliser plusieurs sorties vidéo (xgl, xv, sdl), permet la lecture du quicktime, l'utilisation des effets freeframe et effecTV.

### Bibliothèques diverses
#### Hid

compatible Linux - Mac OS
Écrite par Hans-Christoph Steiner, elle permet l'utilisation des interfaces physiques pour pd, comme des joysticks, souris, tablettes graphiques, interfaces capteurs, etc.

#### Joystick

compatible - Win

#### MrPeach

Bibliothèque écrite par Martin Peach permettant la lecture de fichiers MIDI comme l'utilisation du protocole OpenSoundControl ou OSC.

#### Wiimote

Bibliothèque fournissant un objet [wiimote] permettant l'utilisation d'une manette wii comme interface de contrôle.

### Intégration logicielle

Pure Data intègre Tcl/Tk, Tcl comme langage de script, et Tk pour la gestion des fenêtres graphiques. On peut néanmoins l'utiliser avec d'autres langages via la bibliothèque libpd.
Libpd est écrit par Peter Brinkmann et permet de réutiliser des composants préexistants (patch) au sein de n'importe quelle application, notamment écrite en :
* Java
* C#
* Objective C
* C++
* Python
Deux autres versions ont également été développées pour s'adapter aux spécificités des plateformes mobiles Android et iOS :
* pd-for-android
* pd-for-ios