Strudelify
KeyD minorTempo89 bpm
0:00/0:00
// scar tissue — The Red Hot Chili Peppers
// 89 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/2069281; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(89/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.

// other · trombone
const trombone = note(`<
  ~@3 A B ~@2 C B D E D E ~@2 F E D E D G H I J@2 K L ~@2 M B D E D E ~@2 N B D E D O P Q R S@2 T U V@2 W ~@2 X Y D E D
  O Z AA@4 ~@3 AB@2 AC AD@2 AE AF@4 ~
>`.pickRestart({
  A: "~@10 g3 f3 g3 f3@3", B: "a3 ~@3", C: "~@4 d4@2 d4 c4 ~ bb3 ~ a3 ~ g3 ~@2", D: "d4@4 f4!4 ~ f4!2 ~ f4@2 e4@2",
  E: "f4 ~@3", F: "g3 a3@3 a3@2 d4 f4 ~ e4 ~ d4 ~ c4 ~@2", G: "f4@3 a3 ~ g3 ~ g3", H: "d3@3 ~@3 c4 a3", I: "a3@3 ~",
  J: "[~@5 a3 g3 g3@7 g3 a3]/2", K: "a3@4 a3 b3!2 c4", L: "c4 ~", M: "g3 a3@3 a3@3 b3 ~ c4 ~ b3 ~ a3 ~@2",
  N: "g3 a3@3 a3@3 e4 ~ d4 ~ c4 ~ c4@3", O: "c4@3 a3 ~ g3 ~ g3", P: "d3 ~", Q: "d4@5 d4 c4!2", R: "a3@6 a3 g3",
  S: "[g3@4 ~ c4@2 a3@7 ~@2]/2", T: "d4@4 ~ e4 ~ c4", U: "a3 a3@5 c4 g3", V: "[g3@4 ~ c4@2 a3@5 d4 e4!2 f4]/2",
  W: "f4 ~", X: "c4 d4@3 d4@3 d4 ~ g4 ~ f4 ~ e4 ~@2", Y: "f3 ~@3", Z: "d3@3 ~@5",
  AA: "[a4@6 g4 g4@5 ~ g4@2 e4@5 ~ e4 f4 d4@3 ~@6]/4", AB: "[~@8 d3 e3 d3@4 a3@12 a3@4 a3@2]/2",
  AC: "a3!2 ~ e3@2 d3 ~ e3", AD: "[c3@5 c3 d3 a2@7 ~@2]/2", AE: "a3@6 ~ f4",
  AF: "[e4@2 e4@2 ~@2 b3 c4 b3 d4@5 c4@7 d4@2 g3@2 f3@2 ~ e3@9 f3@24 ~@3]/4",
})).s("gm_trombone").gain(0.35)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@3 A B ~@2 C B D B D B ~@2 E B D B D F G H I J K I ~@2 L B D B D B ~@2 M B D B D F N ~@3 O P ~@2 Q P ~@2 R B D B D F
  G ~@3 S T ~@2 U@2 ~@2 V@2 ~ W@3 ~
>`.pickRestart({
  A: "~@10 g4 f4 g4 f4@3", B: "a4 ~@3", C: "~@4 d4@2 d4 a4 ~ g4 ~ f4 ~ e4 ~@2", D: "d4@4 a4!4 ~ a4!2 ~ a4@2 g4@2",
  E: "e4 f4@3 f4@2 f4 a4 ~ g4 ~ f4 ~ e4 ~@2", F: "a4@3 c5 ~ c5 ~ c5", G: "d5@3 ~@5", H: "f4@2 ~ f4@2 ~ f4@2", I: "f4 ~",
  J: "e4@4 ~@2 e4@3 ~@3 e4@4", K: "d4@4 d4 e4!2 f4", L: "g4 a4@3 a4@3 b4 ~ c5 ~ b4 ~ a4 ~@2",
  M: "g4 a4@3 a4@3 d5 ~ c5 ~ a4 ~ g4 g4@2", N: "d5 ~", O: "~@3 g4", P: "a4 ~", Q: "~@4 f4 g4!2 a4",
  R: "g4 a4@3 a4@3 a4 ~ a4 ~ g4 ~ f4 ~@2", S: "a4@2 ~ a4@2 ~ g4@2", T: "a4@3 ~", U: "[~@4 g4@4 a4 ~ a4@4 a4@10 ~@8]/2",
  V: "[~@4 d4@4 e4@4 f4 ~ d4@14 ~@4]/2", W: "[c4@5 d4@2 g4@2 f4@2 ~ e4@9 f4@24 ~@3]/3",
})).s("gm_alto_sax").gain(0.42)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@3 A B ~@2 C B D B D B ~@2 E B D B D F G H I J K L ~@2 M B D B D B ~@2 N B D B D F I ~@3 O L ~@2 P L ~@2 Q B D B D F
  G ~@3 H R ~@2 S@2 ~@2 T@2 ~ U@3 ~
>`.pickRestart({
  A: "~@3 a2", B: "f3 ~@3", C: "~@4 d3@2 d3 c3 ~ bb2 ~ c3 ~ d3 ~@2", D: "d3@4 d3!4 ~ d3!2 ~ d3@2 c3@2",
  E: "c3 d3@3 d3@2 d3 f3 ~ e3 ~ d3 ~ c3 ~@2", F: "f3@3 f3 ~ c3 ~ c3", G: "d3@3 ~@5", H: "d3@2 ~ d3@2 ~ d3@2", I: "d3 ~",
  J: "c3@4 ~@2 c3@3 ~@3 c3@4", K: "d3@4 d3 e3!2 f3", L: "f3 ~", M: "c3 d3@3 f3@3 g3 ~ a3 ~ g3 ~ f3 ~@2",
  N: "c3 d3@3 d3@3 d4 ~ c4 ~ a3 ~ g3 g3@2", O: "~@3 e3", P: "~@4 d3 e3!2 f3", Q: "c3 d3@3 d3@3 d3 ~ g3 ~ f3 ~ e3 ~@2",
  R: "d3@3 ~", S: "[~@4 d3@4 d3 ~ d3@4 d3@10 ~@8]/2", T: "[~@4 d3@4 e3@4 f3 ~ d3@14 ~@4]/2",
  U: "[a2@5 a2@2 c3@2 a2@2 ~ g2@9 d3@24 ~@3]/3",
})).s("gm_baritone_sax").gain(0.56)

// chords · electric guitar jazz · "Acoustic Guitar"
const electric_guitar_jazz = note(`<
  A B C D A B E F G H G I A B J K G H G I L M N O P Q A R S T G H G I A B U V G H G I L M W X Y Z AA AB AC AD AE AF AG
  AH G H G I L M AI AJ AK AL AI AJ AK AL AI AJ AK AL AM@2 AN@3 ~
>`.pickRestart({
  A: "f3@4 a4@2 f3 a4 f3 a4 f3@2 a4@2 [c3,e4]@2", B: "[c3,e4] [d3,f4]@3 f4@2 d3 f4 d3 f4 d3@2 f4 e4 c3@2",
  C: "f3@4 a4@2 f3 a4 f3 a4 f3 a4 f3 g4 ~@2", D: "[c3,e4] [d3,f4]@9 g4 f4 g4 f4@3",
  E: "f3@4 a4@2 f3 a4 f3 a4@2 c5 ~@2 [c3,g4]@2", F: "[c3,g4] [d3,a4]@3 d3@2 d3 a4 ~ g4 ~ f4 ~ e4 ~@2",
  G: "[f3,a3,c4,f4,a4]@2 [f3,a3,c4,f4,a4]!5 [f3,a3,c4,f4,a4]@2 [f3,a3,c4,f4,a4] [f3,a3,c4,f4,a4]@2 ~@2 [c3,g3,c4,e4]@2", // F C
  H: "d3@4 [d3,a3,d4,f4]!8 [d3,a3,d4,f4]@2 [c3,g3,c4,e4]@2", I: "d3@4 [d3,a3,d4,f4]!8 [d3,a3,d4,f4]@2 [c3,e3]@2",
  J: "f3@4 a4@2 f3 a4 f3 a4 f3 a4 ~ c5 ~ g4",
  K: "[c3,g4] [d3,a4]@3 [d3,a4]@2 d3 f5 ~ e5 ~ d5 ~ [d3,c5] c3@2, ~@13 g3@3", // C5 D5 D7
  L: "[f3,a3,c4,f4,a4]@2 [f3,a3,c4,f4,a4]!6 ~@2 [c3,g3,c4,f4]@2 ~@2 [c3,g3,c4,e4]@2", // F Csus4 C
  M: "d3@4 [d3,a3,d4,f4]@3 [d3,a3,d4,f4] [d3,a3,d4,f4]@4 [d3,a3,d4,f4]@4", // Dm
  N: "[d3,a3,d4,f4,a4]@4 d3@2 [d3,a3,d4,f4,a4]@4 d3@2 [d3,a3,d4,f4,a4]!2 [d3,a3,d4,f4,a4]@2", // Dm
  O: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!2 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@4 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!2 ~@2", // Dm
  P: "[c3,g3,c4,e4,g4]@3 [c3,g3,c4,e4,g4] [c3,g3,c4,e4,g4]@2 [c3,g3,c4,e4,g4]@2 [c3,g3,c4,e4,g4]!2 [c3,g3,c4,e4,g4]@2 [c3,g3,c4,e4,g4]@4", // C
  Q: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!2 d3 [a3,d4,f4,a4] e3 [b3,e4,g4,b4]", // Dm Em
  R: "[c3,e4] [d3,f4]@3 f4@2 d3 f4 d3 f4 g4 f4 g4 f4 c3@2", S: "f3@4 a4@2 f3 a4 f3 a4@2 c5 ~ g4 g4@2",
  T: "[c3,g4] [d3,a4]@3 a4@3 b4 ~ c5 ~ b4 ~ [d3,a4] d3@2", U: "f3@4 a4@2 f3 a4 f3 a4 f3 c5 ~@2 [c3,g4]@2",
  V: "[c3,g4] [d3,a4]@3 [d3,a4]@3 e5 ~ d5 ~ c5 ~ [d3,a4] ~@2", W: "d4!2 a3!2 d4 a3!2 d4 a3 d4 a3!2 d4 a3!2 d4",
  X: "a3!2 [a3,d4]@2 [a3,d4] a3!2 d4 a3 d4 a3!2 d4 a3!2 d4", Y: "~@2 c4 g3 c4 g3!2 c4 g3 c4 g3!2 c4 g3!2 c4",
  Z: "a3 d4 a3!2 d4 a3!2 d4 a3 d4 a3!2 d4 a3!2 d4", AA: "a3 d4 a3!2 d4 a3!2 d4 a3 d4 a3!2 d4@2 a3 d4",
  AB: "a3!2 d4@2 d4@2 a3 d4@2 d4 a3!2 d4@2 a3 d4", AC: "g3 c4 g3!2 c4 g3!2 c4 g3 c4 g3!2 c4@2 g3 c4",
  AD: "a3!2 d4 a3 d4 a3!2 d4 d3@2 d4@2 e3@2 e4@2", AE: "f3@2 c4@2 a4@2 f3 a4 f3 a4@5 [c3,e4]@2",
  AF: "[c3,e4] [d3,f4]@3 f4@2 d3 d3@2 d3 d3@2 d3@2 [c3,g4]@2", // C Dm C5
  AG: "g4 a4@3 [f3,a4]@2 f3 [f3,a4]@2 a4@2 c5 ~ g4 [c3,g4]@2", AH: "[c3,g4] [d3,a4]@3 [d3,a4]@3 a4 ~ g4 ~ f4 ~ e4 ~@2",
  AI: "[d3,a3,d4,f4,a4]@4 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4] [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4] [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!4", // Dm
  AJ: "[d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4] [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!3 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!4", // Dm
  AK: "[g3,c4,e4,a4]@4 [g3,c4,e4,a4]@2 [g3,c4,e4,a4] [g3,c4,e4,a4]@2 [g3,c4,e4,a4] [g3,c4,e4,a4]@2 [g3,c4,e4,a4] [g3,c4,e4,c5]!3", // Am7 C
  AL: "[d3,a3,d4,f4,a4]@4 [d3,a3,d4,f4,a4]@3 [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4] [d3,a3,d4,f4,a4]@2 [d3,a3,d4,f4,a4]!2 [d3,a3,d4,f4,a4]@2", // Dm
  AM: "[d3,a3,d4,f4,a4]!16", // Dm
  AN: "[[g3,c4,e4,a4]!4 ~ [g3,c4,e4,a4]!6 ~ [g3,c4,e4,a4] [g3,c4,e4,a4]@8 [d3,a3,d4,f4]@24 ~@3]/3", // Am7 Dm
})).s("gm_electric_guitar_jazz").gain(0.26)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@3 A B C B D B E B E B C B D B E B E F G H I J K B C B L B E B E M N B O B E B E F G H P J Q R S J T B C B U B E B E
  B C H I J V W X J V W Y J Z H AA AB@4
>`.pickRestart({
  A: "~@3 a2", B: "f2@3 f2 f2@2 f2 a1 ~ a1 a1@2 ~ c2 c2@2", C: "c2 d2@2 d2 d2@2 d2 d2@2 d2 f2@2 d2@2 c2@2",
  D: "c2 d2@2 d2 d2@2 d2!2 ~@2 a1 c2 ~ d2 c2@2", E: "d2@3 d2 d2@2 d2 d2@2 d2 f2@2 d2@2 c2@2",
  F: "f2@2 f2!2 f2@2 f2!2 ~ c2 c2@2 ~@2 c2@2", G: "d2@3 d2 d2@4 f2@4 f2@4",
  H: "[d2,d4]@4 [d2,d4]@3 [d2,d4] ~@2 [d2,d4]@3 [d2,c4] ~@2", // D D7
  I: "[d2,a3]@4 [d2,a3]@3 [d2,a3] ~@2 [d2,a3]@3 [d2,a3] ~@2", J: "c2@4 e3@3 c2 e3 c2 e3 c2 e3 c2 e3@2",
  K: "d2@3 a2 d3@2 a2@2 d2@4 [e1,e2]@4", L: "c2 d2@2 d2 d2@2 d2!2 ~@2 a1 c2 ~ d2!2 [a1,c2]",
  M: "f2@4 f2@2 f2 a2 ~ a2 a2@2 ~ c3 [g2,c3]@2", N: "c2 d2@3 d2@2 d2!2 ~ a1!2 c2@2 d2 c2@2",
  O: "c2 d2@3 d2 ~@2 d3 ~ c3 ~ a2 ~ g2 g2@2", P: "[d2,a3]@4 [d2,a3]@3 [d2,c4] ~@2 [d2,a3]@3 [d2,a3] ~@2",
  Q: "d2@3 d2 d3@3 d3 d2 d3 d2@2 d3 d2 d2@2", R: "[d2,d4]@4 [d2,d4]@3 [d2,d4] ~@2 [d2,e4]@3 [d2,d4] ~@2",
  S: "[d2,a3]@4 [d2,a3] [d2,c4]@2 [d2,d4]@2 [d2,c4]@2 [d2,a3]@2 [d2,c4] ~@2", T: "d2@3 d2 d2@2 ~@2 d2@4 e2@4",
  U: "c2 d2@2 d2 d2@2 d2!2 ~ a2 ~ g2 ~ f2 d2@2", V: "d2@3 d2 d3@3 d2 d3 d2 d3@2 d2 d3@2 d2",
  W: "[d2,d4]@4 [d2,d4]@3 [d2,d4] ~@2 [d2,e4]@3 [d2,c4] ~@2", // D Dsus2 D7
  X: "[d2,a3]@4 [d2,a3] [d2,c4]@2 [d2,d4]@3 [d2,c4]@2 [d2,d4]@2 [d2,c4]@2", // D5 D7 D D7 D D7
  Y: "[d2,a3]@4 [d2,a3] [d2,c4]@2 [d2,d4]@2 [d2,c4]@2 [d2,d4] ~ [d2,c4] [d2,a3]@2", // D5 D7 D D7 D D7 D5
  Z: "d2@3 d2 d3@3 d2 e3 d2 d3 [d2,d3]@2 [d2,d3] ~@2", // D
  AA: "[d2,a3]@4 [d2,a3] [d2,c4]@2 [d2,d4]@2 [d2,c4]@2 [d2,d4]@2 [d2,c4] ~@2", // D5 D7 D D7 D D7
  AB: "[c2@3 c2 ~ e3@3 c2 f3@2 ~ [c2,e3]@2 c3@7 d2@39 ~@4]/4", // C
})).s("gm_electric_bass_finger").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@17 B C@3 D A@4 E@4 ~@3 F G@5 H G@7 I J@3 K A@5 K A@3 L A@3 M A@3 M A@2 N ~@3
>`.pickRestart({
  A: "x ~@2 x ~@4 x ~ x ~@5", B: "x ~@7 x ~@4 x!2 ~", C: "x ~@2 x ~@4 x!3 ~@5", D: "x ~@2 x ~@5 x!2 ~@3 x ~",
  E: "x ~@2 x ~@4 x!2 ~@6", F: "~@13 x!2 ~", G: "x ~@2 x ~@5 x!2 ~@5", H: "x ~@2 x ~@9 x!2 ~",
  I: "x ~@2 x ~@3 x!2 ~@2 x ~@2 x ~", J: "x ~@2 x ~@2 x ~ x ~ x ~@5", K: "x ~@2 x ~@2 x ~ x ~@4 x!2 ~",
  L: "x ~@2 x ~@3 x!2 ~@7", M: "x ~@2 x ~@3 x!2 ~@5 x ~", N: "x ~@2 x ~@12",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@17 C B@3 D B@8 E ~@2 F B@5 G B@7 H B@3 C B@5 C B@3 I B@3 H B@3 H B@2 J ~@3
>`.pickRestart({
  A: "~@15 x", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@2 x ~ x ~@3", D: "~@4 x ~@2 x ~@4 x!2 ~@2", E: "x",
  F: "~@9 x!2 ~ x ~@3", G: "~@2 x ~@2 x!2 ~", H: "~@4 x ~ x ~@2 x ~@2 x ~@2 x", I: "~@4 x ~ x ~@2 x ~@2 x ~@3",
  J: "~@5 x ~@3 x ~ x!2 ~@3",
})).gain(0.26)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@76 [~@14 x!2] [~ x ~@14] ~@2>").gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@12 B@5 A@9 C@4 ~@4 A@5 D ~@8 A@3 ~ B@5 E ~@8 A@3 ~ A@2 ~@4>".pickRestart({
  A: "~@7 x", B: "~@4 x!4", C: "~@5 x!3", D: "~@3 x!2 ~@3", E: "~ x",
})).gain(0.26)

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

stack(trombone, alto_sax, baritone_sax, electric_guitar_jazz, bass, kick, snare, hihat, mid_tom, open_hat, crash)