Strudelify

Dur dur d'etre bebe

Jordy

KeyC♯ minorTempo124 bpm
0:00/0:00
// Dur dur d'etre bebe — Jordy
// 124 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · epiano2 · "El Piano"
const epiano2 = note(`<
  ~ A B A C D@2 E@2 F@2 A ~ G H G H G H G H A C A C A C A B ~@16 G H G H G H G H G H G H ~@8 A C A C ~@4 G H G H ~@16 A
  C A C A C A C A C A C I
>`.pickRestart({
  A: "[g#3,b3,c#4]", B: "[c#4,e4]@10 [c#4,e4,f#4]@5 ~, a3@15 ~", C: "[c#4,e4]@5 [c#4,e4,f#4]@3, a3",
  D: "[[g#3,c#4]@15 ~ [c#4,e4]@10 [c#4,e4,f#4]@5 ~, b3@31 ~, ~@16 a3@15 ~]/2", // C#5 C#m F#7
  E: "[c#4@16 [c#4,e4]@10 [c#4,e4,f#4]@5 ~, [g#3,b3]@31 ~, ~@16 a3@15 ~]/2", // C#m F#7 G#m
  F: "[[g#3,c#4]@8 [c#4,e4]@5 [c#4,e4,f#4]@3, b3, ~ a3]/2", // C#5 C#m F#7
  G: "~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~", // C#7
  H: "~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [c#4,e4,f#4] ~@2 [e4,f#4]@2 ~ [c#4,e4,f#4] ~, ~@11 c#4 ~@4", // A F#7 Esus2 F#7
  I: "[f#4,g#4,b4,c#5] ~@7", // F#sus4
})).s("gm_epiano2").gain(0.38)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B
  A B A B A B ~@4 A B A B A B A ~ A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B C
>`.pickRestart({
  A: "c#2@2 ~@2 c#2@3 e2 ~@2 e2@2 f#2 ~ f#2 e2", B: "a1@2 ~@2 a1@3 g#1 ~@2 g#1@2 b1@2 g#1 ~", C: "c#1 ~@7",
})).s("gm_electric_bass_pick").gain(0.72)

// chords · string ensemble 2 · "SlowStri"
const string_ensemble_2 = note("<~@77 A B A C D@2 A B ~@21>".pickRestart({
  A: "[g#3,b3,c#4]@15 ~", B: "a3 f#4, [c#4,e4]", C: "a3@2 f#4 g#4, [c#4,e4]@15 ~",
  D: "[[g#3,b3]@2 a3 f#4, c#4@31 ~, ~ e4]/2", // G#m
})).s("gm_string_ensemble_2").gain(0.4)

// other · string ensemble 1 · "SynthStr"
const string_ensemble_1 = note("<~@9 A@2 B@2 ~@8 C@2 D@2 C@2 E F ~@20 C@2 D@2 C@2 E F ~@36 G@2 H@2 ~@9>".pickRestart({
  A: "[c#6@29 ~ g#5 b5, ~@29 e6@2 ~]/2", B: "[c#6@31 ~]/2", C: "[c#6@30 g#5 b5]/2", D: "[c#6@30 g#6 f#6]/2", E: "c#6",
  F: "c#7", G: "[c#6@29 g#5 ~ g#5, ~@15 b5]/2", H: "c#6/2",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · piano · "RhythmPn"
const piano = note(`<
  ~@5 A B A C A B A ~@17 A B A B A C A B A B A B A B A ~@13 A B A B A B A B ~@12 A B A B A B A B A B A C A B A B ~@4 A B
  A B A B A B D
>`.pickRestart({
  A: "~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~@2 [g#3,b3,c#4] ~", // C#7
  B: "~@2 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [c#4,e4,f#4] ~@2 [e4,f#4]@2 ~ [c#4,e4,f#4] ~, ~@11 c#4 ~@4", // A F#7 Esus2 F#7
  C: "~@2 [a3,c#4,e4] ~@2 [a3,c#4] ~@2 [c#4,e4,f#4] ~@2 [e4,f#4]@2 ~ [c#4,e4,f#4] ~, ~@5 e4@2 ~@4 c#4 ~@4", // A F#7 Esus2 F#7
  D: "[c#4,f#4,g#4] ~@15", // C#sus4
})).s("gm_piano").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A C B@3 D A B A B A B A C B@4 A B A C A B A C A B A C A B@6 D A B A B@5 A B A B A B A B A B A B A B@3 A
  B A B A B A E A B A F A B A B A B A B A B A C A B A B A B A B A B G H I
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~ x ~ x!4", D: "x ~@4 x ~@2 x ~@4 x ~@2", E: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~",
  F: "x ~ x ~ x ~@2 x ~ x ~ x!2 ~ x ~", G: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~", H: "x ~@2 x!2 ~ x ~ x!2 ~ x!2 ~ x ~",
  I: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A C A B A D A B A E A B A F A B A G A B A B A B A G A B A D A B A D A B A B A B A E A B A C A B A B A B A H A B
  A B A B A C A B A B A B A H ~@3 I A B A J A B A B A B A F A B A D A B A F A B A B A B A H ~
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~ x!2", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@2 x!6", D: "~@4 x ~@2 x ~@4 x!4",
  E: "~@2 x!3 ~@5 x!3 ~@3", F: "~@2 x ~ x ~ x!10", G: "~@4 x ~@2 x!4 ~ x!4", H: "~@2 x!4 ~ x!2 ~ x!6",
  I: "~@7 x!2 ~ x!6", J: "x ~ x ~ x ~@2 x ~@3 x!5",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~ A B@10 C B@31 C B@24 ~@4 A B@31 C>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ A@11 ~ A@31 ~ A@24 ~@4 A@32 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@11 ~ A@31 ~ A@31 ~ A@28 ~>".pickRestart({
  A: "x!16",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~ A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~
  A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · congas
const congas = s("conga:13").struct("<~ A@11 ~ A@31 ~ A@31 ~ A@28 ~>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(2.3)

// drums · congas
const congas_2 = s("conga:33").struct("<~ A B@10 C A B@30 ~ B@31 ~ B@28 ~>".pickRestart({
  A: "~@6 x!3 ~@5 x!2", B: "x ~@5 x!3 ~@5 x!2", C: "x",
})).gain(2.3)

stack(
  epiano2, bass, string_ensemble_2, string_ensemble_1, piano, kick, snare, hihat, open_hat, tambourine, crash, congas,
  congas_2
)