Strudelify

Baby I Love You

Black Fooss

KeyA majorTempo120 bpm
0:00/0:00
// Baby I Love You — Black Fooss
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · piano · "Gesang/K"
const piano = note(`<
  ~@2 A B C D E F G@2 H I J K L M N O P@3 Q R@4 S T U@2 V W X Y H I J K L M N O P@3 Q Z@4 S T U@2 V W AA AB H I J K L M
  N O ~@8 A B C D E F G@2 H I J K L M N O ~@8 H I J K L M N O ~@4
>`.pickRestart({
  A: "[c#4,e4,a4]@5 ~ [a3,c#4,e4]@4 ~@2 [c#4,e4,a4]@3 ~", B: "[e4,g#4,b4]@5 ~ [g#3,b3,e4]@4 ~@2 [e4,g#4,b4]@3 ~",
  C: "[g4,a4,c#5]@5 ~ [g4,a4,b4]@6 [g4,a4]@3 ~", D: "[f#4,a4,d5]@3 ~ [d5,f#5]@6 ~@2 [f#4,a4,d5]@4, ~ a4@2 ~",
  E: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@6 ~@2 a4@3 ~, ~@10 e4@5 ~", F: "[e4,g#4,b4]@3 ~ [g#4,b4]@6 a4@2 b4@4, ~ e4@3",
  G: "[[e4,a4,c#5]@7 ~ [e4,a4,d5]@3 ~ [e4,c#5]@2 [e4,g#4,b4]@10 ~@8, ~@12 a4 ~@19]/2", // A Dsus2 C#m E
  H: "[c#5,a5]@6 [c#5,e5]@6 [c#5,a5]@3 ~", I: "[d5,b5]@3 [g#4,e5]@3 [d5,b5]@2", J: "[e5,c#6]@3 [d5,b5]@3 [c#5,a5]@2",
  K: "[f#5,d6] [a5,f#6]@2 [f#5,d6]", L: "[e5,c#6]@2 [e5,c#6]@3 [c#5,a5] [e5,c#6]@2",
  M: "[d5,b5]@2 [d5,b5]@3 [c#5,a5] [b4,g#5]@2", N: "[f#5,d6]@3 [e5,c#6]@3 [d5,b5]@2", O: "[c#5,a5]@3 ~",
  P: "[~@6 [b4,g#5]@2 [b4,g#5]@2 [c#5,a5]@4 [d5,b5]@7 ~ [d5,b5]@2 [c#5,a5]@2 [b4,g#5]@4 [c#5,a5]@9 ~@3 [a4,c#5]@2 [d5,f#5]@4]/3", // E F#m G F#m E F#m A D
  Q: "[c#5,e5]@7 ~", // C#m
  R: "[~@6 g#5@2 [b4,g#5]@2 [c#5,a5]@4 [d5,b5]@7 ~ [d5,b5]@2 [e5,c#6]@2 [f#5,a5,d6]@4 [f#5,a5,d6]@9 ~ [e5,a5,c#6]@13 ~@11, ~@6 b4 ~@57]/4", // E F#m G C#m D A
  S: "~@6 [c#5,f5]@2 f5@2 [c#5,f5]@3 ~ [f5,g#5]@2, ~@8 c#5 ~@7", // C# Fm
  T: "~@2 [f5,g#5]@3 ~ [f5,g#5]@2 [c#5,f5] ~ [f5,g#5]@5 ~", // Fm C# Fm
  U: "[[f#5,a5]@6 [f#5,a5]@2 [e5,g#5]@2 [f#5,a5]@2 [e5,g#5]@2 [d5,f#5]@11 ~ f#5@3 ~ f#5@2]/2", // F#m E F#m E D
  V: "[d#5,f#5]@2 [d#5,f#5] ~ [d#5,f#5]@2 [d#5,f#5]@7 ~ [d#5,f#5]@2", // D#m
  W: "[d#5,f#5]@2 b4 ~ [d#5,f#5] ~ [d#5,f#5]@7 ~ [d#5,f#5] ~", // D#m
  X: "[c#5,e5,a5]@2 ~ [c#5,e5]@3 [c#5,e5,a5]@2 [f#5,a5]@2 ~ [d5,f#5,a5]@2 ~ [d5,f#5] ~, ~@7 a5", // A C#m A F#m D
  Y: "[b4,e5,g#5]@13 ~@3", // E
  Z: "[~@6 g#5@2 [b4,g#5]@2 [c#5,a5]@4 [d5,b5]@7 ~ [d5,b5]@2 [e5,c#6]@2 [f#5,a5,d6]@4 [f#5,a5,d6]@9 [e5,a5,c#6]@13 ~@12, ~@6 b4 ~@57]/4", // E F#m G C#m D A
  AA: "a5@2 ~ e5@2 c#5@2 ~ [f#5,a5]@2 ~ [d5,f#5]@2 a5@2 ~, ~@13 f#5 ~@2", AB: "[e5,g#5]@3 ~@13",
})).s("gm_piano").gain(0.56)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@6 A B C D E F E G A H I J K B L M H B M N O P Q R S T U V E F E G A H I J K B L M H B M N O P Q R S T W X E F E G A
  H I J E F E G A H I Y Z AA E AB A B C D E F E G A H I J E F E G A H I Y AC F E G A H I J AD B I AE
>`.pickRestart({
  A: "a1@5 ~ a1 ~ a1@8", B: "e1@6 e1 ~ e1@8", C: "a1@6 a1 ~ a1@7 ~", D: "e1@5 ~ e1 ~ e1@8", E: "a1@5 ~ a1@2 a1@8",
  F: "e1@2 ~ e1 e1@4", G: "d2@4 ~@2 d2 ~ d2@7 ~", H: "e1@5 ~ e1 ~ e1@7 ~", I: "d2@3 c#2@3 b1@2",
  J: "a1@7 ~ d2@4 c#2@3 ~", K: "e1@6 e1 ~ e1@6 ~@2", L: "a1@6 a1@2 a1@7 ~", M: "a1@6 a1 ~ a1@8",
  N: "a1@5 ~ a1@2 c#2@4 e2@4", O: "c#2@5 ~ c#2@2 c#2@7 ~", P: "c#2@3 c#2 c#2@4", Q: "f#2 e2", R: "d2 c#2",
  S: "b1@6 b1 ~ b1@6 ~@2", T: "b1@6 b1@2 b1@7 ~", U: "a1@5 ~ a1@2 d2@5 ~ d2@2", V: "e2@3 e2 e2@2 b1@2",
  W: "a1@2 ~ a1@2 a1@2 ~ d2@2 ~ d2@2 d2@2 ~", X: "e2@3 ~@13", Y: "a1", Z: "a1 ~@5 a1 ~ a1@8", AA: "e1@5 ~ e1@2 e1@8",
  AB: "d2@5 ~ d2 ~ d2@8", AC: "a1 ~@5 a1@2 a1@8", AD: "e1@5 ~ e1@2 e1@7 ~", AE: "a1 ~@7",
})).s("gm_acoustic_bass").gain(0.64)

// chords · epiano2 · "DX-Rhode"
const epiano2 = note(`<
  ~@6 A B C B D E F G D H I J K@3 L M@4 N O P Q R S T U D E F G D H I J K@3 L M@4 N O P Q R S T U D E F G D H I V D E F
  G D H W X Y Z AA AB A B C B D E F G D H I X D E F G D H W X D E F G D H I X AC AD AE AF
>`.pickRestart({
  A: "~@6 c#5@9 ~, ~@2 e4@13 ~, ~@4 a4@11 ~", B: "~@3 b4@5, ~ e4@7, ~ g#4@3", C: "~@2 c#5@2 a4@2 e4@9 ~",
  D: "~ e5 c#5 a4@5", E: "~ e5 b4 g#4@5", F: "~ e5 c#5 g4@5", G: "~@6 d5@7 ~@3, ~@2 f#4@11 ~@3, ~@4 a4@9 ~@3",
  H: "~@2 e5@2 b4@2 g#4@9 ~", I: "[f#4,a4,d5]@5 ~ [e4,a4,c#5]@5 ~ [d4,f#4,b4]@3 ~",
  J: "[c#4,e4,a4]@7 ~ [f#4,a4,d5]@4 [e4,a4,c#5]@3 ~", // A D A
  K: "[[b3,e4,g#4]@10 b3@4 [b3,e4,g#4]@10 ~@2 b3@3 ~ [e4,a4]@14 c#4@3 ~, ~@24 [e4,g#4]@6 c#4@13 ~@5]/3", // E A5 E
  L: "~ [e4,a4,c#5] [c#4,e4,a4] [a3,c#4,e4]", // A
  M: "[[e4,g#4]@9 ~@4 g#4@3 [c#4,a4]@9 ~@5 e4@2, b3@8 ~ b3@6 ~@11 a3@6, ~@11 e4@14 ~@3 c#4@4]/4", N: "[c#4,f4,g#4]",
  O: "[c#4,f4]@7 ~ [c#4,f4]@4 [c#4,f4,g#4]@4", P: "[f#4,a4] [e4,g#4]", Q: "[d4,f#4]@7 ~ [c#4,e4]@8", R: "[b3,d#4]",
  S: "~@3 d#4, f#3@15 ~, ~@6 b3@9 ~", T: "[a3,c#4,e4]@8 [a3,d4,f#4]@7 ~", U: "b3@3 ~ b3@10 ~@2, [e4,g#4]@7 ~",
  V: "[c#4,e4,a4]@7 ~@9", W: "[f#4,a4,d5]@6 [e4,a4,c#5]@5 ~ [d4,f#4,b4]@4", X: "[c#4,e4,a4]",
  Y: "~@3 a4@5, ~@2 c#4@13 ~, ~ e4@3", Z: "~@6 g#4@9 ~, ~@2 b3@13 ~, ~ e4@3", AA: "~ c#4 e4 g4@5", AB: "~ f#4 d4 a3@5",
  AC: "[b3,e4,g#4]@5 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@7 ~, a4 ~@15", AD: "[b3,e4,g#4]@6 [b3,e4,g#4]@2 [b3,e4,g#4]@7 ~",
  AE: "[a3,d4,f#4]@5 ~ [a3,c#4,e4]@4 ~@2 [f#3,b3,d4]@3 ~", AF: "[a3,c#4] ~@15, e3 ~@7",
})).s("gm_epiano2").gain(0.61).pan(0.7)

// other · acoustic guitar steel · "LeadGuit"
const acoustic_guitar_steel = note("<~@65 A B C D E F G H I ~@15 A B C D J ~@16>".pickRestart({
  A: "~@12 e3@3 ~", B: "a3@6 e3@6 a3@3 ~", C: "b3@3 e3@3 b3@2", D: "c#4@3 b3@3 c#4@2",
  E: "d4@4 [d4,f#4]@7 ~ [d4,f#4]@4", F: "[d4,f#4]@4 [c#4,e4]@5 ~ [c#4,e4]@4 [c#4,e4]@2",
  G: "[c#4,e4] [b3,d4]@2 [b3,d4]", H: "a3@3 b3@3 a3@2", I: "e3@15 ~", J: "d4@4 [d4,f#4]@7 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// chords · synth strings 2 · "Fl„che"
const synth_strings_2 = note(`<
  ~@2 A@2 B@2 C@4 D E F G H I J K L@8 M@2 N O P@2 Q R D E F G H I J K L@8 M@2 N O P@2 Q R D E F G H I J K D E F G H I J
  S A@2 B@2 C@4 D E F G H I J S D E F G H I J S D E F G H I J S T@2 U V
>`.pickRestart({
  A: "[[a3,c#4] [g#3,b3], e3@31 ~]/2", B: "[[g3,c#4] [f#3,d4], a3]/2", C: "[[a3,c#4] [g#3,b3] [a3,c#4] [g#3,b3], e3]/4",
  D: "[a3,c#4,e4]", E: "[g#3,b3,e4]", F: "[g3,c#4,e4]", G: "[f#3,a3,d4]", H: "[e3,a3,c#4]", I: "[e3,g#3,b3]",
  J: "[f#3,a3,d4]@3 [e3,a3,c#4]@3 [d3,f#3,b3]@2", K: "[c#3,e3,a3]@2 [f#3,a3,d4] [e3,a3,c#4]",
  L: "[[b3,g#4]@31 ~ [c#4,a4]@32 [b3,g#4]@32 [c#4,a4]@32, e4]/8", M: "[f4,g#4]/2", N: "[f#4,a4] [e4,g#4]",
  O: "[d4,f#4] [c#4,e4]", P: "[b3,d#4]/2", Q: "[a3,c#4] [d4,f#4]", R: "[e4,g#4]", S: "[c#3,e3,a3]",
  T: "[[g#3,b3,e4]@15 ~]/2", U: "[d4,f#4]@5 ~ [c#4,e4]@5 ~ [b3,d4]@4", V: "[a3,c#4] ~@15",
})).s("gm_synth_strings_2").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A@7 B A@3 C A@15 B A@3 B A@3 C A@14 D E A@3 B A@3 C A@3 B A@3 C A@11 B A@3 C A@3 B A@3 C A@3 B A@3 C A@2 B E
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x ~", C: "x ~ x!2", D: "x ~@3 x ~@2 x!2 ~@2 x ~ x ~@2", E: "x",
})).gain(0.39)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A@11 B A@7 B A@6 C ~ A@7 B A@7 B A@6 ~@6 A@3 B A@7 B A@15 B A@7 B A@7 B A@3 B
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x", C: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~",
})).gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~@3 B ~@3 B ~@3 C ~@7 D ~@7 E ~@3 B ~@3 C ~@7 D ~@6 F ~@4 B ~@3 C ~@3 B ~@3 G ~@3 A ~@3 B ~@3 B ~@3 C ~@3 B ~@3
  G ~@3 B ~@3 H ~@2 I ~
>`.pickRestart({
  A: "~@4 x ~ x ~@6 x ~@2", B: "~@13 x ~@2", C: "~@8 x ~@4 x ~@2", D: "~@2 x!2 ~@2 x!2", E: "~ x ~ x",
  F: "~@5 x ~@7 x ~@2", G: "~@4 x ~ x ~@5 x!2 ~@2", H: "~@3 x", I: "~@2 x ~@3 x!2",
})).gain(0.39)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A ~@3 B ~@3 B ~@3 C ~@7 D ~@7 E ~@3 B ~@3 C ~@7 D ~@6 F ~@4 B ~@3 C ~@3 B ~@3 G ~@3 A ~@3 B ~@3 B ~@3 C ~@3 B ~@3
  G ~@3 B ~@3 H ~@2 I ~
>`.pickRestart({
  A: "~ x ~@3 x!2 ~", B: "~@5 x!2 ~", C: "~ x!3 ~ x!2 ~", D: "~ x ~@3 x ~@2", E: "x ~ x ~@5 x ~ x!2 ~@4",
  F: "x ~@2 x ~@4 x ~@2 x ~@4", G: "x!2 ~@3 x ~@2", H: "x ~ x!3 ~ x ~ x ~ x ~@5", I: "x!2 ~@2 x!2 ~@2",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@19 A ~@23 A ~@27 A ~@31>".pickRestart({
  A: "x",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 [~ x ~@2]!50 ~@6 [~ x ~@2]!44 ~@4>").gain(0.39)

// drums · shaker
const shaker = s("sh").struct("<~@6 [x!4 ~@4]!50 ~@6 [x!4 ~@4]!44 ~@4>").gain(0.28)

stack(
  piano, bass, epiano2, acoustic_guitar_steel, synth_strings_2, kick, snare, low_tom, hihat, mid_tom, high_tom, crash,
  tambourine, shaker
)

More by Black Fooss