CompositionMusique et création numérique
Son of Moonlight
Mashup de Son of Flynn (Daft Punk) et de la Sonate au clair de lune (Beethoven), un peu psychédélique, en sol mineur à 96 BPM, écrit en code avec Strudel.
Piste
Son of Moonlight
Le morceau
Son of Moonlight croise deux thèmes : l’arpège de Son of Flynn, de Daft Punk, et la Sonate au clair de lune de Beethoven. Le tout passe par un filtre un peu psychédélique emprunté à Pink Floyd : les horloges et le cœur qui bat de « Time », l’arpège qui voyage d’une oreille à l’autre comme dans « On the Run ».
Tout est en sol mineur, à 96 BPM, plus lent que l’original de Daft Punk (105 BPM) pour que l’ensemble flotte davantage. Le morceau est une boucle de 54 mesures, écrite entièrement en code dans Strudel puis enregistrée.
Ce qu’on entend
L’ambiance. Un vent de fond, du bruit rose filtré qui respire tout au long du morceau, et un battement de cœur joué sur une boîte à rythmes Roland TR-909 : deux coups sur le premier temps, comme dans « Time ». Il tient jusqu’au drop et revient à la fin.
Beethoven. L’arpège en triolets de la sonate, joué par deux ondes en dents de scie très légèrement désaccordées, passe dans un phaser et des échos à la croche pointée calés sur le tempo. Un orgue reprend les accords avec un vibrato façon cabine Leslie, sur la basse de la sonate.
Les horloges. Plusieurs tic-tac de TR-808, chacun à sa vitesse et à sa place dans l’espace stéréo, montent petit à petit, puis une montée de bruit blanc annonce l’entrée de Son of Flynn.
Son of Flynn. L’arpège arrive avec un son doux et chaud, un filtre assez fermé qui s’ouvre lentement sur toute la boucle, et se balade doucement d’une oreille à l’autre.
Le drop. Des accords qui pompent façon French touch, recoupés en croches : c’est le volume qui pompe, pas le filtre. Trois ondes désaccordées les rendent larges. Viennent ensuite des cuivres, une basse en doubles-croches, et la batterie TR-909 au complet : grosse caisse, clap réverbéré, charleston en doubles-croches.
Rejouer le morceau
Le code complet est plus bas. Dans Strudel, Ctrl + Entrée lance la lecture et Ctrl + . l’arrête. Un curseur règle en direct la résonance du filtre de l’arpège de Son of Flynn.
Code source
Le code qui produit la musique, tel qu'écrit dans Strudel.
// "Son of Moonlight"
// mashup Son of Flynn (Daft Punk) x Sonate au clair de lune (Beethoven), un peu psyché façon Pink Floyd
// à coller sur https://strudel.cc, Ctrl+Entrée pour lancer, Ctrl+. pour stop
//
// tout en sol mineur, boucle de 54 mesures :
// 1-8 clair de lune : vent, cœur qui bat, orgue, arpège qui tourne
// 9-16 horloges de "Time" + première montée
// 17-24 Son of Flynn, l'arpège passe d'une oreille à l'autre comme dans "On the Run"
// 25-52 le drop : accords qui pompent, cuivres, basse, batterie
// 53-54 le cœur qui bat pour finir et ça repart
const bpm = 96 // plus lent que l'original (105), ça flotte mieux
const echo = 60 / bpm * .75 // écho à la croche pointée, calé sur le tempo
setcpm(bpm / 4)
// ================= AMBIANCE =================
// vent de fond, bruit rose filtré qui respire tout le long
$: s("pink")
.lpf(sine.range(200, 1400).slow(16)).lpq(6)
.pan(sine.slow(12))
.gain(.07).room(1).size(1)
// battement de cœur comme dans "Time", deux coups sur le premier temps
// tourne jusqu'au drop et revient à la fin
$: s("<[bd bd ~ ~ ~ ~ ~ ~]!24 ~!28 [bd bd ~ ~ ~ ~ ~ ~]!2>")
.bank("RolandTR909")
.lpf(160).gain(.6).room(.3)
// ================= BEETHOVEN (27 pas sur 54 mesures, 1 pas = 2 mesures) =================
// arpège en triolets de la sonate, phaser + échos qui se baladent
$: note(`
[d3 g3 a#3 d3 g3 a#3 d3 g3 a#3 d3 g3 a#3]
[d3 g3 a#3 d3 g3 a#3 d3 g3 a#3 d3 g3 a#3]
[d#3 g3 a#3 d#3 g3 a#3 d#3 g#3 c4 d#3 g#3 c4]
[d3 f#3 c4 d3 g3 a#3 d3 g3 a3 c3 f#3 a3]
[g2 d3 g3 d3 g3 a#3 d3 g3 a#3 d3 g3 a#3]
[d3 a3 c4 d3 a3 c4 d3 a3 c4 d3 a3 c4]
[d3 g3 a#3 d3 g3 a#3 d#3 g3 c4 d#3 g3 c4]
[d3 f3 a#3 d3 f3 a#3 c3 f3 a3 d#3 f3 a3]
~!18
[d3 g3 a#3 d3 g3 a#3 d3 g3 a#3 d3 g3 a#3]
`).slow(54)
.s("sawtooth")
.superimpose(x => x.add(note(.1)))
.lpf(sine.range(700, 1600).slow(8)).lpq(4).lpenv(1.5)
.attack(.005).decay(.3).sustain(.25).release(.4)
.phaser(.5).phaserdepth(.7)
.pan(sine.slow(8))
.delay(.5).delaytime(echo).delayfeedback(.55)
.gain(.3).room(.8)
// orgue sur les accords de Beethoven, vibrato façon cabine Leslie
$: note(`
[g3,a#3,d4] [g3,a#3,d4] [[d#3,g3,a#3] [d#3,g#3,c4]] [[d3,f#3,c4] [d3,f#3,a3]]
[g3,a#3,d4] [d3,f#3,a3,c4] [[d3,g3,a#3] [d#3,g3,c4]] [[d3,f3,a#3] [c3,d#3,f3,a3]]
~!18
[g3,a#3,d4]
`).slow(54)
.s("gm_drawbar_organ")
.vib(6).vibmod(.12)
.phaser(.25).phaserdepth(.5)
.attack(.4).release(1.5)
.gain(.35).room(.9).size(.9)
// basse de Beethoven
$: note(`
[g2 g2] [f2 f2] [d#2 c3] [d2 d2] [g2 g2] [f#2 f#2] [g2 c3] [f2 f2]
~!18
[g2 g2]
`).slow(54)
.s("sawtooth").lpf(350).attack(.05).release(.8)
.superimpose(x => x.s("sine").sub(note(12)))
.gain(.45)
// ================= SON OF FLYNN (1 pas = 1 mesure) =================
// arpège de Son of Flynn, son doux et chaud comme l'original
// filtre assez fermé, peu de résonance, se balade doucement d'une oreille à l'autre
// le curseur règle la résonance du filtre
$: note(`
~!16
[g3 a#3 d4 g4 a#4 d5 g3 a#3 d4 g4 a#4 d5 g3 a#3 d4 d4]!2
[f3 a3 d4 f4 a4 d5 f3 a3 d4 f4 a4 d5 f3 a3 d4 d4]!2
[d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 c4]!2
[c3 d#3 g3 c4 d#4 g4 c3 d#3 g3 c4 d#4 g4 c3 d#3 g3 g3]!2
[g3 a#3 d4 g4 a#4 d5 g3 a#3 d4 g4 a#4 d5 g3 a#3 d4 d4]!2
[f3 a3 d4 f4 a4 d5 f3 a3 d4 f4 a4 d5 f3 a3 d4 d4]!2
[d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 c4]!2
[c3 d#3 g3 c4 d#4 g4 c3 d#3 g3 c4 d#4 g4 c3 d#3 g3 g3]!2
[a#2 d3 g3 a#3 d4 g4 a#2 d3 g3 a#3 d4 g4 a#2 d3 g3 g3]!2
[d3 d3 g3 d3 d4 g4 d3 d3 g3 d3 d4 g4 d3 d3 g3 g3]!2
[d3 d3 f#3 d3 d4 f#4 d3 d3 f#3 d3 d4 f#4 d3 d3 f#3 f#3]!2
[f#3 a3 d4 f#4 a4 d5 f#3 a3 d4 f#4 a4 d5 f#3 a3 d4 d4]!2
[f3 a#3 d4 f4 a#4 d5 f3 a#3 d4 f4 a#4 d5 f3 a#3 d4 d4]!2
[e3 a#3 c4 e4 a#4 c5 e3 a#3 c4 e4 a#4 c5 e3 a#3 c4 c4]!2
[d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 d#4 g4 c5 d#3 g3 c4 c4]!2
[d3 g3 a#3 d4 g4 a#4 d3 g3 a#3 d4 g4 a#4 d3 g3 a#3 a#3]!2
[c#3 g3 a3 c#4 g4 a4 c#3 g3 a3 c#4 g4 a4 c#3 g3 a3 a3]!2
[d3 g3 a3 d4 g4 a4 d3 g3 a3 d4 g4 a4 d3 g3 a3 a3]
[d3 f#3 a3 d4 f#4 a4 d3 f#3 a3 d4 f#4 a4 d3 f#3 a3 a3]
~!2
`).slow(54)
.s("sawtooth")
.superimpose(x => x.add(note(.1)))
.lpf(saw.range(400, 1800).slow(54)).lpq(slider(1.5, 0, 20)).lpenv(.5)
.attack(.01).decay(.2).sustain(.3).release(.15)
.pan(sine.range(.35, .65).slow(4))
.delay(.25).delaytime(echo).delayfeedback(.35)
.gain(.32).room(.5)
// accords qui pompent façon French touch, recoupés en croches
// c'est le volume qui pompe et pas le filtre, sinon ça fait pistolet laser
// trois scies désaccordées pour un son large
$: note(`
~!16
[d5,a#4,g4,g3]@2 [d5,a4,f4,f3]@2 [c5,g4,d#4,d#3]@2 [g4,c4,d#4,c3]@2
[d5,a#4,g4,g3]@2 [d5,a4,f4,f3]@2 [c5,g4,d#4,d#3]@2 [g4,c4,d#4,c3]@2
[g4,d4,a#3,a#2]@2 [g4,d4,a#3,g3]@2 [f#4,d4,a3,f#3]@2 [d5,a4,f#4,d4]@2
[d5,a#4,f4,d4]@2 [c5,g4,e4,c4]@2 [c5,g4,d#4,c4]@2 [a#4,g4,d4,a#3]@2
[a4,g4,c#4,a3]@2 [a4,g4,d4,a3] [a4,d4,a3,f#3]
~!2
`).slow(54)
.segment(8) // accords en croches
.s("sawtooth").gain(.08)
.superimpose(x => x.add(note(.12)), x => x.add(note(-.12))) // trois scies désaccordées
.lpf(sine.range(900, 2200).slow(16)).lpq(1) // filtre doux qui bouge lentement
.attack(.12).decay(.1).sustain(.8).release(.05) // chaque croche gonfle, c'est ça la pompe
.velocity("[.7 1]*4") // contretemps un peu plus forts
.delay(.2).delaytime(echo).delayfeedback(.3)
.room(.4).size(2)
// cuivres
$: note(`
~!16
~!26
[e4,c4,g3]@2 [g3,d#3] [[a3,d#3] [a#3,d#3]] [a#3,g3]@2 [e4,a3]@2 [g4,a#3] [f#4,a3]
~!2
`).slow(54)
.s("gm_synth_brass_1")
.attack(.2).release(1)
.gain(.4).room(.8)
// basse en doubles-croches
$: note(`
~!16
~!8
g2*16!2 f2*16!2 d#2*16!2 c2*16!2 a#1*16!2 d2*16!4 f#2*16!2
a#2*16!2 e2*16!2 d#2*16!2 d2*16!2 c#2*16!2 d2*16!2 g1*16!2
`).slow(54)
.s("sawtooth")
.lpf(450).lpq(4).lpenv(1.5)
.decay(.12).sustain(.5).release(.05)
.superimpose(x => x.s("sine"))
.gain(.5)
// ================= BATTERIE (à partir de Son of Flynn) =================
// kick, arrive au drop
$: s("<~!24 [bd*4]!28 ~!2>")
.bank("RolandTR909").gain(.85)
// clap avec pas mal de réverb
$: s("<~!24 [~ cp ~ cp]!28 ~!2>")
.bank("RolandTR909").gain(.55).room(.8)
// hi-hats en contretemps quand Son of Flynn arrive, puis doubles-croches au drop
$: s("<~!16 [~ hh]*4!8 [hh*16]!28 ~!2>")
.bank("RolandTR909")
.gain("[.3 .15 .22 .15]*4")
.pan(sine.slow(4))
// horloges de "Time" sur les mesures 9-16
// plusieurs tic-tac pas à la même vitesse, chacun à un endroit différent, ça monte petit à petit
$: stack(
s("rim*4").speed("1 .8").pan(.2), // tic-tac
s("rim*3").speed(1.3).pan(.8),
s("rim*5").speed(.9).pan(.5).velocity(.6),
s("cb*2").speed(2).pan(.35).velocity(.4)
).bank("RolandTR808")
.hpf(1500)
.gain(saw.range(.05, .3).slow(8)) // monte sur 8 mesures
.room(.5)
.mask("<0!8 1!8 0!38>")
// montées de bruit avant Son of Flynn et avant le drop (mesures 13-16 et 21-24)
$: s("white")
.lpf(saw.range(300, 9000).slow(4))
.gain(saw.range(0, .2).slow(4))
.phaser(1).phaserdepth(.8)
.room(.9)
.mask("<0!12 1!4 0!4 1!4 0!30>")Rejouer dans Strudel
Strudel est un environnement de live coding musical libre, qui fonctionne dans le navigateur. Le code ci-dessus peut y être ouvert, modifié et joué en direct.
L'éditeur est chargé depuis strudel.cc (service tiers) seulement après un clic. Le son y est produit par Strudel lui-même : il peut différer de l'enregistrement si Strudel a évolué depuis.