Strudelify

Sealed With a Kiss

Bobby Vinton

KeyF minorTempo92 bpm
0:00/0:00
// Sealed With a Kiss — Bobby Vinton
// 92 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 8) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 60 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@3 A B C D E F E G H B C D E F E G H I J K L M N M O P C D E F E Q H B ~ C D E F E G H R S T U V U W X Y Z AA AB AC@2
  ~
>`.pickRestart({
  A: "f2@5 ~ eb2@2", B: "f2@15 ~", C: "bb1@5 ~ bb1 ~ bb1@7 ~", D: "f2@4 ~@2 f2 ~ f2@7 ~",
  E: "bb1@4 ~@2 bb1@2 eb2@5 ~ eb2 ~", F: "ab2@2 ~ ab2 f2@2 f1 f2", G: "c2@4 ~@2 c2@2 f2@3 ~ f2@2 c2@2",
  H: "bb1@2 ~ bb1 eb2@2 ~ eb2", I: "~@6 f1 ~, f2@15 ~", J: "bb1@4 ~@2 bb1 ~ bb1@8", K: "f2@5 ~ f2 ~ f2@8",
  L: "bb1@4 ~@2 bb1 ~ bb1@7 ~", M: "f2@4 ~@2 f2 ~ f2@5 ~ f2@2", N: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1@2",
  O: "g1@4 ~@2 g1 ~ g1@5 ~ g1@2", P: "c2 ~@7", Q: "f2@5 ~ c2@2 f1@4 f2@2 f1 ~", R: "f2@2 ~@6 gb2@2 gb1@2 gb2@2 gb1 ~",
  S: "b1@5 ~ b1 ~ b1@7 ~", T: "gb2@4 ~@2 gb2 ~ gb2@7 ~", U: "b1@4 ~@2 b1@2 e2@5 ~ e2 ~", V: "a2@2 ~ a2 gb2@2 gb1 gb2",
  W: "gb2@5 ~ db2@2 gb1@4 gb2@2 gb1 ~", X: "b1@2 ~ b1 e2@2 ~ e2", Y: "gb1@5 ~ gb1@2 gb2@4 gb1@2 gb2@2",
  Z: "b1@5 ~ b1@2 e1@4 e2@4", AA: "gb1@2 ~ gb1 gb2@2 gb1 gb2", AB: "b1@5 ~ b1@2 e2@4 e1@3 ~", AC: "gb1/2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@2 B C D E F G H I J K L E F G H I J K M N O N O N P Q R E F G H I S T U D V W X Y Z AA T AB AC AD AE AF AG AH AI AJ
  AK AL AM AN@2 ~
>`.pickRestart({
  A: "[~@2 f5!2 f5 [c5,f5] [db5,f5]@2, ~@12 eb5@13 ~@7, ~@2 db5 ~]/2", B: "[eb3,g3,bb3,eb4,g4]@13 ~@3",
  C: "[f2,f3,ab3,c4]@3 [eb3,g3,bb3,eb4]", D: "[f2,f3,ab3,c4]@15 ~", E: "[bb2,bb3,d4,f4] [bb3,db4,f4]",
  F: "f3@5 ~@2 c4, c4@7 ~, ab3@3 ab3, ~@5 f3@3", G: "bb3@3 bb3!2 ~ bb3@2, [bb2,db4,f4] [eb3,eb4,g4], ~@5 g3@3",
  H: "ab3@3 ~ ab3@2 ab2 ~ f3 ~@3 [ab3,c4]@4, [ab2,c4,eb4]@7 ~ f2@8, ~@2 [ab3,c4] ~, ~@5 f3@3", // Ab
  I: "~@6 db4@2 bb3@2 ~@2 [bb3,eb4,g4]@3 ~, [bb2,bb3]@8 eb3@7 ~, db4@3 ~ [eb4,g4]@2 ~@2, ~@4 f4@4 ~@2 g3@5 ~", // Eb Bb Eb
  J: "~@3 c4 [f2,f3,ab3,c4]@4, [c3,eb4] ~, c4@3 ~@5, ~ g3@3 ~@4, ~ [d4,g4] ~@2", K: "[bb3,db4,f4] [eb3,g3,bb3,eb4,g4]",
  L: "[f3,ab3,c4]@13 ~@3", M: "~@4 ab4@2 ~@4 ab4@2 f4@2 ab4 ~, [f3,ab3,c4]@13 ~@3, ~ f4@4 ~@3, ~@6 c5@9 ~, ~@2 bb4 ~",
  N: "~ f5 [bb5,d6] f5 [bb5,d6] f5 [bb5,d6] f5", O: "~ f5 [ab5,c6] f5 [ab5,c6] f5 [ab5,c6] f5",
  P: "~@2 f5@2 [ab5,c6]@2 f5@2 [ab5,c6]@2 f5@2 [ab5,c6]@2 f5 ~", Q: "~@3 d6, ~ g4@7, ~@2 d5@3 d5@3, ~@3 g5@5, ~ b5",
  R: "[c5,e5,g5,c6] ~@15", S: "[f2,f3]@6 ~@4 ab3@2 c4@3 ~, c4@5 ~@3, ab3@8 f3@7 ~, ~@6 f2@9 ~",
  T: "[bb3,db4,f4]@4 ~@4 [eb3,g3,bb3,eb4,g4]@5 ~@3", U: "~@3 [eb3,g3,bb3,eb4,g4], [f3,ab3,c4]",
  V: "[bb2,bb3,d4,f4]@5 ~@3 [bb3,db4,f4]@4 ~@4", W: "[ab3,c4]@10 f3 ~ ab3 ~ c4 ~, f3@9 ~@7",
  X: "[bb2,bb3,db4,f4]@4 ~@2 bb3 ~ bb3@2 g3@2 bb3 ~@3, ~@2 [eb3,eb4,g4] ~", // Bbm Eb
  Y: "ab3@3 ~ ab3@2 ab2 ~ ab3@2 f3 ~ [ab3,c4] ~@3, [ab2,c4,eb4]@3 ~ [f2,c4]@2 ~@2, ~@8 f3 ~@7", // Ab F5
  Z: "[bb3,db4]@3 ~ f4@2 db4 ~ bb3@2 g3@2 [bb3,eb4,g4] ~@3, bb2 ~ [eb3,eb4,g4] ~", // Bbm Eb
  AA: "~@2 g3@2 g4@2 c4 ~ [f2,f3,ab3,c4]@4 ~@4, [c3,c4,eb4]@4 d4 ~@11", AB: "~@8 [gb2,a3,db4,gb4]@7 ~",
  AC: "[b2,b3,eb4,gb4] [b3,d4,gb4]", AD: "gb3@5 ~@2 db4, db4@7 ~, a3@3 a3, ~@5 gb3@3",
  AE: "b3@3 b3!2 ~ b3@2, [b2,d4,gb4] [e3,e4,ab4], ~@5 ab3@3", // Bm E
  AF: "a3@3 ~ a3@2 a2 ~ gb3 ~@3 [a3,db4]@4, [a2,db4,e4]@7 ~ gb2@8, ~@2 [a3,db4] ~, ~@5 gb3@3", // A
  AG: "~@6 d4@2 b3@2 ~@2 [b3,e4,ab4]@3 ~, [b2,b3]@8 e3@7 ~, d4@3 ~ [e4,ab4]@2 ~@2, ~@4 gb4@4 ~@2 ab3@5 ~", // E B E
  AH: "[gb2,gb3]@6 ~@4 a3@2 db4@3 ~, db4@5 ~@3, a3@8 gb3@7 ~, ~@6 gb2@9 ~", // Gb
  AI: "[b3,d4,gb4]@4 ~@4 [e3,ab3,b3,e4,ab4]@5 ~@3", AJ: "[db3,gb3,a3,db4,a4], gb4@3 ~",
  AK: "[b3,d4,gb4] [e3,b3,e4,ab4]", AL: "[db3,gb3,a3,db4,gb4,a4]", AM: "[b3,d4,gb4]@8 [e3,b3,e4,ab4]@7 ~",
  AN: "[gb3,db4,gb4,bb4]/2", // Gb
})).s("gm_piano").gain(0.48)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@2 B C D E F G H I J K L E F G H I J K M N O P Q R S T U E F G H I V W X Y E F G H I J K Z AA AB AC AD AE AF AG AH AI
  AJ AK AL@2 ~
>`.pickRestart({
  A: "[~@2 f5!2 f5 [c5,f5] [db5,f5]@2, ~@12 eb5@13 ~@7, ~@2 db5 ~]/2", B: "[eb3,g3,bb3,eb4,g4]@13 ~@3",
  C: "~@2 [ab3,c4] [eb3,g3,bb3,eb4,g4], f2@3 ~, [ab3,c4] ~, f3@3 f3@3 ~@2, ~ c3@2 ~", D: "[f3,ab3,c4]@3 ~",
  E: "f3@2 ~ bb3 ~@2 f3@2, [bb2,d4]@9 ~@7, bb3@3 ~ db4@4, ~@4 f3@5 ~ bb3@6", // Bb
  F: "f3 ~@2 f3, [ab3,c4]@5 [ab3,c4]@3, f2@3 f2@5, ~ f3!2 ~", // Ab
  G: "[db4,f4]@2 ~ bb3 ~@3 eb4, bb2 eb3, bb3@3 ~@2 g3@3, ~@2 [db4,f4]@2 eb4@3 ~, ~@3 bb3", // Db
  H: "~@2 c4@2 ~@3 f3, ab2 f2, ~ ab3@3 ~ f3@2 ~, ~@3 ab3",
  I: "~@6 bb3@2 ~@4 eb4@2 bb3 ~, bb2@8 eb3@7 ~, ~@2 bb3@4 ~@4 g3@5 ~, ~ [db4,f4] ~@2", // Db
  J: "c4@2 ~ c4 f3 ~ ab3@2, [g3,bb3] [f2,c4], ~@2 ab3 ~, ~@5 f3@3", // Gm F5
  K: "~@3 db4 bb3 ~ [eb4,g4]@2, bb2 ~, db4@3 ~ [eb4,g4]@2 ~@2, ~ db3@3 eb3@4, ~@2 f4@2 ~ bb3@3", // Eb
  L: "[f2,f3,ab3,c4]@13 ~@3", M: "f3 ~@5 ab4 ~, f2@5 f4@2 ~, c4@6 c4@7 ~@3, ab3@4 ab3@9 ~@3, ~@2 f3@11 ~@3",
  N: "[bb2,f3,bb3,d4]@3 ~ [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@4, ~@3 bb2@13", // Bb
  O: "~@2 ab3 ~@3 c4@2, ~ f3@3 f3@4, ~ c4@2 ~, ~@3 ab3@2 ab3@3",
  P: "[f3,bb3,d4]@6 [f3,bb3,d4]@2 [f3,bb3,d4]@2 bb3 [f3,bb3,d4] [f3,bb3,d4]@2 [f3,bb3,d4]@2, bb2", // Bb
  Q: "f3@2 ~@3 f3 [f2,f3,ab3,c4]@2, ab3@3 ~, c4@2 c4 ~, f2@3 f2@3 ~@2, ~@2 f3@3 ~@3", // Fm
  R: "[f3,bb3,d4]@3 [f3,bb3,d4]!2 ~ [f3,bb3,d4]!2, bb2@5 [f3,bb3,d4] ~@2, ~@11 bb2@5", // Bb
  S: "[f3,ab3,c4]@4 [f3,ab3,c4]@2 ~@4 [f3,ab3,c4]@2 [f3,ab3,c4]@3 ~, f2@8 f2@7 ~, ~@3 [f3,ab3,c4]@2 ~@3", // Fm
  T: "~@3 [g3,b3,d4], g2, [b3,d4]@2 [b3,d4] ~, g3@3 g3@3 ~@2, ~@2 d3@3 d3@3", U: "[c3,g3,c4] ~@15",
  V: "ab3 f3 ab3 ~ ab3 ~ ab3 f3, f2@15 ~, c4@9 ~ c4@6, f3 ~@5 f3@6 ~@4",
  W: "~@2 db3 ~ f4@2 db4 ~ [eb3,bb3,eb4,g4]@2 bb3 ~ [eb4,g4] ~@3, [bb2,db4] ~@3", // Eb Bbm
  X: "f2@2 f2@7 ~@3 [eb3,g3,bb3,eb4]@4, [f3,ab3,c4]@13 ~@3", Y: "[f2,f3,ab3,c4]@7 ~",
  Z: "~@4 f4 ~ f4@2 gb4@2 db4@2 b3@2 a3@2", AA: "gb3@2 ~ b3 ~@2 gb3@2, [b2,eb4]@9 ~@7, b3@3 ~ d4@4, ~@4 gb3@5 ~ b3@6",
  AB: "gb3 ~@2 gb3, [a3,db4]@5 [a3,db4]@3, gb2@3 gb2@5, ~ gb3!2 ~", // A
  AC: "[d4,gb4]@2 ~ b3 ~@3 e4, b2 e3, b3@3 ~@2 ab3@3, ~@2 [d4,gb4]@2 e4@3 ~, ~@3 b3", // D
  AD: "~@2 db4@2 ~@3 gb3, a2 gb2, ~ a3@3 ~ gb3@2 ~, ~@3 a3",
  AE: "~@6 b3@2 ~@4 e4@2 b3 ~, b2@8 e3@7 ~, ~@2 b3@4 ~@4 ab3@5 ~, ~ [d4,gb4] ~@2", // D
  AF: "a3 gb3 a3 ~ a3 ~ a3 gb3, gb2@15 ~, db4@9 ~ db4@6, gb3 ~@5 gb3@6 ~@4",
  AG: "~@2 d3 ~ gb4@2 d4 ~ [e3,b3,e4,ab4]@2 b3 ~ [e4,ab4] ~@3, [b2,d4] ~@3", // E Bm
  AH: "gb4 ~ [db4,gb4]!2 ~@2 [db4,gb4]@2, db3@3 [db3,gb3,a3]@2 [db3,gb3,a3]@3, [gb3,a3,db4]@3 [gb3,a3]@3 ~@10, ~ gb4 ~@2 [db4,gb4]@2 ~@2", // Gb5 Gbm Gb5
  AI: "[b2,d4,gb4]@3 ~ [d4,gb4]@4 e3@2 ~@2 [ab3,b3,e4]@4, ~@3 b2@5 [ab3,b3,e4]@4 ~@4, ~@5 e3@3", // Bm D E
  AJ: "[gb3,a3,db4] ~@3 [db4,gb4] ~@2 [db4,gb4], db3@3 [db3,gb3,a3]@3 [db3,gb3,a3]@2, gb4 ~ [db4,gb4]@2 [db4,gb4]@4 ~@2 [db4,gb4]@4 ~@2, ~@3 [gb3,a3]@3 ~@10", // Gbm Gb5 Gbm Gb5 Gbm
  AK: "[d4,gb4]!2 [ab3,b3,e4]!2", AL: "[[db3,gb3,db4,gb4]@11 ~@5]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// chords · rock organ · "ORGAN 3"
const rock_organ = note("<~@13 A@2 B C B D E F ~@12 G H I ~@2 A@2 B C B D E ~@5 J K L M N O P Q@2 ~>".pickRestart({
  A: "[d6@8 db6@7 ~ [ab5,c6]@15 ~, f5@31 ~, bb5 ~]/2", B: "[db5,f5]@7 ~ [eb5,g5]@7 ~, bb4@15 ~",
  C: "[ab4,c5,eb5]@7 ~ [f4,ab4,c5]@7 ~", D: "[c5,eb5,g5] [f4,ab4,c5]", E: "[bb4,db5,f5]@8 [eb4,g4,bb4,eb5,g5]@7 ~",
  F: "[f3,f4,ab4,c5]@15 ~", G: "~@4 db5@2 f5@2 eb5@7 ~, ~@2 bb4@5 ~@9", H: "[f4,ab4,c5]@15 ~",
  I: "[bb4,db5,f5]@7 ~ [bb4,eb5,g5]@8", J: "~@4 d5@2 gb5@2 e5@7 ~, ~@2 b4@5 ~@9", K: "[gb4,a4,db5]@15 ~",
  L: "[b4,d5,gb5]@7 ~ [b4,e5,ab5]@8", M: "gb5@4 a5@2 db6 a5", N: "b5@7 ~ ab5@4 gb5@2 e5@2",
  O: "gb5@5 ~ gb5@2 a5@4 db6@2 a5@2", P: "b5@8 ab5@4 gb5@2 e5 ~", Q: "[gb5@5 bb5@4 ab5@5 gb5@5 db6@13]/2",
})).s("gm_rock_organ").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@3 A@2 B@7 C B@15 A B@8 C B@7 C B@11 A ~@2>".pickRestart({
  A: "x", B: "x ~@3 x ~@2 x", C: "x ~@3 x ~ x!2",
})).gain(0.71)

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

// drums · low tom
const low_tom = s("lt").struct("<~@2 [~@13 x!3] ~@57>").gain(0.57)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@3 A ~ B@6 C ~ B@14 C D B@8 ~ B@6 C ~ B@10 E ~@3>".pickRestart({
  A: "~@9 x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~@5 x ~@2", E: "~ x ~ x ~@4",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 [~@5 x!2 ~] ~@57>").gain(0.64)

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

// drums · ride
const ride = s("rd").struct("<~@3 x!2 ~@52 x ~@2>").gain(0.71)

// drums · congas
const congas = s("conga:18").struct("<~@3 A ~@17 B C B C B C B ~@28 B ~@3>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@10 x!4 ~@2", C: "~@10 x!2 ~@4",
})).gain(2.29)

// drums · congas
const congas_2 = s("conga:33").struct("<~@3 A ~@17 A B A B A B A ~@28 A ~@3>".pickRestart({
  A: "~@14 x!2", B: "~@12 x ~ x!2",
})).gain(2.29)

stack(
  bass, piano, acoustic_guitar_nylon, rock_organ, kick, rim, low_tom, hihat, hihat_soft, mid_tom, open_hat, ride,
  congas, congas_2
)

More by Bobby Vinton