Strudelify

forgiven

Skillet

KeyD majorTempo120 bpm
0:00/0:00
// forgiven — Skillet
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4248036; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · piano · "Фортепиано"
const piano = note(`<
  A B C D E F G H E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AC AG AA AH AI AD AE AF E F AJ AK I J K
  L M N O P AL AM AN AO AP AQ AR AS AC Z AA AB AC AD AE AF AC AG AA AT AI AD AE AF AC AU AV AW AC AX AV AY AZ BA BB BC
  BD BE BB BF BG@2 BH BI BJ BK BL BM BN AC AD AE AF AC AG AA BO AI AD BP AF AC AU AV AW AC AX BQ BR BS@4 BT BU BT BU BT
  BU BT BV
>`.pickRestart({
  A: "c5 b4 a4 e4, a3@15 ~", B: "c5 b4 a4 e4, e4@3 ~", C: "c5 b4 c5 d5, f4@15 ~",
  D: "[c3,c4,e5]@2 f5 e5 [e3,e4,d5]@2 [g3,g4,c5]@2, ~ [d3,d4] ~@2", // C E7 C5 D
  E: "[a2,e3,a3,c5,c6] [a2,e3,a3,b4,b5] [a2,e3,a3,a4,a5] [a2,e3,a3,e4,e5]", // Am Asus2 A5
  F: "[e2,b2,e3,c5,c6] [e2,b2,e3,b4,b5] [e2,b2,e3,a4,a5] [e2,b2,e3,e4,e5]", // Cmaj7 E5 Esus4 E5
  G: "[f2,c3,f3,c5,c6] [f2,c3,f3,b4,b5] [f2,c3,f3,c5,c6] [f2,c3,f3,d5,d6]", // F5 F F5 Dm7
  H: "[c3,g3,c4,e5,e6]@2 [f5,f6] [e5,e6] [b2,f#3,b3,d5,d6]@2 [b2,f#3,b3,c5,c6]@2, ~ [c3,g3,c4] ~@2", // C F E Bm B C5
  I: "~@2 c5@2 b4 a4 a4@2, c4@15 ~", J: "b4 c5 c5@2, g3@15 ~", K: "g3 ~ c5@2 b4 a4 g4@2, ~@2 a3@13 ~",
  L: "[e3,a4]@2 f3 e3 [d3,b4]@2 [c3,a4]@2, ~ b4 ~@2", M: "~ c5 b4 a4, c4@15 ~", N: "b4@2 c5 c5@2 g4@2 g4, g3@15 ~",
  O: "g3 ~@2 g4 a4@4, a4@3 ~@5, ~@2 a3@13 ~", P: "e3@2 f3 e3 d3@2 c3@2", Q: "c3@2 [c3,c5]@2 b4 a4 [c3,a4]@2, ~@2 c3 ~",
  R: "[g2,b4] [g2,c5] g2!2, ~ c5", S: "a2@2 [a2,c5]@2 b4 a4 [a2,g4]@2, ~@2 a2 ~", T: "e5 d5!2 c5, e2 d2",
  U: "c3 [c3,e5] [c3,d5] [c3,c5]", V: "[g2,d5]@2 c5 ~ g2@2 d5 c5, ~ g2 ~ g2, ~@3 e5@3 ~@2",
  W: "d5 ~ a2@2 a2@2 a2@2, a2 ~@3, ~ c5@3 ~@4", X: "g2@2 c5 g5, ~ e2", Y: "[c3,g3,e4,g5] [c3,g3,e4,f5]!2 [c3,g3,e4,e5]",
  Z: "[g2,d3,g3]!3 [g2,d3,g3,g5], e5 ~", // G5
  AA: "[a2,e3,a3,g5]@2 f5 ~ [a2,e3,a3]@2 [a2,e3,a3,e5]@2, ~ [a2,e3,a3] ~@2, ~@3 f5@3 ~@2", // A7 A5
  AB: "[f2,c3,f3,d5] [f2,c3,f3,c5] [f2,c3,f3] [f2,c3,f3,c5]", AC: "[c3,g3,c4,g5] [c3,g3,c4,f5]!2 [c3,g3,c4,e5]",
  AD: "[g2,d3,g3,e5]@2 d5 c5 [g2,d3,g3,c5]@2 [g2,d3,g3]@2, ~ [g2,d3,g3] ~@2", // Em7 Gsus4 G5
  AE: "[a2,e3,a3] ~@2 [a2,e3,a3], c5@3 d5@2 e5@3, ~ [a2,e3,a3]!2 ~", AF: "[g2,d3,g3,d5] [g2,d3,g3,c5]!2 [g2,d3,g3]",
  AG: "[g2,d3,g3,e5]@2 f5 e5 [g2,d3,g3,e5]@2 [g2,d3,g3]@2, ~ [g2,d3,g3] ~@2", // Em7 G5
  AH: "[f2,c3,f3,e5]@2 d5 c5 [f2,c3,f3,c5]@2 [f2,c3,f3]@2, ~ [f2,c3,f3] ~@2", // Fmaj7 F5
  AI: "[c3,g3,c4,g5]@2 f5 ~ [c3,g3,c4]@2 [c3,g3,c4,e5]@2, ~ [c3,g3,c4] ~@2, ~@3 f5@3 ~@2", // C5 C C5
  AJ: "[f2,c3,f3,c6] [f2,c3,f3,b5] [f2,c3,f3,c6] [f2,c3,f3,d6]", // F5 F F5 Dm7
  AK: "[c3,g3,c4,e6]@2 f6 e6 [b2,f#3,b3,d6]@2 [b2,f#3,b3,c6]@2, ~ [c3,g3,c4] ~@2", // C Bm B C5
  AL: "a3 ~@2 a3 b4 a4 a3!2, ~ a3@2 ~ a3@2 ~@2, ~ c5 ~ a4", AM: "[e3,b4] [e3,c5] e3!2, ~ c5",
  AN: "~ c5 [f3,c5]@2 b4 a4 [f3,g4]@2, f3 ~ f3 ~", AO: "[c4,e5] [c4,d5] [b3,d5] [b3,c5]",
  AP: "a3 ~@2 a3 [a3,d5]@2 a3!2, ~ a3@2 ~@5, ~ e5 ~ c5", AQ: "e3 ~ c5 [e3,e5]@3 d5 c5, d5 ~@3, ~ e3@2 ~@3 e3@2",
  AR: "[f3,d5] f3@2 f3@3 f3@2, ~ c5@3 ~@4", AS: "g3!2 [g3,c5] [g3,g5]",
  AT: "[f2,c3,f3,e5]@2 d5 c5 [f2,c3,f3,c5]@2 [c3,f3]@2, ~ [f2,c3,f3] ~@2", // Fmaj7 F5
  AU: "[g2,d3,g3,e5] [g2,d3,g3,d5] [g2,d3,g3] [g2,d3,g3,g5]", AV: "[a2,e3,a3,g5] [a2,e3,a3,f5]!2 [a2,e3,a3,e5]",
  AW: "[f2,c3,f3,d5] [f2,c3,f3,c5] [f2,c3,f3]!2", AX: "[g2,d3,g3,e5] [g2,d3,g3,d5] [g2,d3,g3]!2",
  AY: "[g2,d3,g3,f5] [g2,d3,g3,g5] [g2,d3,g3]!2, ~ g5", AZ: "[d2,a2,d3] [d2,a2,d3,d5]!2 [d2,a2,d3,c5]",
  BA: "[f2,c3,f3,f5] [f2,c3,f3,e5] [f2,c3,f3,d5] [f2,c3,f3,e5]", // F5 Fmaj7 Dm7 Fmaj7
  BB: "[c3,g3,c4]@2 d5 e5 [c3,g3,c4,d5]@2 [c3,g3,c4,c5]@2, ~ [c3,g3,c4] ~@2", // C5 Csus2 C5
  BC: "[c3,g3,c4,f5]@2 e5 ~ [c3,g3,c4]@2 [c3,g3,c4,c5]@2, ~ [c3,g3,c4] ~@2, ~@3 d5@3 ~@2", // Csus4 C5
  BD: "[d2,a2,d3]@2 d5 e5 [d2,a2,d3,d5]@2 [d2,a2,d3,c5]@2, ~ [d2,a2,d3] ~@2", // D5 D7 D5
  BE: "[f2,c3,f3,f5]@2 e5 d5 [f2,c3,f3,d5]@2 [f2,c3,f3,e5]@2, ~ [f2,c3,f3] ~@2", // F5 Dm7 Fmaj7 F5
  BF: "[c3,g3,c4,f5] [c3,g3,c4,e5] [c3,g3,c4,d5] [c3,g3,c4,c5]", // Csus4 C Csus2 C5
  BG: "[[g2,d3,g3] [g2,d3,g3,c5] f5 c5 ~ [f2,c3,f3]!2 [f2,c3,f3,g4], ~@3 [f2,c3,f3]@2 ~@3, ~@2 c5 ~]/2", // G5 Gsus4 F5 Fsus2 F5
  BH: "[g2,d3,g3]!2 [g2,d3,g3,d5] [g2,d3,g3,c5], e5 ~", BI: "[b2,b3]!2 [c3,c4]!2 [f3,f4]!2 [e3,e4]!2, f5@4 g5@11 ~",
  BJ: "[b3,b4]!2 [c4,c5] [e4,e5] [f4,f5]@2 c5@2", BK: "[c3,c5]@2 [g3,c5]@2 c5 g4 g4@2, ~@4 c4@2 g2 ~",
  BL: "g2@2 g3@2 ~@3 g4, d5 d4", BM: "[a2,c5]@2 [g3,c5]@2 c5 a4 a4@2, ~@4 c4@2 a2 ~", BN: "[a3,a4] [c4,g4] ~ c5, ~ g4",
  BO: "[f2,c3,f3,g5]@2 f5 e5 [f2,c3,f3,e5]@2 [f2,c3,f3]@2, ~ [f2,c3,f3] ~@2", // Fsus2 Fmaj7 F5
  BP: "[a2,e3,a3]@2 ~ d5!2 ~ [a2,e3,a3]@2, c5@3 ~@2 e5@3, ~ [a2,e3,a3]!2 ~", // A5
  BQ: "[a2,e3,a3] ~@2 [a2,e3,a3], g5@3 f5@2 e5@3, ~ [a2,e3,a3]!2 ~", BR: "[g2,d3,g3,d5] [g2,d3,g3,c5]!2 [g2,d3,g3,e5]",
  BS: "[d5 c5!2 e5 d5 c5!2 e5 d5 c5!2 e5 d5 c5!2 e5, [c3,g3,c4]@61 ~@3]/4", BT: "c4 b3 g3 c4 b3 g3 c4 b3, d5 c5!2 e5",
  BU: "g3 c4 b3 g3 d4 c4 b3 c4, d5 c5!2 e5", BV: "[c3,g3,c4]@3 c4@3 ~@2, [g4,e5]@3 ~",
})).s("gm_piano").gain(0.48)

stack(piano)