Strudelify

Weird

Hanson

KeyB♭ majorTempo68 bpm
0:00/0:00
// Weird — Hanson
// 68 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 13 pad choir (copy of ch 11 epiano1)
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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 B C D A E F G H I J K L M N B F O H I P Q H I R S T U H V W X Y Z AA L AB@2 AC AD AE I AF AG AH AI V AJ T AK ~ AL AM
  H AN AO A AN N B C O N A AP@2
>`.pickRestart({
  A: "~@7 f3, bb2, ~ d3@2 d3@2 f3@2 ~, ~ f3 bb3 d3", B: "~@7 a3, a2, ~ f3@2 f3@2 a3@2 ~, ~ a3 d4 f3",
  C: "~ d3 ~ d3 [g2,g3] ~ [bb2,bb3] [d3,d4], [g3,bb3]@3 ~@5, g2@2 [bb2,d4]@2 ~ [d3,a3]@2 ~", // G Bb D Gm Bb D5
  D: "~@7 bb3, gb3@3 gb3@2 bb3@2 ~, ~ bb3 eb4 gb3",
  E: "~ a3 ~ a3 [a2,d4] ~ [f3,f4] [a3,a4], [d4,f4]@3 ~@5, a2@2 [f3,a4]@2 ~ [a3,e4]@2 ~", // D5 F A Dm F A5
  F: "~@7 [d3,d4], [g3,bb3] ~, g2 bb2 [g2,g3] [bb2,bb3], ~ d3@2 d3@2 [d3,a3]@2 ~", // D Gm G Bb D5
  G: "gb3@2 ~@5 gb4, ~@2 bb3@3 bb3@3, ~@3 eb4@2 ~ eb4@2, ~@2 gb4 ~",
  H: "bb2 f3 d3 f3 bb2 f3 ~ [f3,d4], [bb3,d4]@6 [d3,bb3] ~, ~@13 c4@2 ~", // Dm Bb Gm
  I: "a2 a3 f3 a3 a2 a3 ~ [a3,f4], [d4,f4]@6 [f3,d4] ~, ~@13 e4@2 ~", J: "g2 d3 bb2 d3 f3@2 ~ f3, [g3,bb3] d4, ~@3 d3",
  K: "eb3 bb3 g3 bb3 ~@3 f3, [eb4,g4] d4, ~@2 d3!2, ~@5 f3@2 ~", // Eb
  L: "c3 g3 eb3 g3 c3 g3 ~ [g3,eb4], [c4,eb4]@6 [eb3,c4] ~, ~@13 d4@2 ~", // Cm
  M: "~@7 a4, f3@2 c4@3 c4@3, ~ a3@2 f4@2 ~ f4@2, ~@2 a4 ~", N: "~@6 bb3 d4, bb2, ~ d3@7, ~ f3 d4 ~, ~@3 bb3@2 f3@3",
  O: "~@7 [bb3,bb4], [eb4,gb4] ~, gb3!2 [gb3,eb4] [gb3,gb4], ~ bb3@2 bb3@2 [bb3,f4]@2 ~", // Bb Ebm Gb Bb5
  P: "~@7 bb3, g2@2 d3@3 d3@3, ~ bb2@2 g3@2 ~ g3@2, ~@2 bb3 ~",
  Q: "gb3 bb3 gb3 bb3 gb3 bb3 ~ [bb3,gb4], [eb4,gb4]@6 [gb3,eb4] ~, ~@13 f4@2 ~", // Ebm
  R: "~@6 d3@2 f4@4 ~@3 f4, bb3@8 ~@5 c4@2 ~, g2@2 bb2@2 ~@3 [f3,d4], ~@2 d3@4 ~@2 f3@3 ~ [d3,bb3]@3 ~", // Dm Gm
  S: "~@6 bb3@2 d3@2 f3@2 ~@3 f4, g4@8 f4@5 ~ [f3,d4]@2, eb3@4 g3@4 ~@4 [d3,bb3]@3 ~, ~@2 bb3@4 ~@7 c4@2 ~", // Dm Gm
  T: "~@7 [g3,g4], [c4,eb4] ~, c3 eb3 [c3,c4] [eb3,eb4], ~ g3@2 g3@2 [g3,d4]@2 ~", // G Cm C Eb G5
  U: "~@3 c4 ~@3 f4, a4@5 f4@2 ~, f3 a3!2 c4, ~ c4@2 ~ c5@4",
  V: "~@7 g4, eb3@2 bb3@3 bb3@3, ~ g3@2 eb4@2 ~ eb4@2, ~@2 g4 ~",
  W: "d3 a3 f3 a3 d3 a3 ~ [a3,f4], [d4,f4]@6 [f3,d4] ~, ~@13 e4@2 ~", // Dm
  X: "~ g3 ~ g3 [c3,c4] ~ [eb3,eb4] [g3,g4], [c4,eb4]@3 ~@5, c3@2 [eb3,g4]@2 ~ [g3,d4]@2 ~", // C Eb G Cm Eb G5
  Y: "~ a3 ~ a3 [d3,d4] ~ [f3,f4] [a3,a4], [d4,f4]@3 ~@5, d3@2 [f3,a4]@2 ~ [a3,e4]@2 ~", // D F A Dm F A5
  Z: "~@7 [bb3,bb4], [eb4,g4] ~, eb3 g3 [eb3,eb4] [g3,g4], ~ bb3@2 bb3@2 [bb3,f4]@2 ~", // Bb Eb G Bb5
  AA: "d3@2 a3@2 f3@2 a3@2 g2@2 d3@2 ~@3 d4, [d4,f4]@4 d4@2 [bb2,g3] [d3,bb3], ~@13 a3@2 ~", // Dm Eb Gm
  AB: "[~@7 bb4@4 ~@5, eb3 ~, ~ bb3@3 bb4@2 ~@10, ~@2 eb4@3 [bb3,eb4]@3 ~@8, ~@3 gb4@2 ~ gb4@2 ~@8]/2", // Eb5
  AC: "~ f3 ~ f3 [bb2,bb3] ~ [d3,d4] [f3,f4], [bb3,d4]@3 ~@5, bb2@2 [d3,f4]@2 ~ [f3,c4]@2 ~", // Bb D F Bb Dm F5
  AD: "~@7 f4, a2@2 a3@3 a3@3, ~ f3@2 d4@2 ~ d4@2, ~@2 f4 ~",
  AE: "g2 d3 bb2 d3 g2 d3 ~ [d3,bb3], [g3,bb3]@6 [bb2,g3] ~, ~@13 a3@2 ~", // Gm Eb
  AF: "~@7 bb3, eb3, ~ g3@2 g3@2 bb3@2 ~, ~ bb3 eb4 g3", AG: "~@7 a3, d3, ~ f3@2 f3@2 a3@2 ~, ~ a3 d4 f3",
  AH: "~@6 c4 eb4, c3, ~ eb3@7, ~ g3 eb4 ~, ~@3 c4@2 g3@3", AI: "~@6 d4 f4, d3, ~ f3@7, ~ a3 f4 ~, ~@3 d4@2 a3@3",
  AJ: "d3@2 a3@2 ~@3 a4 g2@2 d3@2 ~@3 d4, a4@2 [f3,d4] [a3,f4] ~@2 [bb2,g3] [d3,bb3], ~@5 e4@2 ~ d4@5 a3@2 ~", // Dm Eb Gm
  AK: "~ bb3 ~ bb3 [eb3,eb4] ~ [gb3,gb4] [bb3,bb4], [eb4,gb4]@3 ~@5, eb3@2 [gb3,bb4]@2 ~ [bb3,f4]@2 ~", // Eb Gb Bb Ebm Gb Bb5
  AL: "~@7 d4, bb2@2 f3@3 f3@3, ~ d3@2 bb3@2 ~ bb3@2, ~@2 d4 ~",
  AM: "eb3@2 bb3@2 ~@3 bb4 eb3@2 bb3@2 ~@3 bb4, bb4@2 [g3,eb4] [bb3,g4] ~@2 [gb3,eb4] [bb3,gb4], ~@5 f4@2 ~ bb4@5 f4@2 ~", // Cm Eb Ebm
  AN: "~@3 bb3 ~@3 bb3, g4 gb4, eb3 g3 eb3 gb3, ~ bb3@2 ~@2 bb3@2 ~",
  AO: "~@7 [f3,f4], [bb3,d4] ~, bb2 d3 [bb2,bb3] [d3,d4], ~ f3@2 f3@2 [f3,c4]@2 ~", AP: "[~ d3@14 ~, bb2@15 ~]/2",
})).s("gm_piano").gain(0.44).pan(0.3)

// bass · piano
const bass = note(`<
  A B C D A B C D A B E F G H A B C D A B C D A B E F G H A I J G J I K G L@2 A B C B I J G J I K G I ~ A M A M A@2 M A
  B C D A@2 N@2
>`.pickRestart({
  A: "bb1", B: "a2", C: "g2", D: "gb2", E: "g2 f2", F: "eb2 d2", G: "c2", H: "f2", I: "eb2", J: "d2", K: "d2 g2",
  L: "[eb2@31 ~]/2", M: "eb2!2", N: "[bb1@31 ~]/2",
})).s("gm_piano").gain(0.47).pan(0.3)

// chords · rock organ
const rock_organ = note(`<
  A B C D A B C D A B E F G H A B C D A B C D A B E F G H A I B G B I J G K@2 A B C B I B G B I J G D ~ A L A L A@2 L A
  B C D A@2 M@2
>`.pickRestart({
  A: "[f4,d5,f5,bb5]", B: "[a4,f5,a5,d6]", C: "[bb4,g5,bb5,d6]", D: "[gb4,eb5,gb5,bb5]",
  E: "[bb4,g5,bb5,d6] [f4,d5,f5,bb5]", F: "[g4,eb5,g5,bb5] [f4,d5,f5,bb5]", G: "[g4,eb5,g5,c6]", H: "[a4,f5,a5,c6]",
  I: "[g4,eb5,g5,bb5]", J: "[a4,f5,a5,d6] [bb4,g5,bb5,d6]", K: "[gb4,eb5,gb5,bb5]/2",
  L: "[g4,eb5,g5,bb5] [gb4,eb5,gb5,bb5]", M: "[f4,d5,f5,bb5]/2",
})).s("gm_rock_organ").gain(0.15).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D A B C D A E F G H I J E K D J B K L A E M G N I J O P N E O Q N R@2 A E C E S E H P O T N D ~ J U A V A@2 V J
  B K L J A W@2
>`.pickRestart({
  A: "[bb2,f3,d4,bb4]", B: "[a2,a3,f4,d5]", C: "[g2,bb3,d4,g4]", D: "[eb3,gb4,bb4,eb5]", E: "[d3,f4,a4,d5]",
  F: "[g2,bb3,g4,d5] [bb2,d4,f4,bb4]", G: "[eb3,g4,bb4,eb5] [d3,f3,d4,bb4]", H: "[c3,g3,eb4,c5]", I: "[f3,a4,c5,f5]",
  J: "[bb2,d4,f4,bb4]", K: "[g2,bb3,g4,d5]", L: "[gb2,gb3,eb4,bb4]", M: "[g2,bb3,g4,d5] [f3,d4,bb4]",
  N: "[c3,eb4,g4,c5]", O: "[eb2,g3,eb4,bb4]", P: "[d3,a3,f4,d5]", Q: "[d3,f4,a4,d5] [g2,bb3,d4,g4]",
  R: "[eb3,gb4,bb4,eb5]/2", S: "[eb3,g4,bb4,eb5]", T: "[d3,a3,f4,d5] [g2,bb3,d4,g4]",
  U: "[eb3,g4,bb4,eb5] [eb2,gb3,eb4,bb4]", V: "[eb2,g3,eb4,bb4] [eb3,gb4,bb4,eb5]", W: "[[bb2,f3,d4,d5,bb5]@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.19).pan(0.6)

// other · rock organ
const rock_organ_2 = note(`<
  A B C D A B C D A B E F G H A B C D A B C D A B E F G H A I J G J I K G L@2 A B C B I J G J I K G I ~ A M A M A@2 M A
  B C D A@2 N@2
>`.pickRestart({
  A: "bb3", B: "a3", C: "g3", D: "gb3", E: "g3 f3", F: "eb3 d3", G: "c4", H: "f3", I: "eb3", J: "d4", K: "d4 g3",
  L: "eb3/2", M: "eb3!2", N: "bb3/2",
})).s("gm_rock_organ").gain(0.25)

// bass · acoustic bass
const bass_2 = note(`<
  A B C D E F C D G F H I J K G F L D G F M D E N H I J K O P Q D Q R S T U@2 V W X F E Y E Z C AA AB AC AD AE ~ E D E G
  D G AF C AG G AH AI ~
>`.pickRestart({
  A: "bb2 ~ bb2 ~@3 bb2 ~ bb2 ~ bb2@3 ~ bb2 ~", B: "a2 ~ a2@3 ~ a2 ~ a2 ~ a2@2 ~@2 a2 ~",
  C: "g2 ~ g2@3 ~ g2 ~ g2 ~ g2@4 g2 ~", D: "eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2@3 ~ eb2 ~",
  E: "bb2 ~ bb2@3 ~ bb2 ~ bb2 ~ bb2@4 bb2 ~", F: "a2 ~ a2@3 ~ a2 ~ a2 ~ a2@3 ~ a2 ~",
  G: "bb2 ~ bb2@3 ~ bb2 ~ bb2 ~ bb2@3 ~ bb2 ~", H: "g2 ~ g2@3 ~ g2 ~ f2 ~ f2@3 ~ f2 ~",
  I: "eb2 ~ eb2@4 eb2 ~ d2 ~ d2@4 d2 ~", J: "c2 ~ c2@3 ~ c2 ~ c2 ~ c2@3 ~ c2 ~", K: "f2 ~ f2@3 ~ f2 ~ f2 ~ f2@3 ~ f2 ~",
  L: "g2 ~ g2@3 ~ g2 ~ g2 ~ g2@3 ~ g2 ~", M: "g2 ~ g2@4 g2 ~ g2 ~ g2@4 g2 ~", N: "a2 ~ a2@3 ~ a2 ~ a2 ~ a2@4 a2 ~",
  O: "bb2@4 ~ bb2 ~@2 bb2 ~ bb2@4 bb2 ~", P: "~@2 eb2 ~ eb2@4 eb2 ~ eb2@3 ~ eb2 ~",
  Q: "d2 ~ d2@3 ~ d2 ~ d2 ~ d2@3 ~ d2 ~", R: "eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2@4 eb2 ~",
  S: "~ d2 d2@3 ~ d2 ~ g2 ~ g2@3 ~ g2 ~", T: "c2@2 ~@2 c2@3 ~ c2 ~ c2@4 f2 ~",
  U: "[bb2@3 ~ bb2@4 bb2@5 ~ bb2 bb2@7 eb2 eb2@9, ~@15 c3 ~@7 f2 ~@8]/2", V: "~@2 bb2@4 bb2 ~ bb2 ~ bb2@4 bb2 ~",
  W: "a2 ~ a2@4 a2 ~ a2 ~ a2@4 a2 ~", X: "g2 ~ g2@4 g2 ~ g2 ~ g2@3 ~ g2 ~", Y: "f2 ~ f2@4 f2 ~ f2 ~ f2@4 a2 ~",
  Z: "f2 ~ f2@3 ~ f2 ~ f2 ~ f2@4 f2 ~", AA: "a2 ~ a2@4 a2 ~ bb2 ~ bb2@2 ~ bb2@3", AB: "eb2@11 ~ eb2 f2 g2@2",
  AC: "eb2@8 gb2@5 ~ bb2 c3", AD: "bb2@6 eb2 eb2@9, ~@7 f2 ~@8", AE: "~ bb1 ~@4 bb2@2 bb2 ~ bb2@4 bb2 ~",
  AF: "bb2 ~ a2@3 ~ a2 ~ a2 ~ a2@4 a2 ~", AG: "eb2 ~ eb2@4 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~",
  AH: "bb1 ~ bb1@3 ~ bb1 ~ bb1 ~ bb1@4 bb1 ~", AI: "bb1 ~@7",
})).s("gm_acoustic_bass").gain(0.32).pan(0.7)

// other · epiano1
const epiano1 = note(`<
  ~@11 A B C D ~@5 E ~@2 F G H B I D J K L ~ M N O ~@6 P Q R ~ S T U V@2 ~@2 W X Y W X Z AA AB AC AD@2 ~@2
>`.pickRestart({
  A: "~@12 g3 a3 ~ g3", B: "bb3@14 g3 a3", C: "bb3@6 a3 g3 bb3 a3 g3 ~ a3@3 g3", D: "f3@3 ~", E: "~@2 c4 ~@13",
  F: "~@15 bb4", G: "a4 bb4@8 ~@7", H: "~@12 g3 a3 g3 ~", I: "bb3@6 f3!2 bb3 a3 g3 ~ a3@3 g3",
  J: "eb4 d4 eb4 d4 eb4@2 eb4 d4 eb4 d4 eb4@2 eb4!4", K: "bb3 d4@12 ~@3",
  L: "eb4 d4 eb4 d4 eb4 ~ eb4 d4 eb4 d4 eb4@3 ~@3", M: "eb4@2 d4 eb4@3 eb4 d4 eb4 d4 eb4 d4 eb4@2 eb4!2",
  N: "eb4@2 d4 d4@2 ~ d4 bb3@2 a3 g3@4 d4!2", O: "g4@2 f4@2 eb4@3 ~",
  P: "eb4 d4 eb4 d4 eb4@2 eb4 d4 eb4 d4 eb4 ~ eb4!4", Q: "d4@2 bb3 bb3@13",
  R: "eb4 d4 eb4 d4 eb4@2 eb4 d4 eb4 d4 eb4@4 ~@2", S: "eb4@2 d4 eb4@3 eb4 d4 eb4 d4 eb4 d4 eb4@2 eb4 d4",
  T: "~@14 d4!2", U: "g4@4 f4@4 eb4@7 d4", V: "[bb3!2 gb4@6]/2", W: "~@14 d4 eb4", X: "f4@6 eb4 d4 eb4 d4 eb4@6",
  Y: "d4@11 ~@5", Z: "d4", AA: "~@14 g3 a3", AB: "bb3@6 a3 g3 a3 g3 a3@6", AC: "gb3@3 [gb3,eb4]",
  AD: "[[f3,d4]@27 ~@5]/2", // Dm
})).s("gm_epiano1").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!37 ~ [~ x ~ x]!12 ~ [~ x ~ x]!13 ~@2>").gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C ~@5 A@2 B C A@2 B C ~ A B C ~@2 A@2 B C A@2 B ~ A@2 B C ~@2 A@2 B C
  A@2 B D ~
>`.pickRestart({
  A: "x!4 ~@2 x!6 ~@2 x!2", B: "x!4 ~@4 x!4 ~@2 x!2", C: "x!4 ~@2 x!6 ~@4", D: "x!3 ~@13",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<A@24 B@2 C D B A@8 ~ A@3 B C A@7 ~ A@4 D B A@7 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x ~ x ~@2 x!3", D: "x!8",
})).gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@24 A@2 B ~ A ~@12 A B ~@13 A ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x!2 ~@3",
})).gain(0.24)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  [~@8 x ~ x ~ x!2 ~ x]
  [x ~ x ~ x!2 ~ x!2 ~ x ~ x!2 ~ x]!28
  [x ~ x ~ x ~@2 x!2 ~ x ~@5]
  ~@36
>`).gain(2.05)

stack(
  piano, bass, rock_organ, string_ensemble_2, rock_organ_2, bass_2, epiano1, kick, snare, pedal_hat, tambourine,
  tambourine_soft, agogo_bells
)

More by Hanson