Précédent : Pure Data : démarrage introduction Suivant : Pure Data : synthèse
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
6.PURE DATA : prise en main
test uniquement sur Windows
6.0. patchs
Un patch Pd, on l’a vu est donc une collection de boîtes connectées dans un
réseau. Pour créer les boîtes-objets, ouvrez un nouveau document ( FILE + NEW)
ou un existant et allez dans le menu PUT. Il y a une liste de choix possibles
: objet, message, nombre, array, hslider, vslider, ... Essayer les
tous une fois pour voir ce que c'est.
Pour avoir de l'aide sans connaître quoique ce soit allez dans HELP, et commencer
la Pd documentation. Chaque objet a un fichier help associé (clic droit + help).
On peut voir ainsi à quoi correspondent les entrées et les sorties de l'objet,
ces différentes caractéristiques. Si néanmoins le fichier help ne s'ouvre
pas, allez dans la Pd documentation + 5.reference, et essayer de le trouver,
ça arrive pour quelques objets.
ctl + e : mode edit, et action. En mode edit, le curseur-flèche devient une main, et vis et versa. Ce mode correspond à l’édition du patch : écriture, ajout d’objets, traçage des liens entre les objets. Avec le mode action, on ne peut pas modifier la structure du patch, on peut juste contrôler les sliders, les commandes bang, l'envoi de messages, ... Ainsi, en concert, on ne peut pas faire de fausses manoeuvres (ou moins).
6.1. boîtes objets (objects box)
D'apparence assez similaire, il va falloir tout de même les reconnaître de vue. Les différences visuelles se trouvent au niveau du bord droit. Les petits rectangles noirs en haut et en bas des boîtes correspondent aux entrées que l’on appelle inlets et aux sorties, outlets.
6.1.1. objet (ctl + shift + 1) : Créer
un objet nécessite de connaître au moins le nom exact de l'objet, sinon il
faut naviguer dans la Pd documentation (menu help + Pd documentation + 5.
référence). L'objet se crée en faisant appel au dossier ou à la librairie
qui ont été chargé au démarrage de Pure Data, avec le fichier .bat.
Ils ont tous des particularités au niveau du nombre d'entrées et sorties,
de leurs fonctions, de leurs poids, et de leurs arguments.
Ce qu'il y a d'écrit dans l'objet sont des atomes (atoms). Le premier
représente la class de l'objet, et tout mot séparé d'un espace
est un argument qui sert à initialiser un objet. Cela sert à certains
objets qui ont besoin d'une valeur de départ, lors de l'ouverture du patch.
Par exemple si on veut ouvrir un patch avec un oscillateur de 440hz, on écrit
"osc~ 440".
Le signe ~ prononcé tildeu, faire (altGr + 2 en même temps) + espace), représente le signal audio. Tous les objets avec ~ créent ou peuvent modifier un signal audio. A la sortie de l'objet "osc~", il y a vraiment une oscillation audio sinusoïde. Le signal audio est en flux continu (= streams of numbers). Ceci a son importance : cela veut dire que pour arrêter (ou démarrer) une oscillation audio, il faut déclencher un message qui contrôle son amplitude, qui lui dit d'aller à 1 (= maximum, A NE PAS DEPASSER), ou O (= la sinusoïde ne sort plus sur les enceintes, en effet, tous ces points ( ou samples) sont multipliés par 0, donc ça donne un signal qui est constamment à 0, on entend donc rien).
Il faut maintant faire la distinction entre ces objets audio (~) et les autres que l'on appelle : objets de contrôle
Visuellement, les connections audio sont représentées par des lignes grasses, tandis que les connections de contrôles sont plus fines :
6.1.2. message (ctl + shift + 2) : possibilité d'écrire à l'intérieur en cliquant en mode edit (ctl + e). Cela peut être un nombre, une variable (mot choisi par l'utilisateur), ou un mot précis compris par l'objet qui reçoit le message (comme "stop" par exemple relié à un métronome, le métronome s'arrêtera).
6.1.3. GUI (Graphic User Interface) : boîte nombre (ctl + shift + 3), les boutons toggle : interrupteur (alt + t),et bang : déclenchement simple (alt +b), sliders verticaux et horizontaux (alt + v et alt + h), ... Ce sont des outils plus graphiques, pour améliorer la maniabilité de l'interface, sa visibilité. Ca fait beaucoup de GUI, pour simplifier les plus utilisés seront les boîtes nombres, le bang et les toggle.
nombre (ctl +shift+ 2) : change dynamiquement pendant que le patch tourne. Ces boîtes servent souvent à visualiser des informations et aussi comme contrôleur en cliquant dessus et en bougeant la souris en haut ou en bas (contrôle plus fin avec la souris = shift + bouger la souris).
6.1.4. commentaire (ctl + shift + 5) : juste du texte, pour décrire son patch. Par exemple, le texte en dessous des images capturées de Pure Data ci dessus sont des commentaires. A utiliser énormément pour vos patchs, quand vous décidez de le partager, sinon on ne comprendra pas votre patch.
6.2. informations particulières
Ici, on rentre un peu plus dans les détails. Là, c'est affaire
de personnes, vous pouvez très bien commencer à faire votre premier
patch dès à présent. Cette partie porte sur certaines particularités,
concernant l'ordre des messages, la taille du buffer, la conversion audio/midi,
les envois d'informations sans connections directes, la variable dollar-sign.
6.2.1. nombres
Apparemment, Pure Data ne traite que les nombres en virgule flottante. La
définition est de 32 bits. Il peut représenter des entiers exactement entre
-8388608 et 8388608. Ces chiffres sont importants pour voir les limites de
Pure Data dans l'utilisation de fichier audio. Ainsi, au maximum il ne pourra
traiter que des fichiers audio de 8388608 échantillons, soit à
peu près 190 secondes (3 minutes 10 secondes) pour un fichier en 44100Hz.
Certains connaissent pourtant des problèmes avec des fichiers audio
de 40 secondes... ( à approfondir).
6.2.2. audio
Pd peut lire les formats audio WAV, AIFF, ou AU. La fréquence d'échantillonnage
de base est bien sûr 44100Hz. La quantisation acceptée est de 16 bits ou même
24 bits (je n'ai jamais testé). La dynamique d'un signal, dans Pd se retrouvent
compris entre -1 et 1, au lieu de 0 à 65536 (16 bits).
A SAVOIR : L'audio fonctionne constamment (stream), tandis que les informations MIDI, donc de contrôles, arrivent ou n'arrivent pas. Autrement dit, le but du calcul des informations de contrôles est de s'interposer entre les calculs de l'audio. Elles ne peuvent pas s'intercaler n'importe quand, cela dépend de la taille du buffer audio. La taille du buffer peut être spécifié dans Pd avec l'objet "block~". En général, la taille est de 64 samples, soit en 44100HZ, = 6400 / 44100 = 1,45 ms. Donc les informations de contrôles dans cette hypothèse s'intercalent tous les 64 samples audio. (à voir : objet block~). Eviter d'avoir trop de dessins en fonctionnement pendant que Pd produit du son. Cela peut causer des clics numériques. Je vous invite à expérimenter une interface graphique qui fonctionne avec Pd et qui résoudrait ce défaut : Gripd (Graphical Interface for Pure Data). Elle fonctionne en réseau avec Pd, et gère apparemment mieux le coté graphique-utilisateur. Pour l'instant, c'est un peu tôt dans l'apprentissage, mais c'est à garder dans un coin de la tête.
"block~" : (voir l'Help) On peut arrêter et allumer le calcul audio et en définir la taille en unité sample. Cela agit sur la fenêtre entière est les sous fenêtres. Le premier argument spécifie la taille, ici 1024 samples, le deuxième, le facteur de superposition (overlap : terme technique d'audionumérique : je ne peux pas vous informer là-dessus).
Au dessus de 64 samples : légère augmentation de l'efficacité. En dessous de 64 : résolutions plus fines entre l'audio et les messages, réduction du "block delay" dans les algorithmes de bouclage (feedback).
convertion audio/message : convertir un contrôle en signal : objet "sig~" ; convertir un signal en contrôle : objet "snapshot~"
6.2.3. priorités
. Les connections proritaires sont celles qui ont été créées en premier.
. On parle aussi d'entrées chaudes (celles de gauche)
ou froides (celles de droite) pour définir une priorité
entre les entrées. Dans l'exemple ci-dessous, l'addition ne se fait pas car
l'entrée froide ne déclenche pas le résultat.
Pour remédier à ce problème : il faut connecter un bang (il déclenche l'action) à la sortie du nombre connecté sur l'entrée froide. A chaque fois que l'on modifiera le nombre à droite il déclenchera un bang sur l'entrée chaude, qui nou donnera le résultat immédiat :
Un autre cas particulier : une sortie de boîte message connectée à deux entrées différentes, cela donne un résultat erronné.
Pour résoudre ce problème, il faut utiliser un objet qui permet de vraiment envoyer deux messages en même temps : l'objet "trigger"
6.2.4. messages
Pour envoyer plusieurs messages, on utilise une virgule ou un point virgule
:
La différence, c'est qu'avec la virgule, tous les messages sont envoyés simultanément, comme l'objet "trigger", alors qu'avec les points-virgules, chaque message est nouveau, il écrase la destination précédente. Ici, on utilise, afin de visualiser leurs différences, un objet "receive" avec comme argument le même mot (choisi par l'utilisateur). Cet objet reçoit une donnée qu'on lui envoie. La façon de diriger cet envoie est d'utiliser le même mot.
6.2.5. signe dollar $
Les " $" sont utilisés comme variables. Il y a deux facons
de les utiliser : $1 ou $1-montruc
La deuxième façon permet de définir une adresse unique dans le patch en cours. "$0-montruc" est un cas particulier des $1-montruc. Dans une abstraction (voir plus bas), c'est un compteur qui garantie d'être unique dans cette abstraction. C'est très pratique, par exemple quand on veut créer un objet nous-même (= une abstraction), et que l'ont veut en avoir plusieurs. En utilisant "$0-montruc", en duplicant l'objet, les messages ne s'interfèrent pas, contrairement aux messages "send montruc" où tous les "receive montruc" de toutes les fenêtres reçoivent le même message.
6.3. sous patches/ abstractions
Avec les sous-patchs et les abstractions, on peut réaliser un patch très complexe et très riche, dans lequel on navigue de
façon pyramidale, c'est-à-dire en partant de la première fenêtre, puis en ouvrant les sous-patchs, ensuite les sous-patchs des sous-patchs, etc...
sous-patchs :
On crée un sous-patch en faisant ctl + shift + 1, en écrivant "pd" suivi du nom de notre sous-patch que l'on a choisi. Une fenêtre s'ouvre alors. En général, on les utilise pour simplifier les opérations, les ranger aussi. On peut créer des entrées (inlets) et des sorties (outlets).
abstractions
L'abstraction est une réunion d'objet que l'on a choisi pour faire une action
spécifique. Il faut créer un nouveau document Pd, comme cela :
En regardant bien le nom du document, il a donc une extension .pd. Il faut ensuite spécifier le chemin dans lequel on l'a enregistré. Le mieux c'est encore de créer un dossier abstractions dans le dossier Pure data, s'il n'y ai pas déjà.
Ensuite, il faut créer dans le dossier abstractions un autre dossier qui affine le rangement de l'abstraction que l'on a créé. Il faut alors indiquer le chemin au fichier .bat de démarrage.
ex:
-path "C:\Program Files\Pure Data\abstractions\test"
Redémarrer Pd, créer un nouveau document et créer une boîte objet
(ctl+shift+1) en écrivant le nom de l'abstraction créée, ici "abstraction" :
Cas particulier des abstractions avec l'utilisation des signes dollar $ :
On peut donc initialiser une abstraction avec tous les types de données. Le $1 est le premier argument, ici, un nombre ou float, le $2 est un mot, ou une chaîne de caractère, ou un symbol.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Précédent : Pure Data : démarrage introduction Suivant : Pure Data : synthèse