Strudelify

We're Going to Ibiza

Vengaboys

KeyD♭ majorTempo105 bpm
0:00/0:00
// We're Going to Ibiza — Vengaboys
// 105 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 fretless bass (copy of ch 3 piano)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · synth bass 2 · "Ibiza"
const bass = note(`<
  A B C D A B E F G H A I J K L M A B A I J K L M A B C D A B E N O P O ~ J K L M A B C D A B E N A B C D A B E N Q ~@7
  A B C D A B E N A B C D A B E N O ~
>`.pickRestart({
  A: "db2@3 ~@4 ab1 db2@2 ~@6", B: "gb2@2 ~@5 db2 gb2@2 ~@2 gb2@3 ~", C: "db2@2 ~@5 ab1 db2@2 ~@6",
  D: "gb2@3 ~@4 gb2!3 gb2@2 f2@2 eb2 ~", E: "db2@2 ~@3 ab1 bb1 ab1 db2@2 ~@6",
  F: "gb2@3 ~@4 db2 gb2@3 ~@2 g2 ab2@2, ~@6 gb2 ~", G: "db2 ~@7", H: "gb2@3 ~@13",
  I: "gb2@3 ~@4 db2 gb2@2 ~@2 db2@2 ~@2", J: "ab2@2 ~@5 eb2 ab2@2 ~@6", K: "f2@2 ~@5 db2 f2@3 ~ ab1@2 ~@2",
  L: "gb2@2 ~@5 db2 gb2@2 ~@6", M: "ab2@2 ~@5 eb2 ab2@3 ~ ab1@2 ~@2", N: "gb2@3 ~@4 db2 gb2@2 bb2@2 ab2@2 f2@2",
  O: "db2@3 ~@13", P: "~@15 ab1", Q: "db2 ~@3",
})).s("gm_synth_bass_2").gain(0.32)

// chords · piano
const piano = note(`<
  A B A B A B A B A B A B C D B C A B A B C D B C A B A B A B A B A B A E C D B C 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 B ~@2
>`.pickRestart({
  A: "~@2 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~", // Db
  B: "~@2 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~", // Gb
  C: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  D: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~", E: "~@14 [db4,gb4,bb4] ~",
})).s("gm_piano").gain(0.48)

// other · flute
const flute = note(`<
  ~@8 A B C D E F@2 G A B C D E F@2 G H@2 I J H@2 K J A B C D E F@2 G H@2 I J H@2 K J H@2 I J H@2 K J H@2 I J H@2 K J
  H@2 I J H@2 K J H@2 I J H@2 K J H@2
>`.pickRestart({
  A: "f5@2 f5!3 eb5!2 ~ eb5@2 db5@3 ~@3", B: "~@4 eb5@2 db5 db5@2 bb4@4 ~ bb4!2",
  C: "f5@2 f5 ~ f5@2 eb5 eb5@3 db5 ~ db5@3 ~", D: "~@4 eb5@2 db5 db5@3 bb4@4 ~@2",
  E: "~@4 eb5@2 eb5 eb5@2 ~ eb5@2 f5@2 gb5@2", F: "[f5@3 ~ c5@4 ~@4 f5@2 eb5 db5@2 ~ bb4@3 ~@5 bb4@2 gb5@2 f5@2]/2",
  G: "eb5@5 ~@11", H: "[~@6 db5 ~ db5 ~ db5 ~ eb5 ~ eb5 eb5@3 db5@4 ~@10]/2", I: "~@12 eb5 ~ eb5!2", J: "eb5 db5@2 ~@5",
  K: "~@6 db5!6 eb5 ~ eb5 ~",
})).s("gm_flute").gain(0.72)

// chords · church organ
const church_organ = note(`<
  ~@12 A B C D ~@8 E F G F E F G F ~@4 A B C D E F G F E F G F E F G F E F G F ~@8 E F G F E F G F E F G F E F G F ~@2
>`.pickRestart({
  A: "[c4,eb4,ab4]", B: "[c4,f4,ab4]@15 ~", C: "[db4,gb4,bb4]", D: "[c4,eb4,ab4]@15 ~",
  E: "~@2 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~", // Db
  F: "~@2 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~", // Gb
  G: "~@2 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2", // Db
})).s("gm_church_organ").gain(0.32)

// other · pan flute · "Join the TopList Team!"
const pan_flute = note(`<
  ~@24 A ~ A ~ B ~ B ~@9 A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~
>`.pickRestart({
  A: "[f4,f5] [db4,db5] ~@6", B: "[f4,f5]@2 [db4,db5]@3 ~@11",
})).s("gm_pan_flute").gain(0.54)

// other · piccolo
const piccolo = note(`<
  ~@24 A@2 B C A@2 D C ~@8 A@2 B C A@2 D C A@2 B C A@2 D C A@2 B C A@2 D C A@2 B C A@2 D C A@2 B C A@2 D C A@2
>`.pickRestart({
  A: "[~@6 ab5 ~ ab5 ~ ab5 ~ bb5 ~ bb5 bb5@3 ab5@4 ~@10]/2", B: "~@12 bb5 ~ bb5!2", C: "bb5 ab5@2 ~@5",
  D: "~@6 ab5!6 bb5 ~ bb5 ~",
})).s("gm_piccolo").gain(0.54)

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

// drums · snare
const snare = s("sd").struct("<A@8 ~ B A@22 ~@3 B A@27 B A@16 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!8 ~@8 [~ x ~ x]!16 ~@4 [~ x ~ x]!27 ~ [~ x ~ x]!16 ~@2>").gain(0.72)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@8 ~ B A@22 ~@3 C A@27 D A@16 ~@2>".pickRestart({
  A: "x!8", B: "~@5 x ~ x", C: "~@5 x ~@2", D: "~@5 x!3",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x]!8 ~@2 [~@7 x]!22 ~@3 [~@7 x]!45 ~@2>").gain(0.72)

// drums · splash
const splash = s("cr").struct(`<
  A B C D E F G H I ~@3 I@5 ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I
  ~@3 I ~
>`.pickRestart({
  A: "x ~ x!2 ~@2 x ~@2 x!2 ~@2 x!3", B: "~ x!3 ~ x ~@2 x!2 ~ x ~ x ~ x", C: "x!2 ~@2 x!3 ~ x!3 ~ x!2 ~@2",
  D: "x!3 ~ x ~@2 x ~ x!3 ~@2 x!2", E: "x ~ x!3 ~ x!3 ~ x!5 ~", F: "~ x!3 ~@2 x ~@2 x!3 ~@2 x!2",
  G: "x ~@2 x ~@2 x ~ x ~ x!5 ~", H: "x!3 ~@2 x ~ x ~ x!3 ~@4", I: "x",
})).gain(0.08)

// drums · cowbell
const cowbell = s("cb").struct("<A B C D E F G H ~@74>".pickRestart({
  A: "~ x ~@3 x ~ x ~ x ~ x ~@2 x ~", B: "~ x ~@3 x ~ x ~ x ~ x!3 ~@2", C: "x ~@4 x ~@2 x ~ x ~ x ~ x ~",
  D: "x ~@3 x ~ x ~@3 x ~@4 x", E: "~ x ~ x!5", F: "~ x ~@3 x ~ x ~ x ~@4 x ~", G: "~@2 x ~ x ~@2 x ~@2 x ~ x ~ x ~",
  H: "x ~ x ~ x ~@2 x ~ x ~@6",
})).gain(0.08)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  [~@9 x ~@6]!2
  [~@3 x]
  [~@3 x ~@4]
  [~ x ~ x!3 ~ x]
  [~ x ~@12 x ~]
  [~@5 x ~ x]
  [~ x ~@2]
  ~@74
>`).gain(0.94)

// drums · ride
const ride = s("rd").struct("<~ [~@7 x!2 ~@7] ~@2 [~@3 x!2 ~@11] ~@77>").gain(0.08)

// drums · shaker
const shaker = s("sh").struct("<[~@2 x!2 ~@12]!8 ~@2 [~@2 x!2 ~@12]!22 ~@4 [~@2 x!2 ~@12]!27 ~ [~@2 x!2 ~@12]!16 ~@2>")
  .gain(0.64)

stack(
  bass, piano, flute, church_organ, pan_flute, piccolo, kick, snare, clap, pedal_hat, open_hat, splash, cowbell,
  vibraslap, ride, shaker
)

More by Vengaboys