Strudelify

Bolero Swing C TJT jam

after Ravel

KeyD majorTempo170 bpm
0:00/0:00
// Bolero Swing C TJT jam — after Ravel
// 170 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5139067; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/4)

// 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 · trumpet · "B♭-trumpetti"
const trumpet = note(`<
  ~ A@2 B C D@2 ~@2 E F G H ~@3 I J@2 K@2 L@2 M N O@2 P Q R S T U V@2 B W X@2 ~@2 E Y ~@5 Z AA AB AC AD AE AF AG AH ~@8
  AI AJ AK AL@2 AM AN AO AP AQ AR AS AT AU AV AO A@2 B AW D@2 ~@2 E F G H ~@3 AX AY AZ@2
>`.pickRestart({
  A: "[~@4 c4@3 ~@3 c4@2 d4@10 e4@4 ~@22]/2", B: "~@16 e4@3 ~@3 c4@2", C: "d4 ~@7",
  D: "[~@4 d4@3 ~@3 d4@2 e4@10 f4@4 ~@22]/2", E: "~@4 a4@3 ~@3 a4@2 b4@3 ~@3 b4@3 ~@3", F: "a4 ~@5",
  G: "f4@2 e4 d4@5 e4 d4@2 c4", H: "a4@2 g4 f4@2 d4@4 ~@3", I: "~@6 c5@2 c5 c5@2 a4",
  J: "[c5@6 c5@9 b4@2 c5 d5@2 c5 b4@2 a4]/2", K: "[c5@3 ~@3 c5@4 a4@2 c5@18 b4@4 c5@2 a4@4 g4@2 e4@4 f4@2]/2",
  L: "[g4@6 g4@8 a4 b4@2 a4 g4@2 f4 e4@2 d4]/2", M: "e4@2 d4 c4@5 d4 e4@2 f4", N: "d4 ~ g4@6",
  O: "[d5@6 d5@11 c5 b4@2 a4 b4@2 c5]/2", P: "d5@2 c5 b4@5 c5 b4@2 a4", Q: "c5@4 b4@2 a4@4 f4@8 a4@3 ~@3",
  R: "c5@2 a4 b4@2 g4 a4@2 f4 g4@2 e4", S: "d4@3 ~@3 d4@4 c4@2 d4@3 ~@3 e4@4 f4@2", T: "g4@8 f4 e4@2 d4",
  U: "e4@2 d4 c4@9", V: "[~@4 c4@3 ~@3 c4@2 d4@10 e4@14 ~@12]/2", W: "d4 ~@3",
  X: "[~@4 d4@3 ~@3 d4@2 e4@10 f4@14 ~@12]/2", Y: "a4 ~", Z: "~@8 c5 c5@2 a4", AA: "c5@4 c5@3 ~@3 a4@2 c5@12",
  AB: "~@6 a4 g4@2 ~ e4@2 f4@4 g4@2 a4@4 c5@2", AC: "d#5@4 c5@3 ~@3 a4@2 c5@10 ~@2",
  AD: "a4@2 g4 d4@2 e4 f4@2 g4 a4@2 c5", AE: "b4 g4 b4 a#4 g4 a#4", AF: "a4@2 f4@2 a4@2 g4@2 f4 e4@2 d4",
  AG: "e4@4 g4@2 b4 c5@11 d5@4 c5@2", AH: "b4 ~ g4@4 ~@2", AI: "e5", AJ: "~@2 d5 c5@2 a#4 e5@3 d5@2 c5",
  AK: "c5@2 d5 c5@2 a#4@3 a4 g4@2 f4", AL: "[g4@12 ~@4 e4@2 f4@4 g4@6 ~@2 g4@12 g4@3 ~@3]/2",
  AM: "a#4@3 a4@2 g4 g4@3 f4@2 e4", AN: "a#4@2 a4 g4@2 f4@3 ~ e4@2 d4", AO: "c4@3 ~", AP: "f4@9 c5@2 d5",
  AQ: "e5@3 f5@3 d5@2 e5@2 c5@2", AR: "a#4@2 c5 a#4@2 g#4@4 a#4@2 c5", AS: "d5@2 e5 d5@2 c5 d5@2 c5 a#4@2 g#4",
  AT: "a#4@2 g#4 g4@2 f4@4 g4@2 f4", AU: "g4@2 f4 d#4@6 f4@2 d#4", AV: "f4@2 c#4@3 d#4 f4@2 d#4 c#4@3", AW: "d4 ~@5",
  AX: "~@6 g4@2 f4 e4@3", AY: "~@6 g#4@2 f#4 f4@3", AZ: "[c4@2 e4 b4@18 ~@3]/2",
})).s("gm_trumpet").gain(0.3)

// other · tenor sax · "Tenorisaksofoni"
const tenor_sax = note(`<
  ~ A@2 B C D@2 ~@2 E F ~@2 G H I J K L M N O P Q R S T U V G W X Y Z@2 B AA AB@2 ~@2 E AC ~@6 Z@2 B AA AB@2 ~ AD AE@2
  AF AG AH AI AJ AK AL AM AN@3 AO AP AQ AR AS AT AU AV AW AX AY A@2 B AZ D@2 ~@2 E F ~@2 G H I BA BB BC@2
>`.pickRestart({
  A: "[~@4 e3@3 ~@3 e3@2 f3@10 g3@4 ~@22]/2", B: "~@16 g3@3 ~@3 e3@2", C: "f3 ~@7",
  D: "[~@4 b3@3 ~@3 b3@2 c#4@10 d4@4 ~@22]/2", E: "~@4 f4@3 ~@3 f4@2 g4@3 ~@3 g4@3 ~@3", F: "c4 ~@5",
  G: "e4@2 c4 d4@2 b3 c4@2 a3 a#3@2 g3", H: "f3@3 ~@3 f3@4 e3@2 f3@3 ~@9", I: "g3@2 a3 a#3@2 b3@7", J: "g3@2 f3 e3@9",
  K: "e4 f4", L: "g4 a4", M: "d#4@3 ~@3 d#4@4 c4@2 e4@12", N: "e4@3 d4@2 f4 d4@2 c4 a3@2 c4", O: "b3 a#3", P: "a3 d4",
  Q: "g3@2 f3 e3@3 e3@2 f3 g3@2 a3", R: "g3 ~ f3@6", S: "f3 g3", T: "c4 b3", U: "f4@2 d#4 d4@3 c4@6",
  V: "f4@4 e4@2 d4@4 a3@8 c4@3 ~@3", W: "f3@3 ~@3 f3@4 e3@2 f3@3 ~@3 f3@4 g#3@2", X: "f3@8 b3 g3@2 f3",
  Y: "e3@2 d3 c3@9", Z: "[~@4 e3@3 ~@3 e3@2 f3@10 g3@14 ~@12]/2", AA: "f3 ~@3",
  AB: "[~@4 b3@3 ~@3 b3@2 c#4@10 d4@14 ~@12]/2", AC: "c4 ~", AD: "~@9 a3@2 b3",
  AE: "c4@4 c4@3 ~@3 a3@2 b3@4 b3@3 ~@3 g3@2", AF: "g#3@4 a3@2 b3@4 c4@2 ~@4 c4@3 ~@3 e4@2",
  AG: "a4@3 ~@3 f4@3 ~@7 f4@2 a4@3 ~@3", AH: "c5@2 e4 g4@2 b4 c5@2 a4 c#5@2 a#4",
  AI: "a4@2 f4 e4@2 d4 f4@2 g4 g#4@2 c5", AJ: "b4@4 b4@3 ~@3 g4@8 ~@6", AK: "g4@2 f4 e4@2 d4 e4@2 c4 ~@3", AL: "g4",
  AM: "~@2 f4 e4@2 d4 g4@3 f4@2 e4",
  AN: "[f4@4 g4@2 f4@4 e4@6 d4@2 c4@4 a#3@14 ~@4 g3@2 a3@4 a#3@6 ~@2 a#3@12 a#3@3 ~@3]/3",
  AO: "e4@3 d4@2 c#4 a#3@3 a3@2 g3", AP: "g3@2 f3 e3@2 d3@3 ~ b3@2 a3", AQ: "a#3@3 ~", AR: "d4@9 e4@2 f4",
  AS: "g4@3 g#4@3 f4@2 g4@2 e4@2", AT: "f4 d#4", AU: "d4", AV: "c4@3 ~@7 c4@14", AW: "a#3@3 ~@7 a#3@14",
  AX: "g#3@3 ~@7 g#3@14", AY: "g3@3 ~", AZ: "f3 ~@5", BA: "c4@2 d4 e4@9", BB: "c#4@2 d#4 f4@9",
  BC: "[g3@2 c4 e4@18 ~@3]/2",
})).s("gm_tenor_sax").gain(0.3)

// bass · acoustic bass · "Akustinen basso"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N Q P R S T U V W X H Y Z AA L M AB AC P R S T U V W X H Y
  Z AA L M AB AC P AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS A B C D E F G H I J K L M N O AT AU AV@2
>`.pickRestart({
  A: "c2 d2", B: "e2 f2", C: "f#2 g2", D: "a2 c2", E: "b1 c#2", F: "d2@2 g1 f2", G: "g2 e2 d2 c2", H: "b1 b2 d2 g1",
  I: "d2 e2", J: "f2 g2", K: "g#2 a2", L: "d2 f2 a2 d2", M: "a2 b2 c3 c#3", N: "d3 a2 g#2@2", O: "g2@3 g2",
  P: "c2 e2 c2 g2", Q: "g2 g1 g2@2", R: "c2!2 d2!2", S: "e2!2 f2!2", T: "f#2!2 g2!2", U: "a2 a1 c2!2", V: "b1!2 c#2!2",
  W: "d2!2 g1 b1", X: "c2 e2 d2 c2", Y: "d2!2 e2!2", Z: "f2!2 g2!2", AA: "g#2!2 a2 a1", AB: "d3 a2 g#2!2",
  AC: "g2 g1 d2 g2", AD: "e2 g2 a#2 c3", AE: "c#3 a#2 g2 c#3", AF: "c3 c2 e2 g2", AG: "c3 g2 e2 c2",
  AH: "c#2 e2 g2 a#2", AI: "g2 e2 a#2 g2", AJ: "e2@2 f2 g2@2 g#2@4 a#2@2 b2", AK: "c3 a#2 g2 c3", AL: "f3 e3 d3 c3",
  AM: "b2 g2", AN: "a#2 g#2", AO: "f#2!2", AP: "f2@3 ~@7 f2@14", AQ: "d#2@3 ~@7 d#2@14", AR: "c#2@3 ~@7 c#2@14",
  AS: "c2@2 c2 ~", AT: "c2 g2 c3 c2", AU: "c#2 g#2 c#3 c#2", AV: "[c2 g2 c2@5 ~]/2",
})).s("gm_acoustic_bass").gain(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~@16 A B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ C@3 D ~@19
>`.pickRestart({
  A: "~@6 x ~ x!2 ~@2", B: "~@3 x", C: "x ~@4 x ~@6", D: "x ~@2 x ~ x!2 ~@5",
})).gain(0.25)

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

// drums · hihat
const hihat = s("hh").struct("<~ A@16 B@15 C A@44 ~@3 D A@18 E>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~ x ~@3 x ~ x", C: "~@3 x ~ x ~@3 x ~@2", D: "x ~@2 x ~ x!2 ~@5", E: "~@3 x!2 ~",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<~ A@15 B C@15 D E@44 B@3 ~ A@18 D>".pickRestart({
  A: "x ~@4 x ~@2 x ~@3", B: "x ~@4 x ~@6", C: "x!2", D: "x", E: "x ~@2 x ~ x!2 ~@2 x ~ x",
})).gain(0.25)

stack(trumpet, tenor_sax, bass, rim, snare, hihat, ride)