Strudelify

Upside Down

Ross

KeyB♭ majorTempo109 bpm
0:00/0:00
// Upside Down — Ross
// 109 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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("<~@16 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 ~@12 E F ~@8>".pickRestart({
  A: "[~@14 ab3 ~ [f4,bb4]@2 ~ [db4,f4]@3 [bb3,db4]@2 [f3,bb3]@7 ~, ~@2 [db3,f3,bb3,db4]@3 ~@3]/2", // Bb5 Db Bbm Bb5 Bbm
  B: "[~@16 [f4,db5]@3 [f4,ab4]@3 db4@2 [bb3,db4]@7 ~, ~@8 db4@14 f4 ~@9, ~@2 [db3,f3,bb3]@3 ~@3]/2", // Db Fm Bbm
  C: "[~@14 f4 ~ [ab4,f5]@3 [ab4,db5]@3 [f4,bb4]@2 [db4,f4]@7 ~, ~ db4@2 ~, ~@2 [db3,f3,bb3]@3 ~@3]/2", // Db Db5 Bb5 Db Bbm
  D: "[~@14 ab4 ~ [f5,bb5]@2 ~ [db5,f5]@3 [bb4,db5]@2 ~@8, ~ db4@2 ~, ~@2 [db3,f3,bb3]@3 ~@3]/2", // Bb5 Db Bbm
  E: "[g3,bb3] ~@3 [d3,g3,bb3] ~ [f3,bb3,d4] ~ [g3,c4,e4] ~ g3 g2 ~ g2 g3 ~, d3 ~@7", // Gm Bb C
  F: "[c3,f3,a3] ~@5 [c3,f3,a3] ~ [d3,g3,bb3] ~@7", // F Gm
})).s("gm_piano").gain(0.47).pan(0.7)

// other · electric guitar muted
const electric_guitar_muted = note("<~@70 A B C D A B C E>".pickRestart({
  A: "f3 ~ f3 ~ f3 ~ c3 ~ f3 ~ g3!2 ~@2 d3 ~", B: "f3@2 g3 g3@2 ~ d3 ~ f3 ~ g3!2 ~@4",
  C: "bb2 ~ bb2 ~ bb2 ~ b2 ~ f3@2 g3 g3@3 c3 ~", D: "f3 ~ g3 g3@2 ~ c3 ~ f3@2 g3 g3@2 ~@3",
  E: "f3!2 d3 ~ f3 ~ gb3 g3 ~@8",
})).s("gm_electric_guitar_muted").gain(0.47).pan(0.4)

// other · piano
const piano_2 = note(`<
  ~@24 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@10 g3!2 bb3!2 g3 ~",
})).s("gm_piano").gain(0.48).pan(0.7)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@7 A B A C D B A E A F ~@6 G B A C D B A E A F ~@6 G B A C D B A E A F ~@6 G B A C D B A E A B A C D ~@2 H A I A H A
  J ~
>`.pickRestart({
  A: "[f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~ [g3,bb3,d4,g4] ~@7", // F Gm
  B: "[g3,bb3,d4,g4] ~@3 [g3,bb3,d4,g4] ~ [g3,bb3,d4,g4] ~ [g3,c4,e4] ~ g3!2 g4 g3!2 ~", // Gm C
  C: "[bb2,d3,f3,bb3] ~@3 [bb2,d3,f3,bb3] ~ [b2,eb3,gb3] ~ [e3,g3,c4,e4] ~ g3!2 g4 g3!2 ~", // Bb B C
  D: "[f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~ [g3,bb3,d4,g4] ~@2 f3@2 g3 bb3 ~", // F Gm
  E: "[bb2,d3,f3,bb3]!2 [bb2,d3,f3,bb3]@2 [bb2,d3,f3,bb3] ~ [b2,eb3,gb3] ~ [e3,g3,c4,e4] ~ g3!2 g4 g3!2 ~", // Bb B C
  F: "[bb2,d3,f3,bb3]!2 [bb2,d3,f3,bb3]@2 [bb2,d3,f3,bb3] ~ [b2,eb3,gb3] ~@9", // Bb B
  G: "~@8 [db3,f3,bb3,db4,f4,bb4] ~ [db3,f3,bb3,db4,f4,bb4] ~ [ab3,bb3] [eb3,gb3] db3 bb2", // Bbm Absus2 Ebm
  H: "[g3,bb3,d4,g4] ~@3 [g3,bb3,d4,g4] ~ [g3,bb3,d4,g4] ~ [g3,c4,e4] ~@7", // Gm C
  I: "[bb2,d3,f3,bb3] ~@3 [bb2,d3,f3,bb3] ~ [b2,eb3,gb3] ~ [e3,g3,c4,e4] ~@7", // Bb B C
  J: "[bb2,d3,f3,bb3]!2 [bb2,d3,f3,bb3]@2 [bb2,d3,f3,bb3] ~ [b2,eb3,gb3] ~ [e3,g3,c4,e4] ~@7", // Bb B C
})).s("gm_acoustic_guitar_steel").gain(0.46).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@24 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B A B A B ~@2 A B A B A B A ~
>`.pickRestart({
  A: "[g3,bb3,d4] [g3,c4,e4]", B: "[f3,a3,c4] [g3,bb3,d4]",
})).s("gm_synth_strings_1").gain(0.24)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note("<~@16 A@8 ~@8 A@8 ~@8 A@8 ~@22>".pickRestart({
  A: "[~ [bb4,db5,f5]@4 [bb4,db5,f5]@4 [bb4,db5,f5]@4 [bb4,db5,f5]@2 ~]/8", // Bbm
})).s("gm_synth_strings_1").gain(0.12)

// bass · electric bass finger
const bass = note("<A B A C A B A C D@8 E@8 D@8 E@8 D@8 E@8 D@21 F>".pickRestart({
  A: "g1 ~@3 g1 ~@2 c2 ~@2 c2@2 d2@2 c2 ~", B: "g1 ~@3 g1 ~@2 c2 ~@2 c2@2 d2@2 f1 ~",
  C: "g1 ~@3 g1 ~@2 c2 ~@2 c2 ~ d2@2 f1 ~", D: "g1 ~@3 g1 ~@2 g1 c2 ~ c2!2 d2@2 f1 ~",
  E: "[~@4 g1@3 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~ bb1@2 ~@2 bb1@2 ~ bb1@2 ~ db2@2 ~@2 db2 ~@9]/8",
  F: "f1!2 d1 ~ f1 ~ gb1 g1 ~@8",
})).s("gm_electric_bass_finger").gain(0.39)

// drums · kick
const kick = s("bd").struct("<~@8 A@15 B A@15 B A@15 B A@12 ~@2 A@7 C>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x!3 ~ x ~ x!2 ~@8",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct("<~@24 A@8 ~@8 A@8 ~@8 A@12 ~@2 A@7 B>".pickRestart({
  A: "~ x ~ x", B: "x!3 ~ x ~ x!2 ~@8",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct(`<
  ~@15 A B C D C D C D E C F C F C F C F B C D C D C D E C F C F C F C F B C D C D C D E C F C F C F C F C F C F ~@2 C F
  C F C F C ~
>`.pickRestart({
  A: "~@12 x ~@2 x", B: "~@2 x!2 ~@2 x ~", C: "~ x ~ x", D: "~@4 x ~@2 x ~@4 x ~@3", E: "~@2 x ~@3 x!2",
  F: "~@4 x ~@7 x ~@2 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@11 A B C B C D E@3 F G H I J@5 K J L D E@3 F G H I J@5 K J L D E@3 F G H I J@5 K J L J@4 ~@2 J@5 K J ~
>`.pickRestart({
  A: "~@5 x!3", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x ~ x ~ x ~ x!5 ~ x ~ x!2", D: "x!6 ~ x", E: "x!2 ~ x!3 ~ x",
  F: "x ~ x ~@3 x ~ x ~ x ~ x ~ x!2", G: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", H: "x!3 ~ x ~ x!3 ~ x ~ x ~ x!2",
  I: "x!4 ~@4", J: "x!8", K: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~", L: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x!2",
})).gain(0.57)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A@8 ~@8 A@8 ~@8 A@12 ~@2 A@7 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@3 A ~@9 B ~ A ~@2 A ~@10 B ~ A ~@2 A ~@10 B ~ A ~@2 A ~@2 B ~ A ~@3 B ~ A ~@2 A ~ C
>`.pickRestart({
  A: "~ x", B: "x", C: "~@7 x ~@8",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A B@6 C ~@8 A B@6 C ~@8 A B@6 C ~@22>".pickRestart({
  A: "~@8 x!3 ~ x!3 ~", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", C: "x!3 ~ x!3 ~@9",
})).gain(0.43)

// drums · bongos
const bongos = s("bongo:18").struct("<~@48 A B A B A B A C D E D E D E D E D E D E ~@2 D E D E D E D ~>".pickRestart({
  A: "~@8 x ~@5 x!2", B: "x ~@3 x ~@2 x", C: "x", D: "x ~@5 x!3 ~@7", E: "x ~@2 x ~@4",
})).gain(1.5)

// drums · congas
const congas = s("conga:18").struct("<~@48 A B A B A B A C D E D E D E D E D E D E ~@2 D E D E D E D ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x ~@3 x!2 ~@2 x ~@5", C: "~@2 x ~@3 x!2 ~@8", D: "~@2 x ~@7 x ~@3 x!2", E: "~ x ~@6",
})).gain(1.83)

// drums · congas
const congas_2 = s("conga:33").struct("<~@50 A ~ A ~ A ~@2 B ~ B ~ B ~ B ~ B ~ B ~@3 B ~ B ~ B ~@2>".pickRestart({
  A: "~@2 x!2 ~@12", B: "~@10 x!2 ~@4",
})).gain(1.83)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@2 [~ x!3 ~ x!3]!6 ~@70>").gain(3.26)

stack(
  piano, electric_guitar_muted, piano_2, acoustic_guitar_steel, synth_strings_1, synth_strings_1_soft, bass, kick,
  snare, clap, hihat, open_hat, crash, tambourine, bongos, congas, congas_2, cabasa
)

More by Ross