Strudelify
Ka-Ching! cover art

Up! (Red Album)

Ka-Ching!

Shania Twain

KeyB♭ minorTempo76 bpm
0:00/0:00
// Ka-Ching! — Shania Twain
// 76 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 59 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 33 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(76/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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 2
const bass = note("<~@15 A B ~@13 A B ~@17 A B ~@8>".pickRestart({
  A: "~@4 f3 eb3 db3 c3", B: "gb3@7 ~@9",
})).s("gm_synth_bass_2").gain(0.12)

// bass · electric bass finger
const bass_2 = note(`<
  ~@2 A B C D E D E F G H I J K L M J K N O E D E F G H I J K L M J K P Q O R E S D R E T G H I J K L M J K N U E D E Q
>`.pickRestart({
  A: "~@15 bb1", B: "bb1@2 ~@13 a1", C: "a1@2 ~@4 f3@4 ~ f1 db2@3 ~", D: "bb1@2 ~@9 bb1 db2 eb2 ~ bb1",
  E: "a1@2 ~@9 f1 db2 eb2 ~ a1", F: "bb1@2 ~@9 bb1 eb2 f2 ~ f2", G: "f1@2 ~@9 f1 eb2 f2 ~ f2",
  H: "f1@2 ~@9 f1 eb2 f2 ~ f1", I: "gb1!4 ~@3 gb1!2 gb2 gb1 gb2 ~@3 gb2", J: "db2!4 ~@3 ab1 db2 ab1 db2!2 ~@3 db2",
  K: "eb1!4 ~@3 bb1 eb2 bb1 eb2!2 ~@3 eb2", L: "eb1 ~ f1 ~@5 f1 f2 eb1 eb2 db1 db2 c1 c2",
  M: "~ gb1!3 ~@3 gb1!2 gb2 gb1 gb2 ~@3 gb2", N: "eb1 ~ f1 ~@12 bb1", O: "bb1 ~@10 bb1 db2 eb2 ~ bb1",
  P: "eb1 ~ f1 ~@13", Q: "bb1 ~@15", R: "a1@2 ~@9 bb1 db2 eb2 ~ bb1, bb1 ~@15", S: "bb1@2 ~@9 f1 db2 eb2 ~ a1",
  T: "bb1@2 ~@9 f1 eb2 f2 ~ f2", U: "~@11 bb1 db2 eb2 ~ bb1",
})).s("gm_electric_bass_finger").gain(0.66)

// other · alto sax
const alto_sax = note(`<
  ~@4 A B C D E F G H I J K ~ L J K ~ B C D E F G H I J K ~ L J K ~@10 M H I J K ~ L J K ~ B C D E N
>`.pickRestart({
  A: "~@12 bb3@3 ~", B: "~@8 eb4 f4 db4!3 eb4 bb3@2", C: "a3@2 ~@5 f3 eb4 f4 db4!3 eb4 a3@2",
  D: "bb3@3 ~@3 bb3!2 eb4 f4 db4!3 eb4 bb3!2", E: "a3@2 ~@4 f3!2 eb4 f4 db4!3 eb4 a3!2", F: "bb3@2 ~@8 bb4 ~ bb4!4",
  G: "a4 f4 ~@7 bb3 bb4!6", H: "a4 f4 ~@7 a3 a4!6", I: "bb4@5 ~@2 bb4 db5@2 c5@2 bb4@4",
  J: "f4@5 ~@2 f4 ab4@2 gb4@2 f4@2 ab4@2", K: "gb4@3 ~@5", L: "~@7 bb4 db5@2 c5@2 bb4@4", M: "~ f4 ~@7 bb3 bb4!6",
  N: "bb3 ~@7",
})).s("gm_alto_sax").gain(0.72)

// other · alto sax · soft notes
const alto_sax_soft = note(`<
  A B@2 C D ~ E ~@2 F ~@2 G ~@3 G ~@4 E ~@2 F ~@2 G ~@3 G ~@14 G ~@3 G ~@5 H ~@2
>`.pickRestart({
  A: "~@8 c-1 ~@7", B: "c-1 ~@7 c-1 ~@7", C: "c-1 ~@4 c-1 ~@5 c-1 ~@4", D: "c-1 ~@15", E: "~@15 b3", F: "~@11 bb4 ~@4",
  G: "~@15 b4", H: "b3 ~@15",
})).s("gm_alto_sax").gain(0.08)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@4 A ~@2 B C ~@2 D ~@10 B C ~@2 D ~@18 D ~@10 B C ~>".pickRestart({
  A: "~@9 [a3,c4,f4]!3 ~ [a3,c4,f4] [c4,f4,a4] [a3,c4,f4]", B: "~@9 [bb3,db4,f4]!4 [bb3,db4,f4]@2 [bb3,db4,f4]",
  C: "~@4 [f3,a3,c4,eb4]@5 [f3,a3,c4,eb4]!5 ~ [f3,a3,c4,eb4]", D: "~@9 [f3,a3,c4,eb4]!3 ~ [f3,a3,c4,eb4]!3",
})).s("gm_electric_guitar_clean").gain(0.23).pan(0.4)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@9 A B@2 C D E@2 F D G@2 ~@4 A B@2 C D H I F D H J ~@9 K B C D H I F D H J ~@4 L
>`.pickRestart({
  A: "bb2@3 ~@5 [bb2,f3,bb3]@8", B: "f2@3 ~@5 [f2,c3,f3]@7 ~", C: "gb2!4 gb3@12", D: "db2!4 db3@12",
  E: "[eb2 eb2@3 eb3@5 ~@6 f3@9 f2 ~ eb2 eb3 db2 db3 c2 c3, ~@15 c3@12 ~@5, ~@25 f3@2 ~@5]/2", F: "~ gb2!3 gb3@12",
  G: "[eb2 eb2@3 eb3@5 ~@6 [c3,f3]@3 [c3,f3] ~@13]/2", H: "eb2 eb2@3 eb3@5 ~@7",
  I: "f3@8 f2 ~ eb2 eb3 db2 db3 c2 c3, c3@3 ~, ~@9 f3@2 ~@5", J: "[c3,f3]@2 [c3,f3] ~@13", K: "~@8 [f2,c3,f3]@7 ~",
  L: "bb2@3 ~@13",
})).s("gm_distortion_guitar").gain(0.28).pan(0.4)

// chords · distortion guitar
const distortion_guitar_2 = note("<~@16 A B C ~@8 A B C ~ A B C ~@16 A B C ~@6>".pickRestart({
  A: "[db3,gb3]@7 ~", B: "[db3,f3]@7 ~", C: "[eb3,bb3]@7 ~",
})).s("gm_distortion_guitar").gain(0.36).pan(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@12 A B C@2 ~ B D@2 ~@7 A B E F ~ B E G ~@11 A B E F ~ B E G ~@5>".pickRestart({
  A: "[bb4,db5,gb5]", B: "[ab4,db5,f5]", C: "[[bb4,eb5,gb5]@10 ~@5 [a4,c5,f5]@12 ~@5]/2",
  D: "[[bb4,eb5,gb5]@10 ~@5 [a4,c5,f5]@3 ~@14]/2", E: "[bb4,eb5,gb5]@5 ~@3", F: "[a4,c5,f5]@3 ~",
  G: "[a4,c5,f5]@3 ~@13", // F
})).s("gm_string_ensemble_1").gain(0.1).pan(0.7)

// chords · synth strings 2
const synth_strings_2 = note("<~@36 A B@2 A@2 B@2 A B@2 C D E B C D E ~@6>".pickRestart({
  A: "[bb3,db4,f4]", B: "[a3,c4,f4]", C: "[bb3,db4,gb4]", D: "[ab3,db4,f4]", E: "[bb3,eb4,gb4]",
})).s("gm_synth_strings_2").gain(0.12).pan(0.6)

// other · alto sax
const alto_sax_2 = note(`<
  ~@10
  [~@4 a4 f4 ~@2 a4 f4 ~@6]!2
  ~@13
  [~@4 a4 f4 ~@2 a4 f4 ~@6]!2
  ~@17
  [~@4 a4 f4 ~@2 a4 f4 ~@6]!2
  ~@13
>`).s("gm_alto_sax").gain(0.48)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@36
  [~ bb2 db3 f3 eb3 f3 bb2 f3 ~@8]
  [~ a2 c3 f3 eb3 f3 a2 f3 ~@8]!2
  [~ bb2 db3 f3 eb3 f3 db3 f3 ~@8]
  [~ bb2 db3 f3 eb3 f3 bb2 f3 ~@8]
  [~ a2 c3 f3 eb3 f3 a2 f3 ~@8]!2
  [~ bb2 db3 f3 eb3 f3 db3 f3 ~@8]
  ~@15
>`).s("gm_string_ensemble_1").gain(0.64)

// other · piano
const piano = note("<A@4 B C B C B ~@50>".pickRestart({
  A: "bb2/4", B: "a2", C: "bb2",
})).s("gm_piano").gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@5 A@6 B A@7 ~ A@6 B A@7 ~ C A@7 C A B A@3 D A@3 ~ A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@3 x!2 ~ x!2 ~@3", D: "~@4 x ~@3 x!5 ~@3",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@5 A@6 B A@7 ~ A@6 B A@7 ~ A@10 B A@7 ~ A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@7 B ~@7 A@7 B C A@8 D ~ A@7 B ~@5>".pickRestart({
  A: "x!7 ~", B: "x!2 ~@6", C: "~ x!6 ~", D: "x",
})).gain(0.4)

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

// drums · high tom
const high_tom = s("ht").struct("<~@35 [~@7 x] ~@7 [~@7 x] ~@5 [~@7 x] ~@9>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@9 A@4 ~@3 A ~@7 A@4 ~@3 A ~@4 A ~@7 A@3 ~@3 A ~@7 A>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@14 B C A@13 B D A@17 B C A@3 E>".pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x!4", B: "x!3 ~@13", C: "~ x!2 ~ x!3 ~ x!3 ~ x!4", D: "~ x ~@2 x!3 ~ x!3 ~ x!4", E: "x",
})).gain(0.32)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@5 A@14 ~ A@14 ~ A@18 ~ A@4 ~>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@4",
})).gain(0.16)

// drums · guiro
const guiro = s("guiro:4").struct("<~ [~ x ~ x]!4 ~@54>").gain(13.52)

// drums · triangle
const triangle = s("triangles:35").struct("<~ [x!2]!4 ~@54>").gain(5.57)

stack(
  bass, bass_2, alto_sax, alto_sax_soft, electric_guitar_clean, distortion_guitar, distortion_guitar_2,
  string_ensemble_1, synth_strings_2, alto_sax_2, string_ensemble_1_2, piano, kick, snare, clap, hihat, open_hat,
  high_tom, crash, tambourine, tambourine_soft, guiro, triangle
)

More by Shania Twain