xscanu

xscanu — Calcule la forme d'onde et la table d'onde à utiliser dans la synthèse par balayage.

Description

Opcode du greffon scansyn.

Version expérimentale de scanu. Autorise des matrices bien plus grandes, est plus rapide et plus compact, mais supprime une certaine flexibilité (non utilisée ?). S'il est apprécié, il remplacera l'ancien opcode car sa syntaxe est compatible bien qu'étendue.

Syntaxe

xscanu init, irate, ifndisplace, ifnmass, ifnmatrix, ifncentr, ifndamp, kmass, \
      kmtrxstiff, kcentr, kdamp, ileft, iright, kpos, kdisplace, ain, idisp, id

Initialisation

init -- la position initiale des masses. Si c'est un nombre négatif, alors la valeur absolue de init indique la table à utiliser pour la forme du marteau. Si init > 0, il doit représenter le nombre de masses attendu, sinon sa valeur est sans importance.

irate -- taux de mise à jour.

ifndisplace -- ftable contenant la vitesse initiale de chaque masse. Sa taille est le nombre de masses attendu.

ifnmass -- ftable contenant la valeur de chaque masse. Sa taille est le nombre de masses attendu.

ifnmatrix --

  • soit une ftable contenant la raideur du ressort de chaque connexion. Sa taille est le carré du nombre de masses attendu. Ses données sont ordonnées selon la succession des lignes de la matrice de connexion du système.

  • soit une chaîne de caractères donnant le nom d'un fichier au format MATRIX

ifncentr -- ftable contenant la force de centrage de chaque masse. Sa taille est le nombre de masses attendu.

ifndamp -- ftable contenant le facteur d'amortissement de chaque masse. Sa taille est le nombre de masses attendu.

ileft -- si init < 0, position du marteau de gauche (ileft = 0 frappe complètement à gauche, ileft = 1 frappe complètement à droite).

iright -- si init < 0, position du marteau de droite (iright = 0 frappe complètement à gauche, iright = 1 frappe complètement à droite).

idisp -- s'il vaut 0, il n'y a pas d'affichage des masses.

id -- s'il est positif, c'est l'ID de l'opcode. Il est utilisé pour relier l'opcode de balayage au bon générateur de forme d'onde. S'il est négatif, sa valeur absolue indique la table d'onde dans laquelle sera écrite la forme d'onde. Cette forme d'onde peut être utilisée par la suite par un autre opcode pour générer du son. Le contenu initial de cette table sera écrasé.

Exécution

kmass -- pondère les masses

kmtrxstiff -- pondère la raideur des ressorts

kcentr -- pondère la force de centrage

kdamp -- pondère l'amortissement

kpos -- position d'un marteau actif le long de la corde (kpos = 0 est complètement à gauche, kpos = 1 est complètement à droite). La forme du marteau est déterminée par init et sa puissance de percussion est kstrngth.

kdisplace -- puissance utilisée par le marteau actif

ain -- entrée audio qui s'ajoute à la vélocité des masses. L'amplitude ne doit pas être trop grande.

Format de Matrice

Le format de matrice de xscanu est une liste de connexions, une par ligne reliant le point x au point y. Aucun poids n'est affecté au lien ; il est supposé valoir l'unité. La liste est précédée par la ligne <MATRIX> et se termine par une ligne </MATRIX>

Par exemple, une corde circulaire de 8 sera codée par

<MATRIX>
0 1
1 0
1 2
2 1
2 3
3 2
3 4
4 3
4 5
5 4
5 6
6 5
6 7
7 6
0 7
</MATRIX>
        

Pour éviter la confusion avec d'autres formats de matrice, il vaut mieux sauvegarder ce format de matrice avec l'extension de fichier .XmatrxT.

Exemples

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

Exemple 1343. Exemple de l'opcode xscanu.

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  --limiter=0.95  ;;;realtime audio out & limit loud sounds
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o xscanu.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1
;the matrices can be found in /manual/examples

instr 1	; Plain scanned syntnesis
	; Note Also that I am using quadratic interpolation on these.
  a0	=           0
	xscanu      1, .01, 6, 2, "128,8-grid.XmatrxT", 4, 5, 2, .1, .1, -.01, .1, .5, 0, 0, a0, 0, 0
  a1	xscans      .5, cpspch(p4), 333, 0, p6			; NOTE LEFT RIGHT TRAJECTORY (f333) IS CLEAN!
  a1	dcblock a1
	outs        a1, a1
endin


instr 2	; Scan synthesis with audio injection and dual scan paths

  a0  diskin2       "fox.wav",1,0,1	
 ; a0,aa	    ins
  a0	=           a0/.8
	xscanu      1, .01, 6, 2, "128,8-torus.XmatrxT", 14, 5, 2, .01, .05, -.05, .1, .5, 0, 0, a0, 0, 0
  a1	xscans      .3, cpspch(7.00), 333, 0, 2			; NOTE LEFT RIGHT TRAJECTORY (f333) IS CLEAN!
  a2	xscans      .3, cpspch(6.00), 77, 0, 2
  a1	dcblock a1
  a2	dcblock a2
	outs        a1*.5,a2*.1
endin 

</CsInstruments>
<CsScore>

; Initial condition
;f1 0 16 7 0 8 1 8 0
f1 0 128 7 0 64 1 64 0

; Masses
f2 0 128 -7 1 128 1

; Centering force
f4  0 128 -7 0 128 2
f14 0 128 -7 2 64 0 64 2

; Damping
f5 0 128 -7 1 128 1

; Initial velocity
f6 0 128 -7 -.0 128 .0

; Trajectories
f7 0 128 -5 .001 128 128
f77 0 128 -23 "128-spiral-8,16,128,2,1over2.traj"
f777 0 128 -23 "128,8-torus.XmatrxT"

; Spring matrices
f3 0 128 -23 "128-string.XmatrxT"
f33 0 128 -23 "128-stringcircular.XmatrxT"
f333  0 128 -23 "128-left_right.XmatrxT"
f3333 0 128 -23 "128,8-torus.XmatrxT"
f33333 0 128 -23 "128,8-cylinder.XmatrxT"
f333333 0 128 -23 "128,8-grid.XmatrxT"

; Sine
f9 0 1024 10 1

; Pitch tables
f100 0 1024 -7 +3 128 +3 128 -2 128 -2 128 +0 128 +0 128 -4 128 -4 128 +3
f101 0 1024 -7 -2 128 -2 128 -2 128 -2 128 -5 128 -5 128 -4 128 -4 128 -2
f102 0 1024 -7 +3 128 +3 128 +2 128 +2 128 +0 128 +0 128 +0 128 +0 128 +3
f103 0 1024 -7 +7 128 +7 128 +5 128 +5 128 +3 128 +3 128 +3 128 +3 128 +7 

; Amplitude tables
f200 0 1024 7 1 128 0 128 0 127 0 1 1 128 0 128 0 127 0 1 1 128 0 127 0 1 1
f201 0 1024 7 0 127 0 1 1 127 0 1 1 128 0 127 0 1 1 127 0 1 1 128 0 127 0 1 1 127 0 1 1
f202 0 1024 7 1 127 0 1 1 127 0 1 1 127 0 1 1 127 0 1 1 127 0 1 1 127 0 1 1 127 0 1 1 127 0 1 
f203 0 1024 7 1 1024 0
;;f204 0 1024 7 1 512 0 511 0 1 1

;-----------------------

; Note list
i1 0 10 6.00 1  2                               
s
i2 0 15
e
</CsScore>
</CsoundSynthesizer>


Pour des exemples similaires, voir la documentation sur scans.

Voir aussi

On peut trouver plus d'information sur la synthèse par balayage (de même que d'autres matrices) sur la page Scanned Synthesis du site Csounds.com.

Il y a aussi un article sur ces opcodes : http://www.csounds.com/stevenyi/scanned/yi_scannedSynthesis.html, écrit par Steven Yi.

scanu, xscans

Crédits

Ecrit par John ffitch.

Nouveau dans la version 4.20