Strudelify

A Beautiful Morning

The Rascals

KeyE♭ majorTempo120 bpm
0:00/0:00
// A Beautiful Morning — The Rascals
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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(`<
  ~ A@4 B@4 C D E F G H I J A@4 B@4 C D E F G H I J A@4 K@4 L M N O G H P Q R S T U A@4 K@4 A@4 K@4 A@4 V@3
>`.pickRestart({
  A: "[eb1@9 ~ eb2@5 ~ eb1 ~ f2@2 ~@2 g2@9 ~@3 g2@3 ~@3 g2@2 gb2@3 ~ f2@9 ~@3 f2@2 f1@3 ~ c2@2 f2@2 ~@2 g2@8 f2@5 ~ eb2@5 ~ c2@5 ~]/4",
  B: "[eb2@6 ~@2 eb2@2 bb1@2 eb1@4 eb2@2 f2@2 ~@2 g2@8 ~@4 g2@2 ~@4 g2@2 gb2@3 ~ f2@11 ~ c2@2 f1@4 c2@2 f2@3 ~ f1@8 g1@5 ~ ab1@6 bb1@4 ~@2]/4",
  C: "c2@5 ~ c2@4 g1@2 c2@4 g1@2 c2@4 g1@2", D: "f2@4 ~@2 f2@4 c2@2 f2@4 c2@2 f2@4 c2 ~",
  E: "c2@3 ~@3 c2@4 g1@2 c2@4 g1@2 c2@4 g1 ~", F: "f2@2 ~ f2@2 ~ f2 c2 f1 c2@2 f2",
  G: "g1@4 ~@2 g1@3 ~@3 g1@4 g2@2 g1@3 ~ g2@2", H: "c2@5 ~ d2@5 ~ eb2@6 g2@4 ~@2",
  I: "f1@5 ~ f2@4 f1 ~ f2@4 f1@2 f2@4 f1@2", J: "bb1@5 ~ bb1@5 ~ c2@5 ~ d2@4 ~@2",
  K: "[eb1@9 ~ eb2@5 ~ eb1 ~ f2@2 ~@2 g2@9 ~@3 g2@3 ~@3 g2@2 gb2@3 ~ f2@9 ~@3 f2@2 f1@3 ~ c2@2 f2@2 ~@2 f1@5 ~@3 g1@5 ~ ab1@6 bb1@4 ~@2]/4",
  L: "c2 b1", M: "f2@7 ~ f2@2 c2@2 f1@6 f2@2 c2 ~ f2@2", N: "c2@12 b1@11 ~", O: "f1@4 f2 c2 f1@3 f2@2 ~",
  P: "f1@2 ~@2 f1@2 f2@4 f1@2 f2@4 f1 ~ f2@4 f1 ~", Q: "f2@4 f1@2 f2@4 f1@2 f2@4 f1@2 f2@5 ~",
  R: "bb1 ~ bb1 bb2@2 bb1 bb2@2 bb1 bb2@2 bb1", S: "bb2@2 bb1 bb2@2 bb1 bb2@2 bb1 bb2@2 bb1",
  T: "bb2@4 bb1@2 bb2@2 f2@2 bb1@2 bb2@5 ~ bb2@4 bb1@2", U: "bb2@4 bb1@2 bb2@4 bb1@2 bb2@4 bb1@2 bb2@4 bb1 ~",
  V: "[eb2@49 ~@23]/3",
})).s("gm_acoustic_bass").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@2 E@4 F G H I J K L M N@4 E@4 F G H I J K L M N@4 O@4 P Q R S J K L T U V W X N@4 O@4 N@4 O@4 N@4 Y@3
>`.pickRestart({
  A: "~@6 bb3 ~@3 bb3 ~ g4@2 ~@2 g4 ~ g4@3 ~@3",
  B: "[eb2,bb2,g3,bb3,eb4]@6 [eb4,g4,bb4]@3 ~@9 [eb4,g4,bb4]@5 ~, ~@5 [eb4,g4,bb4]@4 ~@3, ~@16 eb3@7 ~", // Eb
  C: "~@6 [d4,g4,bb4]@2 ~@10 [d4,f4,bb4]@5 ~, [d3,g3]@23 ~, bb3@16 bb3@7 ~, ~@10 g4@13 ~, ~@5 [d4,bb4]@4 ~@3", // Gm Bb G5 Gm
  D: "[~@6 [eb4,ab4,c5]@4 ~@8 [eb4,ab4,c5]@3 ~ [bb3,d4,g4]@8 [ab3,c4,f4]@2 ~@4 [f3,ab3,c4,eb4]@5 ~ [ab3,c4]@3 ~@3, ~@4 [f3,ab3]@17 ~@27, ~@4 c4@12 c4@5 ~@27, ~@5 [eb4,ab4,c5]@4 ~@15]/2", // Ab Gm Fm Fm7 Ab Fm Ab
  E: "[~@4 eb4@2 [eb4,g4,bb4]@4 ~@8 [eb4,g4,bb4]@4 ~@8 [d4,g4,bb4] ~@11 [d4,g4,bb4]@4 c4@4 ~@4 [eb4,ab4,c5]@4 [eb4,ab4,c5]@6 c4@2 [eb4,ab4,c5] ~@3 [f2,f3,ab3,c4]@7 ~ [g2,g3,bb3,d4]@5 ~ [ab2,eb3,ab3,c4,eb4]@5 ~ [bb2,f3,bb3,d4,f4]@3 ~@3, eb3@22 ~ [d3,g3]@23 [f3,ab3]@21 ~@29, bb3@16 bb3@6 ~ bb3@17 bb3@6 ~@6 c4@6 ~@38, ~@5 [eb4,g4,bb4]@4 ~@8 [d4,g4,bb4]@4 ~@27]/4", // Eb Gm Ab Fm Gm Ab Bb G5 …
  F: "[c4,eb4,g4]@4 c4 ~ [eb4,g4]@4 c4@2 [eb4,g4]@4 ~@2 [eb4,g4]@4 c4 ~, c3@17 ~@7, ~@6 c4@2 ~@4 c4 ~@3 c4@6 ~@2", // Cm Eb
  G: "c4@4 eb4 ~ [eb4,ab4,c5]@4 eb4 ~ [ab4,c5]@4 ~@2 [eb4,ab4,c5]@5 ~, [f3,ab3]@23 ~, ~@12 eb4@2 ~@2 c4@7 ~", // Ab Fm
  H: "[eb4,g4]@4 c4@2 [eb4,g4]@4 c4@2 [eb4,g4]@4 ~@5 c4@2 ~, c3@17 ~ [eb4,g4]@5 ~, c4@2 ~@4 c4 ~@9 c4@5 ~@3", // Eb
  I: "c4@3 ~ eb4 ~ eb4@4 eb4@2 [ab4,c5]@4 eb4@2 [eb4,ab4,c5]@5 ~, [f3,ab3]@23 ~, ~@6 [ab4,c5]@6 eb4 ~@11", // Ab Fm Ab
  J: "~ d4@2 ~@3 [d3,g3,bb3,d4,g4,bb4]@4 ~@8 [d4,g4,bb4]@6, [d3,g3,bb3] ~@3 [d3,g3,bb3]@2, [g4,bb4] ~@5 [d4,g4,bb4]@3 ~@3", // Gm
  K: "[c4,eb4,g4]@4 c4 ~ [c4,eb4,g4]@4 ~@8 [c4,eb4,g4]@3 ~@3, c3@7 ~, eb3@13 ~@3 eb3@5 ~@3, ~@5 [c4,eb4,g4]@4 ~@3", // Cm
  L: "[ab4,c5]@4 f4 ~ [ab4,c5]@4 f4 ~ [ab4,c5]@4 f4@2 [ab4,c5]@4 f4 ~, [f3,c4]@23 ~, f4@2 ~@4 f4@2 ~@4 f4 ~@11", // Ab F5
  M: "[ab4,c5]@4 f4 ~ [ab4,c5]@4 f4 ~ [ab4,c5]@4 f4@2 [ab4,c5]@4 f4 ~, bb3@23 ~, f4 ~@5 f4@2 ~@4 f4 ~@5 f4 ~@5", // Ab
  N: "[[eb2,bb2,g3,bb3,eb4]@6 [eb4,g4,bb4]@3 ~@9 [eb4,g4,bb4,f6]@4 ~@8 [d4,g4,bb4]@2 ~@10 [d4,f4,bb4,gb6]@4 ~@8 [eb4,ab4,c5]@4 ~@8 [eb4,ab4,c5]@3 ~ [bb3,d4,g4]@8 [ab3,c4,f4]@2 ~@4 [f3,ab3,c4,eb4]@5 ~ [ab3,c4]@3 ~@3, ~@10 [eb4,g4,bb4]@8 ~@4 g6@12 [d4,bb4]@8 ~@4 f6@23 ~@27, ~@16 [eb3,eb6]@7 ~ [d3,g3]@23 ~@5 [f3,ab3]@17 ~@27, ~@24 bb3@16 [bb3,g6]@7 ~@5 c4@12 c4@5 ~@27, ~@34 g4@13 ~@11 [eb4,ab4,c5]@8 ~@30]/4", // Eb Gm Bb Ab Gm Fm Fm7 Ab …
  O: "[[eb2,bb2,g3,bb3,eb4]@6 [eb4,g4,bb4]@3 ~@9 [eb4,g4,bb4,f6]@4 ~@8 [d4,g4,bb4]@2 ~@10 [d4,f4,bb4,gb6]@4 ~@8 [eb4,ab4,c5]@4 ~@8 [eb4,ab4,c5]@3 ~ [f2,f3,ab3,c4]@7 ~ [g2,g3,bb3,d4]@5 ~ [ab2,eb3,ab3,c4,eb4]@5 ~ [bb2,f3,bb3,d4,f4]@3 ~@3, ~@10 [eb4,g4,bb4]@8 ~@4 g6@12 [d4,bb4]@8 ~@4 f6@23 ~@27, ~@16 [eb3,eb6]@7 ~ [d3,g3]@23 ~@5 [f3,ab3]@17 ~@27, ~@24 bb3@16 [bb3,g6]@7 ~@5 c4@12 c4@5 ~@27, ~@34 g4@13 ~@11 [eb4,ab4,c5]@8 ~@30]/4", // Eb Gm Bb Ab Fm Gm Ab Bb …
  P: "eb6@2 g6@2 c7@2 d6@2 g6@2 c7 ~, [c4,eb4,g4]@11 ~ [b3,eb4,g4]@10 ~@2", // Cm Baug
  Q: "f6@4 a6@3 ~ c7@3 ~ f6@4 a6@4 c7@2 ~@2, [bb3,eb4,g4]@2 ~ [a3,c4,eb4,f4]@2 ~", // Eb F7
  R: "[c4,eb4,g4]@11 ~ [b3,eb4,g4]@10 ~@2", S: "[bb3,eb4,g4]@8 ~@4 [a3,c4,f4]@9 ~@3",
  T: "[ab4,c5]@4 f4 ~ [ab4,c5]@4 f4 ~ [ab4,c5]@4 f4@2 [ab4,c5]@4 f4 ~, f4 ~@5 f4@2 ~@4 f4 ~@5 f4 ~@5", // Ab
  U: "[f3,c4,eb4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~, ~@6 eb4 ~@5 eb4 ~@11", // Fm7 Fm
  V: "[f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4@2, eb4 ~@5 eb4 ~@5 eb4 ~@5 eb4 ~@5", // Fm
  W: "[f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,ab4,c5]@4 eb4 ~ [f3,c4,eb4,ab4,c5]@4 eb4 ~, eb4 ~@5 eb4@2 ~@4 eb4 ~@11", // Fm Fm7
  X: "eb4@2 ~@18 [eb4,ab4,c5]@2 [f3,c4] ~, [ab4,c5] ~@2, [f3,c4]@3 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 ~, ~ eb4 [eb4,ab4,c5]!3 ~", // Ab F5 Ab F5 Ab
  Y: "[[eb3,bb3,eb4,g4]@25 ~@11]/3", // Eb
})).s("gm_piano").gain(0.64)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A B C@2 A B D@2 E F E F G H I J A B C@2 A B D@2 E F E F G H I J A B C@2 A B D@2 K L K L G H I J M@2 N O A B C@2 A B
  D@2 A B C@2 A B D@2 A B C@2 P@2 ~
>`.pickRestart({
  A: "~@6 [bb3,eb4,g4] ~@11 [bb3,eb4,g4] ~@5", B: "~@6 [bb3,d4,g4] ~@11 [bb3,d4,g4] ~@5",
  C: "[~@6 [ab3,c4,f4] ~@11 [ab3,c4,f4] ~@3 [bb3,d4,g4]@8 [ab3,c4,f4]@2 ~@4 [ab3,c4,eb4]@5 ~ [ab3,c4]@3 ~@3]/2", // Fm Gm Fm Ab
  D: "[~@6 [ab3,c4,f4] ~@11 [ab3,c4,f4] ~@3 [f3,ab3,c4]@7 ~ [g3,bb3,d4]@5 ~ [ab3,c4,eb4]@5 ~ [bb3,d4,f4]@3 ~@3]/2", // Fm Gm Ab Bb
  E: "[c4,eb4,g4] ~@5 [c4,eb4,g4] ~@5 [c4,eb4,g4] ~@5 [c4,eb4,g4] ~@5", // Cm
  F: "[f3,ab3,c4] ~@5 [f3,ab3,c4] ~@5 [f3,ab3,c4] ~@5 [f3,ab3,c4] ~@5", G: "~@6 [bb3,c4,d4,g4] ~@11 [bb3,d4,g4] ~@5",
  H: "~@6 [c4,eb4,g4] ~@11 [c4,eb4,g4] ~@5", I: "~@6 [f3,ab3,c4,eb4] ~@11 [f3,ab3,c4,eb4] ~@5",
  J: "~@6 [bb3,f4]@5 ~ [bb3,f4,bb4]@2 [bb3,f4,bb4]@2 [bb3,f4,bb4]@2 [bb3,f4,bb4]@2 [bb3,f4,bb4]@2 [bb3,f4,bb4] ~", // Bb5
  K: "eb6@2 g6@2 c7@2 d6@2 g6@2 c7 ~", L: "f6@4 a6@3 ~ c7@3 ~ f6@4 a6@4 c7@2 ~@2",
  M: "[ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5", N: "[bb2,ab3,c4,eb4]!4",
  O: "[bb2,ab3,c4,eb4]@3 [bb2,ab3,c4,eb4]@3 [bb2,ab3,c4,eb4]@3 [bb2,ab3,c4,eb4]@2 ~", // Ab
  P: "[[eb3,eb4]@7 ~, [g3,bb3]@5 ~]/2", // Eb Gm
})).s("gm_acoustic_guitar_nylon").gain(0.53)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@9 A B ~@2 C D ~@3 E@2 ~ F@2 ~@2 A B ~@2 C D ~@2 G@2 H ~ I@2 J ~ K L M N C D ~@2 O@4 G@2 H ~ I@2 J ~ G@2 H ~ I@2 J ~
  G@2 H ~ P@2 ~
>`.pickRestart({
  A: "g6@6 c7@5 ~ bb6@6 g6@5 ~", B: "f6@2 eb6 ~@2 eb6@4 ~@3", C: "[bb5,d6,g6,d7]", D: "[c6,eb6,g6,eb7]@23 ~",
  E: "[~@12 bb6@5 ~ c7@24 ~@6]/2", F: "[~@11 [bb5,d6,g6]@11 ~@2]/2", G: "[bb5@7 d6]/2", H: "c6@11 ~",
  I: "[[g5,bb5]@41 c6 [bb5,d6]@6]/2", J: "[ab5,c6]@5 ~",
  K: "c6@2 ~@2 c6@2 ~@2 c6@3 ~ [b5,d6]@3 ~ [b5,d6]@3 ~ [b5,d6]@3 ~", // Bm
  L: "[bb5,eb6]@2 ~@2 [bb5,eb6]@2 ~@2 [bb5,eb6]@3 ~ f6@3 c6@6 ~@3, ~@6 a5@5 ~", // Eb5
  M: "c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 [b5,d6]@2 ~@2 [b5,d6]@2 ~@2 [b5,d6]@3 ~", // Bm
  N: "[bb5,eb6]@3 ~ [bb5,eb6]@2 ~@2 [bb5,eb6]@2 ~@2 [c6,eb6,g6]@8 ~@4, ~@6 a5@5 ~", // Eb5 Cm
  O: "[~@24 f6@24 ~@24 c7@23 ~, c6@95 ~, ~@48 eb6@47 ~, ~@60 ab6@35 ~]/4", P: "[[bb4,eb5,g5]@15 ~]/2",
})).s("gm_rock_organ").gain(0.59)

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

// drums · rim
const rim = s("rim").struct("<~@13 [x!4]!4 ~@12 [x!4]!12 ~@4 [x!4]!28 x ~@2>").gain(0.64)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@16 A ~@15 A ~@3 B ~@3 B ~@11 A ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3>".pickRestart({
  A: "~@6 x!5 ~", B: "~@6 x!3 ~@3",
})).gain(0.19)

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

// drums · hihat
const hihat = s("hh").struct("<~ [~ x ~ x]!8 [x!4]!8 [~ x ~ x]!8 [x!4]!48 ~@3>").gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@9 A@7 B ~@8 A@7 B A@2 C A@3 C A@12 B A@2 C A@3 C A@3 C A@3 C A@3 C A ~@3
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x", B: "~@5 x ~@2 x ~@2 x", C: "~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.19)

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

// drums · open hat
const open_hat = s("oh").struct("<~@16 A ~@15 A ~@2 B ~@3 B ~@12 A ~@2 B ~@3 B ~@3 B ~@3 B ~@3 B ~ C ~@2>".pickRestart({
  A: "~ x ~@4", B: "~@11 x", C: "x",
})).gain(0.64)

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

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!40 ~@4 [~ x ~ x]!28 ~@3>").gain(0.64)

// drums · congas
const congas = s("conga:18").struct(`<
  [~@17 x!2 ~@2 x ~@2]
  [~@6 x ~@10 x ~@6]!19
  [~@3 x ~@4 x ~@3]!10
  [~@6 x ~@10 x ~@6]!11
  ~@4
  [~@3 x ~@4 x ~@3]!27
  [~ x ~@2]
  ~@3
>`).gain(2.06)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  A B C B C B C B C B C D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E ~@4 D E D E D E D E D E D E D E D E
  D E D E D E D E D E D F ~@3
>`.pickRestart({
  A: "~@23 x", B: "~@18 x ~@4 x", C: "~@5 x ~@12 x ~@4 x", D: "~@9 x ~ x", E: "~@2 x ~@6 x ~ x", F: "~@5 x ~@18",
})).gain(2.06)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@41 [~ x ~ x]!4 ~@31>").gain(4.11)

stack(
  bass, piano, acoustic_guitar_nylon, rock_organ, kick, rim, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, crash, tambourine, congas, congas_2, agogo_bells
)

More by The Rascals