← Retour aux ressources
strudel.cc / workshop

Fiches Récap

Workshop complet — éditeurs interactifs intégrés

Comment lire les exemples — Chaque bloc ci‑dessous contient un éditeur Strudel. Clique dans la zone de code, puis : Ctrl+Enter (ou Cmd+Enter sur Mac) pour lancer la lecture, Ctrl+. (ou Cmd+. sur Mac) pour arrêter. Tu peux modifier le code et relancer avec Ctrl+Enter.
Strudel est basé sur des cycles : chaque pattern tourne en boucle. Par défaut un cycle dure 2 secondes (30 cycles/min). Plus une séquence contient d'éléments, plus elle s'accélère pour tenir dans le cycle.
Mini-Notation
Séquence
espace
sound("bd bd sd hh")
Numéro de sample
:x
sound("hh:0 hh:1 hh:2")
Silence / pause
- ou ~
sound("bd - sd -")
Alternance (1/cycle)
< >
sound("<bd hh rim oh>")
Sous-séquence
[ ]
sound("bd [hh hh] sd")
Sous-sous-séquence
[[ ]]
sound("bd [[rim rim] hh]")
Accélération
*n
sound("bd sd*2 cp*3")
Parallèle
,
sound("bd*2, hh*4, - cp")
Fonctions
sound()
Joue un son par son nom
sound("bd sd [- bd] sd")
n()
Sélectionne le numéro de sample (plus lisible que :x)
n("0 1 4 2").sound("jazz")
.bank()
Change la drum machine
sound("bd sd").bank("RolandTR909")
setcpm()
Tempo en cycles par minute — 120bpm en 4/4 = 30 cpm
setcpm(90/4); sound("bd hh sd hh")
Sons de batterie
bdbass drum
sdsnare drum
hhhihat
ohopen hihat
rimrimshot
ltlow tom
mtmiddle tom
hthigh tom
rdride cymbal
crcrash cymbal
Raccourcis & Drum Machines
Jouer / Mettre à jour
Ctrl + Enter
Stopper
Ctrl + .
RolandTR909 · RolandTR808 · RolandTR707
AkaiLinn · RhythmAce · ViscoSpaceDrum
Exemples interactifs
Sous-séquences & parallèle
Rock basique
House classique
Séquenceur 16 pas
Notes via note() : chiffres MIDI (60 = C4) ou lettres a à g. Dièse avec #, bémol avec b. Octave avec un chiffre après la lettre (ex: c3). La fonction n() + .scale() permet de travailler par degrés — tous les numéros sonnent juste.
Mini-Notation — nouveautés
Ralentir
/n
note("[c a f e]/2")
Alternance (rappel)
< >
note("c a f <e g>")
Allonger (durée relative)
@n
note("c@3 e") — c dure 3x plus
Répliquer
!n
note("c!3 e") — c répété 3 fois
Fonctions
note()
Joue une note en MIDI ou lettre
note("b g e c").sound("piano")
.scale()
Interprète n() comme un degré de gamme
n("0 2 4 6").scale("C:minor").sound("piano")
$:
Joue plusieurs patterns en parallèle. _$: pour muter un pattern.
$: sound("bd*4")   $: note("c e g")
Gammes
C:major
A:minor
D:dorian
G:mixolydian
A:minor:pentatonic
F:major:pentatonic
Format : Note:gamme — peut inclure une octave (A2:minor). La gamme peut être un pattern :
n("0 2 4").scale("<C:major D:mixolydian>/4")
@ vs ! vs *
@n — Allonger
note("c@3 e") → c occupe 3 unités, e occupe 1. Durée totale inchangée.
!n — Répliquer
note("c!3 e") → équivalent à "c c c e".
*n — Accélérer
note("c*3 e") → c répété 3x en sous-séquence compressée.
Exemples interactifs
Notes par lettres + .sound()
Gamme — explorer les degrés
Shuffle avec @ (groove blues/jazz)
Multi-patterns $: — Basse + Mélodie + Batterie
Les effets s'appliquent en chaîne avec .nomEffet(valeur). La valeur peut être un nombre fixe, un pattern mini-notation, ou un signal (sine, saw, rand…). Les signaux oscillent entre 0 et 1 par défaut — utiliser .range(min, max) pour ajuster.
Effets audio
.lpf()
Low-pass filter — filtre les aigus. Bas = sourd (porte fermée), haut = brillant.
note("c2 c3").sound("sawtooth").lpf("200 1000 200 1000")
.vowel()
Formant vocal — simule des voyelles. Valeurs : a e i o u
note("c3 eb3 g3").sound("sawtooth").vowel("<a e i o>")
.gain()
Volume entre 0 et 1. Patternable pour créer de la dynamique.
sound("hh*16").gain("[.25 1]*4")
.delay()
Délai. Format .delay("vol:temps:feedback") — chaque paramètre optionnel.
sound("bd rim").delay(".5:.125:.8")
.room()
Réverbération. Plus la valeur est grande, plus la réverb est longue.
sound("bd rim").room(2)
.pan()
Panoramique stéréo. 0 = gauche, 1 = droite, 0.5 = centre.
sound("bd rim cp oh").pan("0 0.3 .6 1")
.speed()
Vitesse de lecture du sample. Négatif = lecture à l'envers.
sound("bd rim").speed("<1 2 -1 -2>")
.fast() .slow()
Accélère ou ralentit le pattern entier hors mini-notation.
sound("bd*4, ~ rim ~ cp").slow(2)
Enveloppe ADSR
attack
Temps pour monter au volume max
decay
Temps pour descendre au sustain
sustain
Niveau tenu pendant la note (0 à 1)
release
Temps pour s'éteindre après la note
.adsr(".1:.1:.25:.2")   // attack:decay:sustain:release
Ou chaque paramètre séparément :
.attack(.1)
.decay(.1)
.sustain(.25)
.release(.2)
Signaux de modulation
Les signaux remplacent une valeur fixe par une oscillation continue. Ils s'utilisent directement comme valeur d'un effet.
sine
saw
square
tri
rand
perlin
sound("hh*16").gain(sine)   // volume ondule avec sinus
sound("hh*16").lpf(saw.range(500, 2000))   // plage personnalisée
note("c2 bb2 f2").sound("sawtooth").lpf(sine.range(100,2000).slow(4))
Exemples interactifs
LPF en pattern
Gain + dynamique rythmique
Enveloppe ADSR
Signal — gain avec sinus
Signal — lpf avec saw modulé lentement
Petit dub complet
Les Pattern Effects sont propres à Tidal/Strudel — ils manipulent la structure temporelle des patterns eux-mêmes, pas seulement le son. Ce sont des outils puissants pour générer de la complexité à partir de peu de code.
Fonctions de pattern
.rev()
Inverse l'ordre du pattern.
n("0 1 [4 3] 2").sound("jazz").rev()
.jux(fn)
Duplique le pattern : gauche = original, droite = version modifiée par fn.
n("0 1 [4 3] 2").sound("jazz").jux(rev)
.add()
Ajoute des valeurs aux notes/degrés. Peut être patterné. Fonctionne aussi sur les chaînes mini-notation.
n("0 2 4 6".add("<0 1 2 1>")).scale("C:minor")
.ply(n)
Répète chaque événement n fois dans son slot. Patternable.
sound("hh hh, bd rim").ply("<1 2 1 3>")
.off(t, fn)
Copie le pattern, le décale de t cycles, applique fn à la copie. Empilable.
n("0 [4 <3 2>]").scale("C5:minor").off(1/16, x=>x.add(4))
.slow(n)
Ralentit le pattern d'un facteur n. Peut être patterné lui-même.
note("c2, eb3 g3").sound("piano").slow("0.5,1,1.5")
.fast(n)
Accélère le pattern d'un facteur n.
sound("bd sd [~ bd] sd").fast("<1 [2 4]>")
Exemples interactifs
.rev() — pattern inversé
.jux(rev) — gauche original / droite inversé
.slow() en pattern — polytempos
.add() — décalage harmonique
.ply() — chaque événement répété n fois
.off() — copie décalée et modifiée
Stack complet — Xylophone + Basse + Jazz
Synthèse complète du workshop. Toutes les notions en un seul endroit pour référence rapide.
Mini-Notation — toute la syntaxe
ConceptSyntaxeExemple
Séquenceespacesound("bd bd sd hh")
Numéro sample:xsound("hh:0 hh:1 hh:2")
Silence- ou ~sound("metal ~ jazz jazz:1")
Sous-séquence[ ]sound("bd wind [metal jazz] hh")
Sous-sous-séquence[[ ]]sound("bd [metal [jazz sd]]")
Accélération*nsound("bd sd*2 cp*3")
Parallèle,sound("bd*2, hh*2 [hh oh]")
Ralentir/nnote("[c a f e]/2")
Alternance< >note("c <e g>")
Allonger@nnote("c@3 e")
Répliquer!nnote("c!3 e")
Sons
FonctionRôle
sound()Joue un son
.bank()Drum machine
n()Numéro de sample
setcpm()Tempo cycles/min
Notes
FonctionRôle
note()MIDI ou lettre
n() + .scale()Degré de gamme
$:Patterns parallèles
_$:Muter un pattern
Effets audio
EffetRôle
.lpf()Filtre passe-bas
.vowel()Formant vocal
.gain()Volume (0 à 1)
.delay()Délai (vol:t:fb)
.room()Réverb
.pan()Panoramique 0–1
.speed()Vitesse sample
.adsr()Enveloppe
Pattern Effects
FonctionDescriptionExemple
setcpmTempo cycles/minsetcpm(45); sound("bd sd [~ bd] sd")
.fast(n)Accélère le patternsound("bd sd [~ bd] sd").fast(2)
.slow(n)Ralentit le patternsound("bd sd [~ bd] sd").slow(2)
.rev()Inverse le patternn("0 2 4 6").scale("C:minor").rev()
.jux(fn)L = original / R = modifién("0 2 4 6").scale("C:minor").jux(rev)
.add(n)Ajoute aux notes/degrésn("0 2 4".add("<0 1 2 1>")).scale("C:minor")
.ply(n)Répète chaque event n foiss("bd sd").ply("<1 2 3>")
.off(t, fn)Copie décalée et modifiées("bd sd, hh*4").off(1/8, x=>x.speed(2))
Signaux
Signaux de base (oscillent entre 0 et 1) :
sine
saw
square
tri
rand
perlin
signal.range(min, max)  // ajuste la plage
signal.slow(n)  // ralentit la modulation
sound("hh*16").lpf(sine.range(200, 4000).slow(4))
Bac à sable — tout combiner
Zone libre — modifie et expérimente (stack workshop)