Strudelify
KeyC majorTempo100 bpm
0:00/0:00
// El Toro y la Luna — Juan Francisco Piqueras Toharias
// 100 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5976742; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 146 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/2)

// 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 · tenor sax · "Saxofón tenor"
const tenor_sax = note(`<
  ~ A B C D@2 B C E@2 F G H@2 G I J@2 B C K@2 L@2 M N O P@2 Q@2 R@2 S T U V@2 B C D@2 B C E@2 F G H@2 G I J@2 B C K@2
  L@2 M N O P@2 Q@2 R@2 S T U W X ~@31 B C D@2 B C E@2 F G H@2 G I J@2 B C K@2 L@2 M N O P@2 Q@2 R@2 S T U Y@2 N Z@4
>`.pickRestart({
  A: "~@2 c3 e3", B: "e3@2 e3@4 f3 e3", C: "f3@2 e3@4 f3 e3", D: "[f3 e3@5 c3 e3]/2", E: "[d3@6 b2 d3]/2",
  F: "f3@2 f3@4 g3 f3", G: "g3@2 f3@4 g3 f3", H: "[g3 f3@5 g3 f3]/2", I: "g3@2 f3@4 g3 e3", J: "[e3@6 c3 e3]/2",
  K: "[f3 e3@5 e3 f3]/2", L: "g3@2 g3@4 g3!2", M: "g3@2 a#3@4 a#3 a3", N: "f3", O: "~@6 d3 e3", P: "f3@2 f3@4 f3!2",
  Q: "f3@2 g#3@4 g3 f3", R: "[e3@6 c3 d3]/2", S: "f3!3 e3", T: "f3 e3 d3@4 d3@2", U: "d3 f3@2 e3",
  V: "[d3 c3@5 c3 e3]/2", W: "d3 c3@3", X: "c3 ~", Y: "[d3 ~@3 f3@4, ~ c3@5 ~@2]/2", Z: "[e3@13 ~@3]/4",
})).s("gm_tenor_sax").gain(0.3)

// chords · trumpet · "Trompeta en Si♭"
const trumpet = note(`<
  ~@2 A@6 B@8 A C A@4 D@3 E@2 F@4 G@3 H@2 A C A@6 B@8 A C A@4 D@3 E@2 F@4 G@3 H@2 A C ~@31 A@6 B@8 A C A@4 D@3 E@2 F@4
  G@3 H@2 A I@2 J K L M
>`.pickRestart({
  A: "~@3 [c4,e4]!2 ~ [e4,g4] ~", B: "~@3 [d4,f4]!2 ~ [e4,g4] ~", C: "[c4,e4] ~@7", D: "~@3 [f4,a#4]!2 ~ [f4,a#4] ~",
  E: "~@3 [f4,a4]!2 ~ [a4,c5] ~", F: "~@3 [f4,g#4]!2 ~ [g#4,c5] ~", G: "~@3 [e4,g4]!2 ~ [g4,c5] ~",
  H: "~@3 [e4,g4]!2 ~ [a4,d5] ~", I: "d5", J: "c5 e5 g5 e5", K: "c5 g5 e5 c5", L: "e5 c5 e5 g5", M: "c6 ~@3",
})).s("gm_trumpet").gain(0.3)

// other · trombone · "Trombón"
const trombone = note(`<
  ~ A B@2 C D B@2 E F B@2 E G B@2 H I B@2 C J K L M N O P Q R P S ~ T U V W X B@2 C D B@2 E F B@2 E G B@2 H I B@2 C J K
  L M N O P Q R P S ~ T U V W X ~@2 Y Z@2 ~ AA AB@2 ~ Y Z@2 ~ AA AB@2 ~ Y AC@2 ~ AD AE@2 ~ AF AG@2 AH AI B@2 C D B@2 E F
  B@2 E G B@2 H I B@2 C J K L M N O P Q R P S ~ T U V W AJ AK AL@4
>`.pickRestart({
  A: "~@2 c3 e3", B: "g3/2", C: "~@2 e3 d3", D: "c3@2 c3 e3", E: "~@2 f3 e3", F: "d3@2 d3 f3", G: "d3", H: "c3@2 e3 g3",
  I: "c4 ~ c3 e3", J: "c3", K: "e3 g3", L: "a#3 c4", M: "e4 c4", N: "f4 c4", O: "a3", P: "g#3", Q: "f3", R: "f3 g3",
  S: "g3", T: "d4 b3", U: "g3@3 a3", V: "b3 g3", W: "c4 g3 e3 g3", X: "c4 ~@3", Y: "[d4,f4] [c4,d#4]", Z: "[b3,d4]/2",
  AA: "[c4,d#4] [g#3,d4]", AB: "[g3,c4]/2", AC: "[a#3,d4]/2", AD: "[c4,d#4] [a#3,d4]", AE: "[g#3,c4]/2",
  AF: "[a#3,d4] [g#3,c4]", AG: "[g3,b3]/2", AH: "~@2 [g3,b3] [g#3,c4]", AI: "[g3,b3] ~@3", AJ: "[f3,g#3,d4]",
  AK: "[f3,a#3,d4]", AL: "[[e3,c4,e4]@13 ~@3]/4",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note(`<
  ~@2 A@6 B@8 A C A@4 D@3 E@2 F@4 A@3 B@2 A C A@6 B@8 A C A@4 D@3 E@2 F@4 A@3 B@2 A C ~ G H I J G K G L G H I J G K G L
  M N M N O P O P Q R Q P S T A@6 B@8 A C A@4 D@3 E@2 F@4 A@3 B@2 A U V W@2 X C
>`.pickRestart({
  A: "c2 ~ g1 ~", B: "d2 ~ g1 ~", C: "c2 ~@3", D: "a#1 ~ f1 ~", E: "a1 ~ f1 ~", F: "g#1 ~ f1 ~", G: "c2 ~", H: "g2 c2",
  I: "f2 ~", J: "g2 g1", K: "g2!2", L: "g2 d#2", M: "a#2 ~", N: "a#2 f2", O: "g#2 ~", P: "g#2 d#2", Q: "g2 ~",
  R: "g2 d2", S: "g2@2 d2 b1", T: "g1 ~@3", U: "d2", V: "g1", W: "c2 g1", X: "c2@2 g2 e2",
})).s("gm_tuba").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@74 ~ A B C B A B C B A B C B A B C B A B C B A B C B A B C B A@37 B@2 A@2 C A
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<A ~ A@35 ~ A@35 ~@31 A@36 ~@2 A@3 ~>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A ~ A@35 ~ A@35 ~ B C D E D C D E D C D E D C D E D C D E D C D E D C D E D C A@36 F@2 A@3 G
>`.pickRestart({
  A: "~@2 x!2", B: "~ x!3", C: "~@2 x!3 ~ x ~", D: "~ x ~ x", E: "~@2 x!3 ~@3", F: "x!16", G: "x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@75 A B C B A B C B A B C B A B C B A B C B A B C B A B C B A ~@41 A>".pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<A ~ B@35 ~ B@35 ~@31 A B@35 ~@2 B@2 C A>".pickRestart({
  A: "x", B: "~@3 x", C: "~@2 x!2",
})).gain(0.3)

stack(tenor_sax, trumpet, trombone, bass, kick, rim, snare, hihat, crash)

More by Juan Francisco Piqueras Toharias