scanu

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

Description

Opcode du greffon scansyn.

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

Syntaxe

scanu 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 représente le nombre de masses attendu.

irate -- l'intervalle de temps entre les mises à jour successives de l'état des masses. Du même ordre de grandeur que la période d'échantillonnage du système. Si ce nombre est grand, la chaîne sera mise à jour lentement montrant une faible variation du timbre ; sinon elle changera rapidement donnant un son plus dynamique.

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 -- 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.

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 la matrice

Le format de la matrice de scanu est une liste binaire de connexions. le poids du lien est supposé être unitaire.

Par exemple, une chaîne circulaire de quatre éléments serait codée de cette manière :

0
1
0
0
1
0
1
0
0
1
0
1
0
0
1
0
        

Note : pour éviter la confusion avec d'autres formats de matrice, il vaut mieux sauvegarder ce format de matrice avec l'extension de fichier .matrxB.

Exemples

Voici un exemple de l'opcode scanu. Il utilise les fichiers scanu-musical.csd et MIDIpad.mid.

Exemple 936. Exemple de l'opcode scanu.

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>
-odac -d -F "MIDIpad.mid"
; For Non-realtime ouput leave only the line below:
; -o scanu-musical.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; by Shengzheng Zhang (aka John Towse)

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

itmp  ftgen 1, 0, 128, 7, 0, 64, 1,64, 0      ; generating all bunch of tables needed
itmp  ftgen 2, 0, 128, -7, 1, 128, 1
itmp  ftgen 3, 0, 16384, -23, "string-128.matrxB"
itmp  ftgen 4, 0, 128,-7 ,0.5 ,128, 0
itmp  ftgen 5, 0, 128, -7, 1, 128, 1
itmp  ftgen 6, 0, 128, -7, 0, 128, 0
itmp  ftgen 7, 0, 128, -7, .001, 128,128

gal   init 0                                 ; getting reverb and delay ready
gar   init 0
gavl  init 0
gavr  init 0

instr 1
kpan    randh 1, 3                           ; random panning
kpan    port kpan, 0.05 ;make the panning change not so quick
kpitch  cpsmidib 12
ipitch  cpsmidi
kenvm   madsr 0.02, 0.6, 0.2, 1
kenv2   madsr 0.1, 0.6, 0.8, 1
kenv3   madsr 0.8, 0.6, 0.8, 1
kvib    lfo 1, 5
ifnvel  = 1
ifnmass = 2
ifnstif = 3
ifncentr = 4
ifndamp = 5
kstif   = 0.3 + 0.1*kvib * kenv3
kmass   = 10-(5*kenvm)                      ; modulated mass
kcentr  = 0.1
kdamp   = -0.02
ileft   = 0.2
iright  = 0.8
kpos    = 0.2
kstrngth = 0.005
;setups for scan synthesis
a2      madsr 0.002, 0.01, 0.001, 0 ;get a initial pick, but seemed like not working 
scanu 1, 0.1,ifnvel, ifnmass,ifnstif,ifncentr, ifndamp,kmass, kstif, kcentr, kdamp, ileft, iright,kpos,kstrngth, a2*0.5, 0.2, 1
a1      scans .01*kenv2, kpitch+kpitch*kvib*kenv3*0.01, 7, 1
a1      dcblock a1
a1      butterlp	a1, kpitch*8
a1      butterlp	a1, kpitch*12
al      = a1*kpan
ar      = a1*(1-kpan)
        outs al, ar
        vincr gal, al
        vincr gar, ar
        vincr gavl, al
        vincr gavr, ar
endin

instr 2
abuf    delayr 5
adl     deltap 0.3
        delayw gal + (adl * 0.2)

abuf    delayr 5
adr     deltap 0.4
        delayw gal + (adr * 0.2)
        
        outs adl, adr
        clear gal
        clear gar
endin

instr 3
adl, adr reverbsc gavl, gavr, 0.85, 12000
        outs adl, adr
        clear gavl
        clear gavr
endin

</CsInstruments>
<CsScore>
i2 0 70
i3 0 70
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

Plus d'information sur cet opcode : http://www.csounds.com/stevenyi/scanned/yi_scannedSynthesis.html , écrit par Steven Yi.

Crédits

Auteur : Paris Smaragdis
MIT Media Lab
Boston, Massachussetts USA
Mars 2000

Nouveau dans la version 4.05 de Csound