Strudelify
KeyG majorTempo128 bpm
0:00/0:00
// Breakout — Shoichiro Sakamoto
// 128 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 15 "Trombone 1" named as a brass, played on trombone (its slap bass 2 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5907617; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · trombone · "Alto Sax 1"
const trombone = note(`<
  ~ A B C D E F G H I J K L M N O P Q R Q S T B T C D E F G H I J K L ~@7 U V W X U Y W V W X U Y W V W X U Y W T B T C
  D E F G H I J K Z C D E F G H I J K AA
>`.pickRestart({
  A: "~ d#4 [f#4,g4] g4 c4 ~ f4 ~ a#4 ~ a4 ~ g4 ~ f4 ~", B: "~ f4 [f#4,g4] g4 c4 ~ f4 ~ a#4 ~ a4 ~ g4 ~ f4 ~",
  C: "~ f4 [f#4,g4] g4 c4 ~ f4 ~ a#4 ~ a4 ~ a#4 ~ a#4 ~, ~ c3@2 c3", // Gmaj7
  D: "~ c4 d#4@2 ~@2 d#4 ~@3 f4 ~@3 f4 ~, a#2 c3, ~@2 d4 ~@13",
  E: "~ d4 [d#4,f4] ~@3 f4 a3 a#3 d4 f4 a#4 b4 a#4 f4 c4, d3 g3", F: "~ c4 [d4,d#4] ~@3 d#4 ~@3 f4 ~@3 f4 ~, g3 f3",
  G: "~ d4 [d#4,f4] ~@3 f4 a3 a#3 d4 f4 a#4 g4@4, a#3 g3", H: "~ c4 d#4@2 ~@2 d#4 ~@3 f4 ~@3 f4 ~, c3 f3, ~@2 d4 ~@13",
  I: "~@2 f4 ~@3 f4 ~@3 g4 ~@3 g4 ~, d3 g3", J: "~ c4 [d4,d#4] ~@3 d#4 ~@3 f4 ~@3 f4 ~, d#3 f3",
  K: "~ c4 [d4,d#4] ~@3 d#4 ~@3 d#4 ~@3 d#4 ~, a#2", L: "a#2@3 [a#2,d#4]@3 a#2@2 d4@4 c4@2 ~@2, d#4 ~@5 d#4 ~ a#2@8",
  M: "d3@8 a#4 ~@2 c5@3 d5@2, a#4 ~@7 d3@8", N: "c4 ~@2 d4@3 d#4@2 f4 ~@2 c4@3 f4@2, g3 f3",
  O: "a#3 ~@2 c4@3 d4@2 a#3 ~@2 c4@3 d4@2, f3!2", P: "a#3 ~@2 c4@3 d#4@2 f4 ~@2 g4 [g#4,a4] ~@3, g3 f3",
  Q: "~ f4 [f#4,g4] ~ c4 ~ f4 ~ a#4 ~ a4 ~ g4 ~ f4 ~, g3", R: "~ f4 [f#4,g4] g4 c4 ~ f4 ~ a#4 ~ a4 ~ g4 ~ f4 ~, d#3",
  S: "~ f4 [f#4,g4] g4 c4 ~ f4 ~ a#4 ~ a4 ~ a#4 ~ a#4 ~, c4 ~@3", T: "~ f4 [f#4,g4] ~ c4 ~ f4 ~ a#4 ~ a4 ~ g4 ~ f4 ~",
  U: "~ c4 d#4@2 ~@2 d#4 ~@3 f4 ~@3 f4 ~, ~@2 d4 ~@13", V: "~ d4 [d#4,f4] ~@3 f4 a3 a#3 d4 f4 a#4 b4 a#4 f4 c4",
  W: "~ c4 [d4,d#4] ~@3 d#4 ~@3 f4 ~@3 f4 ~", X: "~ d4 [d#4,f4] ~@3 f4 a3 a#3 d4 f4 a#4 g4@4",
  Y: "~@2 f4 ~@3 f4 ~@3 g4 ~@3 g4 ~", Z: "c4", AA: "a#2@3 [a#2,d#4]@3 a#2@2 a#2@8, d#4 ~@5 d#4 ~ d4@4 ~@4",
})).s("gm_trombone").gain(0.45)

// chords · trombone · "Alto Sax 2"
const trombone_2 = note(`<
  ~ A@2 B C D E F E G H I J K L M N O P O Q R A R B C D E F E G H I J ~@7 S T S U S V S T S U S V S T S U S V S R A R B
  C D E F E G H W X B C D E F E G H I Y
>`.pickRestart({
  A: "~ g#4 [a4,a#4] a#4 f4 ~ a#4 ~ d5 ~ c5 ~ a#4 ~ a4 ~", // A#maj7
  B: "~ g#4 [a4,a#4] a#4 f4 ~ a#4 ~ d5 ~ c5 ~ d5 ~ f5 ~, ~ f2@2 f2", C: "~@2 g4 ~@3 g4 ~@3 a4 ~@3 a4 ~, f2!2",
  D: "~@2 a3 ~@3 a3!2 a#3 d4 f4 a#4 b4 a#4 f4 c4, f2 g2", E: "~@2 g4 ~@3 g4 ~@3 a4 ~@3 a4 ~, c2 f2",
  F: "~@2 a3 ~@3 a3!2 a#3 d4 f4 a#4 g4@4, a#2 g2", G: "~@2 a4 ~@3 a4 ~@3 a#4 ~@3 a#4 ~, d2 g2",
  H: "~@2 g4 ~@3 g4 ~@3 a4 ~@3 a4 ~, d#2 f2", I: "~@2 f4 ~@3 f4 ~@3 f4 ~@3 f4 ~, a#1",
  J: "a#1@3 [a#1,f4]@3 a#1@2 f4@4 g4@4, f4 ~@5 f4 ~ a#1@8", K: "d4 ~@2 d#4@3 f4@2 g4 ~@2 a4@3 c5@2, c3 g2",
  L: "d#4 ~@2 f4@3 g4@2 a4 ~@2 f4@3 a4@2, c3 g2", M: "d4 ~@2 d#4@3 f4@2 g4 ~@2 a4@3 a#4@2, a#2 g2",
  N: "d#4 ~@2 f4@3 g4@2 a4 ~@3 f4 ~@3, c3 f2", O: "~ g#4 [a4,a#4] ~ f4 ~ a#4 ~ d5 ~ c5 ~ a#4 ~ a4 ~, d#3",
  P: "~ g#4 [a4,a#4] a#4 f4 ~ a#4 ~ d5 ~ c5 ~ a#4 ~ a4 ~, c3", // A#maj7
  Q: "~ g#4 [a4,a#4] a#4 f4 ~ a#4 ~ d5 ~ c5 ~ d5 ~ f5 ~, g3", R: "~ g#4 [a4,a#4] ~ f4 ~ a#4 ~ d5 ~ c5 ~ a#4 ~ a4 ~",
  S: "~@2 g4 ~@3 g4 ~@3 a4 ~@3 a4 ~", T: "~@2 a3 ~@3 a3!2 a#3 d4 f4 a#4 b4 a#4 f4 c4",
  U: "~@2 a3 ~@3 a3!2 a#3 d4 f4 a#4 g4@4", V: "~@2 a4 ~@3 a4 ~@3 a#4 ~@3 a#4 ~", W: "~@2 f4 ~@3 f4 ~@3 f4 ~@3 f4 ~, d2",
  X: "c4", Y: "a#1@3 [a#1,f4]@3 a#1@2 [a#1,f4]@8, f4 ~@5 f4 ~@9",
})).s("gm_trombone").gain(0.45)

// other · baritone sax · "Bari Sax"
const baritone_sax = note(`<
  ~@3 A B C D E F G H I J K L M N O P O Q ~@3 A B C D E F G H I J ~@29 A B C D E F G H I R A B C D E F G H I J
>`.pickRestart({
  A: "~ a#2@2 a#2", B: "a#2 c3", C: "d3 g3", D: "c3 f3", E: "a#2 g2", F: "c3 ~ c3@2 c3 ~ c3!2 f3 ~ f3@2 f3 ~ d#3!2",
  G: "d3 ~ d3@2 f3 ~ d3!2 f2 ~ f2@2 f3 ~ f2 d#2", H: "d#2 ~ d#2@2 d#3 ~ d#2!2 f2 ~ f2@2 f3 ~ f2 d#2",
  I: "a#2 ~ a#2@2 a#2 ~ a#2 f2 a#2 ~ a#2@2 a#2 ~ a#2 f2", J: "a#2 ~ a#2!3 ~ a#2 ~ a#2@8", K: "a2!2", L: "a#2 a2",
  M: "f3!2", N: "g3 f3", O: "c3", P: "g2", Q: "d#3", R: "a#2",
})).s("gm_baritone_sax").gain(0.4)

// other · trumpet · "Trumpet 1"
const trumpet = note("<~@3 A B C D E F G H I J ~@4 K@4 ~@3 A B C D E F G H I J ~@39 A B C D E F G H I J>".pickRestart({
  A: "~@15 a#4", B: "d5@6 c5 a#4 c5@4 d#5@3 c5, c5 ~@15", C: "d#5@3 d5@3 c5@2 d5@7 a#4, d5 ~@15",
  D: "d5@3 c5@3 a#4@2 a4@3 f5@3 c5@2, c5 ~@15", E: "d#5@6 d5 c5 d5@4 g4@4", F: "d5@3 c5@3 a#4@2 c5@6 c5 a#4",
  G: "a4@3 a#4@3 c5@2 d5@4 g4@3 a#4", H: "d5@3 c5@3 a#4@2 a4@3 d4@3 c5@2, c5 ~@15", I: "c5@7 ~",
  J: "c5 ~@2 c5@2 ~ c5 ~ a#4@8", K: "c5@3 ~ d#5@3 ~ g5@3 ~ c5@3 ~",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "Trumpet 2"
const trumpet_2 = note(`<
  ~@3 A B C D E F G H I J ~@4 K@2 L K ~@3 A B C D E F G H I J ~@39 A B C D E F G H I J
>`.pickRestart({
  A: "~@15 a#4", B: "d5@6 c5 a#4 c5@4 d#5@3 c5, c5 ~@15", C: "d#5@3 d5@3 c5@2 d5@7 a#4, d5 ~@15",
  D: "d5@3 c5@3 a#4@2 a4@3 f5@3 c5@2, c5 ~@15", E: "d#5@6 d5 c5 d5@4 g4@4", F: "d5@3 c5@3 a#4@2 c5@6 c5 a#4",
  G: "a4@3 a#4@3 c5@2 d5@4 g4@3 a#4", H: "f4@3 d#4@3 d4@2 c4@3 g3@3 d#4@2, c5 ~@15", I: "d#4@7 ~",
  J: "d#4 ~@2 d#4@2 ~ d#4 ~ d4@8", K: "c4@3 ~ d#4@3 ~ g4@3 ~ c4@3 ~", L: "c4@3 ~ d#4@4 g4@4 c4@4",
})).s("gm_trumpet").gain(0.45)

// other · trombone · "Trombone 1"
const trombone_3 = note(`<
  ~@3 A B C D E F G H I J K ~@6 L ~@3 A B C D E F G H I J ~@6 M N O P Q R S T ~@15 A B C D E F G H I ~ A B C D E F G H I
  J
>`.pickRestart({
  A: "~ d4@2 d#4", B: "f4 d#4", C: "d4 f4", D: "d#4@2 d#4 c4", E: "d4!2", F: "d#4 a4", G: "f4!2", H: "g4 a4", I: "d#4",
  J: "d#4@3 d#4@3 d#4@2 d4@8", K: "c4 a#3", L: "g4", M: "~@15 a#3", N: "d4@6 c4 a#3 c4@4 d#4@3 c4, c4 ~@15",
  O: "d#4@3 d4@3 c4@2 d4@7 a#3, d4 ~@15", P: "d4@3 c4@3 a#3@2 a3@3 f4@3 c4@2, c4 ~@15", Q: "d#4@6 d4 c4 d4@4 g3@4",
  R: "d4@3 c4@3 a#3@2 c4@6 c4 a#3", S: "a3@3 a#3@3 c4@2 d4@4 g3@3 a#3", T: "d4@3 c4@3 a#3@2 a3@3 d3@3 ~@2, c4 ~@15",
})).s("gm_trombone").gain(0.4)

// other · trombone · "Trombone 1" · soft notes
const trombone_soft = note("<~@14 A B A C D C ~@27 E F ~@34>".pickRestart({
  A: "c4!2", B: "c4 a#3", C: "d#4", D: "c4", E: "~@7 c4", F: "c4@7 ~",
})).s("gm_trombone").gain(0.2)

// other · trombone · "Trombone 2"
const trombone_4 = note(`<
  ~@3 A B C D E F C G H I J ~@6 K ~@3 A L C D E F C G H I ~@29 A L C D E F C G H ~ A B C D E F C G H I
>`.pickRestart({
  A: "~ f3@2 f3", B: "d#3 f3", C: "a3 a#3", D: "g3 c4", E: "d4@2 c4 a3", F: "g3 a3", G: "a#3 a3", H: "f3",
  I: "f3@3 f3@3 f3@2 f3@8", J: "a#3 g3", K: "d#4", L: "f3!2",
})).s("gm_trombone").gain(0.4)

// other · trombone · "Trombone 2" · soft notes
const trombone_soft_2 = note("<~@14 [a#3@2 a#3 a3] [a#3 g3] [a#3@2 a#3 a3] c4 g3 c4 ~@63>").s("gm_trombone").gain(0.2)

// chords · piano
const piano = note(`<
  A B@2 C D E F E G H I J K L M N O P Q P Q ~@3 C D E F E G H I J K L M N O P Q P R ~@21 C D E F E G H I J K C D E F E G
  H I J K
>`.pickRestart({
  A: "[d#2,g2,a#2]@15 ~", B: "~ f5 [f#5,g5] g5 c5 ~ f5 ~ a#5 ~ a5 ~ g5 ~ f5 ~, [d#2,g2,a#2]@15 ~",
  C: "~ f5 [f#5,g5] g5 c5 ~ f5 ~ a#5 ~ a5 ~ a#5 ~ a#5 ~, [d#2,g2,a#2] [f3,a3,c4]", // Gmaj7 D# F
  D: "d#2 ~ d#2@2 d#3 ~ d#2!2 f2 ~ f2@2 f3 ~ d2 c2, [d#4,g4,a#4] [f4,a4,c5]", // D# F
  E: "a#1 ~ a#1@2 a#2 ~ d2 f2 g2 ~ g2@2 g3 ~ g2!2, [a#4,d5,f5] [g4,a#4,d5]", // A# Gm
  F: "c2 ~ c2@2 c3 ~ c2!2 f2 ~ f2@2 f3 ~ f2 d#2, [c4,d#4,g4] [f4,a4,c5]", // Cm F
  G: "c2 ~ c2@2 c3 ~ c2!2 f2 ~ f2@2 f3 ~ f2 d#2, [a#3,d4,f4] [g4,a#4,d5]", // A# Gm
  H: "d2 ~ d2@2 d3 ~ a2 f2 g2 ~ g2@2 g3 ~ g2!2, [d4,f4,a4] [g4,a#4,d5]", // Dm Gm
  I: "d#2 ~ d#2@2 d#3 ~ d#2!2 f2 ~ f2@2 f3 ~ f2 d#2, [d#4,g4,a#4] [f4,a4,c5]", // D# F
  J: "a#1 ~ a#1@2 a#2 ~ a#1 f2 a#1 ~ a#1@2 a#2 ~ a#1 f2, [a#3,d4,f4] [a#4,d5,f5]", // A#
  K: "a#1 ~ a#1!3 ~ a#1 ~ a#1@8, [a#3,d4,f4]@15 ~", // A#
  L: "d4 ~@2 d#4@3 f4@2 g4 ~@2 a4@3 c5@2, [a#2,d3,f3] [c3,d#3,g3,a#3]", // A# Cm7
  M: "c5 ~@2 d5@3 d#5@2 f5 ~@2 c5@3 f5@2, [c3,d#3,g3,a#3] [f2,a2,c3]", // Cm7 F
  N: "a#4 ~@2 c5@3 d5@2 a#4 ~@2 c5@3 d5@2, [a#2,d3,f3] [g2,a#2,d3]", // A# Gm
  O: "a#4 ~@2 c5@3 d#5@2 f5 ~@2 g5 a5@2 ~@2, [c3,d#3,g3] [f3,a3,c4], ~@12 g#5 ~@3", // Cm F
  P: "c2 ~ c2@3 g2 c2 g2 c2 ~ c2@3 g2 c3 g2, [c4,d#4,g4]@15 ~", // Cm
  Q: "c2 ~ c2@3 g2 c2 g2 c2 ~ c2@3 g2 c3 g2, [c5,d#5,g5]@15 ~", R: "[c3,d#3,g3,c5,d#5,g5]@15 ~",
})).s("gm_piano").gain(0.45)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A@3 B C D E D E F G H I J K J K L@4 M@3 B C D E D E F G H I J K J K L@4 J K J@4 ~@6 J K J@4 M@3 B C D E D E F G H ~ B
  C D E D E F G H I
>`.pickRestart({
  A: "d#2 ~ d#2@2 d#3 ~ d#2 a#2 d#2 ~ d#2@2 d#3@2 d#2!2", B: "d#2 ~ d#2@2 d#3 ~ d#2 a#2 f2 f3 c3 f2 a2 f3 c3 f2",
  C: "d#2 ~ d#2@2 d#3 ~ d#2!2 f2 ~ f2@2 f3 ~ d2 c2", D: "a#1 ~ a#1@2 a#2 ~ d2 f2 g2 ~ g2@2 g3 ~ g2!2",
  E: "c2 ~ c2@2 c3 ~ c2!2 f2 ~ f2@2 f3 ~ f2 d#2", F: "d2 ~ d2@2 d3 ~ a2 f2 g2 ~ g2@2 g3 ~ g2!2",
  G: "d#2 ~ d#2@2 d#3 ~ d#2!2 f2 ~ f2@2 f3 ~ f2 d#2", H: "a#1 ~ a#1@2 a#2 ~ a#1 f2 a#1 ~ a#1@2 a#2 ~ a#1 f2",
  I: "a#1 ~ a#1!3 ~ a#1 ~ a#1@8", J: "a#1 ~ f2 a2@2 f2 d2 a#1 g1 ~ d2 g2@2 d2 a#1 g1",
  K: "c2 ~ g2 c3@2 g2 d#2 c2 f1 ~ c2 f2@2 c2 a1 f1", L: "c2 ~ c2@3 g2 c2 g2 c2 ~ c2@3 g2 c3 g2",
  M: "d#2 ~ d#2@3 a#2 d#2 a#2 d#2 ~ d#2@3 a#2 d#3 a#2",
})).s("gm_acoustic_bass").gain(0.45)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A@3 B ~@7 C@2 ~ D ~ D E@2 F E@4 B ~@7 C@2 ~ D ~ D E@2 F E ~ D ~@5 D ~@5 D ~@4 A@2 E B ~@7 C@2 B ~@7 C@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@2 x ~", C: "~@12 x ~@2 x", D: "~@3 x", E: "~@2 x ~@3 x ~@4 x ~@2 x ~",
  F: "~@2 x ~@3 x ~@4 x ~@4",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A@7 B@2 A B A B ~@8 A@7 B@2 A B A B ~@4 A B A@5 B A@5 B A@4 ~@4 A@7 B@2 ~ A@7 B@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.35)

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

// drums · ride
const ride = s("rd").struct("<~@14 A ~ A ~@18 A ~ A ~@5 A ~@5 A ~@5 A ~@27>".pickRestart({
  A: "~@3 x",
})).gain(0.45)

stack(
  trombone, trombone_2, baritone_sax, trumpet, trumpet_2, trombone_3, trombone_soft, trombone_4, trombone_soft_2, piano,
  bass, kick, snare, pedal_hat, open_hat, crash, ride
)