Strudelify

Stella Del Sud

Pooh

KeyD minorTempo132 bpm
0:00/0:00
// Stella Del Sud — Pooh
// 132 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 shamisen (copy of ch 5 lead 3 calliope); ch 11 breath noise (copy of ch 5 lead 3 calliope)
// note: Full arrangement: all 153 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 · electric guitar clean
const electric_guitar_clean = note(`<
  ~@6 A@2 ~@6 A@2 B C D E F G H@2 B C D E F G I@2 J@2 K@2 ~ L@2 M N O@3 P Q R@2 S T U@2 J@2 K@2 V W X Y Z AA AB W V W X
  Y Z AA AB W AC AD AE AF B C D E F G H@2 ~ L@2 M N O@3 P Q R@2 S T U@2 J@2 K@2 AG W X Y Z AA AB W V W X Y Z AA AB W AC
  AD AE AF ~@6 A@2 ~@6 AH@6 ~@9
>`.pickRestart({
  A: "[~@3 [f3,a3,c4,d4,e4]@13]/2", B: "~@2 [d3,a3] ~@5 [d3,a3] ~ [d3,a3] ~@5", C: "~@10 d3 ~@5",
  D: "~@2 [d3,a3] ~@3 d3 ~ [d3,a3] ~ [d3,a3] ~@5", E: "~@6 [d3,a3] ~@5 [d3,a3] ~@3",
  F: "~@2 [c3,g3] ~@3 c3 ~ [c3,g3] ~ [c3,g3]@2 ~@4", G: "~@10 [c3,g3] ~@5",
  H: "[~@3 a3@2 ~@3 g3@8, ~ d3@7, ~@5 c4@11]/2", I: "[~@3 c4@11 ~@2, d3@7 ~, ~ a3@6 ~]/2",
  J: "[~@15 g4, ~ c3@6 g4@5 ~ bb3@3, ~@3 g3@6 bb2@7, ~@5 c4@5 ~ f3@5]/2",
  K: "[~@5 a3@2 c4@2 ~@6 a4, ~@2 c3@13 ~@7 bb3@10, ~@3 e3@4 ~@2 f3@7, ~@13 d4@3]/2",
  L: "[~@2 [d4,f4,a4,c5] ~@5 [f4,a4]@7 ~ f4@11 ~ d4 ~@3, ~@2 c5@5 ~, ~@8 d4@5 ~@2 d4@11 ~@6]/2", // Dm7 F
  M: "~@2 [d4,f4,a4,c5] ~@5 d4 ~ [f4,a4,c5]@6, ~@10 d4@3 ~@3", N: "~@6 [c4,e4,g4,b4] ~@9",
  O: "[~@2 [c4,e4,g4,b4] ~@5 [c4,e4,g4,b4]@11 ~@11 [f4,a4]@8 ~@4 f4@6, ~@5 c5@3, ~@15 d4@3 ~ d4@5]/3", // Cmaj7 F
  P: "~@2 [d4,f4,a4,c5] ~@5 [d4,f4,a4,c5]@8", Q: "~@2 [d4,a4] ~@5 [d4,f4,a4] ~ [d4,f4,a4,c5] ~@5",
  R: "[~@2 [d4,f4,a4,c5] ~@5 [d4,f4,a4,c5]@10 d4 ~@5 a4 ~ [f4,a4,c5]@4 d4 ~, ~@26 d4@3 ~@3]/2", // Dm7 F
  S: "~@2 [c4,e4,g4] ~@3 [e4,g4] ~ [c4,e4,g4]@8", T: "~@2 [c4,e4,g4] ~@5 e4 ~ e4@4 c4@2, ~@5 g4@3, ~@5 c4 ~@2",
  U: "[~@2 [d4,f4,a4] ~@11 c5@17 ~, ~@5 d4@11, ~@12 f4@19 ~]/2", V: "~@6 [a3,d4,gb4] ~@5 [a3,d4,gb4]@4",
  W: "~@2 [a3,d4,gb4] ~@3 d4 ~ [a3,d4,gb4] ~ [a3,d4,gb4]@5 ~", X: "~@6 [a3,c4,f4] ~@5 [a3,c4,f4]@4",
  Y: "~@2 [a3,c4,f4] ~@3 a3 ~ [a3,c4,f4] ~ [a3,c4,f4]@4 ~@2", Z: "~@6 [b3,d4,g4] ~@3 d4 ~ [b3,d4,g4]@4",
  AA: "~@2 [b3,d4,g4] ~@3 d4 ~ [b3,d4,g4] ~ [b3,d4,g4]@5 ~", AB: "~@2 d4 ~ d4 ~ [a3,d4,gb4] ~@3 d4 ~ [a3,d4,gb4] ~@3",
  AC: "d6 d5 ~ d6 d5 ~ d5 d6@2 d5 d6 ~ d6 d5@2 d6", AD: "d5 d6@2 d5 d6 ~ d6 d5@2 d6 d5 ~ d6 d5 ~ d6",
  AE: "d5 d6@2 d5 d6 ~ d6 d5@2 d6 d5@2 d6 d5@2 d6", AF: "d5 d6@2 d5 d6 ~ d6 d5@2 d6 d5@2 d6 d5@2 ~",
  AG: "~@6 [a3,d4,gb4] ~@5 [a3,d4,gb4]@3 ~", AH: "[~@15 e4@65 ~@16, ~@5 d3@80 ~@11, ~@2 a3@19 ~@3, ~@12 d4@71 ~@13]/6",
})).s("gm_electric_guitar_clean").gain(0.14).pan(0.7)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@16 A ~@7 A ~@12 B ~ C D E ~@3 F G H I J K ~@5 L ~ M N O P Q R L ~ M N O P Q R ~@4 A ~@8 B ~ C D E ~@3 F G H I J K
  ~@5 L ~ M N O P Q R L ~ M N O P Q R ~@33
>`.pickRestart({
  A: "~@6 d3 ~@9", B: "~@6 d4 ~@9", C: "d4 ~@15", D: "~ c4@4 ~@11", E: "~@6 c4 ~@9", F: "~@2 [f4,c5,d5] ~@13",
  G: "[d4,f4] ~@15", H: "~@8 [d4,f4] ~@7", I: "~@2 b4 ~ [e4,g4] ~ c4 ~@9", J: "~@8 c4 ~@7", K: "e4 ~@15",
  L: "~@10 d4 ~@5", M: "~@4 c4 ~@5 [a3,c4] ~@5", N: "~@6 [c4,f4] ~@9", O: "~@4 d4 ~@5 g4 ~@5", P: "~@6 g4 ~@9",
  Q: "~@2 gb4 ~ a3 ~@5 a3 ~@5", R: "~@6 a3 ~@9",
})).s("gm_electric_guitar_clean").gain(0.08).pan(0.7)

// bass · synth bass 2
const bass = note(`<
  A B C D E F A B A B C D E F A B A B C D E F A B A B C D E F A B F@4 A B C D E F A B A B C D E F A B G@4 H@2 I@2 J@2 H
  B H@2 I@2 J@2 H K@5 A B C D E F A B A B C D E F A B A B C D E F A B G@4 H@2 I@2 J@2 H B H@2 I@2 J@2 H L ~@4 A B C D E
  F A B A B C D E M N@8 ~@7
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d3 ~", B: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  C: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb2 ~", D: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  E: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c3 ~", F: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  G: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~@3", H: "d2 ~@3 d2 ~@3 d2 ~@3 d2 ~@3", I: "f1 ~@3 f1 ~@3 f1 ~@3 f1 ~@3",
  J: "g1 ~@3 g1 ~@3 g1 ~@3 g1 ~@3", K: "[d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ bb1@32 c2@32 ~@2]/5",
  L: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~@3", M: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~@2 c2 ~@3 c2", N: "[~@2 c2 ~@2 d1@123]/8",
})).s("gm_synth_bass_2").gain(0.48)

// bass · slap bass 1
const bass_2 = note(`<
  A B C ~ D B A ~ A B C ~ D B A ~ A B C ~ D B A ~ A B C ~ D B A ~@5 A B C ~ D B A ~ A B C ~ D B A ~ E@4 F@2 G@2 H@2 F ~
  F@2 G@2 H@2 F I@5 A B C ~ D B A ~ A B C ~ D B A ~ A B C ~ D B A ~ E@4 F@2 G@2 H@2 F ~ F@2 G@2 H@2 F J@5 A B C ~ D B A
  ~@22
>`.pickRestart({
  A: "~@3 d3", B: "~@4 e2 g2 a2 g2", C: "~@3 bb2", D: "~@3 c3", E: "~@2 c3 ~@3 c3 ~@3 c3 ~@3 c3 ~",
  F: "~@2 d3 ~@3 d3 ~@3 d3 ~@3 d3 ~", G: "~@2 f2 ~@3 f2 ~@3 f2 ~@3 f2 ~", H: "~@2 g2 ~@3 g2 ~@3 g2 ~@3 g2 ~",
  I: "[~@26 d3 ~@3 d3@16 ~@12 d3 ~@3 d3@18, ~@14 bb1@29 ~@3 c2@34]/5",
  J: "[~@26 d3 ~@3 d3@16 ~@12 d3 ~@3 d3@18, ~@7 bb1@15 ~ c2@17]/5",
})).s("gm_slap_bass_1").gain(0.57)

// bass · slap bass 1 · soft notes
const bass_soft = note(`<
  A ~ B ~ C ~ A ~ A ~ B ~ C ~ A ~ A ~ B ~ C ~ A ~ A ~ B ~ C ~ A ~@5 A ~ B ~ C ~ A ~ A ~ B ~ C ~ A ~@25 A ~ B ~ C ~ A ~ A
  ~ B ~ C ~ A ~ A ~ B ~ C ~ A ~@25 A ~ B ~ C ~ A ~@22
>`.pickRestart({
  A: "~@3 a2", B: "~@3 f2", C: "~@3 g2",
})).s("gm_slap_bass_1").gain(0.36)

// other · lead 3 calliope
const lead_3_calliope = note(`<
  A B A C D E F ~ A B A C D E F ~ G H G H I E F ~ G H G H I E F ~@45 A B A C D E F ~@41 A B A C D E F ~ G H G H I J@3
  ~@13
>`.pickRestart({
  A: "a4 ~@5 a4 ~@5 c5 ~@3", B: "a4 ~@7 d4 ~ e4 ~ f4 ~ g4 ~", C: "a4 ~@7 d4 ~ e4 ~ f4 ~ a4 ~",
  D: "g4 ~@5 g4 ~@5 f4 ~@3", E: "g4 ~@7 g4 ~ f4 ~ g4 ~ f4 ~", F: "a4 ~@3 d4 ~ d4 ~@9", G: "a4 ~@5 g4 ~@5 a4 ~@3",
  H: "d4 ~@7 d4 ~ e4 ~ f4 ~ g4 ~", I: "a4 ~@5 g4 ~@5 f4 ~@3",
  J: "[g4 ~@7 g4@2 ~ f4@2 ~@2 g4@2 ~ f4@2 ~ a4@2 ~@5 d4@2 ~ d4@2 ~@15]/3",
})).s("gm_lead_3_calliope").gain(0.44).pan(0.7)

// chords · pad warm
const pad_warm = note(`<
  A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 D@4 ~@16 D@4 ~@20 A@4 B@2 C@2 ~@16 D@4 ~@20 A@4 B@2 C@2 A@4 E@2 F@8
  G@7
>`.pickRestart({
  A: "[a3@32 bb3@31 ~, [d4,f4]]/4", B: "[[c4,e4,g4]@31 ~]/2", C: "[f4 e4, [a3,d4]]/2",
  D: "[[c4,e4] [bb3,d4,f4] [a3,c4,e4] [bb3,d4,f4], g4]/4", E: "[c4,e4,g4]/2",
  F: "[~@5 g3 ~@22 e5@18 c5@20 d5@22 a4@23 c5@17, ~@5 [d3,a3]@123, ~@5 d4@22 ~@39 d4@62, ~@5 f3@59]/8", // D5
  G: "[~@3 e5@19 c5@20 d5@56 ~@14]/7",
})).s("gm_pad_warm").gain(0.06).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@36 A@16 B@4 C@4 D@4 C@4 E@4 ~@4 F@2 ~@6 A@16 B@4 G@4 H@4 G@4 I@4 ~@4 J@2 ~@12 K@8 ~@7
>`.pickRestart({
  A: "[d2@3 c2 bb1@4 [c2,g3,c4]@4 d4@2 e4@2, d3, [a3,d4]@2 ~ [d2,a3]]/8", // C5 D5
  B: "[[c4,e4] [bb3,d4,f4] [a3,c4,e4] [bb3,d4,f4], g4]/4", C: "[~ [d3,gb4]@30 ~@2 [f3,f4]@30 ~, a4, d5 c5]/4",
  D: "[~ [g3,g4]@30 ~@2 [d3,gb4]@30 ~, d5, b4 a4]/4", // G D
  E: "[~ [g3,g4]@30 ~@2 [d3,gb4]@29 ~@2, d5@31 ~, b4@32 a4@29 ~@3]/4", F: "[[a3,a4]@7 ~, d2@13 ~@3]/2",
  G: "[[d3,gb4]@15 ~ [f3,f4]@15 ~, a4, d5 c5]/4", H: "[[g3,g4]@15 ~ [d3,gb4]@15 ~, d5, b4 a4]/4",
  I: "[[g3,g4]@15 ~ [d3,gb4,a4]@15 ~, d5@31 ~, b4 ~]/4", J: "[[d2,a4]@13 ~@3, a3@7 ~]/2", K: "[~@5 d2@123]/8",
})).s("gm_synth_strings_1").gain(0.16).pan(0.3)

// other · pad metallic
const pad_metallic = note(`<
  ~@36 A@2 B C D@2 E@2 F@2 G H I@2 J@2 K@4 ~@28 A@2 B C D@2 E@2 F@2 G H I@2 J@2 K@4 ~@34 L@8 M@7
>`.pickRestart({
  A: "a4/2", B: "a4", C: "d5", D: "c5/2", E: "[e5@5 g5@4 c5@7]/2", F: "[d5@3 e5]/2", G: "f5", H: "a5", I: "[g5@3 c6]/2",
  J: "a5/2", K: "[~ c5, c6]/4",
  L: "[~@28 e5@18 c5@20 d5@22 a4@23 c5@17, ~@5 [d3,a3]@123, ~@5 d4@22 ~@39 d4@62, ~@5 f3@59]/8", // D5
  M: "[~@3 e5@19 c5@20 d5@56 ~@14]/7",
})).s("gm_pad_metallic").gain(0.41).pan(1)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@56 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@6 ~@28 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@6 ~@29
>`.pickRestart({
  A: "[[a3,d4,gb4]@11 ~ [b3,d4,g4] ~ [a3,d4,gb4]@17 ~]/2", B: "[[c4,f4,a4]@11 ~ [d4,f4,bb4] ~ [c4,f4,a4]@17 ~]/2",
  C: "[[d4,g4,b4]@31 ~]/2", D: "[[a3,d4,gb4]@11 ~ [b3,g4] ~ [a3,d4,gb4]@18, ~@6 d4 ~@9]/2",
  E: "[[a3,d4,gb4]@11 ~ [b3,g4] ~ d4@16 [d2,d3,bb3,d4,f4,a4]@32 [d2,d3,c4,e4,g4,a4]@32 ~@2, ~@6 d4 [a3,gb4]@9 ~@32]/6", // D Em Bbmaj7 Am7 D
})).s("gm_synth_brass_1").gain(0.3).pan(0.7)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@6 A@3 ~@5 A@3 ~@5 B@3 ~@5 C@2 ~@11 D@2 ~@27 E F G@2 H ~@5 B@3 ~@35 E F G@2 ~@6 A@3 ~@5 I@6 ~@9
>`.pickRestart({
  A: "[~@7 [f3,a3,c4,d4,e4]@26 ~@15]/3", B: "[~@7 a3@4 ~@6 g3@16 ~@15, ~@5 d3@28 ~@15, ~@11 c4@22 ~@15]/3",
  C: "[~@7 c4@22 ~@3, ~ d3@28 ~@3, ~@5 a3@24 ~@3]/2", D: "[~@11 f4@7 ~@14, ~@7 d4@11 ~@14]/2",
  E: "~ d6 d5 ~ d6 d5 ~ d5 d6@2 d5 d6 ~ d6 d5@2", F: "d6 d5 d6@2 d5 d6 ~ d6 d5@2 d6 d5 ~ d6 d5 ~",
  G: "d6 d5 d6@2 d5 d6 ~ d6 d5@2 d6 d5@2 d6 d5@2", H: "~@3 d3 ~@3 d3 ~@8",
  I: "[~@17 e4@65 ~@14, ~@7 d3@80 ~@9, ~@5 a3@38 ~@5, ~@13 d4@71 ~@12]/6",
})).s("gm_electric_guitar_jazz").gain(0.05).pan(0)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@36 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 B@16 ~@12 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 B@16 ~@33
>`.pickRestart({
  A: "~ x", B: "~ x ~ x",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@7 B ~@7 C ~@19 C ~@7 C ~@3 D ~@7 E ~@7 F ~@11 G ~@7 C ~@7 C ~@3 D ~@7 E ~@7 F ~@11 A ~@6 H ~@11 I ~@2
>`.pickRestart({
  A: "x!5 ~@11", B: "x", C: "x ~@2 x ~@4", D: "~@3 x", E: "~@3 x!4 ~", F: "~@13 x ~@2", G: "x!5 ~@3 x ~ x ~ x ~ x ~",
  H: "~@5 x ~@9 x", I: "~@5 x ~@2",
})).gain(0.56)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@7 A ~@75 A ~@47 A ~@18 B ~@2>".pickRestart({
  A: "~@5 x ~@10", B: "~ x",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<A@56 B@15 C ~@4 A@28 B@15 C ~@4 A@13 D E ~@14>".pickRestart({
  A: "x!16", B: "x!8", C: "x!7 ~", D: "x!9 ~ x!2 ~ x ~ x", E: "x!3 ~@5",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@55 A ~@6 B C ~@7 D ~ E ~ F ~@27 A ~@6 B C ~@7 D ~ E ~ F ~@29>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@3 x", C: "~ x ~@6", D: "~@4 x!4", E: "~@3 x ~@4", F: "~@5 x ~@2 x ~@7",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@71 A ~ A ~@45 A ~ A ~@16 B ~@14>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@10",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@55 A ~@6 B ~@7 C D ~ A ~ E ~@27 A ~@6 B ~@7 C D ~ A ~ E ~@29>".pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "~@14 x!2", D: "x ~ x ~@3 x!2 ~@8", E: "~ x ~@6",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@36 A ~@7 A ~@7 A ~@3 A ~@7 A ~@6 B ~ B ~@10 A ~@7 A ~@7 A ~@3 A ~@7 A ~@6 B ~ B ~@31
// … 9 more lines

More by Pooh