Strudelify

7 Days & One Week

BBE

KeyA♭ majorTempo138 bpm
0:00/0:00
// 7 Days & One Week — BBE
// 138 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 144 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.

// bass · synth bass 1 · "Synth Bass"
const bass = note(`<
  A B A@14 C@4 D@4 E@4 F G@3 C@4 D@4 E@4 F G@3 C@4 D@4 E@4 C@8 D@4 E@4 C@4 ~@16 C@4 D@4 E@4 G@4 C@4 D@4 E@4 G@4 C@4 D@4
  E@4 C@2 ~@2
>`.pickRestart({
  A: "~@2 bb1 ~@3 bb1 ~@3 bb1 ~@3 bb1 ~", B: "~@2 bb1 ~@3 bb1 ~@7 bb1 ~", C: "~ bb1 ~ bb1 ~ bb1 ~ bb1",
  D: "~ f1 ~ f1 ~ f1 ~ f1", E: "~ ab1 ~ ab1 ~ ab1 ~ ab1", F: "~@2 eb1@2 ~@2 eb1@3 ~ eb1@2 ~@2 eb1@2",
  G: "~ eb1 ~ eb1 ~ eb1 ~ eb1",
})).s("gm_synth_bass_1").gain(0.8)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@16 A B A B C D C D E F E F G H G H A B A B C D C D E F E F G H G H A B A B C D C D E F E F G H G H A B A B C D C D E
  F E F G H G H A B A B C D C D E F E F G H G H ~@32 A B A B C D C D E F E F G H ~@2
>`.pickRestart({
  A: "ab5 eb5 bb4@2 ab5 eb5 bb4@2 ab5 eb5 bb4@2 ab5 eb5 bb4@2",
  B: "[f5,ab5] eb5 bb4@2 [f5,ab5] eb5 bb4@2 [f5,ab5] eb5 bb4@2 ~@4", // Fm
  C: "ab5 eb5 c5@2 ab5 eb5 c5@2 ab5 eb5 c5@2 ab5 eb5 c5@2",
  D: "[f5,ab5] eb5 c5@2 [f5,ab5] eb5 c5@2 [f5,ab5] eb5 c5@2 ~@4", // Fm
  E: "eb5 c5 ab4@2 eb5 c5 ab4@2 eb5 c5 ab4@2 eb5 c5 ab4@2",
  F: "[eb5,f5] c5 ab4@2 [eb5,f5] c5 ab4@2 [eb5,f5] c5 ab4@2 ~@4", // Ebsus2
  G: "eb5 db5 bb4@2 eb5 db5 bb4@2 eb5 db5 bb4@2 eb5 db5 bb4@2",
  H: "[eb5,f5] db5 bb4@2 [eb5,f5] db5 bb4@2 [eb5,f5] db5 bb4@2 ~@4", // Ebsus2
})).s("gm_electric_guitar_jazz").gain(0.18)

// other · lead 8 bass lead · "Arpeggio"
const lead_8_bass_lead = note(`<
  ~@48 A@4 B@4 C D@3 A@8 B@4 C D@3 A@8 B@4 C D@3 A@2 E ~@33 A@4 B@4 C D@3 A@2 ~@2
>`.pickRestart({
  A: "bb2!2 bb3 db4 bb2!2 bb3 db4 bb2!2 bb3 db4 bb2!2 bb3 db4", B: "f2!2 f3 ab3 f2!2 f3 ab3 f2!2 f3 ab3 f2!2 f3 ab3",
  C: "ab2!2 ab3 [b3,c4] ab2!2 ab3 c4 ab2!2 ab3 c4 ab2!2 ab3 c4", // Cmaj7
  D: "ab2!2 ab3 c4 ab2!2 ab3 c4 ab2!2 ab3 c4 ab2!2 ab3 c4", E: "bb2!2 bb3 db4 ~@12",
})).s("gm_lead_8_bass_lead").gain(0.48).pan(0.7)

// other · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@63 A@4 ~ B@4 C@8 ~@44 D@4 ~@16>".pickRestart({
  A: "[bb6@27 ~@5]/4", B: "[~ ab6@31]/4", C: "[~@3 bb6, eb6@95 ~@33, ~ f6]/8", D: "[ab6 g6]/4",
})).s("gm_string_ensemble_2").gain(0.4)

// chords · orchestra hit · "Orch Hit" · D
const orchestra_hit = note("<~@3 [~@3 [d4,d5]] ~@91 [~@11 e4 ~ f3 f3@2, ~@5 c5@2 ~] ~@48>")
  .s("gm_orchestra_hit").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A B A C A@76 ~@16 A@46 D ~>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x ~ x ~@2 x ~@2", D: "x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@4 [x ~@2 x ~@3 x!2 ~ x ~@5]!12 ~@128>").gain(0.8)

// drums · clap
const clap = s("cp").struct(`<
  A@16 ~@16 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@7 B A@3 B A@3 B A@4 ~@16 A@35 B A@3 B A@3 B A@2 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@10 A B@5 C ~@25 A B@5 C ~@25 A B@5 C ~@41 A B@5 C ~@7 A B@5 C ~>".pickRestart({
  A: "~@12 x!4", B: "x!16", C: "x",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@10 A ~@31 A ~@31 A ~@47 A ~@13 A ~@7>".pickRestart({
  A: "x!12 ~@4",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@48 [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!32 ~@48 [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!14 ~@2>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2
  [~ x ~ x ~ x ~ x]
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~ x]!76
  ~@24
  [~ x ~ x ~ x ~ x]!38
  x
  ~
>`).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@8 [~ x ~ x ~ x ~ x]!72 ~@48 [~ x ~ x ~ x ~ x]!14 ~@2>").gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@142 x ~>").gain(0.8)

// drums · bongos
const bongos = s("bongo:4").struct("<~@4 x!12 ~@128>").gain(2.1)

// drums · ht
const ht = s("ht").struct("<~ [~@6 x!6 ~ x!2 ~] ~@142>").gain(0.8)

stack(
  bass, electric_guitar_jazz, lead_8_bass_lead, string_ensemble_2, orchestra_hit, kick, rim, clap, snare, snare_soft,
  hihat, open_hat, ride, crash, bongos, ht
)