space

space — Distribue un signal audio sur quatre canaux en utilisant des coordonnées cartésiennes.

Description

space prend un signal en entrée et le distribue sur quatre canaux en utilisant les coordonnées cartésiennes xy pour calculer la balance des sorties. Les coordonnées xy peuvent être définies dans un fichier texte séparé et récupérées par le biais d'une instruction de fonction dans la partition en utilisant Gen28, ou bien on peut les spécifier au moyen des arguments facultatifs kx, ky. Les avantages de la première méthode sont :

  1. On peut utiliser une interface graphique pour dessiner et éditer la trajectoire dans le plan cartésien.

  2. Le format de fichier est de la forme temps1 X1 Y1 temps2 X2 Y2 temps3 X3 Y3 ce qui permet de définir une trajectoire paramétrée par le temps.

space permet ainsi de définir un pointeur temporel (du même type que ceux utilisés par pvoc, lpread et quelques autres unités) pour avoir un contrôle détaillé sur la vitesse résultante du mouvement.

Syntaxe

a1, a2, a3, a4  space asig, ifn, ktime, kreverbsend, kx, ky

Initialisation

ifn -- numéro de la fonction créée au moyen de Gen28. Ce générateur de fonction lit un fichier texte qui contient des groupes de trois valeurs représentant les coordonnées xy et un paramètre de temps indiquant quand le signal doit être placé à cette position. Le fichier ressemblera à ceci :


  0       -1       1
  1        1       1
  2        4       4
  2.1     -4      -4
  3       10     -10
  5      -40       0

Avec un fichier nommé « move » l'appel à Gen28 dans la partition s'écrira :


  f1 0 0 28 "move"
      

Gen28 prend pour taille 0 et alloue la mémoire automatiquement. Il crée ses valeurs avec une résolution de 10 ms. Ainsi dans ce cas, il y aura 500 valeurs créées en interpolant de X1 à X2 à X3 et ainsi de suite, et de Y1 à Y2 à Y3 et ainsi de suite, sur le nombre approprié de valeurs stockées dans la table de fonction. Dans l'exemple ci-dessus, le son démarre à l'avant-gauche, après une seconde il atteind l'avant-droite, après une autre seconde il est plus éloigné mais toujours à l'avant-droite, ensuite il bouge à l'arrière-gauche en moins d'un dizième de seconde, un peu éloigné. Enfin, durant les neuf dixièmes de seconde suivants le son bouge à l'arrière-droite, modérément distant, puis il se fixe entre les deux haut-parleurs de gauche (plein ouest !), assez éloigné. Comme les valeurs dans la table sont lues par l'unité space au moyen d'un pointeur temporel, le temps courant peut être réglé pour suivre exactement celui du fichier, ou bien il peut être réglé pour aller plus vite ou plus lentement le long de la même trajectoire. Si l'on a accès à l'interface graphique permettant de dessiner et d'éditer les fichiers, il n'est pas nécessaire de créer les fichiers texte manuellement. Mais dès lors que le fichier est en ASCII dans le format ci-dessus, peu importe comment il a été créé !

[Note] Important

Si ifn vaut 0, space obtient les valeurs des coordonnées xy depuis kx et ky.

Exécution

La configuration des coordonnées xy dans l'espace place le signal de la manière suivante :

  • a1 est en (-1, 1)

  • a2 est en (1, 1)

  • a3 est en (-1, -1)

  • a4 est en (1, -1)

Ceci suppose une disposition des haut-parleurs où a1 est à l'avant-gauche, a2 à l'avant-droit, a3 à l'arrière-gauche et a4 à l'arrière-droite. Les valeurs supérieures à 1 donnent un son atténué, comme s'il était éloigné. space considère que les haut-parleurs sont à une distance de 1 ; on peut utiliser des valeurs de xy inférieures, mais space n'amplifiera pas le signal dans ce cas. Il équilibrera le signal cependant de manière à ce qu'il soit entendu comme s'il se trouvait à l'intérieur de l'espace des quatre haut-parleurs. x=0, y=1, place le signal entre les canaux avant gauche et droite, x=y=0 place le signal également entre les quatre canaux, et ainsi de suite. Bien que space fournisse quatre signaux en sortie, on peut l'utiliser dans un orchestre à deux canaux. Si les xy sont tels que y reste >= 1, il fonctionnera correctement pour faire des panoramiques et des localisations fixes dans un champ stéréophonique.

asig -- signal audio en entrée.

ktime -- indice dans la table contenant les coordonnées xy. S'il est utilisé comme ceci :


  ktime           line  0, 5, 5
  a1, a2, a3, a4  space asig, 1, ktime, ...

avec le fichier « move » décrit ci-dessus, la vitesse du mouvement du signal sera exactement celle qui est décrite dans ce fichier. Cependant avec :


  ktime           line  0, 10, 5

le signal se déplacera deux fois moins vite qu'à la vitesse spécifiée. Ou dans le cas de :


  ktime           line  5, 15, 0

le signal se déplacera dans la direction inverse et trois fois moins vite ! Enfin avec :


  ktime           line  2, 10, 3
      

le signal ne se déplacera que depuis l'endroit spécifié à la ligne 3 du fichier texte jusqu'à l'endroit spécifié à la ligne 5 du fichier texte, et il lui faudra 10 secondes pour le faire.

kreverbsend -- le pourcentage du signal direct qui sera combiné avec la distance déduite des coordonnées xy pour calculer la quantité de signal qui sera envoyée à des unités de réverbération comme reverb ou reverb2.

kx, ky -- lorsque ifn vaut 0, space et spdist utilisent ces valeurs comme coordonnées xy pour positionner le signal.

Exemples

Voici un exemple de l'opcode space. Il utilise le fichier space_quad.csd.

Exemple 988. Exemple de l'opcode space.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac   ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o space_quad.wav -W ;;; for file output any platform
</CsOptions> 
<CsInstruments>

sr = 44100 
ksmps = 32 
0dbfs  = 1 
nchnls = 4
  
ga1	init	0
ga2	init	0
ga3	init	0
ga4	init	0

instr 1	;uses GEN28 file "move", as found in /manual/examples

kx    init 0
ky    init 0
ktime line  0, 5, 5				;same time as in table 1 (="move")
asig  diskin2 "beats.wav", 1, 0, 1		;sound source is looped
a1, a2, a3, a4 space asig, 1, ktime, .1, kx, ky	;use table 1 = GEN28
ar1, ar2, ar3, ar4 spsend			;send to reverb

ga1  = ga1+ar1
ga2  = ga2+ar2
ga3  = ga3+ar3
ga4  = ga4+ar4
     outq a1, a2, a3, a4

endin

instr 99 ; reverb instrument

a1 reverb2 ga1, 2.5, .5
a2 reverb2 ga2, 2.5, .5
a3 reverb2 ga3, 2.5, .5
a4 reverb2 ga4, 2.5, .5
   outq	a1, a2, a3, a4

ga1=0	
ga2=0
ga3=0
ga4=0

endin
</CsInstruments>
<CsScore>
f1 0 0 28 "move"

i1 0 5		;same time as ktime
i 99 0 10	;keep reverb active
e
</CsScore>
</CsoundSynthesizer>
Dans l'exemple ci-dessus, le signal asig est déplacé selon les données dans la Fonction n°1 indéxée par ktime. space envoie en interne la quantité appropriée du signal à spsend. Les sorties de spsend sont ajoutées à des accumulateurs globaux selon la manière habituelle dans Csound et les signaux globaux servent d'entrée aux unités de réverbération dans un instrument séparé.


space peut être utile pour une spatialisation quadro ou stéréo ainsi que pour le positionnement fixe des sons n'importe où entre deux haut-parleurs. Ci-dessous un exemple du positionnement fixe de sons dans un champ stéréo en utilisant des valeurs xy provenant de la partition au lieu d'une table de fonction. Il utilise le fichier space_stereo.csd.

Exemple 989. Second exemple de l'opcode space.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac   ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o space_stereo.wav -W ;;; for file output any platform
</CsOptions> 
<CsInstruments>

sr = 44100 
ksmps = 32 
0dbfs  = 1 
nchnls = 2
  
ga1 init 0
ga2 init 0

instr 1

kx   = p4
ky   = p5
asig diskin2 "beats.wav", 1
a1, a2, a3, a4 space asig, 0, 0, .1, kx, ky	;take position values from p4, p5
ar1, ar2, ar3, ar4 spsend			;send to reverb

ga1 = ga1+ar1
ga2 = ga2+ar2
    outs a1, a2

endin

instr 99 ; reverb instrument

a1 reverb2 ga1, 2.5, .5
a2 reverb2 ga2, 2.5, .5
   outs	a1, a2

ga1=0
ga2=0

endin

</CsInstruments>
<CsScore>
;place the sound in the left speaker and near
i1 0 1 -1 1
;place the sound in the right speaker and far
i1 1 1 45 45
;place the sound equally between left and right and in the middle ground distance
i1 2 1 0 12

i 99 0 7	;keep reverb active
e
</CsScore>
</CsoundSynthesizer>


spdist montre un exemple d'une simple utilisation intuitive des valeurs de distance pour simuler un effet Doppler.

Voir aussi

spdist, spsend

Crédits

Auteur : Richard Karpen
Seattle, WA USA
1998

Nouveau dans la version 3.48 de Csound.