Strudelify

One More Time

Real McCoy

KeyF majorTempo133 bpm
0:00/0:00
// One More Time — Real McCoy
// 133 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · electric bass finger · "FingrBass"
const bass = note(`<
  ~@12 A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B D E A B C A@2 B C A@2 B C A@2 B C F A B C A@2 B C A@2 B C A@2 B D E A
  B C A@2 B C G A B C A@2 B C A@2 B C A@2 B C F ~@7 H A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C F
>`.pickRestart({
  A: "bb1@2 bb2!2 bb1@2 bb2!2 bb1@2 bb2!2 bb1@2 bb2!2", B: "c2@2 c3!2 c2@2 c3!2 c2@2 c3!2 c2@2 c3!2",
  C: "a1@2 a2!2 a1@2 a2!2 a1@2 a2!2 a1@2 a2!2", D: "a1@15 ~", E: "bb1", F: "bb1 ~@7",
  G: "bb1@2 bb2!2 bb1@2 bb2!2 bb1@6 ~@2", H: "bb1@15 ~",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · percussive organ · "PercOrg"
const percussive_organ = note(`<
  ~@4 A B C D A B C D A B C D A B C E ~@8 F ~@3 F ~@3 A B C D A B C D G B C D G B C E ~@8 F ~@3 F ~@3 A B C D A B C H A
  B C D A B C E ~@16 A B C D G B C D G B C D G B C D G B C D G B C E
>`.pickRestart({
  A: "[bb4,d5,f5,bb5]@2 ~@2 [bb4,d5,f5,bb5]@2 ~@4 [bb4,d5,f5] ~@3 [bb4,d5,f5,bb5] ~, ~@5 bb5 ~@2", // Bb
  B: "[c5,e5,g5,c6]@2 ~@2 [c5,e5,g5,c6]@2 ~@4 [c5,e5,g5,c6]@2 ~@2 [c5,e5,g5,c6] ~", // C
  C: "[a4,c5,e5,a5]@2 ~@2 [a4,c5,e5,a5]@2 ~@4 [a4,c5,e5,a5]@2 ~@2 [a4,c5,e5,a5] ~", // Am
  D: "[bb4,d5,f5,bb5]@2 ~@2 [bb4,bb5]@2 ~@4 [bb4,d5,f5,bb5]@2 ~@2 [bb4,d5,f5,bb5] ~, ~@4 [d5,f5] ~@11", // Bb Dm
  E: "[bb4,d5,f5,bb5] ~@7", F: "[bb4,d5,f5,bb5]@3 ~ [bb4,d5,f5,bb5]@2 ~@10",
  G: "[bb4,d5,f5,bb5]@2 ~@2 [bb4,d5,f5,bb5]@2 ~@4 [bb4,bb5]@2 ~@2 [bb4,d5,f5,bb5] ~, ~@10 [d5,f5] ~@5", // Bb Dm
  H: "[bb4,d5,f5,bb5] ~ [bb4,bb5] ~@5, ~@4 [d5,f5] ~@11", // Bb Dm
})).s("gm_percussive_organ").gain(0.29)

// other · pad new age · "NewAge"
const pad_new_age = note(`<
  ~@11 A B@2 C@2 D@2 E F ~@8 G H I@2 G J K@2 B@2 C@2 D@2 E F L M N O P M Q R ~@8 G H I@2 G J K@2 B@2 C@2 D@2 E S B@2 C@2
  D@2 E F L M N O P M Q R G H I@2 G J K@2 B@2 C@2 D@2 E F L M N O P M Q R ~@8
>`.pickRestart({
  A: "~@8 f4@3 ~ g4@2 ~@2", B: "[a4@4 ~@2 a4 ~ a4 ~ a4@2 bb4@2 g4@7 ~@3 e4@3 ~ f4@2 ~@2]/2",
  C: "[g4@3 ~ g4 ~ g4@3 ~ a4@3 ~ g4@4 f4@4 ~@2 f4@3 ~ g4@3 ~]/2",
  D: "[a4@5 ~ a4 ~ a4 ~ a4 ~ bb4 ~ g4@6 ~@4 e4@3 ~ f4@2 ~@2]/2", E: "g4@3 ~ g4 ~ g4@3 ~ a4@3 ~ g4@2", F: "~ f4@3 ~@4",
  G: "~@2 f4@2 ~@2 f4@2 ~@2 f4@3 ~ g4@2", H: "~@2 g4@3 ~ e4@3 ~ c4@4 ~@2", I: "[g4 ~ g4@3 ~ e4@3 ~ c4@3 ~ f4@5 ~@13]/2",
  J: "~@2 g4@3 ~ e4@3 ~ c4@5 ~", K: "[c5 ~ c5@3 ~ a4@3 ~ g4@3 ~ g4@4 f4@4 ~@2 f4@3 ~ g4@2 ~@2]/2",
  L: "a4@3 ~ g4@4 ~@6 a4@2", M: "~@2 g4@3 ~ a4@3 ~ g4@3 ~@3", N: "a4@3 ~ g4@3 ~@7 d5@2",
  O: "~@2 c5@3 ~ a4@4 g4 ~ f4@2 d4@2", P: "a4@3 ~ g4@3 ~@7 a4@2", Q: "a4@3 ~ g4@3 ~@3 a4@2 ~@2 f4@2",
  R: "~@2 a4@3 ~ f4@2 ~@8", S: "~@2 f4@6 f4@3 ~ g4@2 ~@2",
})).s("gm_pad_new_age").gain(0.39)

// chords · synth strings 1 · "StrSyn1"
const synth_strings_1 = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B
  C D A B C ~
>`.pickRestart({
  A: "[f4,bb4,d5]@15 ~", B: "[g4,c5,e5]@15 ~", C: "[e4,a4,c5]@15 ~", D: "[f4,bb4,d5]", E: "[f4,bb4,d5] ~",
})).s("gm_synth_strings_1").gain(0.12)

// other · melodic tom · "MldyTom"
const melodic_tom = note("<~@4 [c2 ~@15] ~@94 [c2 ~@15] ~@24>").s("gm_melodic_tom").gain(0.8)

// chords · piano · "PianoBrite"
const piano = note(`<
  ~@12 A B C D A B C E ~@4 F G H I ~@8 A B C A@2 B C A@2 B C A@2 B C E ~@4 F G H I ~@8 A B C D A B C D A B C D A B C E A
  B C A@2 B C E ~@8 A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C E
>`.pickRestart({
  A: "[f3,bb3,d4,f4]@3 ~ [f3,bb3,d4,f4]@4 ~@2 [f3,bb3,d4,f4]@3 ~ [f3,bb3,d4,f4] ~", // Bb
  B: "[g3,c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@4 ~@2 [g3,c4,e4,g4]@2 ~@2 [g3,c4,e4,g4] ~", // C
  C: "[e3,a3,c4,e4]@3 ~ [e3,a3,c4,e4]@4 ~@2 [e3,a3,c4,e4]@3 ~ [e3,a3,c4,e4] ~", // Am
  D: "[f3,bb3,d4,f4]@3 ~ [f3,bb3,d4,f4]@4 ~@2 [f3,bb3,d4,f4]@3 ~ [f3,f4]@2, ~@14 [bb3,d4] ~", // Bb F Bb
  E: "[f3,bb3,d4,f4]@3 ~@13", F: "[bb3,d4,f4]@3 ~", G: "[c4,e4,g4]@3 ~", H: "[a3,c4,e4]@3 ~", I: "[bb3,d4,f4]@15 ~",
})).s("gm_piano").gain(0.29)

// other · lead 8 bass lead · "BrasLead"
const lead_8_bass_lead = note(`<
  ~@91
  [bb4 d5 f5 d5 bb4 d5 f5 d5 bb4 d5 f5 d5 bb4 d5 f5 d5]!2
  [c5 e5 g5 e5 c5 e5 g5 e5 c5 e5 g5 ~@5]
  [~@5 c5 e5 c5 a4 c5 e5 c5 a4 c5 e5 c5]
  [bb4 d5 f5 d5 bb4 d5 f5 d5 bb4 d5 f5 d5 bb4 d5 f5 d5]!2
  [c5 e5 g5 e5 c5 e5 g5 e5 c5 e5 g5 e5 c5 e5 g5 e5]
  [a4 c5 e5 c5 a4 c5 e5 c5 a4 c5 e5 c5 a4 c5 e5 c5]
  ~@25
>`).s("gm_lead_8_bass_lead").gain(0.13)

// other · lead 8 bass lead · "BrasLead" · soft notes
const lead_8_bass_lead_soft = note("<~@93 [~@11 e5 c5 e5 g5 e5] [a4 c5 e5 c5 a4 ~@11] ~@29>")
  .s("gm_lead_8_bass_lead").gain(0.09)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@11 A ~@7 A ~@15 A ~@15 A ~@15 A ~@7 A ~@7 A ~@40>".pickRestart({
  A: "~ x!5 ~@10",
})).gain(0.32)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!88 ~@8 [~ x ~ x ~ x ~ x]!23 ~>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@20 A ~@6 B ~@7 A@2 ~@22 B ~@39 A@2 ~@22 A>".pickRestart({
  A: "x", B: "x!3 ~",
})).gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct("<[~@3 x] ~ [~@3 x] ~@121>").gain(0.48)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@3 x] ~ [~@3 x] ~@121>").gain(2.43)

stack(
  bass, percussive_organ, pad_new_age, synth_strings_1, melodic_tom, piano, lead_8_bass_lead, lead_8_bass_lead_soft,
  kick, snare, snare_soft, clap, hihat, open_hat, crash, ride_bell, cabasa
)

More by Real McCoy