Strudelify

Ace Attorney - Objection!

momochanpwnu

KeyB♭ majorTempo120 bpm
0:00/0:00
// Ace Attorney - Objection! — momochanpwnu
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/152432; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 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.

// other · piano
const piano = note(`<
  A B A C D E F G H I G J F K F L M N F K F L O P Q ~@2 R S T U T V W V X Y Z AA Z AB AC AB AD AE AF AG AF AG AH AG AI
  AJ AK AL AK AM AN AM AO AP AQ AR AS@3 AT AU AV AW AX AY AT AU AV AW AX AY AZ BA BB BC BD BE AZ BF BB BG BD BH BI BJ BK
  BL BM BN BO BP@3
>`.pickRestart({
  A: "d4 g4 d5 d4 g4 d5 d4 g4", B: "d5 ~@7", C: "d5 d4 g4 d5 d4 g4 f5@2", D: "d5 d4 g4 d5 d4 g4 d5 d4",
  E: "g4 d5 d4 g4 d5 [a4,a5] [bb4,bb5] [f5,f6]", F: "[d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5]",
  G: "[d5,d6] [d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6] [d4,d5]", // D G D G D
  H: "[g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6]", // G D G D G D
  I: "[d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6] [f5,f6]@2", // D G D G D F
  J: "[g4,g5] [d5,d6] [d4,d5] [g4,g5] [d5,d6] [c5,c6] [d5,d6] [eb5,eb6]", K: "[d5,d6]@2 ~@12 [d5,d6] [bb4,bb5]",
  L: "[d5,d6] c5 d5 f5 bb5@2 [f5,a5,f6]@2", M: "[d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [bb4,bb5] [c5,c6] [bb4,bb5]",
  N: "[d5,d6]@2 [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [bb4,bb5] [c5,c6]", // D C Bb Eb D Bb C
  O: "[d4,d5] [g4,g5] [d5,d6] [d4,d5] [g4,g5] [c5,c6] [d5,d6] [bb4,bb5]", // D G D G C D Bb
  P: "[c5,c6]@4 [f4,f5]@4 [bb4,bb5] g4 a4 bb4 [c5,a5] d5 eb5 f5", Q: "[g5,g6] ~@3",
  R: "~@12 f4 [gb4,g4] [ab4,a4] [bb4,c5]", S: "eb5 c5 g4 d5 bb4 f4 [f4,bb4,d5]@2, d5 ~@15", T: "~ eb5 c5 d5 bb4 f4 ~@2",
  U: "eb5 c5 g4 d5 bb4 f4 [f4,bb4,d5]@2", V: "g5 eb5 c5 f5 d5 bb4 [bb4,d5,f5]@2", W: "~ g5 eb5 f5 d5 bb4 ~@2",
  X: "~@2 f5@2 c5@2 eb5@4 ~@2 f4 [gb4,g4] [ab4,a4] [bb4,c5]", // Gmaj7 Amaj7 Bbsus2
  Y: "[eb5,eb6] [c5,c6] [g4,g5] [d5,d6] [bb4,bb5] [f4,f5] [d5,bb5,d6]@2, d5 ~@15", // Eb C G D Bb F Gm
  Z: "~ [eb5,eb6] [c5,c6] [d5,d6] [bb4,bb5] [f4,f5] ~@2", // Eb C D Bb F
  AA: "[eb5,eb6] [c5,c6] [g4,g5] [d5,d6] [bb4,bb5] [f4,f5] [d5,bb5,d6]@2", // Eb C G D Bb F Gm
  AB: "[g5,g6] [eb5,eb6] [c5,c6] [f5,f6] [d5,d6] [bb4,bb5] [f5,d6,f6]@2", // G Eb C F D Bb Dm
  AC: "~ [g5,g6] [eb5,eb6] [f5,f6] [d5,d6] [bb4,bb5] ~@2", AD: "~ [f5,f6] [c5,c6] [eb5,eb6] [eb5,eb6]@2 [c5,c6]@2",
  AE: "[f5,ab5,f6] [ab4,c5,eb5]!7", // Fm Ab
  AF: "[f4,bb4,d5] [f4,bb4,d5,c6] [f4,bb4,d5,d6] [f4,bb4,d5,f6] [f4,bb4,d5] [f4,bb4,d5,f6] [f4,bb4,d5,d6] [f4,bb4,d5]", // Bb
  AG: "[ab4,c5,eb5]!8", // Ab
  AH: "[f4,bb4,d5] [f4,bb4,d5,d6] [f4,bb4,d5,f6] [f4,bb4,d5,bb6] [f4,bb4,d5] [f4,bb4,d5,bb6] [f4,bb4,d5,f6] [f4,bb4,d5]", // Bb
  AI: "[f4,bb4,d5]@2 [f4,bb4,d5,d6]@2 [f4,bb4,d5,f6]@2 [f4,bb4,d5,bb6]@2 ~ f4 g4 ab4 bb4 c5 d5 eb5", // Bb
  AJ: "[f4,f5] [c5,c6] [eb5,eb6] ~@2 [eb5,eb6] [c5,c6] [d5,d6]", // F C Eb C D
  AK: "[bb4,bb5] [f4,f5] [d5,d6] [bb4,bb5] [f4,f5] [d5,d6] [bb4,bb5,f6] [f4,f5]", // Bb F D Bb F D Bb5 F
  AL: "[ab4,ab5] [c5,c6] [eb5,eb6] ~@2 [eb5,eb6] [c5,c6] [d5,d6]", // Ab C Eb C D
  AM: "[c5,c6] [eb5,eb6] [g5,g6] ~@2 [g5,g6] [eb5,eb6] [f5,f6]", // C Eb G Eb F
  AN: "[d5,d6] [bb4,bb5] [f5,f6] [d5,d6] [bb4,bb5] [f5,f6] [d5,d6,f6] [bb4,bb5]", // D Bb F D Bb F Dm Bb
  AO: "[d5,d6] [bb4,bb5] [f5,f6] [d5,d6] [bb4,bb5] [f5,f6] [d5,d6] [bb4,bb5]", // D Bb F D Bb F D Bb
  AP: "[f4,ab4,c5,f5]@3 [ab4,c5,eb5,ab5]@4 ~", AQ: "[ab4,c5,eb5,ab5]@3 [bb4,d5,f5,bb5]@4 ~",
  AR: "[bb4,db5,f5,bb5]@3 [a4,c5,e5,a5]@4 ~", AS: "[[ab4,c5,eb5,ab5]@3 [b4,d5,gb5,b5]@19 ~ a4]/3",
  AT: "d5 a4 d5 a5 ~@3 [d4,f4]", AU: "[c4,e4]@2 ~ [c4,e4]@2 ~ a4@2 d5@2 a4@2 d5@2 a5@2",
  AV: "d5@2 [d4,f4,a4]@2 ~ [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,f4]@3 [f4,a4]@2", // Dm F
  AW: "[e4,g4]@2 ~ [c4,e4]@2 ~ e5@2 a5@2 e5@2 a4@2 e5@2", AX: "d5 a4 d5 a5 ~@4", AY: "~@3 e5 a5 e5 a4 c5",
  AZ: "[d5,d6]@2 [a4,a5]@2 [d5,d6]@2 [a5,a6]@2 ~@3 [c4,e4]@3 [d4,f4]@2", // D A D A C Dm
  BA: "[c4,e4]@2 ~ [c4,e4]@2 ~ [a4,a5]@2 [d5,d6]@2 [a4,a5]@2 [d5,d6]@2 [a5,a6]@2", // C A D A D A
  BB: "[d5,d6]@2 [d4,f4,a4]@2 ~ [d4,f4]@2 ~ [d4,f4]@2 ~ [d4,f4]@3 [f4,a4]@2", // D Dm F
  BC: "[e4,g4]@2 ~ [c4,e4]@2 ~ [e5,e6]@2 [a5,a6]@2 [e5,e6]@2 [a4,a5]@2 [e5,e6]@2", // Em C E A E A E
  BD: "[d5,d6] [a4,a5] [d5,d6] [a5,a6] ~@4", BE: "~@3 [e5,e6] [a5,a6] [e5,e6] [a4,a5] [c5,c6]",
  BF: "[e4,g4,e5]@2 ~ [e4,g4,e5]@2 ~ [e4,g4,e5]@2 [d5,d6]@2 [a4,a5]@2 [d5,d6]@2 [a5,a6]@2", // Em D A D A
  BG: "[e4,g4,e5]@2 ~ [e4,g4,e5]@2 ~ [e4,g4,e5]@2 [a5,a6]@2 [e5,e6]@2 [a4,a5]@2 [e5,e6]@2", // Em A E A E
  BH: "[e4,g4,e5]@2 ~ [e4,g4,e5]@2 ~ [e4,g4,e5]@2 a5@2 e5@2 [c5,e5,g5,c6]@4", // Em C
  BI: "[d5,f5,a5,d6]@2 ~@2 f4@3 e4 ~@2 g4@2 c4@4", BJ: "~@2 d4@2 f4@3 e4 ~@2 g4@2 ~@4",
  BK: "~ [d4,f4,a4]@3 [d4,e4,g4]@3 [e4,g4,c5]@3 [e4,a4]@3 ~@3", // Dm Em7 C A5
  BL: "[d4,bb4,d5]@3 [d4,bb4,d5] ~@5 [e4,f4,a4]@3 [e4,g4]@4", BM: "~@4 [f4,f5]@3 [e4,e5] ~@2 [g4,g5]@2 [c4,c5]@4",
  BN: "~@2 [d4,d5]@2 [f4,f5]@3 [e4,e5] ~@2 [g4,g5]@2 ~@4", BO: "~ [a4,f5,a5]@3 [g4,e5,g5]@3 [c5,g5,c6]@3 [a4,a5]@3 ~@3",
  BP: "[[d5,bb5,d6]@3 [d5,bb5,d6] ~@5 [f5,d6,f6]@3 [f5,d6,f6]@24 ~@2 [a4,a5]@2 [c5,c6]@2 [d5,d6]@2 ~@4]/3", // Gm Dm A C D
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  A B C D E F G H I J K L M N O P Q R M N O P Q R S@3 T U@4 V@3 W U@4 V@3 W X Y Z Y AA AB AA AC AD AE AD AE AD AE AD AF
  AG AH AI AJ@3 AK AL AM AN AO AP AQ AR AS AT AU AP AV AW AX AY AU AP AV AZ AX AY AU BA BB BC BD BE BB BC BD BF@3
>`.pickRestart({
  A: "g3@3 g3@2 ~ g3@3 g3@2 ~ g3@2 g3@2", B: "f3@3 f3@2 ~ f3@3 f3@2 ~ f3@2 f3@2",
  C: "c3@3 c3@2 ~ c3@3 c3@2 ~ c3@2 c3@2", D: "d3@3 d3@2 ~ d3@3 d3!2 ~ d3@2 d3@2",
  E: "eb3@3 eb3@2 ~ eb3@3 eb3@2 ~ eb3@2 eb3@2", F: "f3@3 f3@2 ~ f3@3 ~@3 f3@2 gb3@2",
  G: "[g3,bb3]@3 [g3,bb3]@2 ~ [g3,bb3]@3 [g3,bb3]@2 ~ [g3,bb3]@2 [g3,bb3]@2", // Gm
  H: "[f3,bb3]@3 [f3,bb3]@2 ~ [f3,bb3]@3 [f3,bb3]@2 ~ [f3,bb3]@2 [f3,bb3]@2", // Bb5
  I: "[c3,bb3]@3 [c3,bb3]@2 ~ [c3,bb3]@3 [c3,bb3]@2 ~ [c3,bb3]@2 [c3,bb3]@2", // C7
  J: "[d3,c4]@3 [d3,c4]@2 ~ [d3,c4]@3 [d3,f3]@2 ~ [d3,f3]@2 [d3,f3]@2", // D7 Dm
  K: "[eb3,bb3]@3 [eb3,bb3]@2 ~ [eb3,bb3]@3 [eb3,bb3]@2 ~ [eb3,bb3]@2 [eb3,bb3]@2", // Eb5
  L: "[f3,bb3]@3 [f3,bb3]@2 ~ [f3,bb3]@3 [f3,a3]@2 ~ [f3,a3]@2 [f3,a3]@2", // Bb5 F
  M: "[g3,bb3,d4]@3 [g3,bb3,d4]@2 ~ [g3,bb3,d4]@4 ~@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2", // Gm
  N: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~ [f3,a3,c4]@4 ~@2 [f3,a3,c4]@2 [f3,a3,c4]@2", // F
  O: "[c3,g3,bb3]@3 [c3,g3,bb3]@2 ~ [c3,g3,bb3]@4 ~@2 [c3,g3,bb3]@2 [c3,g3,bb3]@2", // C7
  P: "[d3,f3,a3]@3 [d3,f3,a3]@2 ~ [d3,f3,a3]@4 ~@2 [d3,f3,a3]@2 [d3,f3,a3]@2", // Dm
  Q: "[eb3,g3,bb3]@3 [eb3,g3,bb3]@2 ~ [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@2 [eb3,g3,bb3]@2", // Eb
  R: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~ [f3,a3,c4]@3 [f3,a3,c4]@2 ~ [f3,a3,c4]@2 [f3,a3,c4]@2", // F
  S: "[g2,g3]@3 [d3,d4]@2 ~ [g2,g3]@3 [g2,g3]@2 ~ [d3,d4] [g2,g3] ~@2", T: "~ [d2,d3]!7",
  U: "[f2,f3]@2 c4 eb4 c4 ~ [f2,f3]@2 bb3 d4 bb3 ~ [f2,f3]@2 [c2,c3]@2", // F C
  V: "[f2,f3]@2 eb4 g4 eb4 ~ [f2,f3]@2 d4 f4 d4 ~ [f2,f3]@2 [c2,c3]@2", // F C
  W: "[c3,eb3,ab3]@3 [c3,eb3,ab3]@2 ~ [d3,f3,bb3]@3 [d3,f3,bb3]@2 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2", // Ab Bb
  X: "[f3,f4] c4 eb4 ~@2 eb4 c4 d4", Y: "bb3 ~@7", Z: "ab3 c4 eb4 ~@2 eb4 c4 d4",
  AA: "[ab3,c4] [c4,eb4] [eb4,g4] ~@2 [eb4,g4] [c4,eb4] [d4,f4]", AB: "[bb3,d4] ~@7", AC: "[bb3,d4] ~@3 [f2,bb2,d3]@4",
  AD: "[c3,eb3,ab3]!2 ~ [c3,eb3,ab3]!3 ~ [c3,eb3,ab3]", AE: "[bb2,d3,bb3]!2 ~ [bb2,d3,bb3]!3 ~@2",
  AF: "[bb2,d3,bb3]!2 ~ [bb2,d3,bb3]!3 ~ [bb2,d3,bb3]", AG: "[f2,f3]@3 [ab2,ab3]@4 ~", AH: "[ab2,ab3]@3 [g2,g3]@4 ~",
  AI: "[g2,g3]@3 [a2,a3]@4 ~", AJ: "[[ab2,ab3]@3 [b2,b3]@19 ~@2]/3",
  AK: "~@2 [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ [d3,c4,e4]@3 d3@2", AL: "c3@2 ~ c3@2 ~ [c3,c4]@2 ~@8",
  AM: "~@2 bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@3 bb2@2", AN: "a2@2 ~ a2@2 ~ [c4,e4]@2 ~@8",
  AO: "~@2 [g3,d4,f4]@2 ~ [g3,d4,f4]@2 ~ [g3,d4,f4]@2 ~ [g3,d4,f4]@3 [g3,f4,a4]@2", // G7 Dm
  AP: "[a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~@2 [a2,a3]@2 [c3,c4]@2 [d3,d4]@2", // A7 A C D
  AQ: "[a2,a3]@2 [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ [d3,c4,e4]@3 d3@2", // A C
  AR: "c3@2 ~ c3@2 ~ [c3,c4]@2 ~@4 [c3,c4]@4", AS: "[d3,d4]@2 bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@3 bb2@2",
  AT: "[a2,e3]@2 ~ a2@2 ~ [c4,e4]@2 [f3,f4]@4 [g3,g4]@4", // A5 C F G
  AU: "[a3,a4]@2 [g3,d4,f4]@2 ~ [g3,d4,f4]@2 ~ [g3,d4,f4]@2 ~ [g3,d4,f4]@3 [g3,f4,a4]@2", // A G7 Dm
  AV: "[a2,a3]@2 [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ [d3,c4,e4]@2 ~ a2@3 d3@2", AW: "c3@2 ~ g2@2 ~ [c3,c4]@2 ~@4 [c3,c4]@4",
  AX: "[d3,d4]@2 bb2@2 ~ bb2@2 ~ bb2@2 ~ f3@3 bb2@2", AY: "[a2,e3]@2 ~ e3@2 ~ [c4,e4]@2 [f3,f4]@4 [g3,g4]@4",
  AZ: "[c3,c4]@2 ~ [g2,g3]@2 ~ [c3,c4]@2 ~@4 [c3,c4]@4", BA: "[a2,a3]@2 ~ [a2,a3]@2 ~ [a2,a3]@2 ~@4 c4@2 c3@2",
  BB: "[d3,d4] ~@2 d3 ~@3 [a1,a2]", BC: "d3 ~@2 d3 ~@4", BD: "bb2 bb3@2 bb3@2 c3@2 ~", BE: "g2 g3 ~@2 a2 a3 ~@2",
  BF: "[[bb3,f4,bb4]@3 [bb3,f4,bb4] ~@5 [bb3,f4,bb4]@3 [bb3,f4,bb4]@24 ~@2 [a2,a3]@2 [c3,c4]@2 [d3,d4]@2 ~@4]/3", // Bb5 A C D
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)