Strudelify

Theme From The Godfather

101 Strings

KeyC minorTempo80 bpm
0:00/0:00
// Theme From The Godfather — 101 Strings
// 80 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 43 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B C D E F G H I J K L M B M D N F G O P ~@7 Q J K L M B M D N F G R@3
>`.pickRestart({
  A: "~@5 g5 c6 eb6", B: "d6@3 c6@3 eb6@3 c6@3 d6@3 c6@4 ~ ab5@2 bb5@2", C: "g5@5 g5 c6 eb6",
  D: "d6@3 c6@3 eb6@3 c6@3 d6@3 c6@4 ~ g5@2 gb5@2", E: "f5@5 f5 ab5 b5", F: "d6@5 f5 ab5 b5", G: "c6@5 c5 eb5 bb5",
  H: "ab5@3 g5@5 bb5@2 ab5@2 ab5@3 g5@3 g5@3 b4@3", I: "c5@5 c6!2 b5", J: "bb5@4 d6@2 c6 ab5", K: "g5@5 g5 bb5 g5",
  L: "f5@5 f5 ab5 gb5", M: "g5@5 g5 ~ eb6, ~@3 c6", N: "f5@4 ~ f5 ab5 b5",
  O: "ab5@3 g5@3 bb5@3 ab5@3 ab5@3 g5@4 ~ g5@2 b5@2", P: "c6@5 ~@3", Q: "~@5 c6!2 b5",
  R: "[ab5@3 g5@3 bb5@3 ~ ab5@4 ab5@4 g5@4 g5@5 b5@6 c6@24 ~@15]/3",
})).s("gm_string_ensemble_1").gain(0.12).pan(0.4)

// chords · string ensemble 1 · "STRINGS" · Eb Dm Eb Dm
const string_ensemble_1_2 = note("<[~ c4 [eb4,g4] c4 [d4,f4]@4] [~ c4 [eb4,g4] c4 [d4,f4]@3 ~] ~@41>")
  .s("gm_string_ensemble_1").gain(0.24).pan(0.2)

// other · marimba
const marimba = note("<~@21 A B C D E F G H I ~@13>".pickRestart({
  A: "~@5 g4 c5 eb5", B: "d5@3 c5@3 eb5@3 c5@3 d5@3 c5@4 ~ ab4@2 bb4@2", C: "g4!10 ~@5 g4@3 c5@3 eb5@3",
  D: "d5@3 c5@3 eb5@3 c5@3 d5@3 c5@4 ~ g4@2 gb4@2", E: "f4!10 ~@5 f4@3 ab4@3 b4@3", F: "d5!11 ~@4 f4@3 ab4@3 b4@3",
  G: "c5!11 ~@4 c4@3 eb4@3 bb4@3", H: "ab4@3 g4@5 bb4@2 ab4@2 ab4@3 g4@3 g4@3 b3@3", I: "c4!11 ~@13",
})).s("gm_marimba").gain(0.36).pan(0)

// other · marimba · soft notes
const marimba_soft = note("<~@41 [~@9 c4!15] [c4!10 ~@14]>").s("gm_marimba").gain(0.18).pan(0)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note(`<
  A B A C D E F G H I J K L M A C N O F P Q R A C D E F G H I J K L M A C N O F P S@3
>`.pickRestart({
  A: "[c3,g3] [c3,ab3]", B: "[c3,g3]@4 [c3,ab3]@3 ~", C: "g3 f3 eb3@2, c3", D: "[c3,g3]@2 [eb3,c4] eb3",
  E: "f3@2 c3@2 f3@2 c3 d3, ab3@3 ~", F: "~ c3 f3 ab3 c4@2 c3 d3, f2@3 ~", G: "~ g2 c3 eb3 g3@3 ~, c2@5 ~@3",
  H: "[g2,g3] [g2,f3]", I: "c3@2 g2@2 c2@3 ~, eb3@5 ~@3", J: "~ f3 bb3 f3@3 ~ f3 ab3 bb3@3, d3 bb2",
  K: "~ bb2@3 ~ eb3 g3 eb3, eb2!2", L: "~ db3 f3 ab3@3 ~ d3 f3 ab3@3, f2 ab2", M: "~ d3 g3 d3 g3 ~@3, g2",
  N: "[c3,g3]@2 ab3 eb3, ~ c3", O: "ab3@2 g3@2 ab3@2 c3 d3, c3@3 ~", P: "~ g2 c3 eb3 g3@2 ~@2, c2@3 ~", Q: "[g2,g3]!2",
  R: "[c2,c3] g2 c2 ~", S: "[[g2,g3]@14 [g2,g3]@19 c2@24 ~@15]/3",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.7)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 B C@2 D@2 C E C F G H I B C B D@2 C E C B C@2 D@2 C E C F G H I B C B D@2 C J K@2
>`.pickRestart({
  A: "~ c4 [eb4,g4] c4 [d4,f4]@4, c3 ~", B: "c4 eb4 g4 eb4 f4 ab4 c5 ab4", C: "c4 eb4 g4 eb4 c4 eb4 g4 eb4",
  D: "f4 ab4 c5 ab4 f4 ab4 c5 ab4", E: "g3 c4 d4 b3 g3 b3 d4 b3", F: "bb3 d4 f4 d4 bb3 d4 f4 d4",
  G: "eb4 g4 bb4 g4 eb4 g4 bb4 g4", H: "db4 f4 ab4 f4!2 ab4 c5 ab4", I: "g4 b4 d5 b4 g4 b4 d5 b4",
  J: "g3@3 c4@3 d4@3 ~ b3@4 g3@4 ~@6", K: "[~@3 [c3,g3,eb4,g4,c5]@8 ~@5]/2",
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.3)

// bass · electric bass finger · "FINGERDBAS"
const bass = note("<~@2 A B@2 C@2 B D B E F G H A B A I C B H B A B@2 C@2 B D B E F G H A B A I C B J@3>".pickRestart({
  A: "c2 f1", B: "c2", C: "f1", D: "c2 g1", E: "bb1!2", F: "eb2", G: "db2 f1", H: "g1", I: "f1!2",
  J: "[g1@11 c2@8 ~@5]/3",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!38 [~ x ~@2] ~@2>").gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@11 A ~@7 A ~@11 A ~@9>".pickRestart({
  A: "~@16 x!3 ~@2 x ~@2",
})).gain(0.16)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@6 B ~>".pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.14)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [x!8]!38 [x ~@2 x ~@2 x ~@3 x ~@3 x ~@9] ~@2>").gain(0.14)

stack(
  string_ensemble_1, string_ensemble_1_2, marimba, marimba_soft, string_ensemble_1_3, acoustic_guitar_steel, bass, kick,
  snare, mid_tom, crash, tambourine
)