Strudelify

Theme from "A Summer Place"

Percy Faith

KeyB♭ majorTempo100 bpm
0:00/0:00
// Theme from "A Summer Place" — Percy Faith
// 100 bpm, 6/8, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): GITMUTE173.
setcpm(100/3)

// 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 · piano · "PIANO MELODY"
const piano = note(`<
  ~@4 A@4 B C B C A@4 B C B C D@4 E F G H I J K@2 L@2 A@2 B C B C D@4 M@2 ~@27 N A@4 B C B C D@4 M@2 O P ~
>`.pickRestart({
  A: "[[f3,f5]@8 [g3,g5] [bb3,bb5]@2 [a3,a5]]/2", B: "[d4,d6]@5 [a3,a5]", C: "[g3,g5]@4 [a3,a5] [c4,c6]",
  D: "[[bb3,bb5]@10 [a3,a5] [c4,c6]]/2", E: "[bb3,bb5]@4 [a3,a5] [d4,d6]", F: "[a3,a5] [g3,g5]",
  G: "[f3,f5]@4 [g3,g5] [bb3,bb5]", H: "[f3,f5] [eb3,eb5]", I: "[d3,d5]@4 [eb3,eb5] [g3,g5]", J: "[a3,a5] [d4,d6]",
  K: "[[c4,c6]@27 ~ [f2,f4]@4 [g2,g4]@4 [a2,a4]@4 [c3,c5]@4 [g3,g5]@4]/2", // C F G A C G
  L: "[[f3,f5]@31 ~ [g3,g5]@4 [bb3,bb5]@8 [a3,a5]@4]/2", M: "[bb3,bb5]/2",
  N: "~ [f2,f4] [g2,g4] [a2,a4] [c3,c5] [g3,g5]", O: "~ [f3,f5]!5", P: "[f3,f5]",
})).s("gm_piano").gain(0.6)

// other · string ensemble 1 · "STRINGLOW"
const string_ensemble_1 = note(`<
  ~@4 A@4 B C B C A@4 B C B C D@4 E F G H I J K@2 A@4 B C B C D@4 L@2 ~@27 M A@4 B C B C D@4 L@2 N O ~
>`.pickRestart({
  A: "[[f3,f4]@8 [g3,g4] [bb3,bb4]@2 [a3,a4]]/2", B: "[d4,d5]@5 [a3,a4]", C: "[g3,g4]@4 [a3,a4] [c4,c5]",
  D: "[[bb3,bb4]@10 [a3,a4] [c4,c5]]/2", E: "[bb3,bb4]@4 [a3,a4] [d4,d5]", F: "[a3,a4] [g3,g4]",
  G: "[f3,f4]@4 [g3,g4] [bb3,bb4]", H: "[f3,f4] [eb3,eb4]", I: "[d3,d4]@4 [eb3,eb4] [g3,g4]", J: "[a3,a4] [d4,d5]",
  K: "[[c4,c5]@27 ~ [f2,f3]@4 [g2,g3]@4 [a2,a3]@4 [c3,c4]@4 [g3,g4]@4]/2", L: "[bb3,bb4]/2",
  M: "~ [f2,f3] [g2,g3] [a2,a3] [c3,c4] [g3,g4]", N: "~ [f3,f4]!5", O: "[f3,f4]",
})).s("gm_string_ensemble_1").gain(0.18).pan(0.3)

// other · string ensemble 1 · "STRINGHI"
const string_ensemble_1_2 = note(`<
  ~@4 A@4 B C B C A@4 B C B C D@4 E F G H I J K@2 A@4 B C B C D@4 L@2 ~@27 M A@4 B C B C D@4 L@2 N O ~
>`.pickRestart({
  A: "[f5@8 g5 bb5@2 a5]/2", B: "d6@5 a5", C: "g5@4 a5 c6", D: "[bb5@10 a5 c6]/2", E: "bb5@4 a5 d6", F: "a5 g5",
  G: "f5@4 g5 bb5", H: "f5 eb5", I: "d5@4 eb5 g5", J: "a5 d6", K: "[c6@27 ~ f4@4 g4@4 a4@4 c5@4 g5@4]/2", L: "bb5/2",
  M: "~ f4 g4 a4 c5 g5", N: "~ f5!5", O: "f5",
})).s("gm_string_ensemble_1").gain(0.54).pan(0.7)

// bass · electric bass finger · "BASS"
const bass = note(`<
  A B A B A B A B C D C D A B A B C D C D A D A D E F G H I J K@2 A B A B C D C D A D A D A D A B A B C D C D A B A B C
  D C D A D A D E F G L I J K@2 A B A B C D C D A D A D A D M N ~
>`.pickRestart({
  A: "bb1 g1", B: "c2@3 f1 g1 a1", C: "bb1 f1", D: "c2 f1", E: "g1 f1", F: "eb2 c2", G: "bb1 g2", H: "c2 eb2",
  I: "f1!2", J: "c2!2", K: "[f1@7 ~@2 f1@3]/2", L: "f2 eb2", M: "bb2 bb1!5", N: "bb1",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.2)

// chords · piano
const piano_2 = note(`<
  A B A B C D C D E F E F C D C D E G E F H I H I J K L M N O P@2 C D C D E F E F H Q H Q R S C D C D E F E F C D C D E
  G E F H I H I J K L T N O P@2 C D C D E F E F H Q H Q R S U V ~
>`.pickRestart({
  A: "[bb4,d5,f5]!6, bb2 g2", B: "[bb4,eb5,f5]!3 [f2,bb4,eb5,f5] [g2,bb4,eb5,f5] [a2,bb4,eb5,f5], c3 ~",
  C: "[bb4,d5]!6, bb2 g2", D: "[bb4,eb5]!3 f2 g2 [a2,eb5,f5], c3@3 [eb5,g5]@2 ~", E: "[f5,a5]!3 [f5,a5]@2 ~, bb2 f2",
  F: "[bb4,eb5]!3 [a4,eb5]@2 ~, c3 f2", G: "[bb4,eb5]!3 [eb5,g5]@2 [eb5,f5], c3 f2", H: "d5 f4 g4 bb4 d5 g5, bb2 g2",
  I: "[eb5,bb5] g5 eb5 f2@3, c3@3 c5@2 ~", J: "[d5,g5]!3 [d5,f5]@2 ~, g2 f2", K: "[bb4,f5]!3 [bb4,eb5]!3, eb3 c3",
  L: "[f4,bb4]!3 [f4,bb4]@2 ~, bb2 g3", M: "[g4,bb4,d5]!3 [gb4,bb4,c5]!3, c3 eb3",
  N: "[f4,bb4]!4 [g4,c5] [bb4,eb5], f2!2", O: "[bb4,d5,e5]!3 [e5,g5,bb5]!3, c3!2",
  P: "[[eb5,g5,a5]!6 [eb5,g5,a5] f4 g4 a4 c5 [eb5,g5], f2@7 ~@2 f2@3]/2", Q: "[eb5,bb5] g5 eb5 [f2,c5]@3, c3 ~",
  R: "[bb4,d5,f5]!3 [bb4,d5,g5]!3, bb2 g2", S: "[bb4,eb5,f5]!3 [bb4,eb5,g5]!3, c3 f2",
  T: "[g4,bb4,d5]!3 [gb4,bb4,c5]!3, f3 eb3", U: "bb3 [bb2,f4,bb4,d5,g5,c6,f6]!5", V: "[bb2,f4,bb4,d5,g5,c6,f6]",
})).s("gm_piano").gain(0.4).pan(0.7)

// other · electric guitar muted · "GITMUTE173"
const electric_guitar_muted = note(`<
  ~ A ~ A ~ A ~ A ~@5 B ~ A ~@12 C ~@2 C ~ A ~ A ~@11 A ~ A ~@5 B ~ A ~@11 D C ~@2 C ~ A ~ A ~@11 E ~
>`.pickRestart({
  A: "~@4 g2 a2", B: "~@3 f2 g2 a2", C: "~ f2", D: "f3 eb3", E: "bb2",
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.9)

// other · acoustic guitar steel · "GUIT.ARPEG"
const acoustic_guitar_steel = note(`<
  A B A B A B A B C B C B A D A B C B C B A B A B E F A G H I J@2 A B A B C B C B A B A B A B A B A B C B C B A D A B C
  B C B A B A B E F A K H I J@2 A B A B C B C B A B A B A L M N ~
>`.pickRestart({
  A: "bb3 d4 f4 g3 bb3 d4", B: "c3 eb3 g3 f3 a3 c4", C: "bb3 d4 f4 bb3 d4 f4", D: "c3 eb3 g3 c3 eb3 g3",
  E: "g3 bb3 d4 d3 f3 a3", F: "eb3 g3 bb3 c3 eb3 g3", G: "c3 e3 g3 eb3 gb3 bb3", H: "bb3 d4 f4 c3 eb3 g3",
  I: "c3 e3 g3 c3 e3 g3", J: "f3 a3 c4 f3 a3 c4", K: "g3 bb3 d4 f3 a3 c4", L: "c3 eb3 g3 f3 bb3 c4",
  M: "~ d3 f3 bb3 d4 f4", N: "bb4",
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.3)

// chords · acoustic guitar steel · "GUIT.STRUM"
const acoustic_guitar_steel_2 = note(`<
  A B A B A B A B C D C D A E A D C D C D A D A B F G A H I J K L M B A B C B C B A B A B A N A B A B C D C D A E A D C
  D C D A D A B F G A O I J K L M B A B C B C B A B A B A N P@2 ~
>`.pickRestart({
  A: "[f3,bb3,d4] [g3,bb3,d4]", B: "[g3,c4,eb4] [f3,a3,c4]", C: "[f3,a3,bb3]!2", D: "[g3,c4,eb4] [a3,c4,f4]",
  E: "[g3,c4,eb4]!2", F: "[g3,bb3,d4] [f3,a3,d4]", G: "[g3,bb3,eb4] [g3,c4,eb4]", H: "[g3,c4,e4] [gb3,bb3,eb4]",
  I: "[f3,bb3,d4] [g3,c4,eb4]", J: "[g3,c4,e4]!2", K: "[a3,c4,f4]!2", L: "[a3,c4,f4] ~", M: "[bb3,d4,f4] [g3,bb3,d4]",
  N: "[g3,c4,eb4] [f3,bb3,c4]", O: "[g3,bb3,d4] [f3,a3,c4]", P: "[[f3,bb3,d4]!5 [f3,bb3,d4]@6 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.8)

// drums · kick
const kick = s("bd").struct("<x!88 [x!6] x ~>").gain(0.5)

// drums · rim
const rim = s("rim").struct("<[~ x]!88 ~@3>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!6]!88 ~@3>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@27 A ~@13 A ~@27 A ~@14 A ~>".pickRestart({
  A: "x",
})).gain(0.5)

stack(
  piano, string_ensemble_1, string_ensemble_1_2, bass, piano_2, electric_guitar_muted, acoustic_guitar_steel,
  acoustic_guitar_steel_2, kick, rim, hihat, crash
)