Strudelify

Che ne fai di te

Pooh

KeyD majorTempo120 bpm
0:00/0:00
// Che ne fai di te — Pooh
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 9 distortion guitar (copy of ch 12 guitar harmonics)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 24.
setcpm(120/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 · piano
const piano = note(`<
  A@8 ~@4 B@4 ~@4 C@4 D E ~@17 B@4 ~@4 B@4 ~@4 C@4 D E ~@17 B@4 F G@2 H F G@2 H F G@2 H F G@2 I@6
>`.pickRestart({
  A: "[~@7 a5 ~@15 a5 a5@4 ~@2 d6 ~@8 a5 ~@15 a5 a5@4 ~@2 d6 e6, a5@14 ~@2 a5@14 a5@16 ~@10 b5@7 ~ a5@14 ~@2 a5@12 g5@4 ~@12 e6@12 ~@8, ~@8 c#6@4 c#6@20 ~@8 c#6@16 ~@2 c#6@5 ~@9 c#6@4 c#6@20 ~@8 c#6@16 b5@7 ~, ~@10 d6@22 ~@10 d6@14 ~@18 d6@22 ~@10 d6@14 ~@2 c#6@5 ~, ~@14 g5@2 ~@6 e6@6 ~@3 e6@16 a5@8 ~@9]/8",
  B: "[~@7 a5 ~@15 a5 a5@4 ~@2 d6 e6, a5@14 ~@2 a5@14 a5@16 ~@10 b5@7 ~, ~@8 c#6@4 c#6@20 ~@8 c#6@16 ~@2 c#6@5 ~, ~@5 d6@11 ~@5 d6@7 ~@4, ~@7 g5 ~@3 e6@3 ~@2]/4",
  C: "[~@7 a5 ~@15 a5 ~@7 e6, a5@7 ~ a5@7 a5@8 ~ a5@8, ~@2 c#6 c#6@5 ~@2 c#6@4 b5@2, ~@5 d6@11 ~@5 d6@8 c#6@3, ~@7 g5 ~@3 e6@4 d6]/4",
  D: "~@7 f#7, f#6@4 c#7 d7 e7@2, ~ g6@7, ~ a6@3, ~@3 b6@5", E: "g7 ~", F: "a5@4 c#6 d6 c#6 a5",
  G: "[a5@6 g5 a5@5 c#6 d6 e6 a5]/2", H: "a5@4 b5 c#6 d6 e6", I: "[a5@3 b5 c#6 d6 e6 a5@23 ~@2]/6",
})).s("gm_piano").gain(0.47).pan(0.4)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@2 d3 [d3 ~@7] ~@103>").s("gm_acoustic_guitar_nylon").gain(0.08).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D A B E F A B E F A B E F A B E F A B E G ~@19 A B E F A B E F A B E F A B E F A B E G ~@44
>`.pickRestart({
  A: "~@6 f#4 a3, d3@7 ~, f#4@6 f#4@5 ~@5, ~ d4@3 d4@3 ~, ~@2 a3@3 a3@2 ~",
  B: "~@7 b3, e3, e4@3 e4@3 e4@2, ~ b3@3 b3@3 ~, ~@2 g3@3 g3@3",
  C: "~@7 d4, f#3, f#4@3 f#4@3 f#4@2, ~ d4@3 d4@3 ~, ~@2 a3@3 a3@3", D: "g3 a3 d4 g3 e3 b3 e4 a3",
  E: "~@7 d4, d3, f#4@3 f#4@3 f#4@2, ~ d4@3 d4@3 ~, ~@2 a3@3 a3@3", F: "d3 a3 d4 g3 e3 b3 e4 a3",
  G: "~@3 g3 e3 b3 e4 a3",
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(1)

// other · guitar harmonics
const guitar_harmonics = note("<~@85 A B@3 C D E@2 F G@2 H I@3 J K L@4 ~>".pickRestart({
  A: "~@2 a4 ~@2 a4@2 ~ a4@2 ~ a4@2 ~ a4 ~", B: "[a4@10 ~@2 a4@8 g4@2 f#4@6 g4@2 f#4@4 d4@2 a3@11 ~]/3",
  C: "b3@3 c#4@2 d4@2 ~ e4@3 f#4@2 g4@2 ~", D: "a4@10 d5@2 ~ e5@2 ~", E: "[e5@7 ~ f#5@5 ~ f#5@6 d5@2 a4@10]/2",
  F: "b4@3 [c#5,d5] [b4,c#5] c#5 d5 e5 f#5 a5 g5 f#5 e5 d5 c#5 e5", // Dmaj7 Bsus2
  G: "[d5 c#5 [a4,b4] f#4@9 e4 f#4@5 g4@4 f#4 g4 a4@2 ~ b4@3 d5@2, ~@3 g4 ~@28]/2", H: "c#5 a4 a5@3 g5 f#5 d5",
  I: "[a4@3 b4@2 c#5 d5 c#5 b4 c#5 d5 e5 f#5 g5 a5@9 g5 f#5 d5 a4@2 d5 c#5 a4 f#4@3 e4@4 d4 ~ e4@3 a4 ~ c5 d5@2]/3",
  J: "c#5 a4 f#4@11 ~ g5@2", K: "~@2 g5@5 f#5 ~@2 g5@3 ~ f#5@2", L: "[~@3 g5@2 ~@2 g5@46 ~@11]/4",
})).s("gm_guitar_harmonics").gain(0.21).pan(0)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@33 A B@3 ~@2 A C@3 ~@29 A B@3 ~@2 A C@3 ~@3 D E@3 F G H@2 I J@2 K@3 L M@6 ~
>`.pickRestart({
  A: "b4@3 c#5@3 d5@2", B: "[f#5@3 g5@3 a5@8 c#6@10]/3", C: "[f#5@6 g5@6 a5@35 ~]/3",
  D: "~@3 a4 ~@2 a4@2 ~ a4@2 ~ a4@2 ~ a4", E: "[~ a4@10 ~@2 a4@8 g4@2 f#4@6 g4@2 f#4@4 d4@2 a3@11]/3",
  F: "~ b3@3 c#4@2 d4@2 ~ e4@3 f#4@2 g4@2", G: "~ a4@10 d5@2 ~ e5@2", H: "[~ e5@7 ~ f#5@5 ~ f#5@6 d5@2 a4@9]/2",
  I: "~ b4@2 c#5 [c#5,d5] b4 c#5 d5 e5 f#5 a5 g5 f#5 e5 d5 c#5", // Dmaj7
  J: "[e5 d5 [b4,c#5] [g4,a4] f#4@9 e4 f#4@4 g4@4 f#4 g4 ~ a4@2 b4@3 d5@2]/2", // Bsus2 Gsus2
  K: "[c#5@2 ~ a4@2 a5@6 g5@2 f#5@2 d5@2 a4@3 b4@2 c#5 d5 c#5 b4 c#5 d5 e5 f#5 g5 a5@9 g5 f#5 d5 a4@2 d5 c#5 a4]/3",
  L: "f#4@3 e4@4 d4 ~ e4@2 a4 ~@2 d5@2, ~@14 c5 ~",
  M: "[~ c#5 a4 f#4@11 g5@4 ~ g5@5 f#5 ~@2 g5@3 ~ f#5@2 ~@3 g5@2 ~@2 g5@46 ~@10]/6",
})).s("gm_distortion_guitar").gain(0.29).pan(1)

// other · overdriven guitar
const overdriven_guitar = note("<~@31 A B C D@3 A B C E@3 ~@27 A B C D@3 A B C E@3 ~@25>".pickRestart({
  A: "b2@6 c#3@6 d3@3 ~", B: "d3@6 e3@6 f#3@3 ~", C: "g3@3 a3@3 b3@2", D: "[d4@6 e4@5 ~ e4@16 a4@20]/3",
  E: "[d4@6 e4@5 ~ e4@35 ~]/3",
})).s("gm_overdriven_guitar").gain(0.2).pan(0.1)

// other · whistle
const whistle = note(`<
  A B A B C@2 D A ~@4 C@2 D A ~@4 C@2 D A E F ~@17 C@2 D A ~@4 C@2 D A ~@4 C@2 D A E G ~@17 C@2 D A ~@21
>`.pickRestart({
  A: "a5@15 ~", B: "a6@15 ~", C: "[a5@15 ~]/2", D: "a6", E: "~ a5", F: "g6", G: "g6 ~",
})).s("gm_whistle").gain(0.24).pan(0)

// other · pad metallic
const pad_metallic = note(`<
  ~@3 A B ~ C A D ~ C A D ~ C A D ~ C E D ~@22 F A D G H@2 I J K ~ L A M I@2 J K ~@22 F A D G F A D G F A D G F A D G F
  A D N O@4 ~
>`.pickRestart({
  A: "a5@3 g5@3 f#5@2 d5@4 b4@4", B: "a4@3 ~@5", C: "~@12 a5@3 ~", D: "a4 ~", E: "a5@3 g5@3 f#5@2 d5@4 b4@4, a4@3 ~@5",
  F: "a4@8 ~@4 a5@3 ~", G: "b4@3 c#5@2 d5@3 e5@3 f#5@2 g5@3", H: "[[a4,a5]@4 a4@4 d5@3 a5@4 a5@4 ~ a4@4 d5@4 a5@4]/2",
  I: "a5 a4 d5 a5", J: "a5@2 a4@2 b4 c#5 d5 e5", K: "f#5", L: "~@3 a5", M: "a5@4 a4@3 ~ d5@4 a5@4",
  N: "b4@3 c#5@3 d5@3 e5@4 f#5@3", O: "[~ g5@4 a4@48 ~@11]/4",
})).s("gm_pad_metallic").gain(0.52).pan(1)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A B C@2 A B C@2 A B C@2 A B C@2 A B D E@2 ~@18 A B C@2 A B C@2 A B C@2 A B C@2 A B D E@2 ~@18 A B C@2 A B C@2 A B
  C@2 A B C@2 A B F@6 ~
>`.pickRestart({
  A: "[d2,f#3,a3,d4]", B: "[e2,g3,b3,e4]", C: "[[f#2,a3]@16 [g2,b3]@8 ~ a4@7, [d4,f#4]@3 [a2,a3,c#4,e4]]/2",
  D: "[f#2,a3,d4,f#4]", E: "[~@9 a4@7 ~@16, [a2,a3,c#4,e4]]/2",
  F: "[[f#2,a3]@16 [g2,b3]@9 ~@2 a4@10 [f#3,a3,d4]@59, [d4,f#4]@25 [a2,a3,c#4,e4]@12 d2@48 ~@11]/6", // F#m G D A
})).s("gm_synth_strings_1").gain(0.21).pan(0.4)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@25 A B C@4 D@6 E@6 ~@21 A F G@4 H@6 I@6 ~@25>".pickRestart({
  A: "[g3,b3,d4,g4]@15 ~", B: "[a3,e4] [g3,g4], [c#4,a4]",
  C: "[[f#3,a3,f#4]@16 [g3,g4]@8 [f#3,f#4]@8 e3@8 d3@7 ~ [a2,a3,c#4]@16, d4@47 ~@17, ~@16 b3@31 ~@17, ~@32 e4@31 ~]/4", // F#m G F# A
  D: "[[b2,b3]@16 [a2,a3]@16 [g3,b3,g4]@15 ~ [f#3,a3,f#4]@15 ~ [e3,b3]@16 [a2,a3,c#4]@16, d4@5 ~, f#4@31 ~@33 [e4,g4]@31 ~]/6", // B A G F#m E5 A Em
  E: "[[b2,b3]@16 [d3,a3]@15 ~ [g2,b3,g4]@16 [f#2,a3,f#4]@16 [e2,b3]@16 [a2,a3]@16, d4, f#4@31 ~@33 [e4,g4]@32]/6", // B D5 G F#m E5 A Em
  F: "[a3,e4]@8 [g3,g4]@7 ~, [c#4,a4]", // A5 G F#m
  G: "[[f#3,a3,f#4]@2 [g3,g4] [f#3,f#4] e3 d3 [a2,a3,c#4]@2, d4@47 ~@17, ~@16 b3@31 ~@17, ~@32 e4@31 ~]/4", // F#m G F# A
  H: "[[b2,b3]@16 [a2,a3]@16 [g3,b3,g4]@15 ~ [f#3,a3,f#4]@16 [e3,b3]@15 ~ [a2,a3,c#4]@16, d4@79 ~@17, f#4@32 ~@32 [e4,g4]@31 ~]/6", // B A G F#m E5 A Em
  I: "[[b2,b3] [d3,a3] [g2,b3,g4] [f#2,a3,f#4] [e2,b3] [a2,a3], d4, f#4@31 ~@33 [e4,g4]@32]/6", // B D5 G F#m E5 A Em
})).s("gm_lead_2_sawtooth").gain(0.32).pan(0.6)

// bass · fretless bass
const bass = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B E F G H I J K L M N O P Q R S N O P Q R S A B C D A B C D A B C D A B C D A B
  E F G H I J K L M N O P Q R S N O P Q R S A B C D A B C D A B C D A B C D A B C T@5 ~
>`.pickRestart({
  A: "d2@13 ~ d2@2", B: "e2", C: "f#2@13 ~ f#2@2", D: "g2 a2", E: "f#2@13 ~ g2@2", F: "~@3 e3@5, a2 ~",
  G: "a3@3 e3@3 a2@2", H: "g2", I: "a2 g2", J: "f#2@7 d2", K: "g2 f#2", L: "e2 d2", M: "c#2@5 g1 a1@2",
  N: "b1@3 c#2@3 d2@2", O: "d2@3 e2@3 f#2@2", P: "g2@3 a2@3 b2@2", Q: "d3@3 e3@3 f#3@2", R: "e3@3 b2",
  S: "a2@3 e3@3 a2@2", T: "[g2@9 a2@12 d2@48 ~@11]/5",
})).s("gm_fretless_bass").gain(0.52)

// drums · kick
const kick = s("bd").struct("<~@4 A@38 B A@38 B A@19 C D ~@4>".pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@2 x ~ x ~ x", C: "x ~@6 x ~@8", D: "~@2 x ~@2 x ~@10",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@4 [~ x]!21 ~@18 [~ x]!21 ~@18 [~ x]!19 [~@9 x ~@6] ~@5>").gain(0.64)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@4 [~@5 x ~@2]!21 ~@18 [~@5 x ~@2]!21 ~@18 [~@5 x ~@2]!19 [~@3 x] ~@5>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@25 [~ x]!18 ~@21 [~ x]!18 ~@25>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C B A B C B A B C B A B C B A B C B A ~@17 D A B C B A B C B A B C B A B C B A B C B A ~@17 D A B C B A B C B
  A B C B A B C B A B C E F ~@4
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x!2", C: "x ~ x!6", D: "~@2 x!4 ~ x", E: "x ~ x ~@2 x ~ x ~ x ~@5 x", F: "~ x ~@6",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A B A ~ A B A ~ A B A ~ A B A ~ A B A ~@18 C ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~@18 C ~ A B A ~ A B A ~ A B
  A ~ A B A ~ A B D E ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~ x ~@4 x ~", D: "~@3 x", E: "~@5 x ~@10",
})).gain(0.56)

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

// drums · ride
const ride = s("rd").struct("<~@25 A B@5 A B A B A@3 B A B A C ~@21 A B@5 A B A B A@3 B A B A C ~@25>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.56)

// drums · bongos
const bongos = s("bongo:18").struct("<~@3 [~@3 x] ~@103>").gain(1.89)

// drums · congas
const congas = s("conga:13").struct("<~@3 [~@7 x] ~@103>").gain(2.3)

// drums · congas
const congas_2 = s("conga:33").struct("<~@3 [~@5 x ~@2] ~@103>").gain(2.3)

stack(
  piano, acoustic_guitar_nylon, acoustic_guitar_steel, guitar_harmonics, distortion_guitar, overdriven_guitar, whistle,
  pad_metallic, synth_strings_1, lead_2_sawtooth, bass, kick, rim, rim_soft, snare, hihat, open_hat, crash, ride,
  bongos, congas, congas_2
)

More by Pooh