Strudelify
My Oh My cover art

1997 · Aquarium

My Oh My

Aqua

KeyF majorTempo133 bpm
0:00/0:00
// My Oh My — Aqua
// 133 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. 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.

// other · harpsichord · "Cembalo 2"
const harpsichord = note(`<
  ~@2 A B A C A B A C A B A D ~ E ~@8 F ~@16 E ~@8 G H I J@2 H I J ~@17 E A B A C A B A D ~@8 A B A C A B A D G H I J@2
  H I J@2 E K ~
>`.pickRestart({
  A: "bb2 ~@3 c3@2 ~@2", B: "a2@2 ~@4 a2@2 d3 ~ d3 ~ e3@2 f3@2", C: "a2@2 ~@4 a2@2 d3 ~ f3 ~ g3@2 a3@2",
  D: "a2 ~@3 a2@2 ~@2", E: "d3 db3 d3 e3 f3 e3 f3 g3 a3 ab3 a3 db4 d4 ~@3",
  F: "f3 ~ d3!2 e3 ~ db3 ~ d3 ~ a2 ~ db3 ~ a2 ~", G: "a2 ab2 a2 b2 db3 b2 db3 d3 e3 d3 e3 f3 g3 e3 f3 g3",
  H: "d3 ~ d3 ~ d3 ~ d3 ~", I: "bb2 ~ bb2 ~ bb2 ~ bb2 ~", J: "c3 ~ c3 ~ c3 ~ c3 ~", K: "d3 ~@7",
})).s("gm_harpsichord").gain(0.16)

// other · harpsichord · "Cembalo 1"
const harpsichord_2 = note(`<
  ~@2 A B C D A B C D A B C E F G ~@8 H ~@16 G ~@8 I J@2 K L J@2 K ~@17 G A B C D A B C E ~@8 A B C D A B C E I J@2 K L
  J@2 K L G M ~
>`.pickRestart({
  A: "[d4,f4]@2 bb3 d4 f4 ~ bb4 ~ e4@2 c4@2 e4@2 g4@2", B: "[c4,e4]@2 ~ c4 e4 ~ a4 ~ [e4,f4]!4 f4 ~@3, ~ a3 ~@6",
  C: "[d4,f4]@2 bb3 d4 f4 ~ bb4 ~ e4@2 c4@2 g4@2 e4@2", D: "c5@2 bb4@2 a4@2 g4@2 [d4,f4]!4 d4 ~@3",
  E: "c5@2 bb4@2 a4@2 g4@2 [db4,e4]!4 db4 ~@3", F: "~@2 a3 db4 e4 ~ [e4,g4]!5 ~@5",
  G: "d4 db4 d4 e4 f4 e4 f4 g4 a4 ab4 a4 db5 d5 ~@3", H: "a5 ~ f5!2 g5 ~ e5 ~ f5 ~ d5 ~ e5 ~ db5 ~",
  I: "a3 ab3 a3 b3 db4 b3 db4 d4 e4 d4 e4 f4 g4 e4 f4 g4", J: "~@2 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~",
  K: "~@2 [c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~", L: "~@2 [c4,e4] ~@3 [c4,e4] ~@3 [c4,e4] ~@3 [c4,e4] ~",
  M: "d4 ~@7",
})).s("gm_harpsichord").gain(0.16).pan(0)

// chords · synth strings 1 · "High synt"
const synth_strings_1 = note(`<
  ~@6 A B A B A B A C@2 D A B A B A B A E@2 ~@8 F G H I F G H J@2 A B A B A B A K L M@8 ~@8 F G H I F G H J@2 N@2 O@4
  P@2 A B A B A B A K Q B R B R S T U L M@8 ~@3
>`.pickRestart({
  A: "[d4,f4] [c4,e4,g4]", B: "[a3,c4,e4] [d4,f4,a4]", C: "[[a3,c4,e4] [db4,e4,a4]@3]/2", D: "[d4,f4,a4]",
  E: "[[a3,c4,e4]@2 [db4,e4,a4]@5 ~]/2", F: "[a3,d4,f4]", G: "[bb3,d4,f4]", H: "[a3,c4,f4]", I: "[g3,c4,e4]",
  J: "[[g3,c4,e4]@5 ~@3]/2", K: "[a3,c4,e4] [db4,e4,a4]", L: "[db4,e4,a4]", M: "[d5@2 ~ e5, f5@3 ~, ~ c5]/4",
  N: "[[d4,f4] c4 c4 [d4,f4], ~ e4@2 ~]/2", O: "[[d4,f4] [c4,e4]@2 [d4,f4]]/2", P: "[[d4,f4] c4@2 db4, ~ e4@3]/2",
  Q: "[d4,f4,f5] [c4,e4,g4], ~@4 e5 ~@3", R: "[d4,f4,f5] [c4,e4,g4,g5]", S: "[a3,c4,e4,g5] [d4,f4,a4,a5]",
  T: "[d4,f4,a5] [c4,e4,g4,g5]", U: "[a3,c4,e4,e5] [db4,e4,a4,e5]",
})).s("gm_synth_strings_1").gain(0.16)

// other · synth strings 1 · "Low synth"
const synth_strings_1_2 = note(`<
  ~@10 A B A C@2 D A B A B A B A E ~@18 A B A B A B A E@2 F G H I F G H I ~@17 J ~ J ~ J ~ J ~ A B A B A B A E A B A B A
  B A E@2 F G H I F G H I ~@3
>`.pickRestart({
  A: "[bb1,bb2] [c2,c3]", B: "[a1,a2] [d2,d3]", C: "[a1,a2]/2", D: "d2", E: "[a1,a2]", F: "d4 e4", G: "f4 g4, bb3",
  H: "a4", I: "g4", J: "bb2 c3",
})).s("gm_synth_strings_1").gain(0.16)

// other · lead 1 square · "Jp8Pulsel"
const lead_1_square = note(`<
  ~@10 A B A C ~ D E F E G E F E H I J K L M J K L M N@2 O@2 N@2 O@2 P E F E G E F E H Q R@2 S@2 R@2 S@2 J K L M J K L M
  N@2 O@2 N@2 O@2 P ~@4 T U T V E F E G E F E H E F E G E F E H Q R@2 S@2 R@2 S@2 P W ~
>`.pickRestart({
  A: "bb4 a4 bb4 c5 d5 c5 d5 e5 f5 e5 f5 g5 a5 g5 a5 bb5", B: "c6 bb5 a5 g5 a5 g5 f5 e5 d5@8",
  C: "c6 bb5 a5 g5 a5 g5 f5 e5 db5@8", D: "d5 db5 d5 e5 f5 e5 f5 g5 a5 ab5 a5 db6 d6 ~@3",
  E: "d4 ~ bb3 ~ d4 ~ bb3 ~ e4 ~ c4 ~ e4 ~ c4 ~", F: "e4 ~ c4 ~ e4 ~ c4 ~ f4 ~ d4 ~ f4 ~ g4 ~",
  G: "e4 ~ c4 ~ e4 ~ c4 ~ f4 ~ d4 ~ g4 ~ a4 ~", H: "c4 ~ a3 ~ c4 ~ a3 ~ db4 ~ a3 ~ d4 ~ e4 ~",
  I: "a5 ~ f5!2 g5 ~ e5 ~ f5 ~ d5 ~ e5 ~ db5 ~", J: "[d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3 [d4,f4] ~@3",
  K: "[bb3,f4] ~@3 [bb3,f4] ~@3 [bb3,f4] ~@3 [bb3,f4] ~@3", L: "[c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~@3",
  M: "[c4,e4] ~@3 [c4,e4] ~@3 [c4,e4] ~ [c4,d4] ~ [c4,e4] ~ [c4,g4] ~", N: "d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 e5 f5 e5",
  O: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ e5 f5 g5 e5", P: "d4 db4 d4 e4 f4 e4 f4 g4 a4 ab4 a4 db5 d5 ~@3",
  Q: "db5 b4 db5 d5 e5 d5 e5 f5 g5 f5 g5 a5 bb5 a5 bb5 db6", R: "d6 ~ d6 ~ d6 ~ d6 ~ d6 ~ d6 ~ d6 e6 f6 e6",
  S: "c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ e6 f6 g6 e6", T: "bb3 a3 bb3 c4 d4 c4 d4 e4 f4 e4 f4 g4 a4 g4 a4 bb4", U: "c5 a4",
  V: "a4 e5 a5 ~", W: "d4 ~@7",
})).s("gm_lead_1_square").gain(0.33).pan(0.7)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@16 A B A B A B A C ~ D E F G D E F G D E F G D E F G ~ A B A B A B A C H D E F G D E F ~ D E F G D E F G D E F G D E
  F G ~@9 A B A B A B A C A B A B A B A C H D E F G D E F G ~@3
>`.pickRestart({
  A: "bb2 ~@2 bb2 ~@2 bb2 ~ c3 ~@2 c3 ~@2 c3 ~", B: "a2 ~@2 a2 ~@2 a2 ~ d3 ~ d3 ~ c3 d3 c3 ~",
  C: "a2 ~@2 a2 ~@2 a2 ~ a2 ~ a2 ~ g2 a2 g2 ~", D: "d3 ~@2 d3 ~@2 d3 ~ d3 ~@2 d3 ~@2 d3 ~",
  E: "bb2 ~@2 bb2 ~@2 bb2 ~ bb2 ~@2 bb2 ~@2 bb2 ~", F: "f3 ~@2 f3 ~@2 f3 ~ f3 ~@2 f3 ~@2 f3 ~",
  G: "c3 ~@2 c3 ~@2 c3 ~ c3 ~@2 c3 ~@2 c3 ~", H: "a2 ~@2 a2 ~@2 a2 ~ a2 ~@2 a2 ~@2 a2 ~",
})).s("gm_acoustic_bass").gain(0.2)

// chords · piano
const piano = note("<~@26 A ~ B ~ A ~ B ~@27 A ~ B ~ A ~ B ~@45>".pickRestart({
  A: "~@3 [bb4,f5] [bb4,f5]@3 [bb4,e5] [bb4,e5]@3 [bb4,d5] [bb4,d5]@4", // Bb5 Bbdim Bb
  B: "~@3 [c5,a5] [c5,a5]@3 [c5,g5] [c5,g5]@3 [c5,e5] [c5,e5]@4", // F C5 C
})).s("gm_piano").gain(0.12)

// other · timpani
const timpani = note("<~@75 A B C B C B C B D ~@28>".pickRestart({
  A: "~@7 f2", B: "bb2 ~@2 bb2 c3 ~@3", C: "~@3 a2 d3 a2 d3 ~", D: "d3!13 ~@3",
})).s("gm_timpani").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~@16 A@8 ~ A@16 B A@16 B A@16 B A@33 B ~@2>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct(`<
  ~@15 A B A B A B A B A@2 B A B A B A B A B A B A B A B A ~ B A B A B A B A ~ B A B A B A B A B A B A B A B A B A B A B
  A B A ~@9 B A B A B A B ~ B A B A B A B A ~ B A B A B A B A ~@3
>`.pickRestart({
  A: "~@15 x", B: "~@7 x ~@8",
})).gain(0.26)

// drums · clap
const clap = s("cp").struct("<~@16 A@8 ~ A@16 ~ A@8 ~ A@7 ~ A@16 ~@9 A@7 ~ A@8 ~ A@8 ~@3>".pickRestart({
  A: "~ x ~ x",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct("<~@16 A@8 ~ A@16 ~ A@8 ~ A@7 ~ A@16 ~@9 A@7 ~ A@17 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.19)

// drums · tambourine
const tambourine = s("tb").struct("<~@76 [x!16]!7 ~@29>").gain(0.19)

// drums · bongos
const bongos = s("bongo:4").struct("<A@8 ~@17 A@16 ~@10 A@24 ~ A@8 ~@17 A@8 ~ A@2>".pickRestart({
  A: "x!4",
})).gain(0.49)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<A@8 ~@17 A@16 ~@10 A@24 ~ A@8 ~@17 A@8 ~ A@2>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
})).gain(0.49)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@16 A@8 ~ A@16 ~ A@8 ~ A@7 ~ A@16 ~@9 A@7 ~ A@8 ~ A@8 ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
})).gain(1.33)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@8 ~ A@16 ~ A@8 ~ A@7 ~ A@16 ~@9 A@7 ~ A@8 ~ A@8 ~@3>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.26)

stack(
  harpsichord, harpsichord_2, synth_strings_1, synth_strings_1_2, lead_1_square, bass, piano, timpani, kick, snare,
  clap, crash, tambourine, bongos, bongos_2, cabasa, shaker
)

More by Aqua