Strudelify

One

Filter

KeyG majorTempo180 bpm
0:00/0:00
// One — Filter
// 180 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "guitar" distortion guitar (copy of ch 1 "guitar" overdriven guitar)
// note: Full arrangement: all 204 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/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 · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@68 A@2 B@2 C@4 A@2 B@2 C@6 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 ~@24 A@2 B@2 C@4 A@2
  B@2 C@6 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 ~@8
>`.pickRestart({
  A: "[a#2,f3,a#3]!4", B: "[g#2,d#3,g#3]!4", C: "[f2,c3,f3]!4", D: "[g#2,d#3,g#3] [a#2,f3,a#3]!3",
})).s("gm_overdriven_guitar").gain(0.51).pan(0.3)

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  ~@84 A@2 B C B C D E A@2 B C B C D E A@2 B C B C D E F@5 G@3 H I J@6 ~@40 A@2 B C B C D E A@2 B C B C D E K L M N M N
  O P K L M N M N O P Q@8
>`.pickRestart({
  A: "a4!4", B: "a4 a#4!3", C: "a#4!4", D: "a#4 c5!3", E: "c5!4",
  F: "[[d4,d5]@3 [c4,c5]@4 [a#3,a#4]@4 [a3,a4]@6 [a3,a4]!3]/5", G: "[[g#3,g#4] [g3,g4] [f#3,f#4] [f3,f4]@21]/3",
  H: "[g#3,g#4] [a3,a4]@7", I: "[c4,c5]@3 [g#3,g#4]", J: "[[g3,g4] [f#3,f#4] [g#3,g#4]@14 ~@24 c5@8, ~ [f3,f4]@23]/6",
  K: "a4!4, c5 a#4", L: "a4!4, g#4 g4", M: "a4 a#4!3, c5 ~", N: "a#4!4, g#4 g4", O: "[a#4,c5] c5!3, ~ a#4",
  P: "c5!4, g#4 g4", Q: "c4/8",
})).s("gm_distortion_guitar").gain(0.72)

// chords · distortion guitar · "guitar" · soft notes
const distortion_guitar_soft = note("<~@84 [f4!4]!24 ~@56 [f4!4]!32 ~@8>").s("gm_distortion_guitar").gain(0.48)

// bass · fretless bass · "bass"
const bass = note(`<
  A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 A@2 B@2 C@4 D@4 ~@56 A@2 B@2 E@4
  A@2 B@2 E@4 A@2 B@2 F@3 ~@49 G@8
>`.pickRestart({
  A: "f1/2", B: "g#1/2", C: "a#1/4", D: "f1/4", E: "a1/4", F: "a1/3", G: "c2/8",
})).s("gm_fretless_bass").gain(0.72)

// bass · electric bass finger · "bass"
const bass_2 = note(`<
  ~@68 A@2 B@2 C@4 A@2 B@2 C@6 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 E@4 ~@20 A@2 B@2 C@4
  A@2 B@2 C@6 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 C@2 B@2 D A@3 F@8
>`.pickRestart({
  A: "a#1!4", B: "g#1!4", C: "f1!4", D: "g#1 a#1!3", E: "f2/4", F: "c2/8",
})).s("gm_electric_bass_finger").gain(0.72)

// other · pad halo · "synth"
const pad_halo = note("<~@48 A@8 ~@148>".pickRestart({
  A: "a3/8",
})).s("gm_pad_halo").gain(0.42)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@24 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 A B ~@58 C B A B A B A B A B A B
  A B A B A B A B A B A D ~@56
>`.pickRestart({
  A: "x!2 ~@2", B: "~@2 x ~@2 x ~@2", C: "~ x ~@2", D: "x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@66 A B C@56 D ~@23 C@31 E C@15 F ~@8>".pickRestart({
  A: "~@8 x ~@5 x!2", B: "x ~@5 x!3 ~@5 x ~", C: "~ x", D: "x", E: "x ~ x ~ x!4", F: "~@2 x!2",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@24 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 A B ~@58 A B A B A B A B A B A B
  A B A B A B A B A B A ~@57
>`.pickRestart({
  A: "~@4 x ~@2 x", B: "~ x ~@2 x ~@2 x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<[~ x]!23 [~@4 x ~@2 x] [x!4]!43 ~@57 [~ x!3] [x!4]!22 ~@57>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@68 [x!4]!56 x ~@23 [x!4]!31 [x ~ x ~ x!4] [x!4]!16 ~@8>").gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@68 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@23 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15
>`.pickRestart({
  A: "x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct(`<
  ~@68 A B@7 A B@7 A B@7 A B@7 A B@7 A B@7 A B@7 ~@24 A B@7 A B@7 A B@7 A B@7 A B@7 A B@7 ~@8
>`.pickRestart({
  A: "~ x", B: "x!2",
})).gain(0.72)

stack(
  overdriven_guitar, distortion_guitar, distortion_guitar_soft, bass, bass_2, pad_halo, kick, kick_soft, snare,
  snare_soft, hihat, open_hat, crash, ride
)

More by Filter