Strudelify

I Don't Wanna Lose Your Love... Again

Trance

KeyF♯ majorTempo138 bpm
0:00/0:00
// I Don't Wanna Lose Your Love... Again — Trance
// 138 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 205 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · piano
const piano = note(`<
  A B A B A B A C D B A B A B A ~ A B E@2 A B A F ~@4 A B A C A B A C A B A G ~@48 A B A B A B A C A B A B A B A C A B A
  B A B A C H I J H I J K L M@2 N@2 M@2 O@2 P@2 Q@2 R@2 S@2 P@2 Q@2 R@2 S@2 ~@61
>`.pickRestart({
  A: "[c#4,e4,a4]@2 [c#4,e4,g#4]@2 [c#4,e4,g#4]@3 [c#4,e4,g#4]@3 [c#4,e4,g#4]@2 [c#4,e4,g#4]@2 [c#4,f#4,a#4]@2", // A C#m F#
  B: "~ [c#4,f#4,a#4]@3 [c#4,f#4,a#4]@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2", // F# B
  C: "~ [c#4,f#4,a#4]@3 [c#4,f#4,a#4]@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2 [b3,d#4,f#4]!2", // F# B
  D: "[c#4,e4,a4]!2 [c#4,e4,g#4]@2 [c#4,e4,g#4]@3 [c#4,e4,g#4]@3 [c#4,e4,g#4]@2 [c#4,e4,g#4]@2 [c#4,f#4,a#4]@2", // A C#m F#
  E: "[[c#4,e4,a4]@2 [c#4,e4,g#4]@2 [c#4,e4,g#4]@3 [c#4,e4,g#4]@3 [c#4,e4,g#4]@2 [c#4,e4,g#4]@2 c#4 [c#4,f#4,a#4]@2 [c#4,f#4,a#4]@3 [c#4,f#4,a#4]@2 c#4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2 [b3,d#4,f#4]@2]/2", // A C#m F# B
  F: "~ [c#4,f#4,a#4]@3 [c#4,f#4,a#4]@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@3 ~@4", // F# B
  G: "~ [c#4,f#4,a#4]@3 [c#4,f#4,a#4]@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2 ~@2", // F# B
  H: "a4 g#4 f#4 a4 g#4 f#4 a4 g#4", I: "f#4 a4 g#4 f#4 a4 g#4 f#4 a4", J: "g#4 f#4 a4 g#4 f#4 a4 g#4 f#4",
  K: "c5 b4 a4 c5 b4 a4 c5 b4", L: "a4 c5 b4 a4 c5 b4 a4@2", M: "a4@3 g#4@3 f#4@2 a4@3 g#4@3 f#4@2, g#4 ~@7 g#4 ~@7",
  N: "b4@3 a4@3 g#4@2 b4@3 a4@3 g#4@2, a4 ~@7 a4 ~@7", O: "c5@3 b4@3 a4@2 c5@3 b4@3 a4@2, b4 ~@7 b4 ~@7",
  P: "[c#4,f#4,a4]@2 [c#4,f#4,a4]@2 [c#4,f#4,g#4]@3 [c#4,f#4,a4]@3 [c#4,f#4,a4]@2 [c#4,f#4,g#4]@4", // F#m C#sus4 F#m C#sus4
  Q: "[f#4,a4,b4]@2 [f#4,a4,b4]@2 [f#4,a4]@3 [f#4,a4,b4]@3 [f#4,a4,b4]@2 [f#4,a4]@4", // B7 F#m B7 F#m
  R: "[f#4,a4,c5]@2 [f#4,a4,c5]@2 [f#4,a4,b4]@3 [f#4,a4,c5]@3 [f#4,a4,c5]@2 [f#4,a4,b4]@4", // F#dim B7 F#dim B7
  S: "[f#4,a4,c5]@3 [f#4,a4,b4]@3 [f#4,a4]@2 [f#4,a4,c5]@3 [f#4,a4,b4]@3 [f#4,a4]@2", // F#dim B7 F#m F#dim B7 F#m
})).s("gm_piano").gain(0.36)

// chords · rock organ
const rock_organ = note(`<
  ~@72 A B A C A B A B A B A C A B A B ~@88 A B A C A B A B A B A C A B A B A B A C A B A B D E F@2 E
>`.pickRestart({
  A: "[e5,a#5,c#6] [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~@2 [c#5,f#5,a#5]@2 [c#5,f#5,a#5] [c#5,f#5,a#5]@2 [c#5,f#5,a#5] [g4,c5,e5]@2", // A#dim F# C
  B: "[a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 [a4,d5,f#5]@2", // D
  C: "[a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 [e5,a#5,c#6] [c#5,f#5,a#5]", // D A#dim F#
  D: "[e5,a#5,c#6] [c#5,f#5,a#5]@2 [c#5,f#5,a#5]@2 [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2", // A#dim F#
  E: "~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~", // F#
  F: "[[c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2 ~ [c#5,f#5,a#5]@2]/2", // F#
})).s("gm_rock_organ").gain(0.41)

// bass · fretless bass
const bass = note(`<
  ~@8 A@6 B@2 ~@8 A@14 C@2 ~@16 D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E ~@8 A@16 F@2 G@2 H@2 I@2
  F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 ~@16 D E D E D E D E D E D E D E D E ~@8 D E D E D E D E D E D E D E D
  E ~@5
>`.pickRestart({
  A: "[f#1 f#2 f#1@2 f#2 f#1@2 f#2 f#1 f#2 f#1@2 f#2 f#1@2 a1@2 a2@2 a1 a2@2 a1 b1@2 b2@2 b1 b2@2 b1 b2]/2",
  B: "[f#1 f#2 f#1@2 f#2 f#1@2 f#2 f#1 f#2 f#1@2 f#2 f#1@2 a1@2 ~@15]/2",
  C: "[f#1 f#2 f#1@2 f#2 f#1@2 f#2 f#1 f#2 f#1@2 f#2 f#1@2 a1@2 a2@2 a1 a2@2 a1 b1@2 b2@2 ~ b1@2 ~@2]/2",
  D: "f#1@2 f#2@2 f#1 f#2@2 f#1 f#2@2 f#1 f#2@2 f#1 f#2 f#1",
  E: "a#1@2 a#2@2 a#1 a#2@2 a#1 a#2@2 a#1 a#2@2 a#1 a#2 a#1",
  F: "[f#1@5 ~ f#2@4 f#1@2 f#2@2 f#1@4 f#2@4 f#1@2 f#2@2 f#1@2 f#2@4]/2",
  G: "[b0@5 ~ b1@4 b0@2 b1@2 b0@4 b1@4 b0@4 b1@2 b0@2 b1@2]/2",
  H: "[c#1@5 ~ c#2@4 c#1@2 c#2@2 c#1@4 c#2@4 c#1@2 c#2@2 c#1@2 c#2@4]/2",
  I: "[d1@5 ~ d2@4 d1@2 d2@2 e1@4 e2@4 e1@2 e2@2 e1@2 g2@4]/2",
})).s("gm_fretless_bass").gain(0.36)

// other · piano
const piano_2 = note("<~@6 A@2 B@4 C@2 D@2 E@4 F@2 G H ~@64 I@4 J@2 K@2 ~@6 L@2 M@6 N O ~@93>".pickRestart({
  A: "[g#4@15 ~]/2", B: "[f#4@31 ~]/4", C: "[b4@15 ~]/2", D: "[c#5@15 ~]/2", E: "[f#5@31 ~]/4", F: "[b5@15 ~]/2",
  G: "c#6@7 ~", H: "f#6@7 ~", I: "[b5@31 ~]/4", J: "[c#6@15 ~]/2", K: "[f#6@15 ~]/2", L: "[g#5@15 ~]/2",
  M: "[f#5@25 ~ g#5@21 ~]/6", N: "f#5@7 ~", O: "b5@7 ~",
})).s("gm_piano").gain(0.41)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@112 A@4 B@2 C D A@4 B@2 C D A@4 B@2 C D A@4 B@2 C D ~@36 E F E G E F E G E F E G E F E G E F E G ~@5
>`.pickRestart({
  A: "[[a4,c#5]@15 ~ [b4,d#5]@15 ~, f#5@31 ~]/4", B: "[[c#5,f5,g#5]@15 ~]/2", C: "[d5,f#5,a5]@7 ~",
  D: "[e5,g#5,b5]@7 ~", E: "g#4@7 ~", F: "a4@7 ~", G: "f#4@7 ~",
})).s("gm_string_ensemble_2").gain(0.41)

// other · tremolo strings
const tremolo_strings = note(`<
  ~@27 A@2 ~@10 A@2 ~@3 B C B C B C B C B C B C ~@31 A@2 ~@7 B ~ B ~ B ~ B ~@45 B C B C B C B C B C B C ~@45
>`.pickRestart({
  A: "[e5@8 c5@11 ~@13]/2", B: "e5 c5", C: "g#4@8 e4@7 ~",
})).s("gm_tremolo_strings").gain(0.26).pan(0.2)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@64 A@2 B@6 C ~@7 D@8 ~@80 A@2 B@6 ~@29>".pickRestart({
  A: "[a#4@2 ~@2 a#5@2 ~@2 a5@2 ~ a#4@3 [g#4,c5]@5 ~ d6@2 ~@2 c#6@2 ~ a#5@2 a#5 a#5@2, ~@2 a#4@4 a#5@4 g#5@3 ~@9 d6@4 c#6@3 ~@3]/2", // G#
  B: "[[a#4,a#5]@2 ~@2 a#5@2 ~@2 a5@2 ~ a#4@3 [g#4,c5]@5 ~ d6@2 ~@2 c#6@2 ~ a#5@2 a#5 a#5@2, ~@2 a#4@4 a#5@4 g#5@3 ~@9 d6@4 c#6@3 ~@3]/2", // A# G#
  C: "a#5 ~@7", D: "[a#4@2 ~@2 a#5@2 ~@2 a5@2 ~ a#4@3 [g#4,c5]@5 ~@13, ~@2 a#4@4 a#5@4 g#5@3 ~@19]/2",
})).s("gm_lead_2_sawtooth").gain(0.31).pan(0.7)

// bass · piano
const bass_2 = note(`<
  ~@40 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 ~@64 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 ~@29
>`.pickRestart({
  A: "f#1@2 f#2@2 f#1 f#2@2 f#1 f#2@2 f#1 f#2@2 f#1 f#2 f#1",
  B: "a#1@2 a#2@2 a#1 a#2@2 a#1 a#2@2 a#1 a#2@2 a#1 a#2 a#1",
})).s("gm_piano").gain(0.41)

// other · synth drum
const synth_drum = note("<~@15 [~@2 f5@3 b4@3 f4@3 c4@3 g3@2] ~@189>").s("gm_synth_drum").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~@17 A ~ A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@13 x ~@2",
})).gain(0.41)

// drums · rim
const rim = s("rim").struct(`<
  ~@16 A B A B A B A B ~@4 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 A B A B A B A B 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 ~@16 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 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 ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.51)

// drums · clap
const clap = s("cp").struct("<~@16 A@8 ~@4 A@12 ~@8 A@40 ~@8 A@16 ~@16 A@16 ~@8 A@24 ~@8 A@16 ~@5>".pickRestart({
  A: "~ x ~ x",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@7 B ~@4 A@12 ~@8 A@40 ~@8 A@16 ~@16 A@16 ~@8 A@24 ~@8 A@16 ~@5>".pickRestart({
  A: "x!10 ~@2 x!4", B: "x!10 ~@2 x ~@3",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@8 ~@4 A@12 ~@8 A@40 ~@8 A@16 ~@16 A@16 ~@8 A@24 ~@8 A@16 ~@5>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@128 x ~@70 [~@5 x ~@2] ~@5>").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@8 ~@4 A@12 ~@8 A@40 ~@8 A@16 ~@16 A@16 ~@8 A@24 ~@8 A@16 ~@5>".pickRestart({
  A: "x!4",
})).gain(0.31)

stack(
  piano, rock_organ, bass, piano_2, string_ensemble_2, tremolo_strings, lead_2_sawtooth, bass_2, synth_drum, kick, rim,
  clap, hihat, open_hat, crash, tambourine
)

More by Trance