Strudelify

Tico-Tico no Fubá

Zequinha de Abreu

KeyB♭ majorTempo120 bpm
0:00/0:00
// Tico-Tico no Fubá — Zequinha de Abreu
// 120 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/132127; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · vibraphone
const vibraphone = note(`<
  ~@4 A B A C ~@3 D E F G H ~@3 D E I J K L M N O P Q R S L M N T U V W X L M N O P Q R S L M N T U V W Y A Z AA AB AC
  AD AE AF ~@3 AG AH AI AE AJ AK AL AM AN ~ AO AP ~@31 A B ~@5 D E F AQ AR ~@3 D E F AS AT K
>`.pickRestart({
  A: "~@2 d5 d5@2 d5!2 ~", B: "d5!2 ~ d5!2 ~@3", C: "d5 ~ d5 ~@5", D: "~@5 g5 gb5 f5", E: "eb5 g5@2 c6@2 bb5 g5 eb5",
  F: "d5 g5@2 bb5@2 bb5 a5 g5", G: "a5 a4 db5 e5 g5 bb5 a5 g5", H: "gb5 ~@3", I: "d5 g5@2 bb5@2 bb5 a5 bb5",
  J: "a5 d5 gb5 a5 d6 c6 bb5 a5", K: "g5 ~@3", L: "bb4 d5", M: "eb5 c5 ~@2", N: "a4 c5", O: "d5@2 bb4@2 ~ bb5!3",
  P: "bb5 a5!2 a5@2 g5!3", Q: "g5 eb5!2 eb5@2 a5!3", R: "a5 f5!2 a5 g5 eb5!2 g5", S: "f5 ~",
  T: "d5@2 bb4@2 ~ bb4 a4 ab4", U: "g4 gb4 g4 a4 c5 bb4 a4 bb4", V: "d5 f4 bb4 d5 f5 e5 eb5 d5",
  W: "c5 bb4 a4 g4 f4 eb4 d4 c4", X: "bb3 ~@3", Y: "bb3 ~ d5@6", Z: "d5!2 ~ d5!2 ~ d5!2", AA: "~ d5!2 ~ d5!2 ~ d5",
  AB: "d5 ~ d5 ~@2 d5 db5 d5", AC: "eb5 d5 db5 d5 g5 d5 db5 d5", AD: "eb5 d5 db5 d5 gb5 d5 db5 d5",
  AE: "eb5 d5 c6 a5 gb5 d5 c5 b4", AF: "bb4 ~", AG: "~@5 d5 db5 d5", AH: "eb5 d5@2 g5@2 d5 db5 d5",
  AI: "eb5 d5@2 gb5@2 d5 db5 d5", AJ: "bb4@4 ~ g4 gb4 f4", AK: "eb4 g4@2 c5@2 bb4 g4 eb4",
  AL: "d4 g4@2 bb4@2 bb4 a4 bb4", AM: "a4 d4 gb4 a4 d5 c5 bb4 a4", AN: "g4 ~@3", AO: "g5 gb5", AP: "e5 d5",
  AQ: "a5 a4 db5 e5 a5 e5 a5 g5", AR: "gb5 d5 d6@2 ~@4", AS: "a5 d5 gb5 a5 d6@4", AT: "~ c6 b5 a5 ~ d6@2 d6",
})).s("gm_vibraphone").gain(0.3)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@79 A B ~@2 C@2 ~@2 A B D E F G ~@2 A B ~@2 C@2 ~@2 A B D E F G ~@22>".pickRestart({
  A: "d5@3 d5@5", B: "b4@3 b4@5", C: "c5@3 c5@5", D: "g4 ab4", E: "a4", F: "e5 eb5 e5 gb5 a5 g5 gb5 g5",
  G: "b5 d5 g5 b5 d6@4",
})).s("gm_vibraphone").gain(0.2)

// other · xylophone
const xylophone = note(`<
  ~@4 A B A C D E F G H I J K L M N O P Q E R S T U V W X Y Z S T U V AA AB AC AD S T U V W X Y Z S T U V AA AB AC AE A
  AF AG C AH@2 F G H I J AI AJ M N O P Q AK AL ~ AM AN ~@31 A B AO AP D E F G H I AQ K L M N O AR AS AT AU AL
>`.pickRestart({
  A: "~@2 g4 g4@2 g4!2 ~", B: "gb4!2 ~ gb4!2 ~@3", C: "gb4 ~ gb4 ~@5", D: "bb3", E: "c4", F: "a3 c4",
  G: "d4@4 ~ g4 gb4 f4", H: "eb4 g4@2 c5@2 bb4 g4 eb4", I: "d4 g4@2 bb4@2 bb4 a4 g4", J: "a4 a3 db4 e4 g4 bb4 a4 g4",
  K: "gb4 ~@3", L: "~@3 bb3@3 bb3@2", M: "~@2 c4!4 c4@2", N: "c4@3 c4 ~@4", O: "~@2 bb3!2 bb3@2 ~@2",
  P: "c4@8 eb4@2 eb4 ~@5", Q: "bb3@3 d4!2 ~@3", R: "bb3@2 ~@3 a3 g3 gb3", S: "f3 bb3 d4 f4 bb3 d4 f4 gb4",
  T: "g4@2 eb4@2 ~ a3 g3 gb3", U: "f3 a3 c4 eb4 a3 c4 f4 gb4", V: "g4 d4 ~@2", W: "~@3 bb4@3 bb4@2", X: "~@3 c5@3 c5@2",
  Y: "~@3 a4@3 a4@2", Z: "bb4@4 ~ a3 g3 gb3", AA: "c4 ~ c4 ~@3 db4 ~", AB: "d4 ~@3 d4@4", AC: "eb4 ~@3 eb4 ~@3",
  AD: "~@5 a3 g3 gb3", AE: "d4 ~ gb4@6", AF: "gb4!2 ~ gb4!2 ~ gb4 g4", AG: "~ g4!2 ~ g4!2 ~ g4", AH: "bb3/2",
  AI: "gb4 d4 d5@2 ~@4", AJ: "~ bb3@2 bb3", AK: "c4 gb4", AL: "g4 ~@3", AM: "g4 gb4", AN: "e4 d4",
  AO: "~@2 bb3 bb3@2 bb3!2 ~", AP: "a3 ~ a3 ~@5", AQ: "a4 a3 db4 e4 a4 e4 a4 g4", AR: "c4 g4", AS: "g4 d4",
  AT: "d4 gb4", AU: "a4 eb4 e4 gb4 ~ d4@2 d4",
})).s("gm_xylophone").gain(0.3)

// other · xylophone · soft notes
const xylophone_soft = note("<~@79 A B C D E@2 D C A B F G H I J K A B C D E@2 D C A B F G H I J K ~@20>".pickRestart({
  A: "b4@3 b4@5", B: "g4@3 g4@5", C: "b3@3 b3@5", D: "c4@3 c4@5", E: "a4@3 a4@5", F: "b3 d4", G: "c4",
  H: "e4 eb4 e4 gb4 a4 g4 gb4 g4", I: "b4 d4 g4 b4 d5 db5 c5 b4", J: "a4 g4 gb4 e4 d4 c4 b3 a3", K: "g3 ~@3",
})).s("gm_xylophone").gain(0.2)

// other · marimba
const marimba = note(`<
  ~@4 A B A C D E F G H I J K L M N O P Q F R S T U V W X Y Z S T U AA AB AC AD AE S T U V W X Y Z S T U AA AB AC AD AF
  A AG AH AI AJ@2 F G H I J AK AL M N O P Q F AM AN@2 ~ AO AP AQ AR ~ AS AT AU ~ AP AV AW AX AY AZ BA AO AP AQ AR ~ AS
  AT AU ~ AP AV AW AX AY AZ A B BB BC D E F G H I J AK L M N O H I F BD AO
>`.pickRestart({
  A: "~@2 bb3 bb3@2 bb3!2 ~", B: "c4!2 ~ c4!2 ~@3", C: "c4 ~ c4 ~@5", D: "g3", E: "a3", F: "gb3 a3", G: "g3 ~",
  H: "c4 eb4", I: "d4 bb3", J: "db4 e4", K: "c4 ~@3", L: "~@3 g3@3 g3@2", M: "~@2 a3!4 a3@2", N: "gb3@3 gb3 ~@4",
  O: "~@2 g3!2 g3@2 ~@2", P: "g3@8 c4@2 c4 ~@5", Q: "g3@3 bb3!2 ~@3", R: "~ d4@2 d4 g3@2 ~@2", S: "f4", T: "eb4",
  U: "eb4 a3", V: "bb3@2 d4@2 ~ bb3!3", W: "bb3 a3!2 a3@2 g3!3", X: "g3 eb3!2 eb3@2 a3!3", Y: "a3 f3!2 a3 g3 eb3!2 g3",
  Z: "f3 ~", AA: "d4", AB: "g3 ~ g3 ~@3 bb3 ~", AC: "bb3 ~@3 bb3@4", AD: "eb4 ~@3 c4 ~@3", AE: "~ f4@2 f4 bb3@2 ~@2",
  AF: "d4 ~ c4@6", AG: "c4!2 ~ c4!2 ~ c4 bb3", AH: "~ bb3!2 ~ bb3!2 ~ bb3", AI: "bb3 ~ bb3 ~@5", AJ: "g3/2",
  AK: "d4 ~@3", AL: "~ g3@2 g3", AM: "g3 gb3", AN: "[e3 d3@3]/2", AO: "g3 ~@3", AP: "~@5 g3 b3 d4",
  AQ: "e4 g3 b3 d4@2 ab3 b3 e4", AR: "e4 a3 c4 d4@3 ~@2", AS: "~@5 gb3 a3 c4", AT: "e4 a3 c4 d4@2 a3 c4 e4",
  AU: "e4 g3 b3 d4@3 ~@2", AV: "e4 d4 c4 b3 e4 d4 b3 ab3", AW: "a3 ab3 a3 b3 c4@4", AX: "e4!2", AY: "g4!2",
  AZ: "e4 gb4", BA: "~ g4 gb4 e4 d4 c4 b3 a3", BB: "~@2 g3 g3@2 g3!2 ~", BC: "gb3 ~ gb3 ~@5",
  BD: "c4@2 c4 d4 ~ d4@2 d4",
})).s("gm_marimba").gain(0.25)

// bass · marimba · "Orff Bass Xylophone"
const bass = note(`<
  A B A B A B A C D B E F G H I J D B E F G H K L M N O P Q R O Q M N O S T U V W M N O P Q R O Q M N O S T U V X A B A
  Y D B E F G H I J D B A F G H K Z@4 AA ~ AB AC ~@2 AD AE ~ AF AG AH AI AJ AK AL AA ~ AB AC ~@2 AD AE ~ AF AG AH AI AJ
  AK A B A AM D B E F G AN I J AO B E F G AN AP@2 AA
>`.pickRestart({
  A: "g2@3 d3@2 d3 d2@2", B: "a2@3 d3@5", C: "a2 ~ d2@4 ~@2", D: "g2@3 d3@3 d2@2", E: "a2@3 d3@3 d2@2", F: "g2@3 d3@5",
  G: "c3@3 g3@3 c3@2", H: "bb2@3 d3@3 d2@2", I: "a2@3 bb2@3 db3@2", J: "d3 db3 d3 eb3 d3 c3 bb2 a2",
  K: "a2@3 d3@2 d3 d2@2", L: "~ d3@2 d3 g2@2 ~@2", M: "bb2@3 bb2@3 bb2@2", N: "c3@3 f3@3 f2@2", O: "c3@3 f3@2 f3 f2@2",
  P: "bb2@2 ~ f2", Q: "bb2@3 f3@3 f2@2", R: "c3@3 f3@5", S: "bb2@3 f3@3 ~@2", T: "eb3 ~ eb3 ~@3 e3 ~", U: "f3 ~@3 g3@4",
  V: "c3 ~@3 f3 ~@3", W: "~ f3@2 f3 bb2@2 ~@2", X: "bb3@2 d3@3 c3 bb2 a2", Y: "a2 d2@2 ~", Z: "g2/4", AA: "g2 ~@3",
  AB: "g3 ab3", AC: "a3 d3", AD: "gb3 d3", AE: "g3 d3", AF: "~@5 g2 b2 d3", AG: "e3 d3 c3 b2 e3 d3 b2 ab2",
  AH: "a2 ab2 a2 b2 c3@4", AI: "c3 db3", AJ: "d3 e3", AK: "a2 d3", AL: "~ g3 gb3 e3 d3 c3 b2 a2", AM: "a2 ~ d3 ~@5",
  AN: "bb2@3 d3@3 f2@2", AO: "g2@3 d3@3 f2@2", AP: "[a2@3 d3@3 d2@4 d2!2 ~ d3@2 d3]/2",
})).s("gm_electric_bass_finger").gain(0.25)

stack(vibraphone, vibraphone_soft, xylophone, xylophone_soft, marimba, bass)