Strudelify

Somewhere Over the Rainbow

Marusha

KeyB♭ majorTempo162 bpm
0:00/0:00
// Somewhere Over the Rainbow — Marusha
// 162 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(162/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.

// bass · lead 1 square · "SQUAREWAVE"
const bass = note(`<
  ~@44 A@2 B@2 C@2 A@2 D@2 C@2 B@2 A@2 ~@16 A@2 B@2 C@2 A@2 D@2 C@2 B@2 A@4 B@2 C@2 A@2 D@2 C@2 B@2 A@4 B@2 C@2 A@2 D@2
  C@2 B@2 A@2 ~@8 E@2 F@2 G@2 H@2 A@2 B@2 C@2 A@2 D@2 C@2 B@2 A@2 I
>`.pickRestart({
  A: "[bb1,bb2] ~@2 [bb1,bb2] ~ [bb1,bb2] ~@2", B: "[f1,f2] ~@2 [f1,f2] ~ [f1,f2] ~@2",
  C: "[g1,g2] ~@2 [g1,g2] ~ [g1,g2] ~@2", D: "[eb1,eb2] ~@2 [eb1,eb2] ~ [eb1,eb2] ~@2",
  E: "[eb1,eb2]@2 ~@2 [eb1,eb2] ~ [eb1,eb2]@2 ~@2 [eb1,eb2]@2 [eb1,eb2] ~@3", // Eb
  F: "[g1,g2]@2 ~@2 [g1,g2] ~ [g1,g2]@2 ~@2 [g1,g2]@2 [g1,g2] ~@3", // G
  G: "[f1,f2]@2 ~@2 [f1,f2] ~ [f1,f2]@2 ~@2 [f1,f2]@2 [f1,f2] ~@3", // F
  H: "[bb1,bb2]@2 ~@2 [bb1,bb2] ~ [bb1,bb2]@2 ~@2 [bb1,bb2]@2 [bb1,bb2] ~@3", I: "[bb1,bb2] ~@7",
})).s("gm_lead_1_square").gain(0.6)

// bass · lead 1 square · "SQUAREWAVE" · soft notes · Eb G F Bb
const bass_soft = note(`<
  ~@132
  [~@2 [eb1,eb2] ~@5 [eb1,eb2] ~@5 [eb1,eb2] ~]!2
  [~@2 [g1,g2] ~@5 [g1,g2] ~@5 [g1,g2] ~]!2
  [~@2 [f1,f2] ~@5 [f1,f2] ~@5 [f1,f2] ~]!2
  [~@2 [bb1,bb2] ~@5 [bb1,bb2] ~@5 [bb1,bb2] ~]!2
  ~@17
>`).s("gm_lead_1_square").gain(0.36)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@28 A@2 B@2 C@2 A@2 D@2 C@2 E@2 A@2 ~@16 A@2 B@2 C@2 A@2 D@2 C@2 E@2 A@4 B@2 C@2 A@2 D@2 C@2 E@2 A@2 ~@16 A@2 B@2 C@2
  A@2 D@2 C@2 E@2 A@4 B@2 C@2 A@2 F@2 G@2 H@2 I@2 A@2 B@2 C@2 A@2 D@2 C@2 E@2 A@2 ~
>`.pickRestart({
  A: "[bb3,f4,bb4,d5]/2", B: "[f4,c5,f5,a5]/2", C: "[d4,g4,bb4,d5]/2", D: "[eb4,g4,bb4,eb5]/2", E: "[c4,f4,a4,c5]/2",
  F: "[[g3,eb4], bb3 ~@31]/2", G: "[g3,bb3,d4]/2", H: "[f3,a3,c4]/2", I: "[f3,bb3,d4]/2",
})).s("gm_synth_strings_1").gain(0.24)

// other · harmonica
const harmonica = note(`<
  ~@28 A B C D A E F@2 A G H I J K L@2 ~@16 A B C D A E F@2 A G H I J K L@2 A B C D A E F@2 A G H I J K L@2 ~@65
>`.pickRestart({
  A: "bb3", B: "bb4", C: "a4@2 f4 g4", D: "a4 bb4", E: "g4", F: "f4/2", G: "eb4", H: "d4@2 bb3 c4", I: "d4 eb4",
  J: "c4@2 a3 bb3", K: "c4 d4", L: "bb3/2",
})).s("gm_harmonica").gain(0.39)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  [bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~]!28
  ~@16
  [bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~]!64
  ~@16
  [bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~]!8
  ~@25
>`).s("gm_lead_2_sawtooth").gain(0.6).pan(0.6)

// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note(`<
  ~@4 A B C A B C A B A B C A B C A B C A B A B C A B ~@16 A B C A B C A B C A B A B C A D ~@97
>`.pickRestart({
  A: "a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2", B: "bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2",
  C: "b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2", D: "~ b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2 b2 a2 bb2",
})).s("gm_synth_bass_2").gain(0.24)

// other · oboe
const oboe = note("<~@108 A B C D A E F@2 A G H I J K A@2 ~@16 A B C D A E F@2 A G H I J K A@2 L>".pickRestart({
  A: "bb4 ~ bb4 ~ bb4 ~ bb4 ~", B: "bb5 ~ bb5 ~ bb5 ~ bb5 ~", C: "a5 ~ a5 ~ f5 ~ g5 ~", D: "a5 ~ a5 ~ bb5 ~ bb5 ~",
  E: "g5 ~ g5 ~ g5 ~ g5 ~", F: "f5 ~ f5 ~ f5 ~ f5 ~", G: "eb5 ~ eb5 ~ eb5 ~ eb5 ~", H: "d5 ~ d5 ~ bb4 ~ c5 ~",
  I: "d5 ~ d5 ~ eb5 ~ eb5 ~", J: "c5 ~ c5 ~ a4 ~ bb4 ~", K: "c5 ~ c5 ~ d5 ~ d5 ~", L: "bb4 ~@7",
})).s("gm_oboe").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~@12 [x!4]!48 ~@16 [x!4]!48 ~@16 [x!4]!16 x>").gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 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@3 B ~@16 A@3 B A@3 B A@3 B A@3 B ~@48 A@3 B A@3 B A@3 B
  A@3 B C
>`.pickRestart({
  A: "x ~@3 x ~@2 x!2 ~@2 x ~@4", B: "x!16", C: "x",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@20 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@17 A@3 ~ A@3 ~ A@3 ~ A@3 ~@49 A@3 ~ A@3 ~ A@3 ~ A@3
  ~@2
>`.pickRestart({
  A: "~@2 x ~@3 x ~@3 x ~@2 x ~ x",
})).gain(0.18)

// drums · clap
const clap = s("cp").struct("<~@8 A@20 ~@16 A@16 ~@16 A@48 ~@16 A@16 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@16 ~@16 A@16 ~@16 A@16 B@32 ~@16 A@16 C>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!4", C: "x",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@16 ~@16 A@16 ~@16 A@48 ~@16 A@16 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.36)

// drums · china
const china = s("cr").struct("<~@156 x>").gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A@16 ~@16 A@16 ~@16 A@48 ~@16 A@16 B>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.18)

stack(
  bass, bass_soft, synth_strings_1, harmonica, lead_2_sawtooth, bass_2, oboe, kick, snare, snare_soft, clap, hihat,
  open_hat, china, tambourine
)

More by Marusha