Strudelify

This Magic Moment

The Drifters

KeyB♭ majorTempo120 bpm
0:00/0:00
// This Magic Moment — The Drifters
// 120 bpm, 4/4, key A# 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 92 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.

// chords · string ensemble 1 · "MAGIC"
const string_ensemble_1 = note(`<
  ~@25 A@2 B@2 C@2 D E ~@16 F@2 G@2 H I J K@2 L M@2 N O J P A@2 B@2 C@2 D E ~@8 Q R S T U@2 V ~ W X Y
>`.pickRestart({
  A: "~@6 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@14", B: "~@6 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@14",
  C: "~@6 [f4,bb4,d5] ~@2 [f4,bb4,d5] ~@14", D: "~@6 [f4,a4,c5] ~@2 [f4,a4,c5] ~@14", E: "[a4,c5,f5] ~@5",
  F: "[~ d4 bb4@4 a4@2]/2", G: "[g4@6 g4 f4]/2", H: "eb4@3 g4", I: "bb4 g4", J: "f4@3 g4",
  K: "[a4@6 f4@3 ~ d4@2 bb4@4]/2", L: "a4 f4", M: "[g4@5 bb3 d4 g4]/2", N: "eb4@3 f4", O: "g4", P: "a4 ~@23",
  Q: "~ bb3 d4@2", R: "f4@3 d4", S: "g4 a4", T: "bb4@3 a4", U: "[g4@2 eb4@3 bb3 eb4 g4]/2", V: "f4", W: "~@3 d3",
  X: "eb3 gb3 bb3 c4", Y: "d4 ~@7",
})).s("gm_string_ensemble_1").gain(0.25).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G H A B C D E F G I J B C D E F G H K@2 L@4 M@2 A B C D E F G I J B C D E F G H A B C D E F G I J B C D
  E F G H ~@4 N@2 M@2 A B C D E F G I J B C D E F G H O P Q
>`.pickRestart({
  A: "~@6 d4 ~@2 [f3,bb3,d4] ~@5 [f3,bb3,d4]@3 f2@6, bb2@3 ~, ~@4 f3@3 ~@17, ~@5 bb3@2 ~@17", // Bb
  B: "~@5 [bb3,d4]@2 ~@2 [f3,bb3,d4] ~@8 d3@6, bb2@19 ~@5, ~@4 f3@3 ~@8 [f3,bb3,d4]@9", // Bb
  C: "~@5 [bb3,d4]@2 ~@2 [g3,bb3,d4] ~@8 d3@6, g2@3 ~, ~@4 g3@3 ~@8 [g3,bb3,d4]@9", // Bb Gm
  D: "~@5 [bb3,d4]@2 ~@2 [g3,bb3,d4] ~@8 d3@6, g2@19 ~@5, ~@4 g3@2 ~@9 [g3,bb3,d4]@9", // Bb Gm
  E: "~@6 eb4 ~@2 [g3,bb3,eb4] ~@5 [g3,bb3,eb4]@3 bb2@6, eb3@3 ~, ~@2 g3 ~@9, ~@5 bb3@2 ~@17", // Eb
  F: "~@5 [bb3,eb4]@2 ~@2 [g3,bb3,eb4] ~@8 eb3@6, eb3@2 ~, ~@4 g3@2 ~@9 [g3,bb3,eb4]@9", // Eb5 Eb
  G: "~@5 [c4,f4]@2 ~@2 [a3,c4,f4] ~@8 c3@6, f2@3 ~, ~@4 a3@3 ~@8 [a3,c4,f4]@9", H: "f2 ~@7",
  I: "f2@3 ~@2 [c4,f4]@2 ~@2 [a3,c4,f4] ~@8 c3@6, ~@4 a3@3 ~@8 [a3,c4,f4]@9", // F5 F
  J: "f2@3 ~@3 d4 ~@2 [f3,bb3,d4] ~@5 [f3,bb3,d4]@3 f2@6, bb2@3 ~, ~@4 f3@3 ~@17, ~@5 bb3@2 ~@17", // Bb
  K: "[~@3 g4 ~@3 bb3 ~@6 bb3 d4, g3@21 ~@3 g3@20 ~@4, ~@3 bb3@15 d4@7 ~@2 bb3@8 ~ bb3@3 bb4@9, ~@6 d4@9 g4@12 ~@3 d4@11 ~@7, ~@12 bb4@16 ~@5 g4@8 ~@7]/2",
  L: "[~@57 d4@3 ~@30 d4@3 f4@2 ~, eb3@11 ~@13 eb3@20 ~@4 d3@20 ~@4 d3@8 ~@4 bb2@6 ~@6, ~@3 g3@8 ~ g3@5 ~ g3@6 ~@3 g3@8 ~ g3@5 ~ g3@6 ~@3 f3@11 ~ f3@6 ~@6 f3@9 ~@12, ~@6 bb3@8 ~ bb3@8 ~@7 bb3@6 ~@3 bb3@9 ~@6 bb3@8 ~@4 bb3@8 ~@4 bb3@5 ~@4 bb3@7 ~@2, ~@9 eb4@6 ~@6 eb4@9 ~@3 eb4@6 ~@6 eb4@5 ~@10 f4@8 ~ d4@9 ~@3 d4@6 ~@9]/4",
  M: "[~@3 a3 ~@2 f3 ~ [f2,c3,c4] ~@7, f2 ~@2, ~@3 c3@7 ~@2 c4@8 ~ a3@6 ~@21, ~@6 f3@8 ~ c3@8 ~@25]/2", // F5
  N: "[~@9 d4@3 ~@30 d4@3 f4@2 ~, d3@10 ~@2 d3@4 ~@2 bb2@3 ~@3, ~@3 f3@11 ~ f3@6 ~@6 f3@9 ~@12, ~@6 bb3@8 ~@4 bb3@8 ~@4 bb3@5 ~@4 bb3@7 ~@2, ~@12 f4@8 ~ d4@9 ~@3 d4@6 ~@9]/2",
  O: "~@6 d4 ~@2 [f3,bb3,d4] ~@5 f3@3 bb2@3 f3@2 ~, bb2@2 ~, ~@4 f3@3 ~@17, ~@5 bb3@2 ~@8 [bb3,d4]@9", // Bb
  P: "~@6 eb4 ~ gb3 [bb3,eb4] ~@5 eb3 ~@2 [eb3,gb3,bb3,eb4] ~@5, eb3@7 ~@5, ~@2 gb3 ~@9, ~@5 bb3@2 ~@17", // Eb5 Ebm
  Q: "[bb2,f3,bb3,d4] ~@11", // Bb
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.2)

// bass · acoustic bass
const bass = note(`<
  ~ A B C D E F G H A B C D E F G@2 A B C D E F G H I J K L M N O H A B C D E F G@2 A B C D E F G H A B C D E F G@2 A B
  C D E F G H I J K L M N O H A B C D E F G@2 A B C D E F G H P Q R
>`.pickRestart({
  A: "bb1@2 ~ f2 g2@2 f2@2", B: "bb1 ~@2 g2 f2@2 bb1@2", C: "g1@2 ~ bb1 d2@2 bb1@2", D: "g1 ~@2 g2 d2@2 bb1@2",
  E: "eb2 ~@2 g2 bb2@2 g2@2", F: "eb2 ~@2 c3 bb2@2 g2@2", G: "f1 ~@2 a1 c2@2 f2@2", H: "f1 ~@7",
  I: "g1 ~@2 g1 bb1@2 d2@2", J: "g1 ~@2 bb1 d2@2 bb1@2", K: "eb2@5 ~@4 eb2@3 bb1@6 eb2@6",
  L: "bb1@4 ~@5 eb2@3 g2@6 eb2@6", M: "bb1 ~@2 d2 f2@2 d2@2", N: "bb1 ~@2 bb1 d2@2 f2@2", O: "f1@5 ~@4 c2@3 d2@6 c2@6",
  P: "bb1 ~@2 d2@3 f2@2", Q: "eb2@3 ~@6 gb2@9 gb2@2 ~@4", R: "bb1 ~@7",
})).s("gm_acoustic_bass").gain(0.36)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@8 A B@2 C D E@2 F@2 G@2 H@2 I@2 J@2 ~@7 K B@2 C D L@2 M N O@2 ~@5 A B@2 C D E@2 F@2 G@2 H@2 I@2 J@2 ~@7 K B@2 C D
  L@2 M N P@2 Q@2 R@2 S@2 T@2 ~
>`.pickRestart({
  A: "~ d5 d6 c6", B: "[bb5 f5@12 ~ f5@2]/2", C: "g5@6 a5@6 bb5@5 ~ c6@6", D: "d6@5 ~ d6@5 ~ d6@6 c6@3 bb5@3",
  E: "[c6@3 bb5@32 ~ g5@6 bb5@5 ~]/2", F: "[d6@6 c6@2 ~ c6@18 ~@3 d6@5 ~ d6@6 c6@6]/2", G: "[bb5 f5@13 ~ f5]/2",
  H: "[g5@6 a5@6 bb5@6 c6@3 d6@8 ~ d6@5 ~ d6@6 c6@3 bb5@2 ~]/2", I: "[c6@6 bb5@2 ~ bb5@32 ~ g5@3 bb5@2 ~]/2",
  J: "[d6@3 c6@4 ~ d6@3 c6@16 ~@21]/2", K: "~@2 d6 ~ d6@2 c6@2", L: "[c6@3 bb5@38 ~ bb5@6]/2", M: "d6 c6 d6 c6",
  N: "d6@2 c6@3 d6 c6@2", O: "[bb5@3 ~]/2", P: "[bb5@12 d6 c6 bb5 c6]/2", Q: "[d6@3 c6 bb5@8 d6 c6 bb5 c6]/2",
  R: "[d6@3 c6 bb5@8 d6 c6 bb5 d6]/2", S: "[c6@14 ~ c6@3 d6@3 c6@3]/2", T: "bb5/2",
})).s("gm_string_ensemble_1").gain(0.48).pan(1)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D E@2 F G A B C D E@2 F@2 A B C D E@2 F G ~@8 A B C D E@2 F@2 A B C D E@2 F G A B C D E@2 F@2 A B C D E@2 F G
  ~@8 A B C D E@2 F@2 A B C D E@2 F H I J K
>`.pickRestart({
  A: "[d3,f3,bb3] ~@6 [eb3,g3,c4]", B: "[d3,f3,bb3] ~@7", C: "[d3,g3,bb3] ~@6 [d3,f3,a3]", D: "[d3,g3,bb3] ~@7",
  E: "[[g3,bb3,eb4] ~@6 [f3,d4] [g3,eb4] ~@7, ~@7 bb3@2 ~@7]/2", F: "[a3,c4,f4] ~@7", G: "[f3,a3,c4] ~@7",
  H: "[f3,a3,c4] ~@6 [g3,c4,eb4]", I: "[f3,bb3,d4] ~@4 [f3,bb3,d4] ~@2", J: "[gb3,bb3,eb4] ~@5 [gb3,bb3,c4,eb4] ~",
  K: "[f3,bb3,d4] ~@7", // Bb
})).s("gm_electric_guitar_clean").gain(0.19).pan(0.8)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~ A@2 B@2 C@2 D E ~@16 F@2 G@2 H@2 I@2 J@2 ~@6 A@2 B@2 C@2 D E ~@24 J@2 ~@6 A@2 B@2 C@2 D E ~@2 K
>`.pickRestart({
  A: "[[bb3,bb4]@12 d4 [c4,c5] [bb3,bb4] [c4,c5], ~@36 d5@5 ~@7]/2", // Bb C Bb C
  B: "[[d4,d5]@11 ~ d4 [c4,c5] [bb3,bb4] [c4,c5], ~@36 d5@5 ~@7]/2", // D C Bb C
  C: "[[d4,d5]@9 [c4,c5]@3 [bb3,bb4]@22 ~@2 [d4,d5]@3 [c4,c5]@3 [bb3,bb4]@3 [d4,d5]@3]/2", D: "[c4,c5]@11 ~",
  E: "[c4,a4,c5,f5] ~@7", F: "[~@3 g4@2 ~@2 g4, ~ bb4@7, ~@6 d4@4 ~@5 bb3@7 ~@2, ~@9 d4@2 ~]/2",
  G: "[~@6 bb3@3 g4@4 ~@8 eb5@3, g3@2 ~@3 bb4@3, ~ eb4@6 ~, ~@3 g4]/2",
  H: "[~@7 bb4, d4@14 ~@4 d4@11 ~ d4@13 ~@5, ~@3 f4@10 ~@5 f4@6, ~ d5@3, ~@2 bb4 ~]/2",
  I: "[~@18 c4@6 [f3,a4,c5]@5 ~@19, c4@14 ~@10 c4@3 ~@21, ~@3 a4@4 ~@17, ~@12 f4@17 ~@19]/2", J: "[[bb3,bb4]@3 ~]/2",
  K: "[bb4,d5,f5] ~@7", // Bb
})).s("gm_synth_strings_1").gain(0.33)

// other · alto sax
const alto_sax = note("<~@24 A B@2 C@2 D@2 E ~@32 A B@2 C@2 D@2 E ~@20>".pickRestart({
  A: "~@4 g4 f4 g4 f4", B: "[g4 bb4@10 ~ g4 f4 g4 f4]/2", C: "[g4 bb4 ~ bb4@8 ~ c5 bb4 c5 bb4]/2",
  D: "[d5@2 c5 bb4@6 ~ d5 ~ d5 c5 bb4@2]/2", E: "c5@2 d5 c5@5",
})).s("gm_alto_sax").gain(0.4).pan(0.6)

// chords · celesta
const celesta = note("<~ A@7 B A@7 C D@7 B ~@8 A@7 C ~@5 E@2 B A@7 C D@7 B ~@8 A@7 C D@7 B ~@2 F>".pickRestart({
  A: "[~ bb6@22 ~ [f6,bb6]@20 ~@5 bb6@19 ~@4 [g6,bb6]@19 ~@6 g6@19 ~@5 g6@17 ~@6 [c6,f6]@9 ~@15, [d6,f6]@21 ~@2 d6@20 ~@4 d6@21 ~@3 d6@20 ~@4 bb5@21 ~@3 bb5@18 ~@6 a5@10 ~@15, ~@24 g6@10 ~@14 eb6@10 ~@2 eb6@9 ~@15]/7", // Bb5 Gm F5 Dm
  B: "[c6,f6,a6] ~@7", C: "f6@3 ~@5, c6 ~@7",
  D: "[~ bb6@22 ~ [f6,bb6]@20 ~@5 bb6@19 ~@4 [g6,bb6]@19 ~@6 g6@19 ~@5 g6@17 ~@6 [c6,f6]@9 ~@15, [d6,f6]@21 ~@2 d6@20 ~@4 d6@21 ~@3 d6@20 ~@4 bb5@21 ~@3 bb5@18 ~@6 a5@10 ~@15, c6@3 ~@45 g6@20 ~@28 eb6@20 ~@4 eb6@18 ~@30]/7", // Bb5 Gm F5 Dm
  E: "[~@8 [c6,f6]@3 ~@5, ~@23 a5@10 ~@15]/2", F: "~ [d5,f5,bb5]@2 ~@21, ~ bb4 ~@22",
})).s("gm_celesta").gain(0.12).pan(0.4)

// other · glockenspiel
const glockenspiel = note("<~@41 A@2 B@2 C@2 D ~@44>".pickRestart({
  A: "[bb5@10 ~@2 d6 c6 bb5 c6]/2", B: "[d6@11 ~ d6 c6 bb5 c6]/2",
  C: "[d6@6 ~@3 c6 ~@2 bb5@21 ~@3 d6@3 c6@3 bb5@3 d6@3]/2", D: "c6@7 ~",
})).s("gm_glockenspiel").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@8 B A@16 C B C B C B C B A@15 B A@15 B C B C B C B C B A@15 B A D B>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x", C: "x ~@6 x", D: "x ~@2 x ~@2 x ~",
})).gain(0.3)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@6 x!2]!25 ~@8 [~@6 x!2]!32 ~@8 [~@6 x!2]!18 ~>").gain(1.76)

// drums · guiro
const guiro = s("guiro:4").struct("<A@8 B A@7 B A@7 B ~@8 A@7 B A@7 B A@7 B A@7 B ~@8 A@7 B A@7 B A@2 ~>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x",
})).gain(4.19)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@25 [~@3 x ~ x ~@2]!7 x ~@59>").gain(0.29)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@25 [~ x]!7 ~@60>").gain(0.29)

// drums · triangle
const triangle = s("triangles:35").struct("<x ~@24 [x ~@2 x!2 ~@3]!7 x ~@39 x ~@19>").gain(2.16)

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

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B@7
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@5 x ~@18", B: "~ x ~@3 x ~@2",
})).gain(0.2)

stack(
  string_ensemble_1, acoustic_guitar_steel, bass, string_ensemble_1_2, electric_guitar_clean, synth_strings_1, alto_sax,
  celesta, glockenspiel, kick, hihat, cabasa, guiro, woodblocks, woodblocks_2, triangle, rim, rim_soft
)

More by The Drifters