Strudelify

moanin

Bobby Timmons

KeyB♭ majorTempo126 bpm
0:00/0:00
// moanin — Bobby Timmons
// 126 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6366523; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 102 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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 · trumpet · "B Trompete"
const trumpet = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@4 D@3 E F G H I H E F J K L M N O P Q R ~@16 S T U V W ~@3 X Y Z AA AB AC@2 AD X Y
  Z AA AB AE AF B C@4 D@3 E F G H I H E F B AG@5
>`.pickRestart({
  A: "~@6 f4@5 f4", B: "~@2 f4!2", C: "[c5@6 bb4@2 ab4 f4@2 ab4@6 f4 eb4@2 c4 eb4@2 f4@16 ~@3 f4@3 f4@3]/4",
  D: "[c5@6 bb4@2 ab4 f4@2 ab4@6 f4 ab4@2 f4 ab4@2 c5@10 bb4@2 c5]/3", E: "~@3 f4@2 f4 ab4@2 ab4 f4@2 c4",
  F: "eb4 f4@3", G: "~@3 f4@2 f4 ab4@3 bb4@2 b4", H: "bb4@2 ab4 f4@9", I: "~@3 f4@2 f4 c5@3 bb4@2 b4",
  J: "~@3 ab4@2 bb4@4 bb4@2 ab4", K: "c5@3 f4@2 ab4@7", L: "~@3 b4@2 bb4@7", M: "ab4@2 f4 ab4@2 f4@7",
  N: "~@3 f4@2 f4 b4@3 bb4@3", O: "ab4@3 f4@2 d4 f4@2 f4 ~@3", P: "ab4@2 f4 bb4@2 ab4@4 f4@2 f4",
  Q: "ab4@3 f4@2 f4 bb4@3 f4@2 f4", R: "b4@3 bb4@2 ab4 bb4@2 ab4@4", S: "c4 d4", T: "f4 g4", U: "ab4 bb4", V: "b4 c5",
  W: "~ c5@3", X: "f4@2 f4 ~@2 f4 ab4@3 ab4@3", Y: "bb4@2 ab4 f4@2 ab4@7", Z: "f4@2 f4 ~@2 f4 ab4@3 bb4@2 b4",
  AA: "bb4@2 ab4 f4@2 eb4@7", AB: "f4@2 f4 ~@6 ab4@2 ab4", AC: "[bb4@2 bb4 ~@3 bb4@2 ab4 bb4@2 c5@13]/2",
  AD: "~@3 c5@2 c5@7", AE: "bb4@2 bb4 ~@3 bb4@2 ab4 bb4@2 c5", AF: "c5@9 c5@2 c5",
  AG: "[c5@6 bb4@2 ab4 f4@2 ab4@6 f4 eb4@2 c4 eb4@2 f4@19 f4@18]/5",
})).s("gm_trumpet").gain(0.3)

// other · tenor sax · "Tenor Saxophon"
const tenor_sax = note(`<
  A B C D E D A B A B C D E D A B F G@4 H@2 I ~ J ~ J ~ J ~ J ~ K L K M K N@3 K L K M K O@3 P@3 Q R S@2 ~@9 T U V U W X
  Y@2 T U V U W X Z F G@4 H@2 I ~ J ~ J ~ J ~ J AA AB@2 AC AD@2
>`.pickRestart({
  A: "~@3 f3@2 f3 ab3@2 ab3 f3@2 c3", B: "eb3 f3@3", C: "~@3 f3@2 f3 ab3@3 bb3@2 b3", D: "bb3@2 ab3 f3@9",
  E: "~@3 f3@2 f3 c4@3 eb4@2 b3", F: "~@2 f3!2",
  G: "[ab3@6 gb3@5 f3@7 e3@5 bb3@7 bb3@2 ab3 g3@2 ab3@4 ~@3 a3@3 a3@3]/4", H: "[ab3@6 gb3@5 f3@7 ~@6]/2",
  I: "~@3 c4@3 eb4@2 c4 bb3@2 c4", J: "~@6 bb3@5 a3", K: "ab3@2 ab3 ~@6 d3@2 f3", L: "b3@2 b3 ~@6 d3@2 c3",
  M: "b3@3 f3@2 bb3@7", N: "[b3@2 b3 ~@6 c3@6 c3@6 c3@6 c3@6 d3@2 c3]/3",
  O: "[b3@2 b3 ~@6 c3@6 c3@6 c3@6 c3@3 f3@2 g3 ab3@2 bb3]/3",
  P: "[db4@6 c4@5 b3@6 f3 eb3@2 c3 eb3@2 bb3@7 d4@2 c4 bb3@2 c4]/3", Q: "~@6 f3@2 g3 ab3@2 bb3", R: "db4@5 c4@7",
  S: "[b3@3 f3@2 f3 ab3@2 f3 eb3@2 f3@4 f3@3 g3@2 ab3 bb3@2 eb4]/2", T: "ab3@2 ab3 ~@2 ab3 ab3@3 ab3@3",
  U: "f3@3 f3@2 e3@7", V: "ab3@2 ab3 ~@2 ab3 gb3@3 gb3@3", W: "~@3 d3@2 f3@7", X: "~@3 f3@2 b3@7", Y: "~@3 e3@2 e3@7",
  Z: "~@3 e3@2 e3@4 e3@2 e3", AA: "~@2 a3!2", AB: "[ab3@6 gb3@5 f3@7 e3@6]/2", AC: "~@2 bb3 a3", AD: "[g3 a3@3]/2",
})).s("gm_tenor_sax").gain(0.3)

// other · trombone · "Posaune"
const trombone = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@4 D@3 ~ A ~ A ~ A ~ A ~@9 E F G H I@2 J K ~@8 L M N O P ~@3 Q R Q R S T@3 Q R Q R
  S U V B C@4 D@3 ~ A ~ A ~ A ~ A W X@2 Y Z@2
>`.pickRestart({
  A: "~@6 d3@5 c3", B: "~@2 f3!2", C: "[db4@6 c4@5 b3@7 bb3@5 bb3@7 d3@2 c3 bb2@2 c3@4 ~@3 a3@3 a3@3]/4",
  D: "[db4@6 c4@5 b3@6 f3 ab3@2 f3 ab3@2 bb3@10 bb3@2 bb3]/3", E: "~@2 c3@4 d3@3 f3@3", F: "ab3@3 bb3@2 f3 b3@2 c4@4",
  G: "f3@3 ab3@2 f3 bb3@2 ab3 f3@3", H: "~@3 bb3@2 ab3 b3@2 bb3 ab3@3",
  I: "[~@3 d4@2 c4@4 ab3@2 f3@4 d3@2 f3 ab3@2 f3 g3@3]/2", J: "f3@2 f3 ~@3 ab3@2 ab3 ~@3", K: "b3 c4@2 ~@3", L: "c3 d3",
  M: "f3 g3", N: "ab3 bb3", O: "b3 c4", P: "~ d4@3", Q: "c4@2 c4 ~@2 c4 c4@3 c4@3", R: "b3@3 b3@2 bb3@7",
  S: "ab3@2 ab3 ~@6 d4@2 d4", T: "[b3@2 b3 ~@3 bb3@2 ab3 bb3@2 c4@10 c4@2 c4@13]/3",
  U: "b3@2 b3 ~@3 bb3@2 ab3 bb3@2 c4", V: "c4@9 bb3@2 bb3", W: "~@2 a3!2", X: "[db4@6 c4@5 b3@7 bb3@6]/2",
  Y: "~@2 d3 c3", Z: "[bb2 c3@3]/2",
})).s("gm_trombone").gain(0.35)

// chords · electric guitar clean · "Elektrische Gitarre"
const electric_guitar_clean = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~@5 C@2 ~ A ~ A ~ A ~ A ~@32 D ~@6 E@2 ~@7 B ~@5 C@2 ~ A ~ A ~ A ~ A ~@3 F G@2
>`.pickRestart({
  A: "~@6 [d3,bb3]@5 [c3,a3]", B: "~@2 f3!2", C: "[~@5 f3 ab3@2 f3 ab3@2 c4@10 ~@3]/2", D: "~@3 c4@2 c4 c4@2 c4 c4@3",
  E: "[~@9 c3@2 c3@13]/2", F: "~@2 bb3 a3", G: "[g3 a3@3]/2",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · piano · "Klavier"
const piano = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@4 D@3 ~ E ~ E ~ E ~ E ~ F G H I F G J K F G H I F G J L M@3 N O P Q R S G H T U G
  V W X Y@2 Z X AA AB@2 X Y@2 Z X AA AC B C@4 D@3 ~ E ~ E ~ E ~ E AD AE@2 AF@3
>`.pickRestart({
  A: "~@12 [f2,d3,bb3,f4]@9 ~ [f2,c3,a3,f4]@2", B: "~@2 [f3,f4]!2",
  C: "[[bb2,ab3,db4,f4]@11 ~ [ab2,gb3,c4,f4]@9 ~ [g2,f3,b3,eb4]@14 [c3,e3,bb3,eb4]@9 ~ [f2,f3]@8 g2@6 bb3@3 ~ ab3@2 g3@3 ~@3 f3@6 c3@6 [b2,a3,eb4,f4]@6 [b2,a3,eb4,f4]@6, ~@23 [bb3,d4]@7 ab2@3 bb2@3 ~@12, ~@35 ab3@4 ~@9]/4", // Bbm7 Fm Gaug C7 F B7 Bb
  D: "[[bb2,ab3,db4,f4]@11 ~ [ab2,gb3,c4,f4]@9 ~ [b3,eb4]@11 ~ f4@2 ab4@3 ~ f4@2 ab4@3 ~@3 c3@6 c3@6 c2@6 [c3,bb3,eb4,ab4]@3 ~ [c3,bb3,eb4,ab4]@2, ~@11 [g2,f3]@7 db3@3 db3@3 ~@12, ~@46 [bb3,eb4,ab4]@19 ~@7]/3", // Bbm7 Fm B Ab G7 Ebsus4
  E: "~@12 [f2,d3,bb3,c4,f4]@9 ~ [f2,c3,a3,c4,f4]@2", F: "f2!2 ab2!2, [ab3,d4,f4]@11 ~ [gb3,c4,f4]@11 ~",
  G: "g2!2 c2!2, [f3,b3,eb4]@11 ~ [e3,bb3,eb4]@11 ~", H: "~ f2 ab2!2, f2 ~@3, ~@4 [ab3,d4,f4]@8 [gb3,c4,f4]@11 ~",
  I: "[g2,f3,b3,eb4] ~ c3 c2, ~ g2 ~@2, ~@5 [e3,bb3,eb4]@7", J: "c3@6 c2@11 ~ c2@6, [ab3,c4,d4,f4]@23 ~",
  K: "[ab3,c4,d4,f4]@3 ~ [ab3,c4,d4,f4]@2 c2@6 eb2@6 e2@6, c2 ~@3", // Dm7b5
  L: "c3 c2 [c3,ab3,eb4] [b2,ab3,d4], [ab3,c4,d4,f4]@11 ~@13", // Ab Abdim Dm7b5
  M: "[bb2!2 ab2 ~ g2!2 c3 ~ f2 g2 ab2 bb2, [ab3,db4,f4]@11 ~ [gb3,c4,f4]@9 ~ [f3,b3,eb4]@14 [e3,bb3,eb4]@9 ~ [f3,bb3,d4]@14 ~@12, ~@3 ab2 ~@3 c2 ~@4]/3", // Db F Fm7b5 Eb Bb
  N: "~ c3 b2!2, f3 ~@3, ~@4 [ab3,c4,d4,f4]@8 [a3,eb4,f4]@11 ~", // Dm7b5 F7
  O: "bb2 ~ ab2!2, [ab3,db4,f4]@9 ~ [gb3,c4,f4]@14, ~ bb2 ~@2", P: "bb2!2 db3!2, [f3,b3,eb4]@23 ~",
  Q: "g2@6 ab2@6 bb2@6 [g2,f3,bb3,db4]@3 ~ [c3,e3,bb3,eb4]@2, ~@6 [f3,bb3,db4]@11 ~@7", R: "~@2 c3 bb2@3 ab2@3 g2@3",
  S: "f2!2 ab2!2, [ab3,db4,f4]@11 ~ [gb3,c4,f4]@11 ~", T: "g2!2 c3 c2, [f3,b3,eb4]@11 ~ [e3,bb3,eb4]@11 ~",
  U: "f2!2 ab2!2, ~@6 [f3,ab3,d4]@17 ~", V: "[ab3,d4,f4]@3 ~ [ab3,d4,f4]@2 g2@6 ab2@6 bb2@6, f2 ~@3",
  W: "c3@6 c4@3 ~ c4@2 c4@3 ~ c4@2 [e2,c4]@6, ~ c2 eb2 ~", X: "f2!2 d2!2",
  Y: "[g2!2 c2!2 f2!2 ab2!2, ~@18 [c5,c6]@23 ~@7]/2", Z: "g2!2 ~ gb2, ~@2 gb2 ~, ~@2 [c4,c5]", AA: "g2!2 db2!2",
  AB: "[c2@2 c2@2 c3@2 c4 ~ c3@2 c2@2 c3@2 c2@2, ~@3 c2 ~@4, ~@22 c4@25 ~]/2",
  AC: "c2@6 c2@6 c3@6 [c3,e3,bb3,eb4,ab4]@3 ~ [c3,e3,bb3,eb4,ab4]@2", AD: "~@2 [b2,a3,eb4,f4]!2",
  AE: "[bb2@6 bb2@6 ab2@6 ~@6 g2@6 g2@6 [gb2,e3,bb3,c4,eb4]@11 ~, [ab3,db4,f4]@11 ~ [gb3,c4,f4]@9 ~ [f3,b3,eb4]@14 ~@12, ~@3 ab2 ~@4]/2", // Cm7b5 Db F Fm7b5
  AF: "[~@12 [d3,bb3]@6 [c3,a3]@6 ~@6 c2@6 a3@11 ~ c5@3 ~ eb5@2 c5@3 ~ eb5@2 bb4!2 ~ ab4@3 [ab3,f4]@6, ~@12 f2@17 ~@7 [f2,c3]@34 ~@2, ~@24 [bb2,g3]@11 ~@37]/3", // Gm F Db F5 Eb
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Elektrischer Bass"
const bass = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C D E F G H ~ A ~ A ~ A ~ A ~ I J I C I J K L I J I C I J K M B C D E B N O P I J
  I C I J D Q R J I S R G T U R J I S R G V ~ B C D E F G H ~ A ~ A ~ A ~ A W B X Y@3
>`.pickRestart({
  A: "~@6 f2@5 f2", B: "bb2!2 ab2!2", C: "g2!2 c3 c2", D: "f2 g2 ab2 bb2", E: "f2 c2 b1!2", F: "bb1 bb2 ab2!2",
  G: "g2!2 db2!2", H: "c2@3 c2@3 c3@3 c2@2 c2", I: "f2!2 ab2!2", J: "g2!2 c2!2", K: "c3 c2@2 c2", L: "c2!2 eb2 e2",
  M: "c3 c2 c3 b2", N: "bb2!2 db3!2", O: "g2@3 ab2@3 bb2@3 g2@2 c3", P: "~@2 c3 bb2@3 ab2@3 g2@3", Q: "c3 c2 eb2 e2",
  R: "f2!2 d2!2", S: "g2!2 gb2!2", T: "c2!2 c3 c2", U: "c3 c2 c3 c2", V: "c2@6 c3@3 c2@2 c2", W: "~@2 b2!2",
  X: "g2!2 gb2@2", Y: "[~@12 f2@18 c2 b1 bb1 [ab1,a1] g1 gb1 f1@36]/3",
})).s("gm_electric_bass_finger").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@17 A@6 B ~ C ~ C ~ C ~ C ~ A@47 ~ A@6 B ~ C ~ C ~ C ~ C D A@2 ~@3>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "~@6 x ~@4 x", D: "~@2 x!2",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~@16 [~@2 x!2] ~@63 [~@2 x!2] ~@21>").gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@17 A@3 B A@2 C ~@8 D A@27 E F A@2 G H@7 I H@6 J ~ A@3 B A@2 C ~@8 K H@2 ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@4 x!2 ~@2", B: "~@2 x!2 ~@2 x ~@2 x ~@2", C: "~@2 x!2 ~@4 x ~@2 x", D: "~@6 x!18", E: "~@2 x!2 ~@4 x!4",
  F: "x ~@2 x ~@4 x!2 ~@2", G: "~@3 x!2 ~", H: "~ x ~ x", I: "~@6 x!3 ~@3", J: "~@3 x ~@5 x ~ x", K: "~@2 x!2",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [~@3 x] ~@7 [~@9 x!3] ~@29>").gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@17 A@3 B A@3 ~ C ~ C ~ C ~ C D A@27 E F A@2 D A@7 D A@7 ~ A@3 B A@3 ~ C ~ C ~ C ~ C ~ A@2 ~@3
>`.pickRestart({
  A: "x ~@2 x ~ x!2 ~@2 x ~ x", B: "x ~@2 x ~ x!2 ~@2 x ~@2", C: "~@6 x ~@4 x", D: "x", E: "x ~@2 x ~ x!2 ~@5",
  F: "~@3 x ~ x!2 ~@2 x ~ x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 [~@3 x ~ x ~@6] ~@7 [~@3 x!3 ~@6] ~@29>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@100 [~ x] [x!24]>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@86>".pickRestart({
  A: "~@6 x ~@4 x",
})).gain(0.3)

stack(
  trumpet, tenor_sax, trombone, electric_guitar_clean, piano, bass, kick, rim, snare, low_tom, hihat, mid_tom, crash,
  ride
)