Strudelify

Poinciana

Michael Dahn

KeyD majorTempo96 bpm
0:00/0:00
// Poinciana — Michael Dahn
// 96 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Flute" named as a pipe, played on flute (its slap bass 1 patch is not one); ch 2 "B♭ Trumpet" named as a brass, played on trumpet (its slap bass 2 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5907538; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · alto sax
const alto_sax = note("<~@16 A@4 B@2 C@2 ~@17 A@4 B@2 C@2 ~@15 D E F G H I J ~@66>".pickRestart({
  A: "[a4@6 g4 b4]/2", B: "[a4@6 g4 e4]/2", C: "d4/2", D: "~@7 a3", E: "a#3@2 c4 a#3@2 e4 f4 e4",
  F: "g4@2 f4 e4@2 d4 c4 a#3", G: "~ a3@4 b3@3", H: "b3@2 ~ b3 a3@2 g#3@2 a3@8", I: "a#3@3 c4@2 d4@2 e4",
  J: "f4 e4 g4@4 ~@2",
})).s("gm_alto_sax").gain(0.21)

// other · alto sax · soft notes
const alto_sax_soft = note("<~@89 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@32>".pickRestart({
  A: "a4", B: "f4", C: "d#4", D: "e4",
})).s("gm_alto_sax").gain(0.14)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@16 A@4 B@2 C@2 ~@17 A@4 B@2 C@2 ~@88>".pickRestart({
  A: "[a4@6 g4 b4]/2", B: "[a4@6 g4 e4]/2", C: "d4/2",
})).s("gm_trumpet").gain(0.47)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@89 A@2 B@2 C@2 B D A@2 B@2 C@2 B D ~@32>".pickRestart({
  A: "f#4", B: "d4", C: "c4", D: "e4",
})).s("gm_trumpet").gain(0.31)

// other · trombone
const trombone = note("<~@16 A@4 B@2 C@2 ~@17 A@4 B@2 C@2 ~@88>".pickRestart({
  A: "[e3@6 d3 g3]/2", B: "[e3@6 g3 e3]/2", C: "d3/2",
})).s("gm_trombone").gain(0.13)

// other · trombone · soft notes
const trombone_soft = note("<~@89 A@2 B@3 C D E A@2 B@3 C D E ~@32>".pickRestart({
  A: "d3", B: "a#2", C: "a2", D: "b2", E: "c#3",
})).s("gm_trombone").gain(0.09)

// other · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@64 A B C D E F G ~@66>".pickRestart({
  A: "~@7 a3", B: "a#3@2 c4 a#3@2 e4 f4 e4", C: "g4@2 f4 e4@2 d4 c4 a#3", D: "~ a3@4 b3@3",
  E: "b3@2 ~ b3 a3@2 g#3@2 a3@8", F: "a#3@3 c4@2 d4@2 e4", G: "f4 e4 g4@4 ~@2",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · piano
const piano = note(`<
  A B A B A B A B C@4 D@2 E@2 F@2 G@2 D@2 E@2 H I J K@2 L M N@2 I O P@2 L Q R@2 C@4 D@2 E@2 S@2 T@2 U@2 S@2 T@2 V@2 W@2
  X@2 Y Z AA AB AC AD AE@2 AF AG AH AI AJ AK AL H C@4 D@2 E@2 AM AN AO AP AQ AR AS AT AM AN AO AP AQ AR AS AT F@2 G@2
  D@2 E@2 H AF AG AH AI AJ AK AL AU AV AW AX AQ AY AS AT C@4 D@2 E@2
>`.pickRestart({
  A: "a2@2 g2@2 e2@2 a2@2 c#2@2 a2@2 [a4,c#5] [b4,d5] ~ [f#4,a4], ~ [a4,c#5]@2 ~ [a4,b4,c#5]@2 e2@2", // A Bm F#m A
  B: "a2@2 [g2,f#4,a4]@2 e2@2 [a1,f#4,a4]@2 a2@2 [a3,f#4,a4]@2 [f#4,a4] [g4,a#4] ~ [a4,c#5], ~@6 e2 e1", // D F#m Gm A
  C: "[[a1,a4,b4,c#5,e5]@23 ~ [g1,g4,a4,b4,d5]@4 [b1,b4,d5,f#5,a5]@4]/2", // A G Bm7
  D: "[[a1,a4,b4,c#5,e5]@23 ~ [a1,g4,a4,b4,d5]@4 [e2,e4,g4,b4]@4]/2", E: "[[d2,d4,e4,f#4,a4]@15 ~]/2",
  F: "[a1@2 ~ [f#2,a2,b2,c#3,e3] [a2,b2,c#3,f#3] [g2,d3,f#3,a3] [b2,d3,f#3,c#4] [a2,d3,f#3] a1@4 [g1,g4,a4,b4,d5]@2 [b1,b4,d5,f#5,a5]@2, [a4,b4,c#5,e5]@23 ~@9]/2", // F#m7 F#m D Bm D G Bm7 A
  G: "[[a4,b4,c#5,e5]@2 ~ [a4,b4,c#5,e5] [b4,c#5,f#5] [d5,f#5,a5] [b4,f#5,c#6] [a4,d5] [a4,b4,c#5,e5]@4 [g1,g4,a4,b4,d5]@2 [b1,b4,d5,f#5,a5]@2, a1@23 ~@9]/2", // A Bsus2 D Bsus2 D5 A G Bm7
  H: "~ [a2,e3,c#4,f#4,a4] [e3,a3,e4,g4,a4,a5] [d3,f#3,d4,a4,f#5]", I: "[a1,a2,c#4,a4,e5]@15 ~",
  J: "~ [d4,g4,c5] [f#4,a4,d5] [g4,b4,e5] [e4,a4,a5] [d4,f#4,c#5] [b3,e4,b4] [a3,d4,a4], b1@15 ~", // Csus2 D Em A5 Dmaj7 E5 D5
  K: "[[c4,e4,g4,b4]@23 ~ [d2,a3,c4,d4,f4]@8, c2@15 ~@17]/2", L: "[g1,g3,a#3,d4,f4]@15 ~",
  M: "~@2 [g#2,a2,f3,f#3,a3,c4] ~ [a#2,g3,a#3,f4]@2 [d3,a#3,d4,g4]@2 [e3,c#4,e4,a4]@2 [d3,a#3,d4,g4]@2 [a3,e4,a4,c#5]@2 [a#3,e4,a#4,d5]@2", // F Gm7 Gm A Gm A Em7b5
  N: "[[a2,a3,e4,a4,c#5]@19 ~ [a2,e3,c#4,f#4,a4]@4 [e3,a3,e4,g4,a4,a5]@4 [d3,f#3,d4,a4,f#5]@4]/2", // A F#m7 A7 D
  O: "~ [g4,c5,d5] [a4,d5,f#5] [b4,e5,g5] [a4,e5,a5] [b4,d5,g5] [c#5,e5,b5] [e5,g5,c6], b2@15 ~", // Gsus4 D Em A5 G C#m7 C
  P: "[[c5,e5,g5,b5]@23 ~ [d2,a3,c4,d4,f4]@8, c2@15 ~@17]/2", // Cmaj7 Dm7
  Q: "~ [a3,f#4,a4,c5] [a#3,g4,a#4,f5] [d4,a#4,d5,g5] [e4,c#5,e5,a5] [d4,a#4,d5,g5] [a4,e5,a5,c#6] [a#4,e5,a#5,d6]", // F#dim Gm7 Gm A Gm A Em7b5
  R: "[[e5,a5,c#6]@19 ~ [a2,e3,c#4,f#4,a4]@4 [e3,a3,e4,g4,a4,a5]@4 [d3,f#3,d4,a4,f#5]@4, [a3,a4]@15 ~@17]/2", // A F#m7 A7 D A
  S: "d4 a4 [f#2,a2,d3,g5]@2 f#5@2 d5 a4 d4 a4 g5 ~ [f#2,a2,d3] d5@2 a4, d2@15 ~, ~@4 [a2,d3,e3,f#3]@7 f#5@2 ~@3", // D
  T: "d4 a4 [f2,a2,d3,g5]@2 f5@2 d5 a4 d4 a4 g5 ~ [f2,a2,d3] d5@2 a4, d2@15 ~, ~@4 [a2,d3,e3,f3]@7 f5@2 ~@3", // Dm
  U: "[g4 d5 [a#2,c3,d3,g3,c6]@2 a#5@2 g5 d5 g4 d5 c6 ~ [a#2,c3,d3,g3]@6 [a2,f#3,a3,c4]@2 [a#2,g3,a#3,f4]@2 [d3,a#3,d4,g4]@2 [e3,c#4,e4,a4]@2 [d3,a#3,d4,g4]@2 [a3,e4,a4,c#5]@2 [a#3,e4,a#4,d5] ~, g2@15 ~@17, ~@4 [c3,d3,g3,a#3]@7 a#5@7 ~@14]/2", // Gm F#dim Gm7 Gm A Gm A Em7b5 …
  V: "[g4 d5 [a#2,c3,d3,g3,c6]@2 a#5@2 g5 d5 g4 d5 c6 ~ [a#2,c3,d3,g3]@6 [a2,f#3,a3,c4]@2 [a#2,g3,a#3,f4]@2 [d3,a#3,d4,g4]@2 [e3,c#4,e4,a4]@2 [d3,a#3,d4,g4]@2 [a3,e4,a4,c#5]@2 [a#3,e4,a#4,d5]@2, g2@15 ~@17, ~@4 [c3,d3,g3,a#3]@7 a#5@7 ~@14]/2", // Gm F#dim Gm7 Gm A Gm A Em7b5 …
  W: "[d3 a3 g4@2 f#4@2 d4 a3 d3 a3 g4 f#4@2 d4@2 ~@5 [a2,e3,c#4,f#4,a4]@4 [e3,a3,e4,g4,a4,a5]@4 [d3,f#3,d4,a4,f#5]@4, [e4,a4,c#5]@19 ~@13]/2", // F#m7 A7 D A
  X: "[[d2,d4,e4,f#4,a4]@23 ~@7 [a2,f#4,a4,c5,d#5]@2]/2", Y: "a#3@2 c4 a#3@2 e4 f4 e4, [g4,a#4,d5]@15 ~, f4@3 ~",
  Z: "~@2 f4 e4@2 d4 c4 a#3, [g4,a#4,e5]@15 ~", AA: "~ [a3,c#4,g#4,c#5,e5]@4 [b3,d4,a4,d5,f#5]@3",
  AB: "[b3,e4,g#4]@2 [a3,d4,f#4] [g#3,c#4,e4] [a3,c#4,e4]@2 [f#3,c4,d4]@2", // E D C#m A D7
  AC: "~@3 [c4,e4]@2 [d4,f4]@2 [e4,g4], [g2,g3,a#3]@15 ~, d4@5 ~@3", AD: "[f4,a4] [e4,g4] [g4,c5]@2 ~@4, [g2,f3]@15 ~",
  AE: "[d2 a2 g3@2 f#3@2 d3 a2 d2 a2 g3 f#3@2 d3@2 ~@5 [a2,e3,c#4,f#4,a4]@4 [e3,a3,e4,g4,a4,a5]@4 [d3,f#3,d4,a4,f#5]@4, [e4,a4,c#5]@19 ~@13]/2", // F#m7 A7 D A
  AF: "[d2,d4,e4,f#4,a4]@15 ~", AG: "~@3 [c#4,f#4,c#5] [f#4,c#5,f#5] [f#4,b4,f#5] [c#4,f#4,c#5] [c#4,e4,a4,c#5]",
  AH: "[c4,c5]@15 ~", AI: "~@3 [c4,c5] [f4,c5,f5] [f4,d5,f5] [c4,a4,c5] [b3,g4,b4]", AJ: "[a#3,a#4]@15 ~",
  AK: "~ [f#2,a2,c3,f#3,a3,c4] [g2,a#2,f3,g3,a#3,f4] [a#2,d3,g3,a#3,d4,g4] [c#3,e3,a3,c#4,e4,a4] [a#2,d3,g3,a#3,d4,g4] [e3,a3,c#4,e4,a4,c#5] [e3,a#3,d4,e4,a#4,d5]", // F#dim Gm7 Gm A Gm A Em7b5
  AL: "[a1,a2,e4,a4,c#5]@15 ~", AM: "[d3,a3]@4 [c#3,f#3]@3 [b2,d3] ~@2 [a2,c#3]@6, [d4,f#4,a4,c#5]@15 ~",
  AN: "[f#2,a2]@4 [e2,g2]@3 [d2,f#2] ~@2 [c#2,f#2]@6, [d4,f#4,a4,c#5]@15 ~", // F#m Em D F#5 Dmaj7
  AO: "[a2,d3]@4 [g2,c3]@3 [g2,a#2] ~@2 [f2,a2]@6, [a#3,d4,f4,a4]@15 ~", // D5 C5 Gm F A#maj7
  AP: "[a#2,f3]@4 [c#3,e3]@3 [a2,d3] ~@2 [g2,c3]@6, [a#3,d4,f4,a4]@15 ~", // A#5 C#m D5 C5 A#maj7
  AQ: "[g2,a#2]@4 [a2,c3]@3 [a#2,d3] ~@2 [c3,f3]@6, [a#3,c4,d#4,g4]@15 ~", // Gm Am A# F5 Cm7
  AR: "c3@4 a#2@3 a2 ~@2 a1@4 g2@2, [a3,c4,d#4,g4]@15 ~", AS: "f#2@4 e2@3 e2 ~@2 d2@6, [b3,d4,e4,f#4]@15 ~",
  AT: "c#2@4 e2@3 g2 ~@2 a1@6, [c#4,e4,a4]@15 ~", // A
  AU: "[d3,a3]@4 [c#3,f#3]@2 [c3,e3] [b2,d3] ~@2 [a2,d3]@6, [d4,f#4,a4,c#5]@15 ~", // D5 F#5 C Bm D5 Dmaj7
  AV: "[f#2,a2]@4 [e2,g2]@2 [d#2,g2] [d2,f#2] ~@2 [c#2,f#2]@6, [d4,f#4,a4,c#5]@15 ~", // F#m Em D# D F#5 Dmaj7
  AW: "[a2,d3]@4 [g2,c3]@2 [f#2,b2] [g2,a#2] ~@2 [f2,a2]@6, [a#3,d4,f4,a4]@15 ~", // D5 C5 B5 Gm F A#maj7
  AX: "[a#2,f3]@4 [c#3,e3]@2 [b2,d#3] [a2,d3] ~@2 [f2,c3]@6, [a#3,d4,f4,a4]@15 ~", // A#5 C#m B D5 F5 A#maj7
  AY: "c3@4 a#2@2 g#2 a2 ~@2 a1@4 g2@2, [a3,c4,d#4,g4]@15 ~", // Am7b5
})).s("gm_piano").gain(0.27)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A@14 B@2 A@6 C@2 ~ D@2 E@2 F G H I D@2 E@2 F G H I A@6 C@2 J@2 K@2 L@2 J@2 K@2 M@2 N ~ D@2 O@2 P Q O@2 R@2 D@2 E@2 S G
  T@2 A@6 B@2 U V W X Y Z AA AB U V W X Y Z AA AB A@6 C@2 ~ D@2 E@2 S G T U V W X Y Z AA AB A@8
>`.pickRestart({
  A: "a1@6 c#2@3 c#2@3 e2@2 a2@2", B: "a2@2 f#2@2 g2 b2@2 d3@2 d3 c#3!2 d3@2 c#3@2",
  C: "a1@2 f#1@2 g1 b1@2 d2@2 d2 c#2!2 d2@2 c#2@2", D: "d2@7 f#2@3 b2@2 a2@2 a1@2", E: "d2@7 f2@3 b2@2 a2@2 a1@2",
  F: "g2@7 a#2@3 e3@2 d3@2 a#2@2", G: "e2@7 a#2@2 e2@2 e2 a2@2 a1@2", H: "d2@7 f#2@3 b2@2 a2@2 g#2@2",
  I: "a2@7 a1@4 a1 a1@2 a1@2", J: "d2 a2 g2@2 f#2@2 d3 a2 d2 a2 g2 f#2@2 d3@2 a2",
  K: "d2 a2 g2@2 f2@2 d3 a2 d2 a2 g2 f2@2 d3@2 a2", L: "[g2 d3 c3@2 a#2@2 g2 d3 g2 d3 c3 a#2@7 ~@14]/2",
  M: "[g2 d3 c3@2 a#2@2 g2 d3 g2 d3 c3 ~@5 a1@2 f#1@2 g1 b1@2 d2@2 d2 c#2!2 d2@2 c#2@2, ~@11 a#2@7 ~@14]/2",
  N: "d2 a2 g2@2 f#2@2 d3 a2 d2 a2 g2 f#2@2 d3@2 ~", O: "g2@5 g2 a#2 d3 e3@2 d3!2 e3@2 d3@2", P: "~ a1@4 b1@3",
  Q: "c#2@2 b1 e2 a1@2 a2@2", R: "a2@2 e2@2 g2 b2@2 d3@2 d3 c#3!2 d3@2 c#3@2", S: "g2@7 a#2@3 e3@2 d3@2 c#2@2",
  T: "d2@7 f#2@3 b2@2 a2@4", U: "d2@4 c#2@3 b1 ~@2 a1@6", V: "f#2@4 e2@3 d2 ~@2 c#2@6", W: "d2@4 c2@3 a#1 ~@2 a1@6",
  X: "f2@4 e2@3 d2 ~@2 c2@6", Y: "g1@4 a1@3 a#1 ~@2 c2@6", Z: "c2@4 a#1@3 a1 ~@2 a1@4 g1@2",
  AA: "f#1@4 e1@3 e1 ~@2 d2@6", AB: "c#2@4 e1@3 g1 ~@2 a1@6",
})).s("gm_acoustic_bass").gain(0.47)

// drums · kick
const kick = s("bd").struct("<~@24 [x ~ x ~ x ~ x!2] ~@112>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@33 [~ x ~ x ~ x ~ x]!7 ~@97>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<[~@7 x]!24 ~ [~@7 x]!15 ~ [~@7 x]!96>").gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@8 [~ x ~ x ~ x ~ x]!32 ~ [~ x ~ x ~ x ~ x]!48 ~@32 [~ x ~ x ~ x ~ x]!16>")
  .gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3]!24
  ~
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3]!15
  ~
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3]!96
>`).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@25 [x!4]!8 [x!8]!7 ~ [x!4]!22 ~@58 [x!4]!8 ~@8>").gain(0.3)

stack(
  alto_sax, alto_sax_soft, trumpet, trumpet_soft, trombone, trombone_soft, electric_guitar_clean, piano, bass, kick,
  snare, low_tom, pedal_hat, mid_tom, ride
)