Strudelify

Senza musica e senza parole

Pooh

KeyE minorTempo80 bpm
0:00/0:00
// Senza musica e senza parole — Pooh
// 80 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C D E F G@2 H I@3 J K@3 L M N O P M N O P Q I@3 R M N O P S@2 T U V I@3 W I@3 L X@2 Y Z AA AB AC AD M N O P S@2 T
  U V I@3 W I@3 AE I@3 W I@3 AF@2 AG AH AI@3
>`.pickRestart({
  A: "~@10 b3 e4 g4 f#4 [f#4,g4] e4", B: "b4@3 ~", C: "e5 e5@6 b4 a4 g4@4 a4@3, ~ d5 ~@14", D: "~ f#4@12 ~@2 b4",
  E: "b4 b4@2 ~ a4@2 g4 ~ a4 b4@5 ~ b4", F: "~ a4@3 g4@2 f#4 g4 ~ a4@6 ~, ~ b4 ~@14",
  G: "[~ g4@6 f#4 e4 ~ a4@5 g4@2 f#4@8 ~ b3 e4 g4 f#4 ~ a4]/2", H: "d5 b4@7 ~ e4@3 f#4@2 ~ g4, ~@9 g3@7",
  I: "[~ [c4,a4]@2 ~ [c4,a4]@2 [c4,a4]@2 ~ [c4,a4]@3 [b3,g4]@3 [a3,f#4]@2 [g3,e4]@3 b3@2 g3 e3@2 e4@3 f#4@3 g4@2 g4@3 ~@2 g4@3 f#4@3 g4@2 f#4@2, ~@33 a#3@8 a3@7, ~@36 e4@5 ~@7]/3", // F Em D C
  J: "~ [g3,e4]@3 b3@2 ~ e3@2 [g3,e4]@3 ~ a3@2 [b3,g4], ~@6 g3@2 ~@4 f#4@3 ~", // C Em
  K: "[~ [c4,a4]@2 ~ [c4,a4]@2 [c4,a4]@2 ~ [c4,a4]@3 [b3,g4]@3 [a3,f#4]@2 [g3,e4]@3 b3@2 g3 e3@2 e4@3 f#4@3 g4@2 g4@3 ~@2 g4@3 f#4@3 g4@2 f#4@2, ~@33 a#3@8 a3@7, ~@9 e4 ~@2]/3", // F Em D C
  L: "~@2 f#3 ~@6 e3@6 ~, ~ e3@7 ~@8, ~@3 g3@2 ~ g3@9 ~, ~@4 b3@11 ~",
  M: "~@2 e3 ~@5 e4@8, ~@3 f#3@12 ~, ~@4 g3@11 ~, ~@3 b3@5", N: "~@2 e4 ~ a4@4, ~@2 d3@13 ~, ~@3 a3@12 ~, ~@6 d4@9 ~",
  O: "~@4 d4@2 ~@7 c4@3, ~ c3@7, ~@3 g3@12 ~, ~@3 c4@2 d4@3, ~ g4",
  P: "~@15 b3, ~ b2@3 d#4@4, ~@3 f#3@2 ~ f#3@3 ~ f#3@4 f#3@2, ~@4 e4@3 b3@3 ~ b3@4 ~, ~@3 f#4",
  Q: "~@7 g3 ~@3 g3 ~ b3 ~ g4, ~ [e2,e4]@9 ~@6, ~@3 e3@2 ~ e3@3 ~ b3@2 ~@2 g3@2, ~@4 b3@5 e4@2 ~ f#4@2 ~@2", // E
  R: "~@6 f#3@3 e3@7, ~ e2@14 ~, ~ e3@3 ~@4, ~@3 b3@13, ~@4 g3@11 ~",
  S: "[~@3 b3 ~@2 g3@2 ~@6 g3 b3@2 ~@5 f#3@2 ~@7 a3, ~ g2@14 ~@2 f#2@15, ~@2 g3@2 d4@4 g4@9 ~@3 d4@4 ~@3 a3@3 ~@2, ~@10 g3@2 d4@5 ~@2 a3@3 ~@2 [a3,e4]@4 d4@4, ~@11 b3@2 ~@5 f#3@3 ~@5 f#3@4 f#3@2]/2", // A5
  T: "~@12 e4@3 g3, ~ e2@15, ~ e3@7, ~@3 g3@3 d4@3 g3@5 ~@2, ~@2 c4@5 ~",
  U: "c4 ~@6 b3@2 d#4@2 ~ e4@3 f#4, ~ b2@5 b2@10, ~@3 b3@3 ~@5 b3@5, ~@4 e4@5 ~@7",
  V: "~@7 g3 ~@4 f#4@2 ~ g4, ~ e2@15, ~@2 e3@4 ~@5 g3@2 ~ g3@2, ~@3 g3@3 b3@2 ~@2 b3@3 ~@3, ~@4 e4@4 ~ e4@2 ~@5",
  W: "~ [g3,e4]@3 b3@2 g3 e3@2 [g3,e4]@3 ~ a3@2 [b3,g4], ~@12 f#4@3 ~", // C Em
  X: "[~ e4 f#4@2 g4@2 a4@2 b4@4 ~ b4@5 a4 ~ g4 f#4 ~ g4 a4@6 ~@2]/2", Y: "~@3 e4 f#4 g4@2 g4 g4@5 ~ a4 ~",
  Z: "b4 f#4@10 ~@3 b4 e5", AA: "b4 e5 b4 a4 g4 ~ f#4@2 e4@2 ~ f#4 g4@2 b4@2", AB: "~ a4@2 g4 f#4@2 e4@2 f#4@6 e4 f#4",
  AC: "g4 [f#4,g4] [e4,f#4] d4 c4 b3 c4 [a3,b3] b3@2 e4@2 f#4@2 g4@2", AD: "b4@3 b4 b4@2 a4@2 b4@3 ~@5",
  AE: "~@2 f#3 ~@3 g3@2 ~@4 f#4@3 g4, ~ e3@8 ~@7, ~@3 g3@2 ~@4 [g3,e4]@2 g3@5, ~@4 b3@4 ~@2 b3@5 ~", // C
  AF: "[~ e4@8 ~@6 b4@2 [e4,a4]@12 d4@3, ~ e2@16 ~@15, ~@9 b3@8 ~@15, ~@12 e4@5 ~@15]/2", // A5
  AG: "~@11 g4@3 f#5@2, ~ e4@13 ~@2", AH: "~ d5@12 a4@3", AI: "[~@2 [e4,b4]@33 ~@13, ~ [e2,g3,b3]@34 ~@13]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@8 B@8 ~ C D E F C D E G H ~@4 C D E F I J K L H ~@8 M@5 D E L C D E F N@3 O H ~@8 P@3 Q R@3 S T U T V@3
>`.pickRestart({
  A: "[~ e4@16 [d4,f#4]@16 e4@16 [d4,f#4]@16 e4@16 [d4,f#4]@16 [c4,e4]@16 [d4,f#4]@15, ~ g4@127]/8", // D C D
  B: "[~ g4@127, ~ e4@16 ~@111]/8", C: "~ [e4,g4]@15", D: "~ [d4,f#4]@15", E: "~ [d4,f#4]@8 [c4,e4]@7",
  F: "~ e4@8 ~@4 f#4@2 ~, ~ [a3,b3]@15, ~@9 d#4@7", G: "~ b3@12 ~@3", H: "~ a3@8 g3@7, ~ [b3,e4]@15", I: "~ [b3,g4]@15",
  J: "~ e4@8 d4@7, ~ a3@15", K: "~ a4@8 g4@7, ~ e4@15", L: "~ b3@15",
  M: "[~ g4@16 f#4@16 e4@16 f#4@16 [e4,g4]@15, ~ b4@64 ~@15]/5", // Em
  N: "[~ [g2,g4,d5]@16 e5@8 d5@8 d5@8 c5@7, ~ b4@32 ~@15, ~@17 e4@31, ~@17 [f#2,a4]@16 [e2,g4]@15]/3", // G5 F#m Em
  O: "~ e4@8 d#4@7, ~ [b2,f#4,b4]@15", // B5
  P: "[~ [c3,c4,a4]@16 [b2,b3]@16 [c3,a#3,e4]@8 [b2,a3,d#4,f#4]@7, ~ e4@32 ~@15, ~@17 g4@24 ~@7]/3", // F B C7 B7
  Q: "~ [e2,b3,e4,g4]@15", R: "[~ [c3,c4,a4]@16 [b2,b3,g4]@16 [a#2,e4]@8 [b2,d#4,f#4]@7, ~ e4@32 g4@15]/3",
  S: "~ [e2,g3,a3]@15", T: "~ e4@8 d4@7, ~ [d2,a3]@15", U: "~ [e2,g3,b3]@15", V: "[~ [e2,g3,b3]@34 ~@13]/3",
})).s("gm_string_ensemble_2").gain(0.21).pan(0.4)

// chords · pad warm
const pad_warm = note(`<
  A@8 B C D E F G@3 H I J K L I J M L N G@3 H I J K L O P Q L N C D E F G@3 H R@5 J M L I J K L O S T U N C D E F G@3 H
  C D E F V@3 H W X@5
>`.pickRestart({
  A: "[~@17 [d4,f#4]@16 c4@16 [d4,f#4]@16 b3@16 [d4,f#4]@16 c4@16 [d4,f#4]@15, ~ [e2,e4,g4]@127, ~ b3@16 ~@111, ~@7 e3@121]/8", // D Em
  B: "~ [e2,e3,b3,e4,g4]@15", C: "~ [c3,c4,e4,a4]@15", D: "~ [b2,b3,e4,g4]@15", E: "~ [c3,a#3,e4]@8 [b2,a3,d#4]@7",
  F: "~@9 e3@7, ~ [e2,b3,e4]@15", G: "[~ [c3,c4,a4]@16 [b2,b3,g4]@16 [c3,a#3,e4,g4]@8 [b2,a3,d#4]@7, ~ e4@32 ~@15]/3",
  H: "~ [e2,b3,e4]@15", I: "~ [e2,b3,e4,g4]@15", J: "~ [d2,a3,d4,f#4]@15", K: "~ [d4,e4,f#4]@8 [c4,e4]@7, ~ [c3,g3]@15",
  L: "~ e4@8 d#4@4 f#4@3, ~ b3@15", M: "~ [c3,d4,e4,f#4]@8 [c3,c4,e4]@7, ~ g3@15", N: "~@9 g3@7, ~ [e2,b3,e4]@15",
  O: "~ [b3,d4,g4]@15", P: "~ e4@8 d4@7, ~ [f#2,a3]@15", Q: "~@9 g4@7, ~ c4@15, ~ a4@8 ~@7, ~@5 e4@11",
  R: "[~ [e4,g4]@16 [d4,f#4]@16 [c4,e4]@16 [d4,f#4]@16 [e2,b3,e4,g4]@15, ~ b4@64 ~@15]/5", S: "~ e5@8 d5@7, ~ a4@15",
  T: "~ d5@8 c5@7, ~ g4@15", U: "~ e4@8 d#4@7, ~ b4@15",
  V: "[~ [c3,c4,a4]@16 [b2,b3,g4]@16 [a#2,e4,g4]@8 [b2,d#4,f#4]@7, ~ e4@32 ~@15]/3", W: "~ e4@8 d4@7, ~ [d2,a3]@15",
  X: "[~ [e2,b3]@16 [d2,a3,d4]@16 [e2,g3,b3]@34 ~@13, ~ e4@66 ~@13]/5", // E5 D5 Em
})).s("gm_pad_warm").gain(0.16)

// bass · fretless bass
const bass = note(`<
  ~@9 A@4 B C@3 D@2 E F G@4 H B C@3 D@2 E F I J K@2 H A@4 B C@3 D@2 E L G@4 D@2 E F I J K@2 H A@4 B M@3 A@4 B N@2 O ~@6
>`.pickRestart({
  A: "[~ c2@13 ~ c2@2 b1@13 ~ b1@2 c2@8 b1@6 b1@2 e1@7 ~ e2@2 e1@5]/4", B: "~ c2@7 ~ c2@7",
  C: "[~ b1@13 ~ b1@2 c2@5 ~ c2@2 b1@6 b1@2 e1@8 e2@7]/3", D: "[~ e2@6 ~ e2 e2@6 e2@2 d2@6 ~ d2 d2@7]/2",
  E: "~ c2@6 ~@2 c2@6 ~", F: "c2 b1@5 b1 ~ b1 b1@5 ~ b1", G: "[~ e2@13 ~ e2@2 d2@13 ~ d2@2 c2@13 ~ c2@2 b1@15]/4",
  H: "~ e1@5 ~ e1 ~ e2@3 e1@2 ~ e1", I: "~ g1@6 ~@2 g1@5 ~ g1", J: "~ f#1@7 f#1 f#1@4 f#2@2 f#1",
  K: "[~ e2@8 e1@6 e2@2 b1@15]/2", L: "c2 e1@6 e2 ~ e2@4 e1@2 e2",
  M: "[~ b1@13 ~ b1@2 c2@5 ~ c2@2 b1@5 ~ b1@2 e1@8 e2@7]/3", N: "[~ b1@13 ~ b1@2 a#1@8 b1@7]/2", O: "~ e1@8 e2@6 ~",
})).s("gm_fretless_bass").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@64 [~ x ~@7 x ~@5 x]!15 [~ x ~@14] ~@6>").gain(0.28)

// drums · rim
const rim = s("rim").struct("<~@64 [~@5 x ~@7 x ~@2]!15 ~@7>").gain(0.32)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[~@5 x ~@7 x ~@2]!8 ~@78>").gain(0.28)

// drums · open hat
const open_hat = s("oh").struct("<~@9 [~@5 x ~@7 x ~@2]!16 [~ x ~@4 x ~@7 x ~] [~@5 x ~@7 x ~@2]!53 ~@7>").gain(0.16)

// drums · crash
const crash = s("cr").struct("<~@79 [~ x ~@14] ~@6>").gain(0.16)

// drums · ride
const ride = s("rd").struct("<~@9 [~@5 x ~@7 x ~@2]!16 [~ x ~ x!2 ~@2 x ~ x ~@2 x ~@2 x] [~@5 x ~@7 x ~@2]!53 ~@7>")
  .gain(0.24)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@8 ~ B C@15 D B C@52 D ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x!15", C: "x!16", D: "x",
})).gain(0.41)

stack(acoustic_guitar_nylon, string_ensemble_2, pad_warm, bass, kick, rim, pedal_hat, open_hat, crash, ride, cabasa)

More by Pooh