Strudelify

Love and Marriage

Frank Sinatra

KeyB♭ majorTempo115 bpm
0:00/0:00
// Love and Marriage — Frank Sinatra
// 115 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 63 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B C D E ~@7 F G H ~@5 I J K L ~@3 M ~ N O ~@5 I P Q@2 R S T U@2 V ~@3 N W X Y Z ~@2 I P Q@2 AA AB ~
>`.pickRestart({
  A: "~@23 [a4,ab5,a5]", B: "[bb4,bb5] ~@2 [f5,f6] ~@2 [gb5,gb6]@3 [g5,g6] ~@2", C: "~@23 [a3,ab4,a4]",
  D: "[bb3,d4,bb4] ~@2 [d4,f4,f5] ~@2 [d4,gb4,gb5]@3 [d4,g4,g5] ~@2", // Bb Dm D G5
  E: "~@5 a5@2 ~@3 ab5@2 g5 ~@3 gb5@2 ~@2 e5 ~ eb5 d5", F: "~@6 [a4,gb5]@6 [bb4,g5]@7 ~@3 a5@2", G: "bb5 ~@5 f5 ~@5",
  H: "e5 ~@11 eb5@6 ~@6", I: "~@6 [d4,a4,gb5]@6 [bb4,g5]@7 ~@3 [eb4,eb5,a5]@2",
  J: "[e4,bb5] ~@11 [d4,f5,bb5] ~@11, e5 ~@11", K: "[eb4,eb5,a5] ~@11 [d4,d5,bb5]@6 ~@6",
  L: "~@5 [e6,f6] gb6@2 ~@9 e6 [db6,f6] ~@5, ~@6 db6 ~@17", // Fmaj7 Db
  M: "~@5 [e6,f6] [gb4,bb4,db6] ~@10 e6 [gb4,bb4,db6,f6] ~@5, ~@3 gb6 ~@8", // Fmaj7 Gb Gbmaj7
  N: "~@4 [bb5,bb6] ~ [d5,a5,a6]@2 [d5,f5,f6]@2 [d5,d6]@2 [d5,g5,g6]@2 ~@2 [d5,g5,g6]@2 [d5,f5,f6]@2 [d5,d6]@2 [bb4,d5,bb5]@2, ~@2 d5 ~@9", // Bb D5 Dm D G5 Dm D Bb
  O: "[c5,eb5,c6] ~@11", P: "[e4,bb5] ~@11 [d4,f5,bb5]@11 ~, e5 ~@11",
  Q: "[e5,g5]@2 ~@10 [d4,f5,bb5]@11 ~, [e4,bb5] ~@23", R: "[c4,f5] [f4,a5]",
  S: "[d5,bb5]@2 ~@4 f2@2 e2 ~ f2@2 gb2@6 f2@2 ~@3 [g5,a5]", // Gm Gsus2
  T: "[bb4,bb5] ~@5 [f2,f4]@2 [e2,e4] ~ [f2,f4]@2 [gb2,gb4,gb5]@5 ~ f2@2 ~@4, ~@6 f5 ~ e5@2 ~@7 [f4,f5]@2 ~@5, ~@9 f5@2 ~@13", // Bb F E F Gb F
  U: "[~@5 [e6,f6] gb6@2 ~@9 e6 [db6,f6] ~@5 [eb5,eb6]@18 db6@6, gb2, ~@6 db6 ~@41]/2", // Fmaj7 Db Eb
  V: "[eb5,eb6] ~@3 ab5@2 bb5 ~@3 [b4,b5] ~ [db5,db6]@2 ~@10, ab2 db2", W: "[c5,eb5,c6] ~@6 f2 gb2 g2 ab2 a2",
  X: "bb2 ~@2 d3@3 ~@3 bb2 a2 g2, ~ d3", Y: "f2 ~@8 f2 g2 a2, ~ eb3", Z: "bb2 ~@11",
  AA: "[c4,f5,bb5]@12 f2@4 gb2@2 g2@4 a2 ~, ~ [eb5,a5]", // Fsus4 Ebdim
  AB: "[bb2,d5,bb5]@2 ~@4 f2@2 [e2,e5] ~ [f2,f5]@2 [gb2,gb5]@6 f2@2 ~@4, ~@6 f5 ~@11 f5 ~@5", // Bb E F Gb
})).s("gm_string_ensemble_1").gain(0.39).pan(0.2)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  A ~ B ~ C ~@4 D ~@10 E ~@2 F ~@3 F ~@8 E ~@3 G H ~ F I J ~@6 K ~@3 E ~@6
>`.pickRestart({
  A: "~@23 ab4", B: "~@23 ab3", C: "~@4 ab5 ~@13 f5 ~@5, ~@3 g5@2 ~@19", D: "~ f5 bb5 ~", E: "~@2 eb4 ~",
  F: "~@17 eb6 ~@6", G: "bb5 eb5", H: "bb3 ~@11", I: "~@3 db5", J: "~@4 ab4@2 bb4 ~@17", K: "~ eb3 ~@2",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.2)

// chords · pizzicato strings · "PIZZ STRINGS"
const pizzicato_strings = note(`<
  ~@5 A B C D E F G H I J K L M N O ~ P Q ~@8 R S M T U ~@15 V W X Y Z ~@7
>`.pickRestart({
  A: "~@6 [f4,d5] ~@11 [f4,eb5] ~@5", B: "~@6 d5@2 ~@10 [f4,eb5] ~@5, ~@6 f4 ~@17",
  C: "~@3 bb4 ~@5 bb4 ~@2, ~@6 d4 ~@11 d4 ~@5", D: "~@6 eb4@2 ~@10 a4 ~@5, ~@6 a4 ~@17",
  E: "~@6 bb4@2 ~@10 d4 ~@5, ~@6 d4 ~@17", F: "~@3 [eb4,g4] ~@5 [eb4,gb4] ~@2", G: "~@2 [f4,bb4] ~@3 [f4,bb4] ~",
  H: "~@3 [gb4,bb4] ~@5 [g4,bb4] ~@2", I: "[g4,bb4] ~@5 [f4,bb4] ~@5", J: "[e4,bb4]@2 ~@10 [eb4,a4]@3 ~@9",
  K: "~@6 [d4,bb5] ~@11 [d4,g5] ~@5, ~@3 bb4 ~@5 bb4 ~@2", L: "~@6 [a4,a5] ~@11 [a4,g5] ~@5, ~@3 eb4 ~@8",
  M: "~@6 [d4,f5] ~@11 [d4,bb5] ~@5, ~@3 bb4 ~@8", N: "~@3 [eb4,g4] ~@5 [eb4,gb4] ~@2, ~@6 g5 ~@11 gb5 ~@5",
  O: "~@2 [f4,bb4] ~@3 [f4,bb4] ~, ~@6 f5 ~@11 f5 ~@5", P: "~ bb5 ~@10 [f4,bb4]@2 ~@10, [g4,bb4]@2 ~@10 bb5 ~@11",
  Q: "[f4,a4]@2 ~@10 [d4,bb4]@3 ~@9, f5 ~@11 bb5@6 ~@6", R: "~@6 [d4,f5] ~@11 [d4,g5] ~@5, ~@3 bb4 ~@5 bb4 ~@2",
  S: "~@6 [a4,f5] ~@11 [a4,g5] ~@5, ~@3 eb4 ~@8", T: "~@6 [f5,bb5] ~@5 [b4,gb5,b5] ~@5 [c5,g5,c6] ~@5",
  U: "[d5,bb5,d6]@2 ~@16 [f5,bb5] ~@5", V: "bb3 ~@5 f4 ~@5 gb4 ~@5 g4 ~@5", W: "a3 ~@5 f4 ~@5 gb4 ~@5 g4 ~@5",
  X: "~@6 [bb4,f5] ~@11 [d5,bb5]@2 ~@4", Y: "~@6 [eb5,bb5] ~@11 [eb5,c6]@2 ~@4", Z: "[bb5,d6] ~@11",
})).s("gm_pizzicato_strings").gain(0.29).pan(0.6)

// chords · pizzicato strings · "PIZZ STRINGS" · soft notes
const pizzicato_strings_soft = note("<~@8 A B ~@6 A B ~@14 A B C B ~@27>".pickRestart({
  A: "~@18 eb4 ~@5", B: "~@9 bb4 ~@2", C: "~@6 bb4 ~@17",
})).s("gm_pizzicato_strings").gain(0.19).pan(0.6)

// chords · flute
const flute = note("<~@2 A@2 ~ B ~@3 C ~@15 D E ~@13 F G H ~@3 I J K L ~@10 F G ~>".pickRestart({
  A: "[~@3 g6 g7 [a6,a7] ~@4 ab7@2 [g6,g7] ~@5 f6 e7 ~ [eb6,eb7] ~ d6@2 ~@23, ~@10 ab6 ~@5 [gb6,gb7]@2 ~@30, ~@17 f7@2 ~@4 d7 ~@24]/2", // A G Eb Gb
  B: "~@6 [bb6,f7] ~@11 bb6@2 ~@4, ~@18 f7 ~@5", C: "~@3 bb6@2 ~",
  D: "~@6 [f5,ab5] [e5,f5,ab5] [e5,g5] [f5,ab5] [e5,f5,g5,ab5] [e5,g5] [f5,ab5] [e5,f5,g5,ab5] [e5,g5] [f5,ab5] [f5,g5,ab5] g5 [f5,ab5] [e5,f5,g5,ab5] [e5,g5] [f5,ab5] [e5,f5,g5,ab5] ~", // Fm E Em Fm Em Fm Em Fm …
  E: "[gb5,bb5] ~@11", F: "~@6 f6 ~ g6 ~ ab6 ~ a6 ~@5 f6 ~ g6 ~ a6 ~", G: "bb6 ~@23",
  H: "bb6 ~@5 f6@2 e6 ~ f6 ~ gb6@6 f6@2 ~@4",
  I: "~@4 [f5,ab5] [gb5,bb5] [ab5,b5] [bb5,db6] [b5,eb6] [db6,f6] [eb6,gb6] [f6,ab6]", J: "[gb6,bb6] [f6,bb6]",
  K: "[eb6,bb6]@3 [db6,bb6]", L: "[f6,a6] ~@11",
})).s("gm_flute").gain(0.22).pan(0.7)

// chords · flute · soft notes
const flute_soft = note("<~@2 A ~@6 B ~@15 C ~@15 D ~@21>".pickRestart({
  A: "~@5 [ab6,ab7] ~@14 e6 ~@3", B: "~@6 f6@3 ~ a6@2 ~@12, ~@9 g6@2 ~@13", C: "~@7 g5 ~@8 e5!2 ~@6",
  D: "~@22 f6 [g6,a6]", // Gsus2
})).s("gm_flute").gain(0.13).pan(0.7)

// chords · muted trumpet · "MUTE TRPTS"
const muted_trumpet = note("<~@12 A B C ~@8 D E F ~@10 G H I J K L M ~@13 G H I J N O ~>".pickRestart({
  A: "~@11 gb4, ~@22 a4 ~", B: "[g4,bb4] ~@5 bb4 ~@5, ~@12 f4 ~@11", C: "bb4 ~@5 [eb4,a4]@3 ~@3, e4 ~@23",
  D: "[bb4,db5,gb5] [bb4,db5,f5]", E: "[gb4,bb4,eb5]@3 [gb4,bb4,db5]", F: "[gb4,b4] ~@11",
  G: "~@6 [d4,gb4]@6 [eb4,g4]@7 ~@3 a4@2, ~@22 gb4 ~", H: "[g4,bb4] ~@5 [d4,f4]@4 ~@2",
  I: "[g4,bb4]@2 ~@10 [d4,f4]@11 ~", J: "[g4,bb4] ~@11 [d4,f4]@12",
  K: "~@6 [c4,f4] ~ [d4,g4] ~ [e4,ab4] ~ [f4,a4] ~@5 [f4,a4] ~ [g4,bb4] ~ [a4,c5] ~", L: "[bb4,d5] ~@23",
  M: "bb4 ~@5 f4@2 e4 ~ f4@2 gb4@5 ~ f4 ~@5", N: "[c4,eb4]@6 a4@5 ~, ~@3 f4@2 ~",
  O: "[f4,bb4]@2 ~@4 f4@2 e4@2 f4 ~ gb4@6 f4@2 ~@4", // Bb5
})).s("gm_muted_trumpet").gain(0.39).pan(0.3)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~ A B A B A@2 C D E F E G H I A B J K J L H M N O P Q N O R@2 A B S K T L H@3 U V@2 W X Y W@2 Z AA AB AC B AD AE AF L
  AG AH AI AJ AK AL
>`.pickRestart({
  A: "bb1 ~ f1 ~", B: "c2 ~ f1 ~", C: "bb1@4 ~@8 f1@5 ~@7", D: "c2@5 ~@7 f1@5 ~@7", E: "bb1@5 ~@7 d2@6 ~@6",
  F: "eb2@5 ~@7 e2@6 ~@6", G: "d2@5 ~@7 eb2@5 ~@7", H: "e2 ~ f2 ~", I: "c2@5 ~@7 f2@2 ~@2 gb2@2 g2@2 ~@2 a2 ~",
  J: "bb1 ~ d2 ~", K: "eb2 ~ e2 ~", L: "d2 ~ eb2 ~", M: "f2@6 ~@6 bb1 ~@3 a1 ~ ab1 ~@3 g1 ~", N: "gb1 ~ db2 ~",
  O: "gb2 ~ gb1 ~", P: "ab1@3 ~@3 db2@2 ~@4", Q: "gb2@2 ~@2 gb2 ~ f2@4 ~@2 eb2@5 ~ db2@3 ~@3", R: "f1 ~@3",
  S: "bb1 ~ bb1 ~", T: "f2 ~ f2 ~", U: "c2 ~ f2 ~", V: "bb1 ~@3", W: "gb2@3 ~ db2@3 ~", X: "gb2@9 ~@3 gb2@8 ~@4",
  Y: "ab2@5 ~ db2@4 ~@2", Z: "gb2@8 ~@4 gb2@9 ~@3", AA: "f2 ~@11", AB: "f1 ~@13 f1 ~ gb1 ~ g1 ~ ab1 ~ a1@2",
  AC: "bb1@5 ~@7 f1@6 ~@6", AD: "bb1@5 ~@7 bb1@6 ~@6", AE: "eb2@6 ~@6 eb2@5 ~@7", AF: "f2@6 ~@6 f2@7 ~@5",
  AG: "e2@3 ~@9 f2@11 ~", AH: "e2@2 ~@10 f2@11 ~", AI: "e2 ~@3 f2@3 ~", AJ: "c2@6 ~@6 f2@4 gb2 ~ g2@4 a2 ~",
  AK: "bb2@3 ~@3 f2@2 e2 ~ f2@2 gb2@6 f2@2 ~@4", AL: "~@2 c2 ~ bb1 ~@3",
})).s("gm_electric_bass_finger").gain(0.2)

// other · electric guitar muted · "MUTE GUIT"
const electric_guitar_muted = note(`<
  ~ A B A B A@2 C D E F E G H I A B J K J L H M N O P Q N O R@2 A B S K T L H@3 U V@2 W X Y W@2 Z AA AB AC B AD AE AF L
  AG AH AI AJ AK AL
>`.pickRestart({
  A: "bb3 ~ f3 ~", B: "c4 ~ f3 ~", C: "bb3@4 ~@8 f3@5 ~@7", D: "c4@5 ~@7 f3@5 ~@7", E: "bb3@5 ~@7 d4@6 ~@6",
  F: "eb4@5 ~@7 e4@6 ~@6", G: "d4@5 ~@7 eb4@5 ~@7", H: "e4 ~ f4 ~", I: "c4@5 ~@7 f4@2 ~@2 gb4@2 g4@2 ~@2 a4 ~",
  J: "bb3 ~ d4 ~", K: "eb4 ~ e4 ~", L: "d4 ~ eb4 ~", M: "f4@6 ~@6 bb3 ~@3 a3 ~ ab3 ~@3 g3 ~", N: "gb3 ~ db4 ~",
  O: "gb4 ~ gb3 ~", P: "ab3@3 ~@3 db4@2 ~@4", Q: "gb4@2 ~@2 gb4 ~ f4@4 ~@2 eb4@5 ~ db4@3 ~@3", R: "f3 ~@3",
  S: "bb3 ~ bb3 ~", T: "f4 ~ f4 ~", U: "c4 ~ f4 ~", V: "bb3 ~@3", W: "gb4@3 ~ db4@3 ~", X: "gb4@9 ~@3 gb4@8 ~@4",
  Y: "ab4@5 ~ db4@4 ~@2", Z: "gb4@8 ~@4 gb4@9 ~@3", AA: "f4 ~@11", AB: "f3 ~@13 f3 ~ gb3 ~ g3 ~ ab3 ~ a3@2",
  AC: "bb3@5 ~@7 f3@6 ~@6", AD: "bb3@5 ~@7 bb3@6 ~@6", AE: "eb4@6 ~@6 eb4@5 ~@7", AF: "f4@6 ~@6 f4@7 ~@5",
  AG: "e4@3 ~@9 f4@11 ~", AH: "e4@2 ~@10 f4@11 ~", AI: "e4 ~@3 f4@3 ~", AJ: "c4@6 ~@6 f4@4 gb4 ~ g4@4 a4 ~",
  AK: "bb4@3 ~@3 f4@2 e4 ~ f4@2 gb4@6 f4@2 ~@4", AL: "~@2 c4 ~ bb3 ~@3",
})).s("gm_electric_guitar_muted").gain(0.07).pan(0.8)

// bass · clarinet · "BASS CLARINET"
const bass_2 = note("<~@2 A B C D@5 ~@4 E@4 ~@8 F G ~@2 H I ~@9 J K ~@7 L I ~@9 J ~>".pickRestart({
  A: "~@22 f2 [g2,a2]", B: "bb2 ~@7", C: "~@6 eb3 ~@5 d3 ~@11",
  D: "[bb2@2 ~@10 f2@9 ~ a2 bb2@2 ~@11 f2@9 ~ a2 bb2@2 ~@11 f2@9 ~ b2 c3@2 ~@11 f2@9 g2@2 bb2@3 ~@22, ~@21 g2@2 ~@22 g2@2 ~@73]/5",
  E: "[~@12 f2@9 ~ a2 bb2@2 ~@11 f2@9 ~ b2 c3@2 ~@11 f2@9 g2@2 bb2@3 ~@22, ~@21 g2@2 ~@73]/4",
  F: "~@6 db3 ~@3 db3 ~ eb3@2 ~@2 eb3 ~ db3 ~@2 ab2 ~@2", G: "gb2 ~@11", H: "~@14 f2 ~ gb2@2 g2 ~ ab2 ~ a2 ~",
  I: "bb2 ~@11", J: "~@3 f2 e2 f2 gb2@3 f2 ~@2", K: "~@6 f2@2 e2@2 f2@2 gb2@5 ~ f2@2 ~@4",
  L: "~@14 f2 ~ gb2 ~ g2@2 ab2 ~ a2@2",
})).s("gm_electric_bass_finger").gain(0.09).pan(0.6)

// bass · clarinet · "BASS CLARINET" · soft notes
const bass_soft = note("<~@4 A ~@2 B C D E ~@4 B C D E ~@7 F ~@36>".pickRestart({
  A: "f2 ~@23", B: "~@21 bb2 ~@2", C: "~@22 a2 ~", D: "~@4 d3 ~@3", E: "eb3 ~@3 e3 ~@3", F: "~@20 bb2 ~@3",
})).s("gm_electric_bass_finger").gain(0.05).pan(0.6)

// chords · acoustic guitar steel · "ACC. GUIT"
const acoustic_guitar_steel = note("<~@23 A B C D A B E ~@13 A B C D A B E ~@13>".pickRestart({
  A: "gb2@6 [bb3,db4,gb4]@6 db3@6 ~ f4@5, ~@3 [bb3,db4]", B: "gb2@6 [bb3,db4,gb4]@6 gb2@6 ~ gb4@5, ~@3 [bb3,db4]",
  C: "ab2 [ab3,b3,eb4] db3 [ab3,db4,f4]", D: "gb2@6 [bb3,db4,gb4]@6 db3@6 ~ f4@5, ~@3 [ab3,db4]", E: "f2 ~@11",
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.7)

// other · clarinet · Emaj7 D Gdim Ab Bb
const clarinet = note(`<
  ~
  [bb4 ~@2 bb4 ~@2 bb4@3 bb4 ~@2]
  [~@4 gb4 ~ g4@2 ~@2 ab4 ~ a4 ~@3 bb4 ~ b4 ~ c5 ~ db5 ~]
  [d5@2 ~@4 d4 ~@5 d4@6 d4@2 ~@4, d4 ~@23]
  [~@5 [eb5,e5] f5@2 ~@2 e5 ~ eb5 ~@3 [gb3,d5] ~ [g3,db5] ~ [ab3,c5] ~ b4@2, ~@22 a3 ~]
  [[bb3,bb4] ~@11]
  ~@57
>`).s("gm_clarinet").gain(0.29).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ A@28 B@2 A@10 B@2 A@6 B@2 A@10 C D>".pickRestart({
  A: "x!2", B: "x", C: "x ~ x!2", D: "~ x!2 ~",
})).gain(0.28)

// drums · rim
const rim = s("rim").struct("<~ A@12 ~ B A@6 ~@2 A@6 ~ B A@6 ~@3 A ~@2 A@6 ~ B A@6 ~@3 A ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~ A@12 B@2 A@6 B@2 A@6 C@2 A@6 B@3 A C@2 A@6 C@2 A@6 B@3 A C ~>".pickRestart({
  A: "x ~@2 x ~ x!2 ~@2 x ~ x", B: "x!2", C: "x",
})).gain(0.2)

stack(
  string_ensemble_1, string_ensemble_1_soft, pizzicato_strings, pizzicato_strings_soft, flute, flute_soft,
  muted_trumpet, bass, electric_guitar_muted, bass_2, bass_soft, acoustic_guitar_steel, clarinet, kick, rim, hihat
)

More by Frank Sinatra