Processing
|
La mise à l’échelle d’une valeur est utilisée très fréquemment dans les patches pour transformer une donnée (une commande, un signal, une valeur de capteur, une valeur aléatoire, ...) en paramètre utilisable par un objet (volume sonore, luminosité, vitesse de lecture de video, taille d’image, etc...).
Le principe est simple, c’est une règle de trois.
La valeur d’origine peut s’étendre d’un minimum à un maximum qui sont connus (0 et 127 pour des données en Midi standard, 0 et 1 pour une enveloppe, 0 et 100 pour un Wave d’Isadora, ...).
L’effet à l’arrivée n’accepte que des valeurs dont les bornes sont différentes, plus petites ou plus grandes (0 à 3 pour le son en PD, -3 à 3 pour une vitesse de lecture, 0 à 1 ou 0 à 255 pour des couleurs...).
Le passage de l’une à l’autre se fait proportionnellement (dans les exemples de cette page).
Dans tous les exemples qui suivent, la règle de trois transforme une valeur de 5 à 127 en une valeur de 10 à 50.
En Pg, la fonction map() est dédiée à la mise à l’échelle des données.
float machin ;
int truc = 5 ;
machin = map(truc, 5,127, 10,50) ;
Syntaxe :
map(valeur, start1, stop1, start2, stop2)
Paramètre | Type | Description |
---|---|---|
valeur | float ou int | valeur d’origine à convertir |
start1 | float ou int | minimum d’origine de la valeur à convertir |
stop1 | float ou int | maximum d’origine de la valeur à convertir |
start2 | float ou int | minimum en sortie |
stop2 | float ou int | maximum en sortie |
Résultat : float. Utiliser int() autour du map() si le résultat souhaité doit être un nombre entier.
La sortie de map() n’est pas limitée aux min et max paramétrés : si la valeur d’entrée déborde de ses bornes, la valeur de sortie aussi.