Strudelify

Take Me for a Ride

Taja Sevelle

KeyA♭ majorTempo127 bpm
0:00/0:00
// Take Me for a Ride — Taja Sevelle
// 127 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A C A D A C A D A E A D A C F G H I H G J I H G H I J K H L M D N E A O A C F G H I H G J I H G H I J K H L M D N
  E A O A C F G H I H G J I H G H I J K H L M D N E A O A C L M D N E A O A C L P
>`.pickRestart({
  A: "db3@2 ~@4 ab2 ~ ab2@2 bb2@2 ab2@2 eb3@2", B: "~@2 ab2 ab3 ~ gb3 f3 eb3", C: "~@2 ab2 ab3 ~ gb3 f3 ~",
  D: "~@4 ab2@2 ab3@2 ~@2 gb3@2 f3@2 eb3 ~", E: "~@2 ab2 ab3@2 gb3 f3 ~", F: "bb2@4 ~@2 bb2@2 db3 ~ db3@2 eb3@2 ~@2",
  G: "~@4 ab2@2 bb2@4 ab2@3 ~@3", H: "bb2@3 ~@3 bb2@2 db3 ~ db3@2 eb3@2 ~@2", I: "ab2 ~ ab2 ab3@2 gb3 f3 eb3",
  J: "bb2@2 ~@4 bb2@2 db3 ~ db3@2 eb3@2 ~@2", K: "~@2 ab2 bb2@2 ab2 ~@2",
  L: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", M: "db3@3 ~@3 ab2 ~ ab2@2 bb2@2 ab2@2 eb3@2",
  N: "db3@2 ~@4 ab2 ~ ab2 ~ bb2@2 ab2@2 eb3@2", O: "~@4 ab2@2 ab3@3 ~ gb3@2 f3@2 eb3 ~", P: "db3 ~@15",
})).s("gm_acoustic_bass").gain(0.69)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@48 A@2 B@4 C@2 ~@23 D E ~@18>".pickRestart({
  A: "[~ db4 eb4 f4@2 ab3 ~ ab4@4 ~@5, bb3@4 ~@2 db4@5 ~@5]/2",
  B: "[~@2 db4@2 eb4@2 f4@4 ab3@2 ~@2 ab4@7 ~@11, bb3@3 ~@3 db4@5 ~@5]/2",
  C: "[~@2 db4@2 eb4@2 f4@4 ab3@2 db4@2 ab3@9 ~@9, bb3 ~@7]/2", D: "f4 gb4 ab4 bb4", E: "ab4@5 ~@11",
})).s("gm_electric_guitar_muted").gain(0.71)

// other · sitar
const sitar = note("<~@65 A ~ B ~ A ~ C ~@27>".pickRestart({
  A: "eb4 ~@5 f4 ~@3 gb4@2 f4 ~ db4 ~", B: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ f4@2 gb4 ~ f4 ~ db4 ~",
  C: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ f4 ~ gb4 ~ f4 ~ db4 ~",
})).s("gm_sitar").gain(0.56)

// chords · vibraphone
const vibraphone = note(`<
  ~@8 A B A C D E A C F G F G F G F G F G F G F G F H I J K L K J K L F G F G F G F G F G F G F G F H I J K L K J K L F
  G F G F G F G F G F G F G F H I J K L K J K L H I J K L K J K L H M
>`.pickRestart({
  A: "[ab3,db4,f4] ~@5 [ab3,db4,f4] ~ [ab3,db4,f4] ~@5 [c4,eb4,ab4] ~", // Db Ab
  B: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~@11", C: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,gb4] ~@11",
  D: "[ab3,db4,eb4,f4] ~@5 [ab3,db4,f4] ~ [ab3,db4,f4] ~@5 [c4,eb4,ab4] ~", E: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~@13",
  F: "[bb3,db4,f4] ~@5 [bb3,db4,f4] ~@9", G: "[ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@9",
  H: "[eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~", // Ab5
  I: "[ab3,db4,f4]@2 ~@4 [ab3,db4,f4] ~ [ab3,db4,f4] ~@5 [eb4,ab4] ~, [eb4,ab4] ~@15", // Db Ab5
  J: "[eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~@11", K: "[ab3,db4,f4] ~@5 [ab3,db4,f4] ~ [ab3,db4,f4] ~@5 [eb4,ab4] ~",
  L: "[eb4,ab4] ~ [eb4,ab4] ~ [eb4,gb4,ab4] ~@11", M: "[ab3,db4,eb4,f4,ab4] ~@15",
})).s("gm_vibraphone").gain(0.59)

// drums · kick
const kick = s("bd").struct("<A@31 ~ A@23 ~ A@23 ~ A@8 ~ A@8 ~ B>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct("<A@31 B A@23 B A@23 B A@8 B A@8 B ~>".pickRestart({
  A: "~ x ~ x", B: "x!8",
})).gain(0.7)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C B D B A B C ~@4 B E B A F B G F ~ E B C D@2 G C F A ~@2 D ~ B ~ B A C A F B G F ~ E B C D@2 G C F A ~@2 D ~ B ~
  B A C A F B G F ~ E B C D@2 G C F A ~@2 D ~ B ~ B A C ~@2 D ~ B ~ B A C ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~@5 x ~ x", D: "~ x ~@3 x ~ x", E: "~@7 x", F: "~ x ~@3 x ~@2", G: "~ x ~@5 x",
})).gain(0.39)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B A ~ A ~ A ~ A ~ B A ~ A ~ A ~ A ~ B A
>`.pickRestart({
  A: "x", B: "x!8",
})).gain(0.7)

stack(bass, electric_guitar_muted, sitar, vibraphone, kick, snare, hihat, hihat_soft, open_hat)