Strudelify

Yah Mo B There

Ingram James

KeyG minorTempo118 bpm
0:00/0:00
// Yah Mo B There — Ingram James
// 118 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 3 "#SYNBASS 3" Syn Bass 3 -> synth bass 1; ch 11 "#OBOE 2001" Oboe 2001 -> oboe
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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.

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@13 A B A C A B A C A B A C A B A D E@6 F@2 ~@7 G ~@4 A C A B A C A D E@6 F@2 ~@16 H I H I J K L M N O P O P O P O P
  O P O P O P O Q@6 R@2 ~@17
>`.pickRestart({
  A: "[bb3,d4,eb4,g4]@2 ~ [bb3,d4,eb4,g4] ~@12", // Ebmaj7
  B: "[ab3,c4,eb4,g4]@2 ~ [ab3,c4,eb4,g4] ~@4 [g3,b3,eb4,f4]@3 [b3,eb4,f4] ~@4, ~@11 g3@3 ~@2", // Abmaj7 Gaug Fm7b5
  C: "[ab3,c4,eb4,g4]@2 ~ [ab3,c4,eb4,g4] ~@4 [g3,b3,eb4,f4]@2 ~ [g3,b3,eb4,f4] ~@4", // Abmaj7 Gaug
  D: "[ab3,c4,eb4,g4]@2 ~ [ab3,c4,eb4,g4] ~@4 [g3,b3,eb4,f4]@6 ~@2", E: "[[ab3,c4,eb4,g4]@6 ~ [bb3,eb4,f4,g4]@7 ~@2]/2",
  F: "[[ab3,c4,eb4,g4]@6 ~ [b3,db4,f4,a4]@7 ~@2]/2", G: "[g3,c4,d4,f4]@7 ~", H: "[bb3,eb4,f4,g4]@3 ~",
  I: "[g3,bb3,d4,f4]@5 ~ [g3,c4,e4]@3 ~ [a3,c4,d4,f4]@6", J: "[bb3,d4,f4,g4]@3 ~",
  K: "~@4 a4@2 g4@4 [g3,c4,e4]@5 ~, [a3,c4,d4,f4]@5 ~@3", L: "[g3,bb3,d4,f4]@15 ~",
  M: "~@5 a4@3, [a3,db4,f4], ~@3 e4@5", N: "[a3,c4,e4,f4]@3 [a3,c4,e4] ~@12, ~@3 f4@13",
  O: "[a3,bb3,d4,f4]@2 ~ [a3,bb3,d4,f4] ~@4 [g3,a3,db4,f4]@2 ~ [g3,a3,db4,f4] ~@4", // Bbmaj7 Dbaug
  P: "[a3,c4,e4,f4]@2 ~ [a3,c4,e4,f4] ~@12", Q: "[[bb3,d4,f4,a4]@6 ~ [c4,f4,g4,a4]@7 ~@2]/2",
  R: "[[bb3,d4,f4,a4]@6 ~ [b3,db4,eb4,g4]@7 ~@2]/2", // Bbmaj7 Baug
})).s("gm_epiano2").gain(0.56)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@13 A B A B A B A B A B A B A B A B C D E D C D F@2 G@2 H I G@2 H J K ~@3 A B A B A B A B C D E D C D F@2 G@2 H L G@2
  H M G@2 H N G@2 H O P Q P Q R S T U V W V W V W V W V W V W V W V W X Y Z Y X Y AA@2 AB@2 AC AD AB@2 AC AE AB@2 AC AF
  AB@2 AC AG ~
>`.pickRestart({
  A: "c2@2 ~ g1 c2@2 g1@2 bb1 ~ bb1@2 g1@2 bb1@2", B: "ab1@2 ~ ab1 ~ ab1!3 g1@2 ~ g1 ~ g1!3", C: "f1!4 ~@10 g1 ~",
  D: "~@3 g1 ~@2 g1 ~@9", E: "ab1!4 ~@10 g1 ~", F: "[ab1!4 ~@10 a1@6 ~@4 g2 [g2,a2] f2 d2 a1@2 a1 c2]/2",
  G: "d1@2 ~ a1 d2@2 a1@2 c2 ~ c2@2 a1@2 c2@2", H: "bb1@2 ~ f1 bb1@2 f1@2 g1 ~ g1@2 f1@2 g1@2",
  I: "a1!2 ~@2 a1@2 ~@5 a1 c2 a1 c2 d2", J: "a1!2 ~@2 a1@2 ~ a1 [g2,ab2] g2 f2 d2 c2 a1 c2 d2", K: "d1 ~@3",
  L: "a1!2 ~@2 a1!2 ~@5 a1 c2 a1 c2 d2", M: "a1!2 ~@2 c2 ~ a1!2 c2 d2 f2@2 a1 c2 d2 g2",
  N: "f1 a1 ~@2 a1@2 ~ a1 [g2,ab2] g2 f2 d2 c2 a1 c2 d2", O: "a1!2 ~@2 a1!2 ~ a1 c2 ~ c2 ~ c2 ~ f1 ~",
  P: "f1 ~ f1 ~ f1 ~@2 f1", Q: "g1@5 ~ d2@3 ~ d2@2 c2@2 d2@2", R: "c2@2 ~@2 c2@2 ~@2 c2@2 ~@4 c2!2",
  S: "d2@5 ~ d2@3 ~ d2@2 c2@2 d2@2", T: "g1@2 g2!2 g1@2 g2!2 g1@2 g2!2 g1@2 g2!2",
  U: "a1@2 a2!2 a1@2 a2!2 a1@2 a2!2 a1@2 a2!2", V: "d2@2 ~ a1 d2@2 a1@2 c2 ~ c2@2 a1@2 c2@2",
  W: "bb1@2 ~ bb1 ~ bb1!3 a1@2 ~ a1 ~ a1!3", X: "g1!4 ~@10 a1 ~", Y: "~@3 a1 ~@2 a1 ~@9", Z: "bb1!4 ~@10 a1 ~",
  AA: "[bb1!4 ~@10 b1@6 ~@4 a2 [a2,b2] g2 e2 b1@2 b1 d2]/2", AB: "e1@2 ~ b1 e2@2 b1@2 d2 ~ d2@2 b1@2 d2@2",
  AC: "c1@2 ~ g1 c2@2 g1@2 a1 ~ a1@2 g1@2 a1@2", AD: "b1!2 ~@2 b1!2 ~@5 b1 d2 b1 d2 e2",
  AE: "b1!2 ~@2 d2 ~ b1!2 d2 e2 g2@2 b1 d2 e2 a2", AF: "g1 b1 ~@2 b1@2 ~ b1 [a2,bb2] a2 g2 e2 d2 b1 d2 e2",
  AG: "b1!2 ~@2 b1!2 ~ b1 d2 ~ d2 ~ d2 ~ g1 ~",
})).s("gm_synth_bass_1").gain(0.4)

// other · synth bass 1 · "#SYNBASS 3"
const synth_bass_1 = note(`<
  ~@5 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 D E D C D F G ~@8 H@2 I@2 A B A B A B A B C D E D C D F J ~@24 K
  L K L K L K L K L K L K L K L M N O N M N P Q ~@17
>`.pickRestart({
  A: "~ g3 bb3 g3 d4 g3 bb3 g3", B: "~ g3 bb3 c4 g3 [eb4,g4] g3 [d4,f4]", C: "~ g3 ab3 g3 bb3 g3 c4 g3",
  D: "~ g3 bb3 g3 c4 g3 d4 g3", E: "~ g3 c4 g3 d4 g3 eb4 g3", F: "~ g3 c4 g3 d4 g3 eb4 a3",
  G: "~ g3 db4 g3 e4 g3 db4 g3", H: "[~ g3 c4 g3 e4 g3 c4 g3@2 ~ c4 g3 e4 g3 c4 d4, ~@9 g3@2 ~@5]/2",
  I: "[~ g3 bb3 g3 d4 g3 bb3 g3@2 ~ bb3 c4 g3 [eb4,g4] g3 [d4,f4], ~@9 g3@2 ~@5]/2", // Eb Dm
  J: "~@2 g3@2 db4@2 g3@2 e4@2 g3@2 db4@2 g3 ~", K: "~ a3 c4 a3 e4 a3 c4 a3", L: "~ a3 c4 d4 a3 [f4,a4] a3 [e4,g4]",
  M: "~ a3 bb3 a3 c4 a3 d4 a3", N: "~ a3 c4 a3 d4 a3 e4 a3", O: "~ a3 d4 a3 e4 a3 f4 a3", P: "~ a3 d4 a3 e4 a3 f4 b3",
  Q: "~ a3 eb4 a3 g4 a3 eb4 a3",
})).s("gm_synth_bass_1").gain(0.2).pan(0.3)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B C D E D C D F G H@8 ~@4 A B A B A B A B C D E D C D F G H@16 I J I J K L M
  N O P O P O P O P O P O P O P O P Q R S R Q R T U V@16 ~
>`.pickRestart({
  A: "~ g4 ~ d4 ~ c4 ~ g3", B: "~ g4 ~ d4 ~ c4 ~ d4", C: "~ g4 ab4 g4 bb4 g4 c5 g4", D: "~ g4 bb4 g4 c5 g4 d5 g4",
  E: "~ g4 c5 g4 d5 g4 eb5 g4", F: "~ g4 c5 g4 d5 g4 eb5 a4", G: "~ g4 db5 g4 e5 g4 db5 g4",
  H: "d6 d5 a5 d5 c6 d5 g5 d5", I: "c6 c5 f5 c5 g5 c5 a5 c5", J: "bb5 d5 f5 g5 c5 a5 c5 f5",
  K: "g5 g4 d5 g4 e5 g4 f5 g4", L: "g5 a4 c5 d5 a4 e5 a4 f5", M: "f5 g4 bb4 g4 c5 g4 d5 g4",
  N: "e5 a4 b4 db5 e4 a4 db5 a4", O: "~ a4 ~ e4 ~ d4 ~ a3", P: "~ a4 ~ e4 ~ d4 ~ e4", Q: "~ a4 bb4 a4 c5 a4 d5 a4",
  R: "~ a4 c5 a4 d5 a4 e5 a4", S: "~ a4 d5 a4 e5 a4 f5 a4", T: "~ a4 d5 a4 e5 a4 f5 b4", U: "~ a4 eb5 a4 g5 a4 eb5 a4",
  V: "e6 e5 b5 e5 d6 e5 a5 e5",
})).s("gm_lead_2_sawtooth").gain(0.2).pan(0.8)

// chords · piano · "#A.PIANO 3"
const piano = note(`<
  ~@37 A B C D A E C F ~@20 A B C D A E C F A B C D A E C F ~@32 G H I J G K I L G H I J G K I L ~
>`.pickRestart({
  A: "[c4,d4,f4,a4] ~@3 [c4,d4,a4] ~ [c4,d4,e4,g4] ~@3 [c4,d4,e4,g4] ~@3 [c4,d4,e4,g4] ~, ~@2 f4 ~@5", // Dm7 D7 C
  B: "[c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@3 [c4,d4,e4,g4] ~@3 [c4,d4,e4,g4] ~@3", // Dm7 C
  C: "[c4,d4,f4,a4] ~@3 [c4,d4,f4] ~@5 [c4,d4,f4,g4] ~@3 [c4,d4,f4,g4] ~, ~@2 a4 ~@5", // Dm7 Csus4
  D: "[g3,c4,d4,f4] ~@3 [g3,c4,d4,f4] ~@7 [c4,d4,f4,g4] ~@3", // Gsus4 Csus4
  E: "[c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@3 [c4,d4,e4,g4] ~@3 [a3,c4,d4,f4] ~ [c4,d4,e4,g4] ~", // Dm7 C Dm7 C
  F: "[g3,c4,d4,f4] ~@3 [g3,c4,d4,f4] ~@3 [a3,c4,d4,g4] ~@3 [a3,c4,d4,g4] ~@3", // Gsus4 Am7
  G: "[d4,e4,g4,b4] ~@3 [d4,e4,b4] ~ [d4,e4,gb4,a4] ~@3 [d4,e4,gb4,a4] ~@3 [d4,e4,gb4,a4] ~, ~@2 g4 ~@5", // Em7 E7 D
  H: "[d4,e4,g4,b4] ~@3 [d4,e4,g4,b4] ~@3 [d4,e4,gb4,a4] ~@3 [d4,e4,gb4,a4] ~@3", // Em7 D
  I: "[d4,e4,g4,b4] ~@3 [d4,e4,g4] ~@5 [d4,e4,g4,a4] ~@3 [d4,e4,g4,a4] ~, ~@2 b4 ~@5", // Em7 Dsus4
  J: "[a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@7 [d4,e4,g4,a4] ~@3", // Asus4 Dsus4
  K: "[d4,e4,g4,b4] ~@3 [d4,e4,g4,b4] ~@3 [d4,e4,gb4,a4] ~@3 [b3,d4,e4,g4] ~ [d4,e4,gb4,a4] ~", // Em7 D Em7 D
  L: "[a3,d4,e4,g4] ~@3 [a3,d4,e4,g4] ~@3 [b3,d4,e4,a4] ~@3 [b3,d4,e4,a4] ~@3", // Asus4 Bm7
})).s("gm_piano").gain(0.48)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_2 = note("<~@8 A B C D E ~@32 F@2 G H ~@81>".pickRestart({
  A: "~@14 g2 ~", B: "c2@2 ~@2 c3@2 ~@4 c3@2 ~@2 c3 ~", C: "ab2@2 ~@2 ab2@2 ~@2 g2@4 ~@2 g2 ~",
  D: "c2@2 ~@2 c3@3 ~@3 c3@2 ~@2 c3 ~", E: "ab2@2 ~@2 ab2@2 ~@2 g2@3 ~@3 g2 ~", F: "d2/2", G: "ab1", H: "g1",
})).s("gm_lead_8_bass_lead").gain(0.32)

// other · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<~@73 A B C D E F C D G H G H ~@45>".pickRestart({
  A: "d3@5 g3 a3 c4", B: "d4 a3@7", C: "f3@7 g3", D: "a3 c4@15", E: "a3@7 c4", F: "d4 d3@15", G: "eb4", H: "d4",
})).s("gm_synth_strings_2").gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<[~@7 x] [~ x ~ x]!128 ~>").gain(0.56)

// drums · clap
const clap = s("cp").struct(`<
  ~ 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 ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~", B: "~ x ~ x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~ [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!127 [x!8] ~>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@38 A ~@3 A ~@23 A ~@3 A ~@3 A ~@3 A ~@35 A ~@3 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@20 A ~@16 B ~@3 B ~@6 C ~@16 B ~@3 B ~@3 B ~@3 B ~@10 B ~@3 D ~@3 E ~@3 D ~@3 F ~@8 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@8 x ~@2 x ~@2 x ~", B: "~@14 x!2", C: "~@7 x", D: "~@7 x!2 ~ x ~ x ~ x ~", E: "~@10 x ~ x ~ x!2",
  F: "~@8 x ~@2 x ~ x!3",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@20 A ~@16 B ~@3 B ~@6 C ~@16 B ~@3 B ~@3 B ~@3 B ~@10 B ~@7 D ~@7 A ~@8 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@2 x ~@2 x ~@10", B: "~@5 x!2 ~", C: "~@8 x ~@2 x ~@4", D: "~@7 x!2 ~@7",
})).gain(0.64)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@37 A B A B A B A B ~@20 A B A B A B A B A B A B A B A B ~@32 A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@15 x", B: "x",
})).gain(0.4)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct(`<
  ~@37 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(0.24)

// drums · bongos
const bongos = s("bongo:4").struct("<~@89 [x ~@2 x ~@4 x ~@2 x ~@4]!16 ~@25>").gain(0.84)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@89 [~ x ~@3 x ~@2]!16 ~@25>").gain(0.42)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@89 [~@3 x ~@4]!16 ~@25>").gain(0.84)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@37 A B A B A B A B ~@20 A B A B A B A B A B A B A B A B ~@32 A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@7 x", B: "x",
})).gain(2.84)

stack(
  epiano2, bass, synth_bass_1, lead_2_sawtooth, piano, bass_2, synth_strings_2, kick, snare, clap, hihat, low_tom,
  mid_tom, high_tom, cowbell, cowbell_soft, bongos, bongos_soft, bongos_2, cabasa
)