Strudelify

Me, You & A Dog Named Boo

Lobo

KeyF majorTempo122 bpm
0:00/0:00
// Me, You & A Dog Named Boo — Lobo
// 122 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 28, guitar program 25.
setcpm(122/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 · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A@4 B C@3 D@2 E@2 F E@2 G H I J K F K L K M N@2 O@2 F C@3 D@2 P@2 F P@2 G Q F K F K F K M R@2 P@2 F C@3 D@2 S@2 F
  T@2 U V F W F K B W M K F K F K F W M K B K F K F K M W X
>`.pickRestart({
  A: "[[c4,f4]@63 ~, a3 ~@3]/4", B: "[bb3,d4,f4]@7 ~ [g3,c4,e4]@6 ~@2", C: "[[c4,f4]@47 ~, a3 ~@2]/3",
  D: "[[c4,e4]@31 ~, g3 ~]/2", E: "[[c4,f4]@31 ~, a3 ~]/2", F: "[bb3,d4,f4]@7 ~ [g3,c4,e4]@7 ~", G: "[bb3,eb4,g4]@7 ~",
  H: "[bb3,d4,f4]@10 ~@2 [g3,c4,e4]@3 ~", I: "[bb3,d4,f4]@9 ~@3 [g3,c4,e4]@2 ~@2", J: "[bb3,d4,f4]@6 [g3,c4,e4]@9 ~",
  K: "[a3,c4,f4]@15 ~", L: "[bb3,d4,f4]@6 ~@2 [g3,c4,e4]@7 ~", M: "[bb3,eb4,g4]@7 ~ [bb3,d4,f4]@7 ~",
  N: "[c4@31 ~, f4@21 ~@11, a3 ~]/2", O: "[[a3,f4] ~, c4@31 ~]/2", P: "[[a3,c4,f4]@31 ~]/2",
  Q: "[bb3,d4,f4]@11 ~ [g3,c4,e4]@2 ~@2", R: "[c4@31 ~, f4@21 ~@11, a3@17 ~@15]/2", S: "[[c4,f4], a3 ~]/2",
  T: "[[c4,f4]@15 ~, a3 ~]/2", U: "[bb3,eb4,g4]@15 ~", V: "[bb3,d4,f4]@5 ~ [g3,c4,e4] ~", W: "[a3,c4,f4]@7 ~",
  X: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]@10", // F
})).s("gm_synth_strings_1").gain(0.09)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@3 A B@2 C@2 D@2 E A F@2 G@2 H I@2 ~ J K L M N O@2 P@2 Q@2 R@2 S@2 T A U@2 V@2 W X@2 J K L M N O@2 Y@2 Z@2 AA@2 AB
  AC@2 AD AE@2 AF@2 AG I@2 J K L M N AH@2 AI J K L M N O@2 AI J K L M N O@2 AJ ~
>`.pickRestart({
  A: "~@12 f4@2 g4 ~", B: "[a4@2 a4 ~@3 a4@2 ~@2 c5@3 ~ a4@9 ~@7 a4@2]/2",
  C: "[g4@2 f4@2 ~@4 f4@4 g4 ~ a4@8 ~@8 f4 ~]/2",
  D: "[a4@2 a4@2 ~@2 a4@2 ~@2 a4 ~ c5@2 a4@5 ~@3 a4@3 ~ g4@2 ~@2 f4 ~]/2", E: "g4 f4 g4@8 ~@6",
  F: "[a4 ~ a4 ~ a4 ~ a4@2 a4 ~ c5@3 ~ a4@8 ~@4 g4 ~ g4@2 a4 ~]/2", G: "[g4@2 ~@2 f4@2 ~@2 f4 ~ g4@2 ~@2 a4@8 ~@10]/2",
  H: "~@2 a4 ~ a4@2 a4 ~ a4@2 a4 ~ a4@2 ~@2", I: "[~@2 g4@2 g4 ~ g4 ~ g4@3 ~ f4 ~ f4@12 ~@6]/2",
  J: "bb4@2 bb4@2 ~@2 c5@3 ~ c5@2 bb4 ~ bb4@2", K: "~@2 a4@3 ~ a4@5 ~@5",
  L: "g4@2 g4 ~ g4@2 g4 ~ [g4,bb4]@2 g4 ~ [g4,bb4]@2 f4 ~", M: "[a4,c5] ~",
  N: "[bb4,d5]@2 bb4@2 ~@2 c5@3 ~ c5@2 bb4 ~ bb4@2", // Bb
  O: "[~@2 a4@3 ~ a4@3 ~ [a4,c5] ~ a4@2 [g4,eb5]@4 [g4,eb5]@2 g4@3 ~@3 [f4,d5] ~ [g4,d5]@3 ~]/2", // Am Cm Dm G5
  P: "[f4@21 ~@9 f4 ~]/2", Q: "[a4 ~ a4@2 ~@2 a4@5 ~ c5@2 a4@6 ~@10 a4@2]/2",
  R: "[g4 ~ f4@2 ~@4 f4 ~ g4@3 ~ a4@8 ~@6 f4@2 g4 ~]/2",
  S: "[a4@2 a4@2 ~@2 a4@2 ~@2 c5@2 ~@2 a4@5 ~ a4@2 a4 ~ a4@2 g4@2 f4@2 ~@2]/2", T: "g4 ~",
  U: "[a4 ~ a4@2 a4 ~ a4@2 ~@2 c5@3 ~ a4@7 ~@5 a4 ~ g4@2 a4 ~]/2",
  V: "[g4@2 f4 ~@3 f4 ~ f4@2 f4 ~ g4@2 a4@7 ~@9 f4@2]/2", W: "a4@2 a4 ~ a4@2 a4 ~ a4@3 ~@5",
  X: "[~@2 g4@2 g4 ~ g4 ~ g4@3 ~ f4 ~ f4@13 ~@5]/2", Y: "[f4@21 ~@7 f4@2 g4 ~]/2",
  Z: "[a4@2 a4 ~ a4 ~ a4@2 ~@2 c5@3 ~ a4@9 ~@3 a4 ~ g4@2 a4@2]/2",
  AA: "[g4@2 f4 ~ f4@2 f4 ~@3 f4 ~ g4 ~ a4@8 ~@8 f4 ~]/2", AB: "a4@2 ~@2 a4@2 a4 ~ a4@2 a4 ~ a4@2 ~@2",
  AC: "[a4@2 a4 ~ a4@3 ~@3 f4 ~ a4@2 g4@8 ~@10]/2", AD: "~@8 f4@2 f4 ~ f4@2 g4 ~",
  AE: "[a4 ~ a4@2 ~@2 a4@2 ~@2 c5@3 ~ a4@8 ~@4 a4 ~ g4@2 a4 ~]/2",
  AF: "[g4@2 f4 ~ f4@2 ~@2 f4 ~ g4@2 ~@2 a4@8 ~@8 f4 ~]/2", AG: "a4@2 a4 ~ a4@2 a4 ~ a4@2 a4 ~ a4@2 ~@2",
  AH: "[~@2 a4@3 ~ a4@3 ~ [a4,c5] ~ a4@2 [g4,eb5]@4 [g4,eb5]@2 g4@2 ~@4 [f4,d5] ~ [g4,d5]@3 ~]/2", AI: "f4@5 ~@11",
  AJ: "f4@7 ~",
})).s("gm_electric_guitar_jazz").gain(0.69)

// chords · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@20 A B C ~ D E F G ~@16 A B C ~ D E H G ~@16 A B C ~ D E I G A B C ~ D E F G A B C ~ D E F G ~
>`.pickRestart({
  A: "d5@2 d5@2 ~@2 e5@3 ~ e5@2 e5 ~ d5@2", B: "~@2 c5@3 ~ c5@5 ~@5", C: "bb4@2 bb4 ~ bb4@2 bb4 ~@3 bb4 ~@3 bb4 ~",
  D: "~@2 d5@2 ~@2 e5@3 ~ e5@2 e5 ~ d5@2", E: "~@2 c5@3 ~ c5@3 ~@3 c5@2 ~@2", F: "~@4 eb5 ~@11", G: "c5@5 ~@11",
  H: "~@4 eb5@3 ~@9", I: "~@2 eb5 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.41)

// chords · reed organ
const reed_organ = note(`<
  ~@20 A B A B C B D ~@2 E@2 F G@3 H@2 I@2 J K@2 L M N B A B C B D ~@10 O@2 F P@2 L Q A B A B C B D B N B A B R B D B N
  B A B C B D B S
>`.pickRestart({
  A: "[d5,f5] [g4,c5,e5], bb4 ~@7", B: "[a4,c5,f5]", C: "[bb4,d5] ~@7 [g4,c5,e5]@8, f5 ~",
  D: "[bb4,g5] [bb4,d5,f5], eb5 ~@15", E: "[a5, a4 ~@31]/2", F: "[f4,f5] [g4,g5]", G: "[a5, a4 ~@7]/3",
  H: "[g5, g4 ~@3]/2", I: "[a5, a4@5 ~@3]/2", J: "f5 [g4,g5], f4@3 ~@5", K: "[a5, a4@5 ~@27]/2", L: "g5, g4@7 ~",
  M: "f4@11 ~@5, f5@9 ~@7", N: "[bb4,d5,f5] [g4,c5,e5]", O: "[a5, a4@21 ~@11]/2", P: "[a5, a4@3 ~@13]/2",
  Q: "[f4,f5]@5 ~@3", R: "[bb4,f5] [g4,c5,e5], d5 ~@15", S: "~@3 [a4,c5,f5]@5",
})).s("gm_reed_organ").gain(0.09)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@11 A ~@23 B C ~ D ~ E ~@19 A ~@30 F G>".pickRestart({
  A: "~ a3 ~@2 d4 ~@11", B: "~@11 a3 ~@2 d4 ~", C: "~@3 g3", D: "~@4 f5 d5 ~@2", E: "~@8 g3@2 ~@3 d3 ~@2",
  F: "~@5 d4 ~@2", G: "f3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.64).pan(0.7)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B@2 C A B D B E A F G A H I B J K L@2 M N M N O P Q R B@2 J I A C B S G B@2 I R C T L M N M N O P Q B@2 J B I B J C
  F G B@2 I B@2 K L M N M N O P Q B U N M N O P Q B M N M N O P Q B V
>`.pickRestart({
  A: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4] ~ [f3,a3,c4,g4] ~ [f3,a3,c4,g4] ~", // F
  B: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4] ~ [f3,a3,c4,g4]@2 [f3,a3,c4,g4]@2", // F
  C: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4]@2 [f3,a3,c4,g4]@2 [f3,a3,c4,g4]@2", // F
  D: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~ [e3,g3,c4,e4]@2", // Bb C
  E: "[f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4]@2 [f3,a3,c4,g4] ~ [f3,a3,c4,g4] ~", // F
  F: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4] [e3,g3,c4,f4]@2 [e3,g3,c4,e4]!3", // C
  G: "[e3,g3,c4,d4]@2 [e3,g3,c4,d4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,f4]@4 [e3,g3,c4,e4]@4 [e3,g3,c4,e4] ~", // C
  H: "[f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4]@2 [f3,a3,c4,g4]@2 [f3,a3,c4,g4]@2", // F
  I: "[f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~ [e3,g3,c4,e4]@2", // Bb C
  J: "[f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4] ~ [f3,a3,c4,g4]@2 [f3,a3,c4,g4]@2", // F
  K: "[eb3,g3,bb3,eb4] ~ [eb3,g3,bb3,eb4] ~ [eb3,g3,bb3,eb4] ~ [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] ~", // Eb
  L: "[f3,bb3,d4,f4]!5 ~ [e3,g3,c4,e4] ~", // Bb C
  M: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~", // Bb C
  N: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,a4] ~", // F
  O: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~", // Bb C
  P: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~", // F
  Q: "[eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] ~ [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~", // Eb Bb
  R: "[f3,a3,c4,a4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,a4] ~ [f3,a3,c4,bb4]@4 [f3,a3,c4,a4]@2 [f3,a3,c4,g4] ~ [f3,a3,c4,g4] ~", // F
  S: "[e3,c4,e4] ~@3 [e3,g3,c4,e4] ~ [e3,g3,c4,f4]@4 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2, g3 ~@3", // C
  T: "[eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] ~ [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] ~", // Eb
  U: "[f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~", // Bb C
  V: "[a3,c4]@2 [f3,a3,c4,a4]@2 [f3,a3,c4,g4] ~ [f3,a3,c4,a4]@10, bb4 ~@3", // Am F
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.4)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B@2 C D E F G H I J C D K L M N@2 O P Q R Q S T K U E C D B E G H V B C D B L M N Q P Q R W S T K E B C X E K G
  Y V J Z AA K AB M N O AC W R W S T F AD P Q R W S T K W AC Q R Q S T K AE
>`.pickRestart({
  A: "f2@4 c2@4 f2@3 f2 c2@2 d2@2", B: "f2@3 ~ c2@3 ~ f2@2 ~ f2 c2@2 d2@2", C: "f2@4 c2@4 f2@2 ~ f2 c2@2 f2@2",
  D: "bb1@4 f1@2 bb1@2 c2@3 ~ g1@2 c2@2", E: "f2@3 ~ c2@3 ~ f2@3 f2 c2@2 d2@2", F: "f2@4 c2@3 ~ f2@3 f2 c2@2 d2@2",
  G: "f2@4 c2@3 ~ f2@2 ~ f2 c2@2 f2@2", H: "c2@3 ~ g1@3 ~ c2@2 ~ c2 g1@2 a1@2", I: "c2@4 g1@3 ~ c2@2 ~ c2 d2@2 e2@2",
  J: "f2@3 ~ c2@4 f2@2 ~ f2 c2@2 d2@2", K: "f2@4 c2@3 ~ f2@2 ~ f2 c2@2 d2@2", L: "f2@3 ~ c2@3 ~ f2@4 c2@2 f2@2",
  M: "eb2@4 bb1@3 ~ eb2@4 bb1@3 ~", N: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 ~@2 c2@2 ~@2",
  O: "bb1 ~ bb1@2 ~@2 bb1@2 c2 ~ c2@3 ~ g1@2", P: "f2 ~ f2@2 ~@2 c2@2 f2 ~ f2@2 c2@2 f2@2",
  Q: "bb1 ~ bb1@3 ~ bb1@2 c2 ~ c2@2 ~@2 g1@2", R: "f2 ~ f2@2 ~@2 c2@2 f2 ~ f2 ~ c2@2 f2@2",
  S: "f2 ~ f2@2 ~@2 c2@2 f2 ~ f2@3 ~ c2@2", T: "eb2 ~ eb2@3 ~ eb2 ~ bb1 ~ bb1@3 ~ bb1@2",
  U: "f2@4 c2@4 f2@2 ~ f2 c2@2 d2@2", V: "c2@4 g1@3 ~ c2@3 c2 d2@2 e2@2", W: "bb1 ~ bb1@3 ~ bb1@2 c2 ~ c2@3 ~ g1@2",
  X: "bb1@4 f1@2 bb1@2 c2@3 ~ g1@2 c2 ~", Y: "c2@4 g1@3 ~ c2@2 ~ c2 g1@2 a1@2", Z: "f2@3 ~ c2@4 f2@2 ~ f2 c2@2 f2@2",
  AA: "bb1@3 ~ f1@2 bb1@2 c2@3 ~ g1@2 c2@2", AB: "f2@3 ~ c2@4 f2@4 c2@2 f2@2",
  AC: "f2 ~ f2@3 ~ c2@2 f2 ~ f2@2 c2@2 f2@2", AD: "bb1 ~ bb1@2 ~@2 bb1@2 c2 ~ c2@2 ~@2 g1@2", AE: "f2 c2 a1 f1@5",
})).s("gm_acoustic_bass").gain(0.71)

// drums · kick
const kick = s("bd").struct("<~@2 A@16 B@2 C@7 A@16 B C@6 D A@16 B C@6 D A C@6 D A C@6 D E F>".pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2 ~ x!2 ~@3", C: "x ~@2 x!2 ~@2 x", D: "x ~@2 x!2 ~@3", E: "x ~@5 x ~ x ~@2 x ~@4",
  F: "x!2 ~ x ~@4",
})).gain(0.43)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!81 [~@4 x ~@5 x ~ x!3 ~] [~ x ~ x]!7 [~@4 x ~@7 x ~ x!2] [~ x ~@2]>")
  .gain(0.43)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@48 B ~@23 B ~@15 B ~@2>".pickRestart({
  A: "~@8 x!5 ~ x ~", B: "~@3 x",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@7 A ~@6 B@2 ~@6 A ~@9 A ~@6 B ~@6 C ~ A ~@7 A ~@6 B ~@6 C B ~@7 D ~@6 C D E
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~ x", D: "~@5 x ~@2", E: "x",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@17 A ~@8 A ~@14 A ~@23 A ~@7 A ~@7 A ~@6 B C>".pickRestart({
  A: "x", B: "~@3 x", C: "~@2 x!2 ~@4",
})).gain(0.24)

stack(
  synth_strings_1, electric_guitar_jazz, electric_guitar_jazz_2, reed_organ, electric_guitar_muted,
  acoustic_guitar_steel, bass, kick, snare, hihat, mid_tom, open_hat, crash
)

More by Lobo