Strudelify
KeyG majorTempo225 bpm
0:00/0:00
// Brazil — Miguel A.Cole W.
// 225 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 1 "Alto Saxophone" named as a reed, played on alto sax (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5933777; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 356 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(225/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 · "Alto Saxophone"
const alto_sax = note(`<
  ~ A@8 B@7 C@8 D@4 E@7 F@4 G@4 H@3 I@8 G@4 J@6 K L@5 ~@186 M N@2 O P Q@2 O P Q@2 O P R S T M U V W@2 X Y W@2 X Y W@2 X
  Z AA@3 M AB@2 AC P N@2 AD AE AF@2 AG AH R S T S R S T ~@3 U V W@2 X Y W@2 X Y W@2 X Z AA@3 M AB@2 AC P N@2 AD AE AF@2
  AG AH R S T S R S T ~@6
>`.pickRestart({
  A: "[~@3 d4@29]/8", B: "[~ d#4@27]/7", C: "[~@3 d#4@29]/8", D: "[~ d4@15]/4", E: "[d#4@60 f4@30 g#4@15 g4@7]/7",
  F: "[~@8 b4@22 ~ b4@3 b4@4 c5@22 ~ c5@3]/4", G: "[c5 b4@15]/4", H: "[b4@22 ~ b4@3 b4@4 c5@18]/3",
  I: "[~@5 c5@3 c5@4 b4@60 b4@22 ~ b4@3 b4@4 c5@22 ~ c5@3]/8",
  J: "[g4@22 ~ g4@3 g4@4 g#4@22 ~ g#4@3 g#4@4 a4@22 ~ a4@3 a4@4 g#4@6]/6", K: "~@2 g#4@7 g4@7",
  L: "[~ g4@7 f#4@60 ~@12]/5", M: "~ a4", N: "f#5/2", O: "~ a5!2 f#5", P: "f#5 e5!2 d5", Q: "e5", R: "f#5", S: "~ c#5",
  T: "b4", U: "f#5@2 ~ f#5", V: "f5 f#5", W: "[a4,a5]/2", X: "~ a5!2 g#5", Y: "g#5 g5 f#5 g5", Z: "g#5 g5 f#5!2",
  AA: "g5/3", AB: "g5/2", AC: "~ g5!2 f#5", AD: "~ a4 b4 c#5", AE: "a5@3 f#5", AF: "e5/2", AG: "~ e5!3",
  AH: "e5 d5 c#5@2",
})).s("gm_alto_sax").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@2 A@2 B C@5 D@3 E@4 F@3 G@8 H@5 I@6 J@4 K@7 L@8 M@6 N O@5 ~@58 P Q@2 R S@3 R S@3 R T@4 U V@2 W X@3 Y Z AA@2 AB AC AD
  AE AF AG AD AE AF AH AI@2 ~@89 U AA@2 AJ AK AL@2 AJ AK AL@2 AJ AK AM AN AO U AP AQ AR@2 AS AT AR@2 AS AT AR@2 AS AT
  AU@3 U AV@2 AW AX AA@2 AY AZ AV@2 BA BB BC BD AD AN BC BD AD ~@3 AP AQ AR@2 AS AT AR@2 AS AT AR@2 AS AT AU@3 U AV@2 AW
  AX AA@2 AY AZ AV@2 BA BB BC BD AD AN BC BD AD ~@6
>`.pickRestart({
  A: "[~@4 f4@7 f#4@7 ~ f#4@7 g4@6]/2", B: "~@2 g4@7 f#4@7", C: "[~ f#4@7 f4@60 ~@12]/5",
  D: "[~@3 g4@15 c5@22 ~ d5@7]/3", E: "[g4@15 ~]/4", F: "[~@11 f#4@15 c5@22]/3",
  G: "[~ d5@7 f#4@60 f4@7 ~ f#4@7 f#4@7 ~ g4@7 g4@30]/8", H: "[g4@7 ~ g#4@7 g#4@7 ~ a4@7 a4@30 a#4@20]/5",
  I: "[~@3 a#4@7 a4@15 g#4@15 d5@56]/6", J: "[~ f5@15]/4", K: "[f5@15 f5@13]/7", L: "[~@2 f5@15 f5@15]/8",
  M: "[d#5@22 ~ d#5@3 d#5@4 d#5@22 ~ d#5@3 d#5@4 d#5@22 ~ d#5@3 d#5@4 d#5@6]/6", N: "~@2 d#5@7 d#5@7",
  O: "[~ d#5@7 d#5@60 ~@12]/5", P: "~ e5", Q: "g5/2", R: "~ g5!2 f#5", S: "[f5@2 e5@2 d#5 e5@2 g5@17]/3",
  T: "[f5@2 e5@2 d#5 e5@2 f5@25]/4", U: "~ a4", V: "f5/2", W: "~ f5!2 e5", X: "[e5@2 d5@2 d5 c5 d5@18]/3",
  Y: "~ c5 d5 e5", Z: "g5@6 e5 c5", AA: "d5/2", AB: "~ d5@3 d5@2 ~@2", AC: "d5@2 d5@4 c5 d5", AD: "e5", AE: "~ b4",
  AF: "a4", AG: "~ g4", AH: "g4", AI: "c5/2", AJ: "~ f#5!2 d5", AK: "d5 c#5!2 d5", AL: "c#5", AM: "d5", AN: "~ c#5",
  AO: "b4", AP: "d5@2 ~ d5", AQ: "c#5 d5", AR: "d#5/2", AS: "d#5 f#5!2 f5", AT: "f5 e5 d#5 e5", AU: "e5/3", AV: "e5/2",
  AW: "~ e5!2 d5", AX: "d5 c#5!2 b4", AY: "~ a4 b4 c#5", AZ: "f#5@3 f#5", BA: "~ e5!3", BB: "e5 d5 c#5@2", BC: "f#5",
  BD: "~ f#5",
})).s("gm_trumpet").gain(0.25)

// chords · piano
const piano = note(`<
  ~ A@8 B@7 C@8 D@4 E@7 F@8 G@7 F@8 H@7 I@8 J@7 K@8 L@7 M@8 N@4 O@2 P Q R S T U V W X Y V W X Y Z@2 Y@2 Z AA AB AC AB@3
  AC AB@3 AC AB@2 AD@6 AE@2 AF@4 AD@2 AE@2 AF@2 AG@2 AF@2 AG@2 AH@4 R S T U V W X Y V W X Y Z@2 Y@2 Z AA AB AC AB@3 AC
  AB@3 AC AB@2 AD@6 AE@2 AH@4 R S T U V W X Y V W X Y Z@2 Y@2 Z AA AB AC AB@3 AC AB@3 AC AB@2 AD@6 AE@2 AH@4 AI@2 AJ AK
  AL AM AN AO AP AQ AR AS AP AQ AR AS AT@2 AS@2 AT AU AV AF AV@3 AF AV@3 AF AV@2 AW@6 AX@2 AY@4 AW@2 AX@2 AY@2 AZ@2 AY@2
  AZ@2 BA@3 AU AV AF AV@3 AF AV@3 AF AV@2 AW@6 AX@2 AY@4 AW@2 AX@2 AY@2 AZ@2 AY@2 AZ@2 BA@4 BB
>`.pickRestart({
  A: "[~@13 [a#3,d5]@115, ~@3 [a#2,f3,f4,a#4]@29]/8", B: "[~@3 c5@53, ~ [a#2,g3,c4,d#4]@27, ~@5 g4@107]/7",
  C: "[~@7 c5@57, ~@3 [a#2,f#3,c4,d#4]@29, ~@13 f#4@115]/8", D: "[~@3 [a#3,d5]@29, ~ [a#2,f4]@15, ~@5 [f3,a#4]@59]/4",
  E: "[~@2 c5@58 ~@2 [a#3,d5]@28 [a2,e3,a3,e4,a4,c#5]@14 ~ [g#2,d#3,g#3,d#4,g#4,c5]@7, [f2,f4]@30 [a#2,f4]@15 ~@11, ~ [f3,a4]@59 ~ [f3,a#4]@29 ~@22]/7", // A# A G# F A#5 F A#5
  F: "[~@5 [g3,b4]@14 ~ [g#3,c5]@14 ~ [g3,b4]@29, ~@4 [g2,d4]@15 [g#2,d#4]@15 [g2,d4]@30, ~@9 [d3,g4]@29 ~ [d#3,g#4]@29 ~ [d3,g4]@59]/8", // G G# G G5 G#5 G5 G#5 G5
  G: "[~ [g3,b4]@14 ~ [g#3,c5]@14 ~ [g3,b4]@25, [g2,d4]@15 [g#2,d#4]@15 [g2,d4]@26, ~ [d3,g4]@29 ~ [d#3,g#4]@29 ~ [d3,g4]@51]/7", // G G# G G5 G#5 G5 G#5 G5
  H: "[~@8 d#5@7 c5@7 ~ [g4,g5]@7 ~@8 d#5@7 c5@7 ~ [g#4,g#5]@7 ~@8 d#5@7 c5@7 ~ [a4,a5]@7 ~@8 d#5@7 c5@7, c4@15 c4@15 c4@15 c4@11, g5@7 ~@23 g#5@7 ~@23 a5@7 ~@23 g#5@7 ~@15, g4@2 g4@21 ~@7 g#4@2 g#4@21 ~@7 a4@2 a4@21 ~@7 g#4@2 g#4@20, ~ d#4@29 ~ d#4@29 ~ d#4@29 ~ d#4@21]/7", // G G# A
  I: "[~ g#4@7 ~@2 c5@115 ~@3, ~@8 [a#2,f#3,c4,d#4]@117 ~@3, ~@9 f#4@116 ~@3]/8", // Cm7b5
  J: "[~ [a#3,d5]@111, [a#2,f3,f4,a#4]]/7", // A# A#5
  K: "[~@11 c5@57 ~@3 c5@57, ~@2 [a#2,c4]@15 [a#2,c4]@15, ~@9 [g3,d#4]@59 ~ [f#3,d#4]@59, ~@5 g4@29 ~ f#4@29]/8", // A#sus2 Cm D#m
  L: "[~@8 f#5@7 f#5@7 ~ g5@7 g5@28 ~@10 g#5@7 g#5@7 ~ a5@7 a5@22, a#3@15 a#3@13, f5@7 ~@53 g5@3 g4@49, ~ d4@59 ~ c4@51, ~ f4@29 ~ d#4@25]/7",
  M: "[~@16 [f#5,f#6]@7 [f#5,f#6]@7 ~ [g5,g6]@7 [g5,g6]@28 ~@10 [g#5,g#6]@7 [g#5,g#6]@7 ~ [a5,a6]@7 [a5,a6]@28 ~@2, ~@2 a#3@15 a#3@15, ~@8 [f5,f6]@7 ~@53 [g5,g6]@3 g4@57, ~@9 d4@59 ~ c4@59, ~@5 f4@29 ~ d#4@29]/8", // F# G G# A F G
  N: "[f3,a#3,d4,f5,f6]@3 [f3,a#3,d4,f#5,f#6]@3 [f3,a#3,d4,g5,g6]@2", // A# Gm7
  O: "[g3,c4,d#4,g5,g6]@3 [g3,c4,d#4,g#5,g#6]@3 [g3,c4,d#4,a5,a6]@2", // Cm G#maj7 Am7b5
  P: "[f3,a3,d4,g5,g6]@3 [f3,a3,d4,g#5,g#6]@3 [f3,a3,d4,a5,a6]@2", // Dm
  Q: "[f3,a3,d4,b5,b6]@3 [f3,a3,d4,a5,a6]@3 [f3,a3,d4,g5,g6]@2", // Bm7b5 Dm
  R: "[g2,g3,c6,c7]@2 ~ [e4,g4,c5,e5]!3 [g2,g3]@2, ~@3 [g2,g3]@3 ~@2", // C5 C G
  S: "[g#2,g#3,e4,g4,c5,e5]@2 ~ [e4,g4,c5,e5]!3 [g#2,g#3]@2, ~@3 [g#2,g#3]@3 ~@2", // C G#
  T: "[a2,a3,e4,g4,c5,e5]@2 ~ [e4,g4,c5,e5]!3 [a2,a3]@2, ~@3 [a2,a3]@3 ~@2", // Am7 C A
  U: "[b2,b3,e4,g4,c5,e5]@2 ~ [e4,g4,c5,e5]!3 [g2,g3]@2, ~@3 [a2,a3]@3 ~@2", // Cmaj7 C G A
  V: "[a2,a3,f4,a4,d5,f5]@2 ~ [a2,a3,f4,a4,d5,f5]@3 [a2,a3,f4,a4,d5,f5]@2", // Dm
  W: "[a#2,a#3,f4,a4,d5,f5]@2 ~ [a#2,a#3,f4,a4,d5,f5]@3 [a#2,a#3,f4,a4,d5,f5]@2", // A#maj7
  X: "[b2,b3,f4,a4,d5,f5]@2 ~ [b2,b3,f4,a4,d5,f5]@3 [b2,b3,f4,a4,d5,f5]@2", // Bm7b5
  Y: "[c3,c4,f4,a4,d5,f5]@2 ~ [b2,b3,f4,a4,d5,f5]@3 [a2,a3,f4,a4,d5,f5]@2", // Dm7 Bm7b5 Dm
  Z: "[b2,b3,e4,g4,c5,e5]@2 ~ [a2,a3,e4,g4,c5,e5]@3 [g2,g3,e4,g4,c5,e5]@2", // Cmaj7 Am7 C
  AA: "[b2,b3,d#4,f#4,b4,d#5] [a#2,a#3,d4,f4,a#4,d5]", AB: "[a2,a3,c#4,e4,a4,c#5]@15 ~",
  AC: "[a#2,a#3,d4,f4,a#4,d5]@15 ~", AD: "[d2,d3,f4,a4,d5,f5]@15 ~", AE: "[c3,c4,f4,g#4,d5,f5]@15 ~",
  AF: "[c3,c4,e4,g4,c5,e5]@15 ~", AG: "[c3,c4,f4,a4,d5,f5]@15 ~",
  AH: "[g3,c4,e4,g5,g6]@3 [g3,c4,e4,g#5,g#6]@3 [g3,c4,e4,a5,a6]@2", // C Am7
  AI: "[a3,d4,f4,a5,a6]@3 [a3,d4,f4,a#5,a#6]@3 [a3,d4,f4,b5,b6]@2", // Dm A#maj7 Bm7b5
  AJ: "[g3,b3,e4,a5,a6]@3 [g3,b3,e4,a#5,a#6]@3 [g3,b3,e4,b5,b6]@2", // Em
  AK: "[g3,b3,e4,c#6,c#7]@3 [g3,b3,e4,b5,b6]@3 [g3,b3,e4,a5,a6]@2", // C#m7b5 Em
  AL: "[a2,a3,d6,d7]@2 ~ [f#4,a4,d5,f#5]!3 [a2,a3]@2, ~@3 [a2,a3]@3 ~@2", // D5 D A
  AM: "[a#2,a#3,f#4,a4,d5,f#5]@2 ~ [f#4,a4,d5,f#5]!3 [a#2,a#3]@2, ~@3 [a#2,a#3]@3 ~@2", // D A#
  AN: "[b2,b3,f#4,a4,d5,f#5]@2 ~ [f#4,a4,d5,f#5]!3 [b2,b3]@2, ~@3 [b2,b3]@3 ~@2", // Bm7 D B
  AO: "[c#3,c#4,f#4,a4,d5,f#5]@2 ~ [f#4,a4,d5,f#5]!3 [a2,a3]@2, ~@3 [b2,b3]@3 ~@2", // Dmaj7 D A B
  AP: "[b2,b3,g4,b4,e5,g5]@2 ~ [b2,b3,g4,b4,e5,g5]@3 [b2,b3,g4,b4,e5,g5]@2", // Em
  AQ: "[c3,c4,g4,b4,e5,g5]@2 ~ [c3,c4,g4,b4,e5,g5]@3 [c3,c4,g4,b4,e5,g5]@2", // Cmaj7
  AR: "[c#3,c#4,g4,b4,e5,g5]@2 ~ [c#3,c#4,g4,b4,e5,g5]@3 [c#3,c#4,g4,b4,e5,g5]@2", // C#m7b5
  AS: "[d3,d4,g4,b4,e5,g5]@2 ~ [c#3,c#4,g4,b4,e5,g5]@3 [b2,b3,g4,b4,e5,g5]@2", // Em7 C#m7b5 Em
  AT: "[c#3,c#4,f#4,a4,d5,f#5]@2 ~ [b2,b3,f#4,a4,d5,f#5]@3 [a2,a3,f#4,a4,d5,f#5]@2", // Dmaj7 Bm7 D
  AU: "[c#3,c#4,f4,g#4,c#5,f5] [c3,c4,e4,g4,c5,e5]", AV: "[b2,b3,d#4,f#4,b4,d#5]@15 ~", AW: "[e2,e3,g4,b4,e5,g5]@15 ~",
  AX: "[d3,d4,g4,a#4,e5,g5]@15 ~", AY: "[d3,d4,f#4,a4,d5,f#5]@15 ~", AZ: "[d3,d4,g4,b4,e5,g5]@15 ~",
  BA: "[a3,d4,f#4,a5,a6]@3 [a3,d4,f#4,a#5,a#6]@3 [a3,d4,f#4,b5,b6]@2", BB: "[a3,d4,f#4,d5,f#5,a5,d6]@15 ~",
})).s("gm_piano").gain(0.25)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~@109 A B C D E F G@2 H F G@2 I J@4 K L M N O@2 ~ P Q R S P T U ~@29 V W@3 X@8 Y@2 X@2 Y Z AA AB AA@3 AB AA@3 AB AA@2
  AC@6 AD@2 ~@4 V W@3 X@8 Y@2 X@2 Y Z AA AB AA@3 AB AA@3 AB AA@2 AC@6 AD@2 ~@107
>`.pickRestart({
  A: "c4 d4 e4 f4 e4 d4 e4 f4", B: "g4 a4 g4 f4 g4 g#4 a4 b4", C: "c5 ~ b4 ~ a4 ~ g4 c5", D: "~ b4 ~ a4 ~ g4 ~ f4",
  E: "e4 ~@4 [d4,g4] ~ [d4,g4]", F: "[d4,g4] ~ e4 ~ d4 ~ c4 ~", G: "[d4 ~ d4 d4@13]/2", H: "~@5 [d4,g4] ~ [d4,g4]",
  I: "~@3 f#4 [d4,g4]@8 ~@4", J: "[[d4,g4] ~ e4 d4 ~ c4 ~ e4@13 b3@2 g3 a3@9]/4", K: "~ a3 ~ g3", L: "e4@5 e4 ~ e4",
  M: "d#4!2 e4 f4", N: "g4@6 f4 ~", O: "[e4 f4@3 e4 ~ d4 e4@3 d4 ~ c#4 d4@2 c#4]/2", P: "~ c#4 e4 a4 c#5 a4 e4 c#4",
  Q: "a#4@2 d4 f4 a#4 d5 ~ c#5", R: "~ b4 ~ a4 ~ f4 e4 d4", S: "g4 f4 e4 d4 c#4@2 b3@2", T: "a#4@3 c5@4 f4",
  U: "e4 ~@3", V: "[c6,c7]@2 ~ [e4,g4,c5,e5]!3 ~@2", W: "[e4,g4,c5,e5]@2 ~ [e4,g4,c5,e5]!3 ~@2",
  X: "[f4,a4,d5,f5]@2 ~ [f4,a4,d5,f5]@3 [f4,a4,d5,f5]@2", Y: "[e4,g4,c5,e5]@2 ~ [e4,g4,c5,e5]@3 [e4,g4,c5,e5]@2",
  Z: "[d#4,f#4,b4,d#5] [d4,f4,a#4,d5]", AA: "[c#4,e4,a4,c#5]", AB: "[d4,f4,a#4,d5]", AC: "[f4,a4,d5,f5]",
  AD: "[f4,g#4,d5,f5]", // Ddim
})).s("gm_acoustic_guitar_steel").gain(0.25)

// bass · acoustic bass
const bass = note(`<
  ~@103 A@4 B@2 C@2 B D E F G H I J G H I J B@5 K L A L@3 A L@3 A L@2 G@6 D@2 B@4 G@2 B@15 D E F G H I J G H I J B@5 K L
  A L@3 A L@3 A L@2 G@6 D@2 B@5 D E F G H I J G H I J B@5 K L A L@3 A L@3 A L@2 G@6 D@2 B@4 G@2 M@2 G H I N O P Q R O P
  Q R G@5 S T B T@3 B T@3 B T@2 O@6 H@2 G@4 O@2 G@13 S T B T@3 B T@3 B T@2 O@6 H@2 G@4 O@2 G@14 U
>`.pickRestart({
  A: "a#1@2 ~ f2 f2@2 ~ a#1", B: "c2@2 ~ g2 g2@2 ~ c2", C: "f2@2 ~ c3 c3@2 ~ f2", D: "c2@2 ~ g#2 g#2@2 ~ c2",
  E: "c2@2 ~ a2 a2@2 ~ c2", F: "c2@2 ~ b2 b2@2 ~ c2", G: "d2@2 ~ a2 a2@2 ~ d2", H: "d2@2 ~ a#2 a#2@2 ~ d2",
  I: "d2@2 ~ b2 b2@2 ~ d2", J: "d2@2 ~ c3 c3@2 ~ d2", K: "b1@2 ~ f2 a#1@2 ~ e2", L: "a1@2 ~ e2 e2@2 ~ a1",
  M: "g2@2 ~ d3 d3@2 ~ g2", N: "d2@2 ~ c#3 c#3@2 ~ d2", O: "e2@2 ~ b2 b2@2 ~ e2", P: "e2@2 ~ c3 c3@2 ~ e2",
  Q: "e2@2 ~ c#3 c#3@2 ~ e2", R: "e2@2 ~ d3 d3@2 ~ e2", S: "c#2@2 ~ g2 c2@2 ~ f#2", T: "b1@2 ~ f#2 f#2@2 ~ b1", U: "d2",
})).s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@103 [x ~@2 x!2 ~@3]!150 ~@103>").gain(0.25)

// drums · rim
const rim = s("rim").struct(`<
  ~@103 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C@102 ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x ~@2 x ~@2 x ~", C: "x ~@2 x!2 ~@3",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@253 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x ~@2 x ~@2 x ~",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@111 x ~@57 x ~@41 x ~@144>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@103 [x ~ x!3 ~ x!2]!252 ~>").gain(0.25)

stack(alto_sax, trumpet, piano, acoustic_guitar_steel, bass, kick, rim, snare, crash, ride)