Strudelify

Come to Mama

Ann Peebles

KeyA minorTempo103 bpm
0:00/0:00
// Come to Mama — Ann Peebles
// 103 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~ A ~ A ~ A@4 B C D C D C D E D C D C D C D C F@2 G H@2 A@4 B C D C D C D E D C D C D C D C F@2 G H@2 A@8 F@2 G H@2
  A@7 ~
>`.pickRestart({
  A: "~@6 [c4,f4,a4] [d4,g4,b4]", B: "[f3,a3,c4]@3 ~@3 [f3,a3,c4] ~@5 [c4,f4,a4]@2 [d4,g4,b4]@2",
  C: "[f3,a3,c4]@4 ~@2 [f3,a3,c4] ~@9", D: "[f3,a3,c4]@4 ~@2 [f3,a3,c4] ~@5 [c4,f4,a4]@2 [d4,g4,b4]@2",
  E: "[f3,a3,c4]@4 ~@2 [f3,a3,c4] ~@3 [g4,b4] ~ [f4,a4] ~ [d4,f4] ~", F: "[b3,e4,g4]!2 ~ [b3,e4,g4]!3 ~ [b3,e4,g4]",
  G: "[c#4,f#4,a4]@2 [c#4,f#4,a4]@2 ~@2 [c#4,f#4,a4]@2 [c#4,f#4,a4]@2 [c#4,f#4,a4]@2 ~@2 [c#4,f#4] ~", // F#m F#5
  H: "[[b3,e4,g4]@2 [c#4,f#4,a4]@2 ~@2 [d4,g4,b4]@2 ~@2 [c#4,f#4,a4]@2 [b3,e4,g4]@15 ~@5]/2", // Em F#m G F#m Em
})).s("gm_electric_guitar_jazz").gain(0.22).pan(0.4)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B@3 A B@3 A B@3 A B@3 A B@3 A B@2 C D E F G@2 A B A B A B@3 A B@3 A B@3 A B@2 C D E F G@2 A B A B A B@3 D E F G@2
  A B A B A B A H
>`.pickRestart({
  A: "c2@2 d2@2 ~@2 c2@2 d2@3 ~@5", B: "c2@2 d2@3 ~ c2@2 d2@3 ~@5", C: "c2@2 d2@3 ~ c2@2 d2@2 f2 ~ c2@2 d2@2",
  D: "e1@8 e2!2 d2 ~ e2@3 ~", E: "e2!2 d2 ~ e2@4 e2!2 d2 ~ e2@4", F: "f#1@7 ~ f#2@2 e2 ~ f#2@3 ~",
  G: "[e1@2 f#1@3 ~ g1@3 ~ a1@2 e1@18 ~@2]/2", H: "c2@2 d2@3 ~@11",
})).s("gm_fretless_bass").gain(0.44)

// other · piano · "A.PIANO 1"
const piano = note("<A B@4 C@3 D ~@25 E@3 F G@4 E@3 H G@4 ~@6 I@2 J K@4 ~@6 I@2 L ~ I@2 M>".pickRestart({
  A: "~@12 [d4,f4,a4] ~ [d4,g4,b4] ~", // Dm G
  B: "[[c3,c5] ~ [d3,d5]@7 ~ [d3,d5] ~ [e3,e5] ~ [f3,f5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@10 ~@2 [f3,f5] ~ [g3,g5] ~ [a3,a5]@10 ~@2 [g3,g5] ~ [f3,f5] ~ [g3,g5] ~, [d4,a4]@9 ~@55]/4", // C D E F G A F G …
  C: "[[c3,c5] ~ [d3,d5]@7 ~ [d3,d5] ~ [e3,e5] ~ [f3,f5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5] ~]/3", // C D E F G A F G …
  D: "[c4,c6] ~ [d4,d6]@4 [a3,a5] ~ [c4,c6] ~ [d4,d6]@4 ~@2", // C D A C D
  E: "[[c3,c5] ~ [d3,d5]@7 ~ [d3,d5] ~ [e3,e5] ~ [f3,f5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@2]/3", // C D E F G A F G …
  F: "~@2 [d4,d6]@4 [a3,a5] ~ [c4,c6] ~ [d4,d6]@4 ~@2", // D A C D
  G: "[[c3,c5] ~ [d3,d5]@7 ~ [d3,d5] ~ [e3,e5] ~ [f3,f5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@4 [d4,d6]@3 ~ [a3,a5] ~ [c4,c6] ~ [d4,d6]@4 ~@2]/4", // C D E F G A F G …
  H: "~@2 [d4,d6]@3 ~ [a3,a5] ~ [c4,c6] ~ [d4,d6]@3 ~@3", // D A C D
  I: "[~@10 [f3,f5] ~ [g3,g5] ~ [a3,a5]@11 ~ [f3,f5] ~ [g3,g5] ~ [a3,a5]@2]/2", // F G A F G A
  J: "[c4,c6]@2 [d4,d6]@3 ~ [a3,a5] ~ [c4,c6] ~ [d4,d6]@4 ~@2", // C D A C D
  K: "[~@7 d5@2 ~@6 d5@2 ~@6 d5@2 ~@6 d5, ~@2 d4@15 ~ d4@15 ~ d4@14 ~@2 d4@14, ~@3 f4@6 ~@2 f4@6 ~@2 f4@6 ~@2 f4@5, ~@5 a4@4 ~@4 a4@4 ~@4 a4@4 ~@4 a4@3]/4",
  L: "[c4,c6] ~ [d4,d6]@3 ~ [a3,a5] ~ [c4,c6] ~ [d4,d6]@4 ~@2", M: "[c4,c6]@2 [d4,d6]@3 ~@11",
})).s("gm_piano").gain(0.38)

// other · flute
const flute = note("<~@25 A B C D@2 ~@33 E@2 ~@11>".pickRestart({
  A: "g4@3 g4!2 a4@2 b4", B: "~ a4 g4@6 ~@6 g4@2", C: "a4 a4@2 a4@4 a4", D: "[g4@2 a4@4 b4@4 a4@2 g4@9 ~@11]/2",
  E: "[g4@4 g4 a4@2 b4@2 a4 g4@4 ~@2]/2",
})).s("gm_flute").gain(0.28).pan(0.4)

// bass · epiano1 · "E.PIANO 1"
const bass_2 = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A C D E F G@2 A B A B A B A B A B A B A B A B A B A C D E F G@2 A B A B A B A
  B D E F G@2 A B A B A B A H
>`.pickRestart({
  A: "~@2 a2!2 c3@2 a2@2 ~@4 [g1,g2] [f1,f2] d1@2, ~@14 d2 ~", // G F
  B: "~@2 a2!2 c3@2 a2 ~@3 [g1,g2]@2 f1@2 d1@2, ~@12 f2 ~ d2 ~", // G
  C: "~@2 a2!2 c3@2 a2 ~@3 [f1,f2]@2 [c1,c2]@2 [d1,d2]@2", D: "~ e1@6 ~ e1!2 d1@2 e1@3 ~",
  E: "e1!2 d1 ~ e1@4 e1!2 d1@2 e1@3 ~", F: "f#1@7 ~ f#1@2 e1 ~ f#1@3 ~", G: "[e1 ~ f#1@3 ~ g1@3 ~ a1@2 e1@18 ~@2]/2",
  H: "~@2 a2!2 c3@2 ~@10",
})).s("gm_epiano1").gain(0.38)

// other · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@3 A B ~@2 C D ~ E F G F H@3 I H J H K L@2 M N@2 O P@2 ~@4 Q E F G F H@3 I H J H K L@2 M N@2 O P@2 ~@8 N@2 O P@2 ~@8
>`.pickRestart({
  A: "a5@8 ~@6 a5 ~, c6 ~@3", B: "c6 ~ d6@4 a5 ~ c6 ~ d6@4 ~@2", C: "~@2 d6 ~@11 a5 ~",
  D: "c6 ~ d6@3 ~ a5 ~ c6 ~ d6@4 ~@2", E: "c5@2 ~@4 a4 ~@3 c5 ~@5", F: "~@8 [a3,a4] ~ [c4,c5] ~ [c#4,c#5] ~ [d4,d5] ~",
  G: "~@6 [a4,c5] ~@5 [c#4,c#5] ~ [d4,d5] ~", H: "~@8 a3 ~ c4 ~ [c#4,c#5] ~ [d4,d5] ~",
  I: "~@6 f5 [d5,e5] [a3,a4] ~ [c4,c5] ~ [c#4,c#5] ~ [d4,d5] ~", // Dsus2 A C C# D
  J: "~@6 [f5,c6] [d5,e5] [a3,a4] ~ [c4,c5] ~ [c#4,c#5] ~ [d4,d5] ~", // F5 Dsus2 A C C# D
  K: "~@5 [f5,a5,c6] ~@2 [a3,a4] ~ [c4,c5] ~ [c#4,c#5] ~ [d4,d5] ~", // F A C C# D
  L: "[~@2 c5 ~ f5 ~ a5 ~@7 [d5,g5]@6 ~ a5 [f5,g5] ~ [a3,a4] ~ [c4,c5] ~ [c#4,c#5] ~ [d4,d5] ~]/2", // G5 Fsus2 A C C# D
  M: "~@2 c5 ~ f5 ~ a5 ~@9", N: "[e5,g5,b5]/2", O: "[f#5,a5,c#6]@15 ~",
  P: "[[e5,g5,b5]@2 [f#5,a5,c#6]@3 ~ [g5,b5,d6]@3 ~ [f#5,a5,c#6]@2 [e5,g5,b5]@20]/2", Q: "~@2 d4 ~@5 a4 ~ g4 ~ f4 ~@3",
})).s("gm_rock_organ").gain(0.18).pan(0.6)

// other · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note("<~@14 A@3 ~ A B A ~@2 C ~@15 A@3 ~ A B A ~@2 C ~@27>".pickRestart({
  A: "~@8 a4 ~ c5 ~@5", B: "~@7 b5 ~@8", C: "~@6 e5 ~@9",
})).s("gm_rock_organ").gain(0.13).pan(0.6)

// other · trumpet
const trumpet = note(`<
  ~@4 A B C B D ~@16 E@2 F G H I@4 ~@2 J K ~@2 L K ~@2 J K ~@2 L K M@2 N O P I@3 Q B C B D E@2 F G H I@7 R
>`.pickRestart({
  A: "~@7 d5", B: "~@2 a4 ~ c5 ~ d5@3 ~ a4 ~ c5 ~ d5@2", C: "~@2 f5@3 ~ d5@3 ~ a4 ~ c5 ~ d5@2",
  D: "~@2 f5@2 ~@2 d5@3 ~@7", E: "[e4@31 ~]/2", F: "f#4@15 ~", G: "e4@5 ~@2 c#5", H: "~@2 d5@3 ~ d#5@2 e5@2 ~@6",
  I: "c5@2 d5 ~@3 c5@2 d5 ~@7", J: "c5 d5 e5@12 ~@2", K: "e5 d5 c5 ~@13", L: "a4 c5 e5@12 ~@2",
  M: "~ b4 ~ g4 ~ e4 b3 ~", N: "~@2 c#5@3 ~ a4@2 ~@2 f#4@2 ~@4", O: "~@2 b4@2 ~@2 g4@2 ~@2 f#4@2 e4 ~ c#5@2",
  P: "~ d5 ~ d#5 e5 ~@3", Q: "c5@2 d5 ~@3 c5@2 d5 ~@5 d5@2", R: "c5@2 d5 ~@13",
})).s("gm_trumpet").gain(0.31).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@4 A B C B D ~@19 E F G H G H ~@2 I J ~@2 I J ~@2 I J ~@2 I J K L M N O G H G P B C B Q ~@3 E F G H G H G H G R
>`.pickRestart({
  A: "~@7 d4", B: "~@2 a3 ~ c4 ~ d4@3 ~ a3 ~ c4 ~ d4@2", C: "~@2 f4@3 ~ d4@3 ~ a3 ~ c4 ~ d4@2",
  D: "~@2 [a4,c5]@3 ~ [f4,a4]@3 ~@7", E: "~@2 a3@2 ~@2 b3@3 ~@5 c#4@2", F: "~@2 d4@3 ~ d#4@2 e4@2 ~@6",
  G: "c4@2 d4 ~@3 c4@2 d4 ~@7", H: "a4@3 ~@3 a4@3 ~@7", I: "[c4,f4] [f4,a4] [a4,c5]@12 ~@2",
  J: "[a4,c5] [g4,b4] [f4,a4] ~@13", K: "~@2 b4@3 ~ g4@3 ~ e4@2 b3@2 ~@2", L: "~@2 b4@3 ~ g4@2 ~@2 e4@2 b3@2 ~@2",
  M: "~@2 c#5@2 ~@2 a4@3 ~ f#4@2 ~@4", N: "~@2 b4@3 ~ g4@2 ~@2 f#4@2 e4 ~ c#4@2", O: "~ d4 ~ d#4 e4 ~@3",
  P: "a4@3 ~@3 a4@3 ~@5 d4@2", Q: "~@2 [a4,c5]@3 ~ [f4,a4]@2 ~@8", R: "a4@3 ~@13",
})).s("gm_alto_sax").gain(0.28).pan(0.4)

// other · alto sax · soft notes
const alto_sax_soft = note("<~@25 A@2 B C ~@34 A@2 B C ~@9>".pickRestart({
  A: "[b3@15 ~]/2", B: "c#4@7 ~", C: "g3 ~@4 a3 g3 ~",
})).s("gm_alto_sax").gain(0.16).pan(0.4)

// other · tenor sax
const tenor_sax = note(`<
  ~@4 A B C B ~@17 D@2 E F@2 G@4 ~@2 H I ~@2 J I ~@2 H I ~@2 J I ~@5 G@3 K B C B ~ D@2 E F@2 G@7 L
>`.pickRestart({
  A: "~@7 d4", B: "~@2 a3 ~ c4 ~ d4@3 ~ a3 ~ c4 ~ d4@2", C: "~@2 f4@3 ~ d4@3 ~ a3 ~ c4 ~ d4@2", D: "[g3@31 ~]/2",
  E: "a3@15 ~", F: "[e3@2 f#3@3 ~ g3@3 ~ f#3@2 e3@12 ~@8]/2", G: "c4@2 d4 ~@3 c4@2 d4 ~@7", H: "a3 b3 c4@12 ~@2",
  I: "c4 b3 a3 ~@13", J: "f3 a3 c4@12 ~@2", K: "c4@2 d4 ~@3 c4@2 d4 ~@5 d4@2", L: "c4@2 d4 ~@13",
})).s("gm_tenor_sax").gain(0.19).pan(0.4)

// other · trombone
const trombone = note(`<
  ~@4 A B C B D ~@16 E@2 F G H I J I J ~@2 K L ~@2 M L ~@2 K L ~@2 M L N@2 O P Q I J I R B C B D E@2 F G H I J I J I J I
  S
>`.pickRestart({
  A: "~@7 d4", B: "~@2 a3 ~ c4 ~ d4@3 ~ a3 ~ c4 ~ d4@2", C: "~@2 f4@3 ~ d4@3 ~ a3 ~ c4 ~ d4@2",
  D: "~@2 f4@3 ~ d4@3 ~@7", E: "[b2@31 ~]/2", F: "c#3@7 ~", G: "b2@2 c#3@3 ~ d3@2 ~@2 c#3 ~ b2@2 c#3@2",
  H: "~ d3 ~ d#3 e3 ~@3", I: "c4@2 d4 ~@3 c4@2 d4 ~@7", J: "f4@2 f#4 ~@3 f4@2 f#4 ~@7", K: "c4 d4 e4@12 ~@2",
  L: "e4 d4 c4 ~@13", M: "a3 c4 e4@12 ~@2", N: "~@2 b3@3 ~ g3@2 ~@2 e3@2 b2@2 ~@2", O: "~@2 c#4@3 ~ a3@3 ~ f#3@2 ~@4",
  P: "~@2 b3@3 ~ g3@2 ~@2 f#3@2 e3 ~ c#4@2", Q: "~@2 d4@3 ~ d#4@2 e4@2 ~@6", R: "f4@2 f#4 ~@3 f4@2 f#4 ~@5 d4@2",
  S: "f4@2 f#4 ~@13",
})).s("gm_trombone").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!74 x>").gain(0.44)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B@2 A@7 B A@3 B A@3 B A@3 B A@3 B@2 A@7 B A@3 B@2 A@7 B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@29 [~@4 x ~@2 x] ~@24 [~@3 x!2 ~@2 x] ~@12 [~@3 x!2 ~@2 x] ~@8>").gain(0.38)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B ~@2 C A ~ C A B ~@2 C A ~ C A B ~@2 C A ~ C A B ~@2 C@2 A C A@2 B ~@2 C A ~ C A B ~@2 C A ~ C A B ~@2 C@2 A C A
  C A ~ C A B ~@2 C@2 A C A C A C ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x ~@6",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@3 A ~@20 B ~@3 A ~@19 C B ~ A ~ A ~@3 A ~@3 C B ~ A ~ A ~ A ~@2>".pickRestart({
  A: "~@5 x!3", B: "x", C: "~@7 x",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@31 [~@5 x ~@2] ~@44>").gain(0.49)

// drums · crash
const crash = s("cr").struct("<~@30 A ~@24 A ~@12 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.27)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A@28 B A@24 B A@12 B A@7 ~>".pickRestart({
  A: "~@4 x!3 ~", B: "~@5 x!2 ~",
})).gain(0.86)

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

// drums · congas
const congas = s("conga:18").struct("<~@9 [~@3 x!2 ~@11]!21 ~@4 [~@3 x!2 ~@11]!21 ~@8 [~@3 x!2 ~@11]!5 ~@8>").gain(0.7)

// drums · congas
const congas_2 = s("conga:33").struct("<~@10 A@7 ~ A@7 ~ A@4 ~@5 A@7 ~ A@7 ~ A@4 ~@9 A@4 ~@8>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.7)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B C D E A@2 D A B C D E A@2 D A B C D E A@2 D A B C D F G A G A@2 B C D E A@2 D A B C D E A@2 D A B C D F G A G A
  G A@2 D A B C D F G A G A G A G H
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x ~ x ~ x!4", D: "x!5 ~ x!2", E: "x ~ x!6", F: "x ~ x!3 ~@3", G: "~@2 x!6", H: "x!3 ~@5",
// … 15 more lines

More by Ann Peebles