Strudelify

Three Coins in a Fountain

Frank Sinatra

KeyE♭ majorTempo73 bpm
0:00/0:00
// Three Coins in a Fountain — Frank Sinatra
// 73 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 57 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(73/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
const piano = note(`<
  ~ A B C D E F D G H I C D E F D G A B J K L M N D E F D G A B O P Q R S T U V W K L M N D E F D G A B X K Y Z AA@2
>`.pickRestart({
  A: "f4@2 a4@2 c5@2 f4@2 [eb4,g4,bb4,c5]@3 ~ [f4,a4,c5]@3 ~, [eb4,c5]@5 ~@11", // Cm7 F Cm
  B: "ab4 ~ b4@2 eb5@2 b4@2 [eb4,f4,ab4,b4]@2 b4@2 [d4,f4,ab4,bb4]@3 ~, [eb4,f4] ~", // Fm7b5 Bb7 Ebsus2
  C: "[eb4,g4,bb4]@7 ~ [eb4,f4,ab4,c5]@7 ~", D: "g4!2 bb4 g4 eb5 bb4 g4 bb4, bb4 ~@3, eb4 ~@15",
  E: "[eb4,f4,ab4,c5]@3 ~ [d4,f4,ab4,bb4]@3 ~ [eb4,f4,ab4,c5]@3 ~ [d4,f4,ab4,bb4]@3 ~", // Fm7 Bb7 Fm7 Bb7
  F: "ab4!2 c5 ab4 eb5 c5 ab4 c5, eb5 ~, c5 ~@3, f4 ~@15", G: "[eb4,g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [c4,eb4,g4,bb4]@7 ~",
  H: "a4@2 a4@2 c5@2 f4@2 [eb4,g4,bb4,c5]@3 ~ [f4,a4,c5]@3 ~, eb4@7 ~@9, c5 ~@3, f4 ~@15", // Cm7 F
  I: "[ab4,b4]@2 b4@2 eb5@2 b4@2 [eb4,f4,ab4,b4]@2 b4@2 [d4,f4,ab4,bb4]@3 ~, [eb4,f4] ~", // Abm Fm7b5 Bb7 Ebsus2
  J: "[eb4,g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [eb4,f4,ab4,c5]@3 ~ [eb4,g4,bb4]@3 ~", // Eb Gm Fm7 Eb
  K: "ab4!2 c5 ab4 eb5 c5 ab4 c5, eb4@13 ~@3, c5 ~@3", L: "g4!2 bb4 g4 eb5 bb4 g4 bb4, eb4@13 ~@3, bb4 ~@3",
  M: "ab4!2 b4 ab4 eb5 b4 ab4 b4, eb4@13 ~@3, b4 ~@3",
  N: "ab4@2 ab4@2 c5@2 ab4@2 [d4,e4,ab4,bb4]@7 ~, [eb4,f4]@7 ~@9, c5 ~@3", // E7 Ebsus2
  O: "g4@2 g4@2 bb4@2 eb5@2 [eb4,g4,bb4]@7 ~, eb4@7 ~@9, bb4 ~@3", // Eb
  P: "g4@2 g4@2 [bb4,c5]@2 g4@2 eb5@2 bb4@2 ~ ab4 ~ g4, bb4@2 ~ bb4@2 ~ g4 bb4, eb4 ~@15", // Bbsus2
  Q: "[eb4,f4,ab4,bb4,c5]@2 f4@2 [d4,f4,ab4,bb4]@4 [eb4,f4,ab4,c5]@4 [d4,f4,ab4,bb4]@3 ~", // Fm7 Bb7 Fm7 Bb7
  R: "ab4@2 ab4@2 [ab4,c5]@2 ab4@2 [ab4,eb5]@2 [g4,c5]@2 ab4@2 f4 [eb4,f4], eb5 ~, c5@2 ~@5 c5, f4 ~@15", // Ab Ab5 C5 Ebsus2
  S: "g4 ~ bb4 ~ eb5 bb4 g4 bb4, bb4 ~@3, eb4 ~ g4@4 g4@6 ~@4",
  T: "[eb4,g4,bb4]@2 ~@2 [d4,g4,bb4]@2 eb4@2 eb4@2 ~@3 f4 ~ g4, ~@2 eb4@4 ~@2 [c4,g4,bb4]@7 ~, ~@10 eb4@5 ~", // Eb Gm C7
  U: "~ c4 ~ c4 c5@2 f4@2 [eb4,g4,bb4,c5]@3 ~ [f4,a4,c5]@3 ~, [eb4,c5]@5 ~@11, f4 a4 c4@2 c4@3 ~", // Cm7 F Cm
  V: "ab4 ~ b4@2 [f4,eb5]@2 [f4,b4]@2 [eb4,f4,ab4,b4]@2 [eb4,b4]@2 d4 ~ c4 d4, eb4@8 ~@5 d4@2 ~, f4@4 ~@8 [f4,ab4,bb4]@3 ~", // F7 Fdim Fm7b5 Abm Bb7
  W: "[g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [eb4,f4,ab4,c5]@4 [eb4,g4,bb4]@3 ~, eb4 ~", // Gm Fm7 Eb
  X: "g4@2 g4@2 bb4@2 eb5@2 [eb4,g4,bb4]@3 ~ [eb4,f4,g4,bb4]@3 ~, eb4@7 ~@9, bb4 ~@3", // Eb
  Y: "ab4!2 c5 ab4 eb5 c5 ab4 c5, f4@13 ~@3, c5 ~@3",
  Z: "g4@2 g4@2 bb4@2 g4@2 [d4,g4,bb4]@3 ~ [f4,a4,db5]@3 ~, eb4@7 ~@9, bb4 ~@3", // Gm Faug
  AA: "[ab4!2 c5 eb5 ~ f5@11, [eb4,f4]@7 ~ [eb4,g4]@24, c5@4 ~@5 [bb4,eb5]@23]/2", // Ebsus2 Eb Eb5
})).s("gm_piano").gain(0.27)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C D ~@7 E F@2 E G H I J K L M N O F@2 E G H I J ~@8 K L M N O F@2 E G H I J P@2 Q R@2
>`.pickRestart({
  A: "f4@2 g4 a4", B: "ab4", C: "g4 f4", D: "eb4", E: "g4", F: "ab4/2", G: "eb4 d4 c4@2", H: "c4", I: "b3", J: "bb3",
  K: "[ab4,c6]", L: "[g4,bb5]", M: "[ab4,b5]", N: "[ab4,f5] e5", O: "[g4,eb5]", P: "[eb5,c6]", Q: "[eb5,bb5]",
  R: "[[eb5,c6] [eb5,bb5]@3]/2", // Cm Eb5
})).s("gm_string_ensemble_1").gain(0.17)

// other · pad new age
const pad_new_age = note(`<
  A B C D ~@9 E F G H I J K L M N O ~ E F G H I J F ~ E F G H I J K L M N O ~ E F G H I J F P Q R S@2
>`.pickRestart({
  A: "~@4 eb5@2 eb5@2 eb5@3 ~ f5@2 g5@2", B: "f5@3 ~ c5@10 ~@2", C: "f5@3 ~ f5@3 ~ eb5@2 d5@2 c5@2 d5@2",
  D: "eb5@13 ~@3", E: "f5@3 ~ ab5@3 ~ c6@3 ~ d6@3 ~", F: "eb6@13 ~@3", G: "eb5@3 ~ g5@3 ~ bb5@3 ~ eb6@3 ~",
  H: "g6@7 ~ c6@7 ~", I: "f5@7 ~ g5@3 ~ a5@3 ~", J: "ab5@10 ~@2 d6@3 ~", K: "eb6@3 ~ d6@3 ~ c6@3 ~ bb5@3 ~",
  L: "ab5@13 ~@3", M: "g5@13 ~@3", N: "ab5@3 ~ b5@3 ~", O: "c6@3 ~ d6@3 ~", P: "ab6@13 ~@3", Q: "f6@13 ~@3",
  R: "eb6@6 ~@2 d6@3 ~ db6@3 ~", S: "[c6@3 ~ [bb5,f6]@12]/2",
})).s("gm_pad_new_age").gain(0.27)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E@2 D F A B C D E@2 D F A B G H D H I D E@2 D F A B D@2 E@2 D F A B G H D H I D E@2 D F A B D H E D J@2
>`.pickRestart({
  A: "f2@4 ~@2 f2 ~ c2@3 ~ f2@3 ~", B: "ab2@4 ~@2 ab2 ~ ab2@3 ~ bb2@3 ~", C: "eb2@4 ~@2 eb2 ~ f2@6 ~@2",
  D: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2", E: "f2@4 ~@2 f2 ~ f2@6 ~@2", F: "eb2@4 ~@2 eb2 ~ c2@6 ~@2",
  G: "eb2@4 ~@2 eb2 ~ f2@3 ~ eb2@3 ~", H: "ab2@4 ~@2 ab2 ~ ab2@6 ~@2", I: "f2@4 ~@2 f2 ~ bb1@6 ~@2",
  J: "[f2@4 ~@2 f2 ~ eb2@23 ~]/2",
})).s("gm_electric_bass_finger").gain(0.18)

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

// drums · rim
const rim = s("rim").struct("<~@4 A@15 B ~@4 A@8 ~@12 A@7 B ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.31)

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

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

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@13 x!2 ~] ~@19 [~@13 x!2 ~] ~@11 [~@13 x!2 ~] ~@5>").gain(0.35)

// drums · ride
const ride = s("rd").struct("<~ A@2 B ~@28 A@7 C ~@12 A@3 D ~>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~@3", C: "x!4 ~@4", D: "x ~ x ~ x!4 ~@8",
})).gain(0.35)

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

stack(piano, string_ensemble_1, pad_new_age, bass, kick, rim, snare, hihat, open_hat, crash, high_tom, ride, cabasa)

More by Frank Sinatra