Strudelify
It's My Life cover art

One Love

It's My Life

Dr. Alban

KeyA minorTempo127 bpm
0:00/0:00
// It's My Life — Dr. Alban
// 127 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano · "A.PIANO 2"
const piano = note(`<
  A B C D A B C D A B C D A B C E ~@20 A B C D A B C D ~@12 A B C D A B C D ~@12 A B C D A B C D A B C D A B C D A B C D
  A B C E ~@8 A B C D A B C D A B C D A B C ~@5
>`.pickRestart({
  A: "[a4,c5,e5]@2 ~ [a4,c5,e5] ~@2 [a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2", // Am
  B: "[a4,c5,f5]@2 ~ [a4,c5,f5] ~@2 [a4,c5,f5] ~@3 [a4,c5,f5] ~@2 [a4,c5,e5] ~@2", // F Am
  C: "[g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~@3 [g4,b4,d5] ~@2 [g4,b4,d5] ~@2", // G
  D: "[e4,g4,b4,e5]@2 ~ [e4,g4,b4,e5] ~@2 [e4,g4,b4,e5] ~@3 [e4,g4,b4,e5] ~@2 [e4,g4,b4,e5] ~@2", // Em
  E: "[e4,g4,b4,e5]@2 ~ [e4,g4,b4,e5] ~@2 [e4,g4,b4,e5] ~@9", // Em
})).s("gm_piano").gain(0.37)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note("<A B C D A B C D ~@120>".pickRestart({
  A: "~@4 [a4,c5,e5]!2 ~ [a4,c5,e5]!2 ~@2 [a4,c5,e5]!2 ~ [a4,c5,e5]!2", // Am
  B: "~@4 [a4,c5,f5]!2 ~ [a4,c5,f5]!2 ~@2 [a4,c5,f5]!2 ~ [a4,c5,e5]!2", // F Am
  C: "~@4 [g4,b4,d5]!2 ~ [g4,b4,d5]!2 ~@2 [g4,b4,d5]!2 ~ [g4,b4,d5]!2", // G
  D: "~@4 [e4,g4,b4,e5]!2 ~ [e4,g4,b4,e5]!2 ~@2 [e4,g4,b4,e5]!2 ~ [e4,g4,b4,e5]!2", // Em
})).s("gm_piano").gain(0.19)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@7 A B C B C B C B C B C B C B C B C B C B C B C B C ~@4 B C B C B C B C B C B C B C B C ~@4 B C B C B C B C B C B C
  B C B C ~@4 B C B C B C B C B C B C B C B C ~@16 B C B C B C B C B C B C ~@8
>`.pickRestart({
  A: "~@7 g1", B: "a1!2 ~ a1 a1@2 g1@2 a1 ~@2 a1@3 g1@2", C: "a1!2 ~ a1!2 ~ g1 ~ e1 ~@2 e1@3 c2@2",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B C D A B C D A B C D A B C E ~@20 A B C D A B C D ~@12 A B C D A B C D ~@12 A B C D A B C D A B C D A B C D A B C D
  A B C D ~@8 A B C D A B C D A B C D A B C F@2 G@3
>`.pickRestart({
  A: "[a4,c5,e5]@15 ~", B: "[f4,a4,c5]@15 ~", C: "[g4,b4,d5]@15 ~", D: "[g4,b4,e5]@15 ~", E: "[g4,b4]@15 ~",
  F: "[e3,g4,b4,e5]/2", G: "[[a2,a3,c4,e4,a4]@11 ~@5]/3",
})).s("gm_synth_strings_1").gain(0.25)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@12 A B C D ~@20 A B C E A B C F ~@12 A B C E A B C E ~@12 A B C E A B C E A B C E A B C E A B C E A B C E ~@8 A B C
  E A B C E A B C E A B C G@2 H@2 ~
>`.pickRestart({
  A: "c6@7 b5", B: "a5@3 c6", C: "b5", D: "e6@15 ~", E: "e6 d6", F: "e6@8 d6@7 ~", G: "e6/2", H: "[a6@7 ~]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// bass · lead 2 sawtooth · "SAW WAVE"
const bass_2 = note("<~@16 [a1!16]!107 [a1 ~@15] ~@4>").s("gm_lead_2_sawtooth").gain(0.28)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note("<~@23 A B@12 ~@8 B@12 ~@8 B@12 ~@24 B@7 C ~@20>".pickRestart({
  A: "~@15 [d#3,d#4]", B: "~ [d#3,d#4] ~@5 [d#3,d#4] ~ [d#3,d#4] ~@5 [d#3,d#4]", C: "~ [d#3,d#4] ~@5 [d#3,d#4] ~@8",
})).s("gm_glockenspiel").gain(0.1).pan(0.3)

// other · glockenspiel · "GLOCKENSPL" · soft notes · D#
const glockenspiel_soft = note(`<
  ~@24
  [~@3 [d#3,d#4] ~ [d#3,d#4] ~@5 [d#3,d#4] ~ [d#3,d#4] ~@2]!12
  ~@8
  [~@3 [d#3,d#4] ~ [d#3,d#4] ~@5 [d#3,d#4] ~ [d#3,d#4] ~@2]!12
  ~@8
  [~@5 [d#3,d#4] ~@5 [d#3,d#4] ~ [d#3,d#4] ~@2]
  [~@3 [d#3,d#4] ~ [d#3,d#4] ~@5 [d#3,d#4] ~ [d#3,d#4] ~@2]!11
  ~@52
>`).s("gm_glockenspiel").gain(0.05).pan(0.3)

// other · tinkle bell · "TINKLEBELL"
const tinkle_bell = note("<~@4 [d5 e5!3 ~ d5 e5!2 d5 e5!3 ~ d5 e5!2]!11 [d5 e5!3 ~ d5 e5!3 ~@7] ~@112>")
  .s("gm_tinkle_bell").gain(0.25).pan(0.7)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_3 = note("<~@16 A ~@3 A ~@23 A ~@19 A ~@27 A ~@3 A ~@31>".pickRestart({
  A: "[a1,a2]@2 ~@2 [a1,a2]@3 ~@9", // A
})).s("gm_lead_8_bass_lead").gain(0.4)

// other · timpani · Fsus2
const timpani = note(`<
  ~@123
  [f2 [f2,g2]!2 g2 [f2,g2]!2 f2 [f2,g2]!3 g2 [f2,g2]!3 f2 [f2,g2]]
  [[f2,g2]!2 g2 [f2,g2]!2 f2 [f2,g2] g2 [f2,g2]!3 f2 [f2,g2]!3 g2]
  [[f2,g2] ~@15]
  ~@2
>`).s("gm_timpani").gain(0.21)

// other · pad bowed · "BOWEDGLASS"
const pad_bowed = note("<~@100 [d5 ~@2 d5 ~@2 d5 ~ d5 ~@2 d5 ~@2 d5 ~]!7 [d5 ~@2 d5 ~@2 d5 ~ d5 ~@7] ~@20>")
  .s("gm_pad_bowed").gain(0.22).pan(0.7)

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

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

// drums · clap
const clap = s("cp").struct("<~@16 A@16 ~@4 A@16 ~@4 A@16 ~@4 A@16 ~@16 A@15 ~@5>".pickRestart({
  A: "~@2 x ~ x ~@3 x ~@2 x ~@4",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@125 x ~@2>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [x!16]!83 [x!9 ~@7] [x!16]!7 [x!9 ~@7] [x!16]!15 x ~@4>").gain(0.35)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@8 [x!16]!7 [x!9 ~@7] ~@112>").gain(1.27)

stack(
  piano, piano_soft, bass, synth_strings_1, string_ensemble_1, bass_2, glockenspiel, glockenspiel_soft, tinkle_bell,
  bass_3, timpani, pad_bowed, kick, snare, clap, crash, tambourine, agogo_bells
)

More by Dr. Alban