Strudelify

Away From Home (short)

Dr. Alban

KeyF minorTempo97 bpm
0:00/0:00
// Away From Home (short) — Dr. Alban
// 97 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  A B A C ~@3 D E F E G H I H J H I H J K L K M E F E F E F E N ~@4 H I H J H I H J K L K M E F E F E F E N ~@12 E F E F
  E F E N ~@4
>`.pickRestart({
  A: "[f1,f2] ~ [f1,f2] ~@4 [f1,f2] [bb1,bb2]@2 [c2,c3]@2 [ab1,ab2]@2 [bb1,bb2]@2", // F Bb C Ab Bb
  B: "[db1,db2] ~ [db1,db2]@2 ~@3 [eb1,eb2] [f1,f2] ~ [bb1,bb2]@2 [ab1,ab2]@2 [g1,g2]@2", C: "[db1,db2] [eb1,eb2]",
  D: "~@7 eb1", E: "f1 ~ f1!2 f2@2 eb2 f2 f1 ~ f1!2 f2@2 eb2 f2", F: "f1 ~ f1!2 f2@2 eb2 f2 f1 ~ f1!2 f2!2 eb2 f2",
  G: "f1 ~ f1!3 ~ f1!3 ~ f1 ~@5", H: "f1 ~ f1 ~@4 f1 bb1@2 c2@2 ab1@2 bb1@2",
  I: "db1 ~ db1@2 ~@3 eb1 f1 ~ bb1@2 ab1@2 g1@2", J: "db1 ~ db1@2 ~@3 eb1 f1 ~ bb1@2 c2@2 ab1@2",
  K: "f1 ~ f1 ~@4 f1 ab1 bb1 c2@2 ab1@2 bb1@2", L: "db1 ~ db1@2 ~@3 db1 ab1 bb1 c2@2 bb1@2 ab1@2",
  M: "db1 ~ db1 ~@4 db1 ab1 bb1 c2@2 db2@2 c2@2", N: "f1 ~ f1!2 f2@2 eb2 f2 f1 ~ f1 ~@5",
})).s("gm_synth_bass_2").gain(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B A C ~@4 A B A C ~@8 A B A C A B A C A B A C A B A C ~@8 A B A C A B A C A B A C A B A C ~@4 A B A C A B A C A B A
  C D@3 ~
>`.pickRestart({
  A: "[f3,f4,ab4,c5]", B: "[db3,f4,ab4,db5] [eb3,g4,bb4,eb5]", C: "[db3,f4,ab4,db5] [eb3,eb4,g4,bb4]",
  D: "[[f3,f4,ab4,c5]@5 ~]/3", // Fm
})).s("gm_synth_strings_1").gain(0.05).pan(0.9)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@12 A B A C A B A C A B A C A B A C A B A C ~@4 A B A C A B A C A B A C A B A C A B A C ~@12 A B A C A B A C ~@4
>`.pickRestart({
  A: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~", // Fm
  B: "~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [g4,bb4,eb5] ~@3 [f4,bb4,db5] ~", // Db Eb Bbm
  C: "~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [g4,bb4,eb5] ~@3 [f4,ab4,c5] ~", // Db Eb Fm
})).s("gm_percussive_organ").gain(0.15)

// other · lead 5 charang · "CHARANG"
const lead_5_charang = note(`<
  ~@4
  [~@14 c3!2]
  [c3 ~ c3!2 ~ c3!2 ~ c3!2 ~ c3!2 ~ c3!2]
  [c3 ~ c3!2 ~ c3!2 ~ c3 c3@2 c3!2 ~@2 c3]
  [c3 ~ c3!2 ~ c3!2 ~ c3!2 ~ c3!2 ~@3]
  ~@72
>`).s("gm_lead_5_charang").gain(0.09)

// chords · clavinet
const clavinet = note(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A B C B C B C B C ~@5 A ~ A ~ A ~ A ~ A ~ A B C B C B C B C ~@12 B C B C B C B C ~@4
>`.pickRestart({
  A: "~@2 f4 ~ f4 ~@5 g4 ~@5", B: "~@2 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~",
  C: "~@2 [f3,ab3,db4] ~@3 [f3,ab3,db4] ~@3 [g3,bb3,eb4] ~@5", // Db Eb
})).s("gm_clavinet").gain(0.1)

// other · bagpipe · "BAG PIPE"
const bagpipe = note("<A ~ B ~ A ~ B ~@25 A ~ B ~@21 A ~ B ~@21>".pickRestart({
  A: "~@8 c5 db5 c5 bb4 c5@4", B: "~@8 c5 db5 c5 bb4 c5@2 f4@2",
})).s("gm_bagpipe").gain(0.19).pan(0.2)

// other · bagpipe · "BAG PIPE" · soft notes
const bagpipe_soft = note("<~ A ~ B ~ A ~ B ~@25 A ~ B ~@21 A ~ B ~@20>".pickRestart({
  A: "~ c5@4 ~ c5@4 ~@6", B: "f4 ~ f4 ~ f4 ~@3",
})).s("gm_bagpipe").gain(0.07).pan(0.2)

// bass · drawbar organ · "ORGAN 1"
const bass_2 = note("<~@12 A B A C A B A C D E D F ~@12 A B A C A B A C D E D F ~@32>".pickRestart({
  A: "f1 ~ f1 ~@4 f1 bb1@2 c2@2 ab1@2 bb1@2", B: "db1 ~ db1@2 ~@3 eb1 f1 ~ bb1@2 ab1@2 g1@2",
  C: "db1 ~ db1@2 ~@3 eb1 f1 ~ bb1@2 c2@2 ab1@2", D: "f1 ~ f1 ~@4 f1 ab1 bb1 c2@2 ab1@2 bb1@2",
  E: "db1 ~ db1@2 ~@3 db1 ab1 bb1 c2@2 bb1@2 ab1@2", F: "db1 ~ db1 ~@4 db1 ab1 bb1 c2@2 db2@2 c2@2",
})).s("gm_drawbar_organ").gain(0.64)

// bass · synth bass 2 · "SYN BASS 2"
const bass_3 = note(`<
  ~@5 A ~@11 A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~@14
>`.pickRestart({
  A: "~@7 eb1",
})).s("gm_synth_bass_2").gain(0.59)

// drums · rim
const rim = s("rim").struct("<~@7 A ~@3 B ~@7 C ~@11 D ~@15 E ~@19 F@2 G H I H@3 J ~@4>".pickRestart({
  A: "~@7 x ~@8", B: "~@9 x ~@2 x ~@3", C: "~@11 x ~@4", D: "~@6 x!2 ~ x ~ x ~@2 x!2", E: "~@11 x!2 ~@3", F: "~@7 x",
  G: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", H: "~ x ~ x ~ x ~ x", I: "~@2 x!2 ~ x!2 ~@3 x!2 ~@2 x ~", J: "x!2 ~ x ~ x ~ x",
})).gain(0.3)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@58 [~ x ~ x ~ x ~ x] [~@3 x ~@7 x ~@4] ~@20>").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@4 B@3 C B D B D B D B D B D B E B D B D B D B@5 C B D B D B D B D B D B E B D B D B D B@5 E A@7 F B D B D B D
  B@2 G ~@3
>`.pickRestart({
  A: "x ~@2 x!6 ~@2 x!3 ~ x", B: "x ~@2 x!3 ~ x!2 ~@2 x!3 ~ x", C: "x ~@2 x", D: "x ~@2 x!3 ~ x!2 ~@2 x!4 ~",
  E: "x ~@6 x", F: "x ~@2 x!6 ~@3 x ~@3", G: "x",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@4 A@7 B A@11 ~ A@11 B A@11 ~ A@11 ~ A@16 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@23 A ~@27 B ~@3 A ~@12>".pickRestart({
  A: "~@3 x", B: "~@7 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@7 B C@11 D C@8 A@3 B C@11 D C@11 D C@7 E C@8 ~@4>".pickRestart({
  A: "x!3 ~ x!3 ~", B: "x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", D: "~ x ~@14", E: "~ x ~ x ~ x ~ x ~ x ~@3 x ~@2",
})).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@11 B A@8 ~@4 A@11 B A@11 B A@7 C A@8 ~@4>".pickRestart({
  A: "x!8", B: "x", C: "x!5 ~ x ~",
})).gain(0.25)

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

// drums · ride
const ride = s("rd").struct("<~@60 A B C D A E B F ~@12>".pickRestart({
  A: "~@3 x ~@2 x ~ x ~@2 x ~@2 x ~", B: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", C: "x ~@2 x ~@2 x ~ x ~ x ~ x ~ x ~",
  D: "x ~@2 x!2 ~ x!3 ~@2 x!5", E: "x ~@2 x ~@2 x!7 ~ x ~", F: "x ~@2 x ~@2 x ~ x ~@7",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 A@5 B A@11 B A@11 B A@11 B A@11 B A@7 C A@8 ~@4>".pickRestart({
  A: "x!16", B: "x", C: "x!9 ~@3 x ~@3",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@60 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!7 [~@2 x!2 ~@2 x!2 ~@8] ~@12>").gain(0.63)

// drums · ht
const ht = s("ht").struct("<~@3 A ~@3 B ~@3 C ~@11 D ~@29 E ~@3 F ~ G ~@7 H ~@7 I ~@4>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x ~@4", B: "~@2 x!2 ~ x ~@10", C: "~@2 x!2 ~ x ~@3 x ~@2 x ~@3", D: "~@2 x ~@2 x ~@6 x ~@3",
  E: "~@5 x ~@10", F: "~@11 x ~@4", G: "~@3 x ~@3 x ~@3 x ~@4", H: "~@4 x ~@2 x ~ x ~ x ~@4",
  I: "~@2 x ~@2 x ~@3 x ~ x ~@2 x ~",
})).gain(0.35)

// drums · mt
const mt = s("mt").struct(`<
  ~@3 A ~@3 B ~@3 C ~@11 D ~@9 E ~ E ~@3 F ~@3 F ~@3 G H ~@4 I ~@5 J ~@3 B ~@3 K ~@3 I ~@3 L ~@4
>`.pickRestart({
  A: "~@6 x!2", B: "~@9 x ~ x!2 ~ x ~", C: "~@7 x ~@3 x ~@2 x ~", D: "~@8 x ~@2 x ~@2 x ~", E: "~@11 x!2 ~@3",
  F: "~@15 x", G: "x!4 ~ x!2 ~@7 x ~", H: "x", I: "~@7 x ~ x ~@6", J: "~@2 x ~@2 x ~@3 x ~@2 x ~@3",
  K: "~@2 x ~@2 x ~@6 x ~@3", L: "x ~@2 x ~@4 x ~@3 x ~@3",
})).gain(0.35)

// drums · mt · soft notes
const mt_soft = s("mt").struct("<~@39 [~@7 x] ~@3 [~@7 x] ~@13 [~@2 x!2 ~@8 x ~ x ~] ~@22>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A@4 B@3 C D@11 E D@8 A@3 ~ D@11 E D@8 A@3 ~ A@7 F D@8 ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!8", C: "x ~@4 x ~@10", D: "x!4", E: "x", F: "~ x ~ x ~@4",
})).gain(1.26)

// drums · triangle
const triangle = s("triangles:35").struct("<~@4 A@7 B A@23 B A@40 C D@2 B>".pickRestart({
  A: "x ~@2 x ~@2 x!5 ~@3 x ~", B: "x", C: "~ x!3", D: "x!4",
})).gain(2.16)

stack(
  bass, synth_strings_1, percussive_organ, lead_5_charang, clavinet, bagpipe, bagpipe_soft, bass_2, bass_3, rim,
  rim_soft, kick, snare, low_tom, hihat, open_hat, crash, ride, tambourine, congas, ht, mt, mt_soft, cabasa, triangle
)

More by Dr. Alban