Strudelify
0:00/0:00
// apologize — RYAN TEDDER ZACH FILKINS DREW BROWN EDDIE FISHER and BRENT KUTZLE
// 118 bpm, 4/4, key Eb major. 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/4062361; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · violin · "Violín"
const violin = note("<~@4 A B C D E F G F E F H I ~@81>".pickRestart({
  A: "eb4 g3 eb4 g3 eb4 g3 eb4 g3", B: "f4 ab3 f4 ab3 f4 ab3 f4 ab3", C: "g4 g3 g4 g3 g4 g3 g4 g3",
  D: "f4 bb3 f4 bb3 f4 bb3 f4 bb3", E: "eb4", F: "f4", G: "g4", H: "bb4", I: "f4@3 ~",
})).s("gm_violin").gain(0.12).pan(0.6)

// other · violin · "Violín"
const violin_2 = note(`<
  ~@4 A@2 B C D E ~ F G E ~@18 H I J K H I J K H I J K ~@16 L M N O L M N O P ~@6 Q P R S T O R S T O R S T O R S T O
  ~@4
>`.pickRestart({
  A: "c4 ~ c4 ~ c4 ~ c4 ~", B: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", C: "d4 ~ d4 ~ d4 ~ d4 ~", D: "eb4@6 c4@2 eb4@4 ~@2 f4 g4",
  E: "f4@4 f4 g4 f4 g4", F: "~@2 c4 d4", G: "eb4@12 ~@2 f4 g4", H: "eb4 g3 c4 g3 eb4 g3 c4 g3",
  I: "f4 ab3 c4 ab3 f4 ab3 c4 ab3", J: "g4 g3 bb3 g3 g4 g3 bb3 g3", K: "f4 bb3 d4 bb3 f4 bb3 d4 bb3",
  L: "~@3 c6@3 bb5@2, g5, bb5 ~", M: "~@3 c6@3 bb5@2, ab5, bb5 ~", N: "~@3 c6@3 ~@2, g5, bb5 ~", O: "ab5@3 g5@3 f5@2",
  P: "eb5 ~", Q: "~@6 c5 d5", R: "bb5@3 c6@3 bb5@2, g5", S: "bb5@3 c6@3 bb5@2, ab5", T: "bb5@3 c6@3 ~@2, g5",
})).s("gm_violin").gain(0.13).pan(0.4)

// other · cello · "Violonchelo"
const cello = note(`<
  A B C D A B C D A B C D A B C E ~@16 A B C D A B C D A B C D C F G F C F H F C F G F C F G F A B C D A B C D ~@4 C B C
  D I C B C D C B C D C B C D C B C D J@4
>`.pickRestart({
  A: "c3", B: "ab2", C: "eb3", D: "d3", E: "d3@3 ~", F: "f3", G: "g3", H: "bb3", I: "eb3 ~",
  J: "[eb3@20 f3@21 eb3@22 ~]/4",
})).s("gm_cello").gain(0.1).pan(0.4)

// other · electric guitar clean · "Guitarra eléctrica"
const electric_guitar_clean = note(`<
  ~@52 A@4 B@4 C D C E C D C F G H I J K L M N O C D C E C D C E C D C E C D C F ~@4
>`.pickRestart({
  A: "g4 bb4!2 c5 g4 bb4!2 c5", B: "g4 c5 eb5 f5 g4 c5 eb5 f5", C: "g4", D: "ab4", E: "f4@4 ~@2 eb4 f4", F: "f4",
  G: "g4 ab4!4 g4!3", H: "g4 bb4!4 g4!3", I: "g4 ab4 eb4 ab4 g4 ab4 [eb4,ab4] ab4",
  J: "g4 ab4 [eb4,ab4] ab4 g4 ab4 [eb4,ab4] ab4", K: "d5 eb5!4 d5!3", L: "d5 f5!4 d5!3",
  M: "d5 eb5 bb4 eb5 d5 eb5 bb4 eb5", N: "d5 eb5 bb4 eb5 d5 eb5 bb4 d5", O: "eb5 ~",
})).s("gm_electric_guitar_clean").gain(0.3)

// other · electric guitar clean · "Guitarra eléctrica" · soft notes
const electric_guitar_clean_2 = note("<~@44 A B C D A B C D ~@45>".pickRestart({
  A: "c4 bb3 c4 bb3 c4 bb3 c4 bb3", B: "f4 g3 f4 g3 f4 g3 f4 g3", C: "g3 eb4 g3 eb4 g3 eb4 g3 eb4",
  D: "f4 d4 f4 d4 f4 d4 f4 d4",
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · piano
const piano = note(`<
  ~@8 A B C D A B C E A B C D A B C D A B C D A B C F G H I J G H I J K L M N O P Q R O P Q R O P Q R O P Q S G H I J G
  H I J T U V W T U V W ~ G H I J X Y Z AA X Y Z AA X Y Z J AB@4
>`.pickRestart({
  A: "[c4,eb4] g3 [c4,eb4] g3 [c4,eb4] g3 [c4,eb4] g3, c3@15 ~", // Cm
  B: "[c4,f4] g3 [c4,f4] g3 [c4,f4] g3 [c4,f4] g3, ab2@15 ~", // F5
  C: "[bb3,eb4] g3 [bb3,eb4] g3 [bb3,eb4] g3 [bb3,eb4] g3, eb2@15 ~", // Eb5
  D: "[bb3,f4] g3 [bb3,f4] g3 [bb3,f4] g3 [bb3,f4] g3, d2@15 ~", E: "[bb3,f4] g3 [bb3,f4] g3 [bb3,f4]@3 ~, d2@15 ~",
  F: "[bb3,f4] g3 [bb3,f4] g3 [bb3,f4]@3 d4, d2@13 ~@3", G: "[c3,c4] eb3 g3 c4@2 g3 c4 g3",
  H: "[ab2,ab3] c3 eb3 ab3 bb3 eb3 ab3 eb3", I: "[eb3,eb4] g3 bb3 eb4 f4 bb3 eb4 bb3", J: "d3 g3 bb3@2 d4@2 bb3@2",
  K: "c4@15 ~", L: "ab3@15 ~", M: "eb3@15 ~", N: "d3@15 ~",
  O: "[g3,c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] g3, c3@15 ~, ~ g3@2 g3@2 g3@2 ~", // Cm
  P: "[c4,f4] ab3 [c4,f4] ab3 [c4,f4] ab3 [c4,f4] ab3, [ab2,eb3]@15 ~", // F5 Ab5
  Q: "[bb3,eb4] g3 [bb3,eb4] g3 [bb3,eb4] g3 [bb3,eb4] g3, [eb2,bb2]@15 ~", // Eb5
  R: "f4 g3 f4 g3 f4 g3 [bb3,f4] g3, d3@15 ~, bb3!3 ~", // Bb5
  S: "[f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~@3, [d3,bb3]@15 ~", T: "c3 eb3@2 g3@2 c4@3",
  U: "ab2 c3@2 eb3@2 ab3@3", V: "eb3 g3@2 bb3@2 eb4@3", W: "d3 f3@2 bb3@2 d4@2 bb3",
  X: "[c3,c4] eb3 g3 c4@2 g3 c4 g3, g5@15 ~, bb5@2 ~ bb5, ~@3 c6@3 ~@2", // C
  Y: "[ab2,ab3] c3 eb3 ab3 bb3 eb3 ab3 eb3, ab5@15 ~, bb5@2 ~ bb5, ~@3 c6@3 ~@2", // Ab
  Z: "[eb3,eb4] g3 bb3 eb4 f4 bb3 eb4 bb3, g5@15 ~, bb5 ~, ~@3 c6@3 ~@2", // Eb
  AA: "d3 g3 ~@2 d4@2 [bb3,f5]@2, ab5@3 g5@3 ~@2, ~ bb3 ~@2", // Bb5
  AB: "[[c4,eb4]@2 g3@2 ~ c4@2 g3@2 ~ [c4,eb4]@9 ~ f4@2 ab3@2 ~ c4@2 ~ ab3@2 eb4@10 ~@2 [eb3,eb4]@21 ~, c3@19 ~ ab2@20 ~ [eb2,bb2,g3,bb3]@22 ~]/4", // Cm Eb
})).s("gm_piano").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A
  B C B A B C B A@2 B C B A B C ~ A B C B A B C B A B C B A B C B ~@4
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x!2 ~ x ~@9", C: "x ~@2 x ~ x ~ x",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x]!89 ~@4>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@4 [~ x]!89 ~@4>").gain(0.32)

stack(violin, violin_2, cello, electric_guitar_clean, electric_guitar_clean_2, piano, kick, snare, hihat)