Strudelify

I've Gotta Get a Message to You

Bee Gees

KeyC majorTempo80 bpm
0:00/0:00
// I've Gotta Get a Message to You — Bee Gees
// 80 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A@2 B@2 C D E F G H I J K L@3 K M@4 N O P Q R H I J K L@3 K M@4 N O P Q R H I J K L@3 K S@3 K L@3 K T@3
>`.pickRestart({
  A: "[~@4 [e4,g4,c5]@8 ~@2 [f4,a4,c5]@13 ~@5]/2", B: "[~@2 [e4,g4,c5]@4 ~ [f4,a4,c5]@5 ~@4]/2",
  C: "[f4,a#4,d5]@5 ~@3 [f4,a#4,d5]@5 ~@3", D: "[d#4,g4,c5] ~", E: "[f4,a4,d5]@5 ~@3 [f4,a4,c5]@3 ~@5",
  F: "[f4,a#4,c5]@4 ~@2 [d4,f4,a#4]@7 ~@3", G: "[f4,a#4,d5]@2 ~ [a#4,d5]@3 [f4,a#4] [d#4,g4], ~@3 f4@2 ~ d5@2",
  H: "~@4 [d#4,g4,c5]@7 ~@5", I: "[f4,a4,d5]@4 ~@2 [f4,a4,c5]@7 ~@3", J: "[g4,b4]@4 ~@2 [g4,b4]@5 ~@5",
  K: "[g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~ [g4,c5,e5]@4 ~@2 [f4,a4,d5]@2", // C Dm
  L: "[~@2 [d4,f4,a4]@5 ~@3 [f4,a4,e5]@3 ~ [f4,a4,d5]@7 ~@5 [g4,b4,e5]@3 ~ [e4,g4,d5]@7 ~@3 [e4,g4,c5]@5 ~@3]/3", // Dm Fmaj7 Dm Em Em7 C
  M: "[~@2 [d4,f4,a4]@5 ~@3 [f4,a4,e5]@3 ~ [f4,a4,d5]@7 ~@5 [g4,b4,e5]@3 ~ [e4,g4,d5]@6 [e4,g4,c5]@9 ~ [f4,a4,c5]@13 ~@5]/4", // Dm Fmaj7 Dm Em Em7 C F
  N: "[f4,a#4,d5]@3 ~@3 [f4,a#4,d5] ~ [f4,a#4,d5]@5 ~@3", O: "[d#4,g4,c5]@8 ~@4 [d#4,g4,c5]@3 ~",
  P: "[f4,a4,d5]@4 ~@2 [f4,a4,c5] ~ [f4,a4,c5]@3 ~ [f4,a4,c5]@3 ~", // Dm F
  Q: "[f4,a#4,c5]@4 ~@2 [d4,f4,a#4] ~ [d4,f4,a#4]@5 ~@3", // Fsus4 A#
  R: "[f4,a#4,d5]@4 ~@2 [f4,a#4,d5] ~ [f4,a#4,d5]@3 ~ [f4,a#4]@2 [d#4,g4]@2, ~@3 d5", // A# A#5 D#
  S: "[~@2 [d4,f4,a4]@5 ~@3 [f4,a4,e5]@3 ~ [f4,a4,d5]@7 ~@5 [g4,b4,e5]@3 ~ [e4,g4,d5]@7 ~@7 [g4,a#4,d5]@3 ~]/3", // Dm Fmaj7 Dm Em Em7 Gm
  T: "[~@2 [d4,f4,a4]@5 ~@3 [f4,a4,e5]@3 ~ [f4,a4,d5]@7 ~@5 [g4,b4,e5]@3 ~ [e4,g4,d5]@7 ~@11]/3", // Dm Fmaj7 Dm Em Em7
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.8)

// bass · fretless bass · "Bass"
const bass = note(`<
  A@4 B C D B@2 C D E F G H F@2 G H A@2 B C D B@2 C D E F G H F@2 G H A@2 B C D B@2 C D E F G H F@2 G H I F G H F@2 G H
  J
>`.pickRestart({
  A: "[c2@12 ~@2 f2@13 ~@5]/2", B: "a#1@4 ~@2 a#1 ~ a#1@5 ~@3", C: "c2@4 ~@2 c2 ~ c2@5 ~@3",
  D: "f2@4 ~@2 f2 ~ f2@5 ~@3", E: "g2@4 ~@2 g2 ~ g2@5 ~@3", F: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  G: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", H: "f2@3 ~ f2@3 ~ g2@3 ~ g2@3 ~", I: "c2@5 ~@3 g2@5 ~@3", J: "c2@3 ~",
})).s("gm_fretless_bass").gain(0.32)

// other · vibraphone
const vibraphone = note(`<
  ~@11 A B C D E F C G H@2 ~@7 A B I D E J K G H@2 ~ L@2 M@2 N O P B I D E J K G Q B C D E F C G R
>`.pickRestart({
  A: "~@12 c5 ~ d5 ~", B: "e5 ~ e5 ~ e5 ~ e5 ~ e5 ~ d5 ~ c5 ~ d5@2", C: "~ c5 a4@5 ~@3 e5@3 ~ f5@2",
  D: "~ e5 c5@5 ~@3 e5@3 ~ f5@2", E: "~ e5 c5@5 ~ c5@3 ~ d5@3 ~", F: "e5@3 ~ e5 ~ e5 ~ e5 ~ d5 ~ c5 ~ d5@2",
  G: "~ e5 c5@5 ~@3 e5@3 ~ d5@2", H: "[~@2 c5@10 ~@2 c5@13 ~@5]/2", I: "~ c5 a4@5 ~@3 f5@3 ~ f5@2",
  J: "e5@3 ~ e5 ~ e5 ~ e5 ~ d5 ~ e5 ~ f5@2", K: "~ e5 d5@5 ~@3 e5@3 ~ f5@2", L: "[~@12 a#4 c5 d5 f5@4 ~@13]/2",
  M: "[~@9 g4 a#4 ~ a#4 c5 d5@5 ~@13]/2", N: "~@8 g4@3 ~ a#4@3 ~", O: "d5@5 ~@10 a4", P: "b4@4 ~@8 c5 ~ d5 ~",
  Q: "~@2 c5@5 ~@9", R: "~@2 c5@11 ~@3",
})).s("gm_vibraphone").gain(0.32)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@4 ~@8 B C D E B C D F@2 ~ G ~ H ~ I J K B C D E B C D F@2 ~@6 J K B C D E B C D L B C D E B C D E
>`.pickRestart({
  A: "[~@14 [a3,c4,f4]@13 ~@5]/2", B: "[c4,e4,g4]", C: "[d4,f4,a4]", D: "~ [d4,b4], [c4,f4,a4]@3 ~",
  E: "[c4,e4,g4]@15 ~", F: "[[c4,e4,g4]@14 [a3,c4,f4]@13 ~@5]/2", G: "~@8 g4 a#4 c5 ~ d5@2 f5@2", H: "~@8 a#4@2 d5 ~@5",
  I: "~@8 g4!2 a#4@2 c5@2 d5@2", J: "~@6 [f4,a4]@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@3 ~",
  K: "~@6 [g4,b4]@2 [g4,b4,d5]@3 ~ [g4,b4,d5]@3 ~", L: "[c4,e4,g4]@5 ~@7 [a3,c4,f4]@4",
})).s("gm_string_ensemble_1").gain(0.27)

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

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

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

// drums · crash
const crash = s("cr").struct(`<
  A ~ A@2 B ~@6 C B ~@6 A ~ B ~@7 B ~@6 A ~ B ~@6 D B ~@3 B ~@2 B@2 ~@3 B ~@2 E
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~ x", D: "~@3 x", E: "x!2 ~@6",
})).gain(0.46)

// drums · shaker
const shaker = s("sh").struct("<~@12 A@7 ~@10 A@7 ~@10 A@7 ~ A@7 ~>".pickRestart({
  A: "x!16",
})).gain(0.32)

stack(acoustic_guitar_steel, bass, vibraphone, string_ensemble_1, kick, snare, hihat, crash, shaker)

More by Bee Gees