Strudelify

Don't Go Away

Fun Factory

KeyC minorTempo100 bpm
0:00/0:00
// Don't Go Away — Fun Factory
// 100 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · synth strings 1
const synth_strings_1 = note(`<
  ~@34 A B A B A B A B A B A B A B A B ~@17 A B A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "[c4,eb4,g4]", B: "[c4,f4,ab4] [bb3,d4,f4]",
})).s("gm_synth_strings_1").gain(0.17)

// bass · electric bass pick
const bass = note(`<
  ~@9 A B A C A B A C ~ A B A C A B A C A B A C A B A ~ A B A C A B A C A B A C A B A C ~ A B A C A B A C A B A C A B A
  ~ A B A C A B A C A B A C A B A C ~@5
>`.pickRestart({
  A: "c1@2 ~ c1 c2!4 bb1 ~ bb1 ~ g1 ~ eb1 ~", B: "c1 ~@2 c1 ab1!4 g1 ~ g1 ~ eb1 ~ eb1 ~",
  C: "c1 ~@2 c1 ab1!4 g1 ~@2 g1 eb1@2 ~ eb1",
})).s("gm_electric_bass_pick").gain(0.54)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@8 A B C B D B E B F ~@16 G H@7 I B C B D B E B F ~@16 G H@7 I B J B K B L B K ~@5
>`.pickRestart({
  A: "[f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5]", B: "[g4,g5]@3 [c5,c6] [g4,g5]@3 [c5,c6]",
  C: "[g4,g5] [ab4,ab5] [g4,g5] [ab4,ab5] [f4,f5]@3 [c5,c6]", // G Ab G Ab F C
  D: "[bb4,bb5] [c5,c6] [bb4,bb5] [c5,c6] [bb4,bb5]@3 [c5,c6]", // Bb C Bb C Bb C
  E: "g5 [ab4,ab5] [g4,g5] [ab4,ab5] [f4,f5]@3 [c5,c6], g4 ~@15", F: "[bb4,bb5] [c5,c6] [bb4,bb5] [c5,c6] [bb4,bb5]@4",
  G: "~ c5 eb5 c6", H: "[c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~@3",
  I: "[f4,f5]@4 [g4,g5]@4 [ab4,ab5]@4 [bb4,bb5]@3 ~", // F G Ab Bb
  J: "[g4,g5]@2 [ab4,ab5]@2 [g4,g5]@2 [ab4,ab5]@2 [f4,f5]@3 ~@3 [c5,c6]@2", // G Ab G Ab F C
  K: "[bb4,bb5] [c5,c6] [bb4,bb5] [c5,c6] [bb4,bb5]@2 ~ [c5,c6]", // Bb C Bb C Bb C
  L: "g5 [ab4,ab5] [g4,g5] [ab4,ab5] [f4,f5]@2 ~ [c5,c6], g4 ~@15", // Ab G Ab F C
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@18 A B C D A B C D A B C D A B E ~ F G F H F G F H ~@9 A B C D A B C D A B C D A B E ~ F G F H F G F H ~@8 F I ~@3
>`.pickRestart({
  A: "c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@3", B: "c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 bb3 ~@3",
  C: "c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~ bb3!2", D: "c4 ~@2 c4 ~@2 c4 ~@2 f3 bb3 f3 g3 ~ bb3 ~",
  E: "c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~ bb3 ~", F: "c4 ~@2 c4 ~@2 c4 ~@2 c4!2 ~ c4 ~ bb3!2",
  G: "c4 ~@2 c4 ~@2 c4 ~@2 c4!2 bb3 c4 bb3 g3 bb3", H: "c4 ~@2 c4 ~@2 c4 ~@2 bb3 g3 f3 g3 ~ bb3 ~",
  I: "c4 ~@2 c4 ~@2 c4 ~@2 c4 bb3!2 c4 ~@3",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.8)

// bass · synth bass 1
const bass_2 = note(`<
  ~@9 A B A B A B A B ~@9 A B A B A B A ~@9 A B A B A B A B ~@9 A B A B A B A ~@9 A B A B A B A B ~@5
>`.pickRestart({
  A: "c3!3 ~ c3!3 ~ c3!3 ~ c3@2 ~ bb2", B: "c3!3 ~ c3!2 c3@2 c3!2 bb2 ~ bb2@2 ~ bb2",
})).s("gm_synth_bass_1").gain(0.33).pan(0.3)

// chords · piano
const piano = note(`<
  ~ 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 ~ 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 ~ A B A B A B A B A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  B: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~", // Fm Bb
})).s("gm_piano").gain(0.25)

// other · pad poly
const pad_poly = note("<~@26 A B C D E F G@2 ~@25 A H I ~ J K L ~@22>".pickRestart({
  A: "~ c5 bb4 g4 c5@2 ~ c5 bb4 g4 c5 ~@5", B: "~ g4 ab4 g4 ab4@2 g4!2 ab4 bb4 g4 ~@5",
  C: "~ g4 bb4 g4 bb4@2 bb4 g4 bb4 g4 c5 ~ bb4 ~@2 g4", D: "ab4!2 ~ g4 ab4!3 bb4!3 bb4@2 bb4@2 bb4 ~",
  E: "c5 ~ bb4 ~ c5@2 bb4 c5 bb4 c5 ~ bb4 c5 ~@2 g4", F: "ab4!2 ~ ab4!5 bb4 ~ bb4 g4 bb4 g4 bb4 ~",
  G: "[c5@2 bb4 ~ c5@2 bb4 ~ c5@2 g4 ~ bb4!2 ~ g4@2 ~@15]/2", H: "~ g4 ab4 g4 ab4@2 ~ g4 ab4 bb4 g4 ~@5",
  I: "~ g4 bb4 g4 c5!2 bb4 g4 bb4 g4@2 bb4 c5 ~@3", J: "c5 ~ c5 bb4 c5@2 c5 bb4@3 c5 ~ bb4 c5 ~ c5",
  K: "bb4 c5!2 bb4 g4 ~ c5 bb4@2 c5 bb4 g4 bb4 c5 ~@2", L: "c5 ~ bb4 g4 bb4 c5 g4 ~ bb4@2 g4 ~ bb4 ~ c5@2",
})).s("gm_pad_poly").gain(0.42)

// other · pad choir
const pad_choir = note(`<
  ~@8 A B C D E F G B H ~@8 I J K ~@13 L B C D E F G B H ~@8 I J K M N ~@11 L B C D E F G B E ~@5
>`.pickRestart({
  A: "~@6 [c4,c5]@7 ~ c5@2", B: "g4 ~@2 c5 g4 ~@2 c5", C: "g4 ab4 g4 ab4 f4 ~@2 c5", D: "g4 ~@5 c5@2 g4 ~@5 c5@2",
  E: "bb4@2 c5@2 bb4@2 c5@2 bb4 ~@5 c5@2", F: "g4 ~@5 c5@2 g4@2 ~@4 c5@2", G: "g4@2 ab4@2 g4@2 ab4@2 f4 ~@5 c5@2",
  H: "bb4@2 c5@2 bb4@2 c5@2 bb4 ~@7", I: "~@6 [c5,c6]@5 ~@5", J: "~@7 [c4,c5]", K: "~@14 [c4,c5] ~", L: "~@7 c5",
  M: "~@14 c5 ~", N: "bb4 ~ c5 ~ bb4 ~ c5 ~ bb4!2 ~ c5 bb4 ~@3",
})).s("gm_pad_choir").gain(0.21)

// drums · kick
const kick = s("bd").struct("<~@4 A B@2 C ~ D@74 B@2 C ~@2>".pickRestart({
  A: "~@15 x", B: "x ~@14 x", C: "x", D: "x ~@2 x ~ x!2 ~@2 x!2 ~@5",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@38 x ~@32 x ~@16>").gain(0.36)

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

// drums · snare
const snare = s("sd").struct("<~@9 A@8 ~ A@15 ~ A@16 ~ A@15 ~ A@16 ~@5>".pickRestart({
  A: "~ x ~ x",
})).gain(0.42)

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

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x]!16 ~ [~@7 x]!32 ~ [~@7 x]!32 ~@5>").gain(0.42)

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

// drums · tambourine
const tambourine = s("tb").struct("<~ A@16 ~ A@15 ~ A@16 ~ A@15 ~ A@19 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.24)

// drums · mt
const mt = s("mt").struct("<~@8 [~@6 x ~@6 x!2 ~] ~@24 [~@13 x ~@2] ~@32 [~@7 x] ~@21>").gain(0.48)

stack(
  synth_strings_1, bass, string_ensemble_1, electric_guitar_muted, bass_2, piano, pad_poly, pad_choir, kick, rim, clap,
  snare, hihat, open_hat, crash, tambourine, mt
)

More by Fun Factory