Vidéo de synthèse et code musical

Réalisée dans le cadre du master de musique et informatique musicale de l’UPEM en 2018, coding a moon est une vidéo de synthèse sous Processing, créée comme support à la composition musicale bass drone, écrite en lignes de code sous CSound.

Code CSound :

<CsoundSynthesizer>
<CsOptions>
</CsOptions>
<CsInstruments>

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

; initialize zak space  - one a-rate and one k-rate variable.
; We will only be using the a-rate variable.
zakinit   1, 1

giSine   ftgen   0, 0, 2^12, 10, 1 ; a sine wave

;------------------------------ instru drone_variation -----------------------------------------------------
instr drone_variation

;controle de l'enveloppe du multi-oscillateur
iatt  = p9
idec  = p10  
islev = p11
irel  = p12
kenv	adsr iatt, idec, islev, irel

kFreq expon p6,p8,p7 ;'expon' generates an exponential ramp, from p6 to p7 Hz, taking p8 seconds
a1 poscil kenv*p4/8, p5*kFreq	; p4=amplitude du signal // kfreq =  frequence fondamentale (pour memoire, evoluant de p6 à p7 en p8 secondes
a2 poscil kenv*p4/8, p5*kFreq*2	; p4=amplitude du signal // p5= multiplicateur de la frequence fondamentale
a3 poscil kenv*p4/8, p5*kFreq*3
a4 poscil kenv*p4/8, p5*kFreq*4
a5 poscil kenv*p4/8, p5*kFreq*5
a6 poscil kenv*p4/8, p5*kFreq*6
a7 poscil kenv*p4/8, p5*kFreq*7
a8 poscil kenv*p4/8, p5*kFreq*8


; on divise par 4 le parametre p4, pour repartir la charge audio entre les 4 oscillateur, evite de faire clipper

asig1 sum a1, a2, a3, a4, a5, a6, a7, a8
; equivalent -> a1+a2+a3+a4 etc.

outs  asig1, asig1

iRvbSendAmt = p13 ; reverb send amount (0 - 1)
; write to zak audio channel 1 with mixing
zawm asig1*iRvbSendAmt, 1


endin
;--------------------------------- instru drone_plateau --------------------------------------------
instr drone_plateau

; NOTA: voir si on peut remplacer la courbe exponentielle par une sinusoide lente (à voir pour la table de fonction qui devrait pouvoir moduler le signal, pour l'instant on applique des coef fixes pour générer les harmoniques)
; par la suite on pourra faire évoluer l'amplitude des harmoniques pour passer d'un instru riche à un instru au timbre pauvre

;controle de l'enveloppe du multi-oscillateur
iatt  = p9 ; tps d'attack
idec  = p10  ; tps du decay
islev = p11	 ; amplitude du sustain
irel  = p12 ; tps de release
kenv	adsr iatt, idec, islev, irel

kFreq expon p6,p8,p7 ;'expon' generates an exponential ramp, from p6 to p7 Hz, taking p8 seconds
a1 poscil kenv*p4/8, p5*kFreq	; p4=amplitude du signal // kfreq =  frequence fondamentale (pour memoire, evoluant de p6 à p7 en p8 secondes
a2 poscil kenv*p4/8, p5*kFreq*2	; p4=amplitude du signal // p5= multiplicateur de la frequence fondamentale
a3 poscil kenv*p4/8, p5*kFreq*3
a4 poscil kenv*p4/8, p5*kFreq*4
a5 poscil kenv*p4/8, p5*kFreq*5
a6 poscil kenv*p4/8, p5*kFreq*6
a7 poscil kenv*p4/8, p5*kFreq*7
a8 poscil kenv*p4/8, p5*kFreq*8


; on divise par 4 le parametre p4, pour repartir la charge audio entre les 4 oscillateur, evite de faire clipper

asig1 sum a1, a2, a3, a4, a5, a6, a7, a8
; equivalent -> a1+a2+a3+a4 etc.

outs  asig1, asig1

iRvbSendAmt = p13 ; reverb send amount (0 - 1)
; write to zak audio channel 1 with mixing
zawm asig1*iRvbSendAmt, 1

endin

;------------------------------  instru bruit rose (impulsions) delay----------------------------

instr noise_burst
kEnv loopseg   0.5,0, 0,1,0.003,1,0.0001,0,0.9969,0,0; amp. env.
aSig pinkish   kEnv       ; pink noise pulses
outs aSig, aSig ; send audio to outputs
iRvbSendAmt  = p4;send reverb
zawm      aSig*iRvbSendAmt, 1

; -- create a delay buffer --
aBufOut delayr   0.5                    ; read audio end buffer
aTap1   deltap   3.1373                 ; delay tap 1
aTap2   deltap   8.2197                 ; delay tap 2
aTap3   deltap   1.4139                 ; delay tap 3
        delayw   aSig + (aTap3*0.4)     ; write audio into buffer

; send audio to the output (mix the input signal with the delayed signals)
out aSig + ((aTap1+aTap2+aTap3)*0.4)
endin

;------------------------------ blip blip delay ----------------------------
instr blip
; -- create an input signal: short 'blip' sounds --
kEnv    loopseg  0.5,0,0,0,0.0005,1,0.1,0,1.9,0,0; repeating envelope
kCps    randomh  400, 1000, 0.5                 ; 'held' random values
aEnv    interp   kEnv                           ; a-rate envelope
aSig    poscil   aEnv, kCps, giSine             ; generate audio

iRvbSendAmt = p4 ; reverb send amount (0 - 1)
; write to zak audio channel 1 with mixing
zawm aSig*iRvbSendAmt, 1

; -- create a delay buffer --
aBufOut delayr   0.5                    ; read audio end buffer
aTap1   deltap   1.2                 ; delay tap 1
aTap2   deltap   2.6                 ; delay tap 2
aTap3   deltap   1.9                 ; delay tap 3
        delayw   aSig + (aTap3*0.4)     ; write audio into buffer

; send audio to the output (mix the input signal with the delayed signals)
out aSig + ((aTap1+aTap2+aTap3)*0.4)
endin

;------------------------------  instru bruit blanc (nappes diffuses) ----------------------------

instr white_noise

;controle de l'enveloppe du multi-oscillateur
iatt  = p4
idec  = p5  
islev = p6
irel  = p7
kEnvWhiteNoise	adsr iatt, idec, islev, irel

;input of rand: amplitude, fixed seed (0.5), bit size
aNoise rand 1*kEnvWhiteNoise, 1, 0 ; syntaxe [, iseed] [, isel] [, ioffset] 
aNoise reson aNoise, p9, 80, 1 ; bandpass filtered
;pan du bruit blanc

aPan lfo 0.5,10, 0      ; kamp / freq / type of lfo ici "sine"
aPan    =  aPan + 0.5     ; offset shifted +0.5
aPanL   =  sin((aPan + 0.5) * $M_PI_2)
aPanR   =  cos((aPan + 0.5) * $M_PI_2)

outs    aNoise*aPanL, aNoise*aPanR

iRvbSendAmt = p8 ; reverb send amount (0 - 1)
; write to zak audio channel 1 with mixing
zawm aNoise*iRvbSendAmt, 1
          
endin

;------------------------------  instru reverb ----------------------------
instr reverb ;always on
aInSig       zar       1    ; read first zak audio channel
kFblvl       init      0.88 ; feedback level - i.e. reverb time
kFco         init      8000 ; cutoff freq. of a filter within the reverb
aRvbL,aRvbR  reverbsc  aInSig, aInSig, kFblvl, kFco
outs aRvbL, aRvbR ; send audio to outputs
zacl 0, 1 ; clear zak audio channels
endin


</CsInstruments>
<CsScore>
;----------------------------------- demarrage reverb -----------------------
i"reverb" 0 205 ; demarre la reverb et l'arrete a 205 secondes (la piece en fait 200)



;-----------------------------------impulsions de bruit rose-----------------------------------
;				p2	p3	p4 (rev send)
i"noise_burst" 		0 	3 	0.9
i"noise_burst" 		3 	8 	0.9
i"noise_burst" 		11 	2 	0.2
i"noise_burst" 		15 	2.5 	0.3
i"noise_burst" 		20 	3 	0.6
i"noise_burst" 		26 	8 	0.7
i"noise_burst" 		36 	4 	0.8
i"noise_burst" 		42 	8 	0.9
i"noise_burst" 		54 	3 	0.9
i"noise_burst" 		60 	8 	0.9
i"noise_burst" 		68 	2 	0.2
i"noise_burst" 		72 	5 	0.001
i"noise_burst" 		84 	9 	0.9
i"noise_burst" 		94 	1 	0.1
i"noise_burst" 		96 	1 	0.1
i"noise_burst" 		98 	1 	0.1
i"noise_burst" 		100 	1 	0.1
i"noise_burst" 		106 	2 	0.6
i"noise_burst" 		108	2 	0.6
i"noise_burst" 		112 	8 	0.2
i"noise_burst" 		120 	1 	0.9
i"noise_burst" 		158	1	0.1
i"noise_burst" 		159	1	0.3
i"noise_burst" 		162	1	0.5
i"noise_burst" 		165	1	0.7
i"noise_burst" 		168	1	0.9

;-----------------------------------blips-----------------------------------

i"blip"			8	10	0.2
i"blip"			27	10	0.3
i"blip"			40	10	0.4
i"blip"			55	10	0.2
i"blip"			70	6	0.9
i"blip"			91	4	0.2
i"blip"			101	4	0.3
i"blip"			111	4	0.4
i"blip"			121	1	0.9
i"blip"			135	20	0.4
i"blip"			157	2	0.1
i"blip"			160	2	0.3
i"blip"			163	2	0.5
i"blip"			166	2	0.7
i"blip"			169	2	0.9

;----------------------------------- bruit blanc-----------------------------------

;p1				p2	p3	p4(tps_att) p5(tps_decay)	p6(level_sus)	p7(tps_release)	p8(rev_amount) 	p9(center freq filtre passe-bande)
i"white_noise" 		23 	4	2		0.2			0.6			1			0.5			1400
i"white_noise" 		34 	6	0.2		0.2			0.4			4			0.5			1300
i"white_noise" 		42 	11.5	10		0			1			0.01			0.5			1600
i"white_noise" 		42 	11.5	0.01		0			1			0.01			0.5			9000
i"white_noise" 		42 	11.5	0.01		0			1			1			0.5			750
i"white_noise" 		60 	4	2		0.2			0.6			1			0.5			1400
i"white_noise" 		75 	14	3		5			0.2			6			0.9			8000
i"white_noise" 		100 	6	0.2		0.2			0.4			4			0.5			1300
i"white_noise" 		111 	10	3		6			0.2			1			0.9			8000
i"white_noise" 		120 	14	12		0			0.8			2			0.5			1600
i"white_noise" 		134 	10	2		0.5			0.4			4			0.9			10000
i"white_noise" 		144.5	22	1		0			1			6			0.2			1500
i"white_noise" 		167	4	0.001		0.5			0.2			2			0.9			5000
i"white_noise" 		172	28	10		10			1			8			0.2			880

;----------------------------------- drone -----------------------------------
;argument p1= numéro de l'instrument (i1) // argument p2=nb de secondes avant de jouer // argument p3 =durée du son // argument p4= amplitude du signal // argument p5= coef multiplicateur de la frequence fondamentale kfreq // argument p6 et p7 = bornes d'évolution de la frequence kfreq selon une rampe exponentielle // argument p8 = durée d'évolution de kfreq selon la rampe p6->p7
;-----------------------------------montee
;p1 				p2	p3	p4 p5	p6 p7 p8	p9att		p10dec	p11sus	p12rel	p13reverb
i"drone_variation" 	60 	12 	.5 1. 10 39 10	1		0.		0.6		1		0.5
i"drone_variation" 	60	12	.4 2. 10 25 10	1		0.		0.6		1		0.3
i"drone_variation" 	60	12	.5 1.	10 37 11	1		0.		0.4		1		0.4
i"drone_variation" 	60	12	.3 2.	10 30 11	1		0.		0.4		1		0.3

;-----------------------------------etat plateau
;p1 				p2	p3	p4 p5	p6 p7 p8	p9att		p10dec	p11sus	p12rel	p13reverb
i"drone_plateau" 	71	50	.5 1.	38 39 11	1.2		0.		0.6		1		0.5
i"drone_plateau" 	71	50	.3 2.	29 31 11	1.2		0.		0.6		1		0.3
i"drone_plateau" 	71	50	.5 1.	39 37 11	5		0.		0.4		1		0.4
i"drone_plateau" 	71	50	.3 2.	31 30 11	8		0.		0.4		1		0.3

;-----------------------------------descente
;p1 				p2	p3	p4 	p5 p6 p7 	p8	p9att	p10dec	p11sus	p12rel	p13reverb
i"drone_plateau" 	121	11 	.8 	1. 39 1 	10	1.	0.		0.6		10		0.5
i"drone_plateau" 	121	11 	.3 	2. 38 1 	7.3	1.	0.		0.6		10		0.3
i"drone_plateau" 	121	11	.5 	1. 37 1	5	0.9	0.		0.4		10		0.4
i"drone_plateau" 	121	11	.3 	2. 30 1	8	0.9	0.		0.4		10		0.3

;-----------------------------------secousses de fin
;p1 				p2	p3	p4 	p5 p6 p7 	p8	p9att	p10dec	p11sus	p12rel	p13reverb
i"drone_variation"	120.2 2.5 	.4 	1. 10010 	0.8	0.001	0.		1.		2.49		0.2;secousse 1
i"drone_variation"	121.2 2.5 	.35 	1. 80 10 	0.8	0.001	0.		1.		2.49		0.2;secousse 1
i"drone_variation"	122.2 2.5 	.3 	1. 60 10 	0.8	0.001	0.		1.		2.49		0.2;secousse 1
i"drone_variation"	124.	4. 	.2 	1. 49 30 	0.8	0.001	0.		1.		3.99		0.2;secousse 4

;----------------------------------- retour de drone final
;p1 				p2	p3	p4 p5	 p6 		p7  	p8	p9att		p10dec	p11sus	p12rel	p13reverb
i"drone_variation" 	140 	60 	.5 0.7 40 		38.5 	20	5		20		0.8		10		0.4
i"drone_variation" 	145 	45 	.1 1. 18000		20000	1	5		25		0.2		0.01		0.9
i"drone_variation" 	145 	45 	.1 1. 20000 	18000	1	5		25		0.2		10		0.5
i"drone_variation" 	150 	40 	.1 1. 20000 	16000	1	5		20		0.2		10		0.45
i"drone_variation" 	155 	35 	.1 1. 20000 	14000	1	5		15		0.2		10		0.35
i"drone_variation" 	160 	30 	.1 1. 20000 	12000	1	5		10		0.2		10		0.30

e
</CsScore>
</CsoundSynthesizer>