Strudelify

Super Gut

Mo-Do

KeyE minorTempo145 bpm
0:00/0:00
// Super Gut — Mo-Do
// 145 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(145/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · lead 8 bass lead
const bass = note(`<
  ~@8 A@3 B A@3 B A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@3 B A@3 B A@2 C D A@2 C D A@2 C D
  A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D A@2 C D ~@8
>`.pickRestart({
  A: "e1 e2 e1 e2 e1 e2 e1 e2", B: "e1 e2 e1 e2 g1 g2 d1 d2", C: "g1 g2 g1 g2 g1 g2 g1 g2",
  D: "b0 b1 b0 b1 b0 b1 b0 b1",
})).s("gm_lead_8_bass_lead").gain(0.37)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@16 A@2 B C A@2 B C A@2 B C A@2 B C ~@32 A@2 B C A@2 B C A@2 B C A@2 B C ~@24 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C
  A@2 B C
>`.pickRestart({
  A: "[b3,e4,b4,e5] ~ [e4,g4,e5,g5] ~ [b3,e4,b4,e5] ~ [e4,g4,e5,g5] ~ [b3,e4,b4,e5] ~ [e4,g4,e5,g5] ~ [d4,f#4,d5,f#5] ~ [e4,g4,e5,g5] ~", // E5 Em E5 Em E5 Em D Em
  B: "[d4,g4,d5,g5] ~ [g4,b4,g5,b5] ~ [d4,g4,d5,g5] ~ [g4,b4,g5,b5] ~ [d4,g4,d5,g5] ~ [g4,b4,g5,b5] ~ [f#4,a4,f#5,a5] ~ [g4,b4,g5,b5] ~", // G5 G G5 G G5 G F#m G
  C: "[f#4,b4,f#5,b5] ~ [b4,d5,b5,d6] ~ [f#4,b4,f#5,b5] ~ [b4,d5,b5,d6] ~ [f#4,b4,f#5,b5] ~ [b4,d5,b5,d6] ~ [a4,c#5,a5,c#6] ~ [f#4,d5,f#5,d6] ~", // B5 Bm B5 Bm B5 Bm A D
})).s("gm_synth_brass_1").gain(0.25)

// other · synth brass 1
const synth_brass_1_2 = note("<~@40 A B C D A B C D ~@40 A B C D A B C D E@2 F G E@2 F G ~@24>".pickRestart({
  A: "e3 e4 e3 e4 e3 e4 f#3 f#4", B: "g3@2 g4@3 ~ g4@2 g3@2 g4@2 f#3@2 f#4@2", C: "d3 d4 d3 d4 d3 d4 g3 g4",
  D: "f#3@2 f#4@3 ~ f#4@2 f#3@2 f#4@2 d3@2 d4@2", E: "e2 e3 e2 e3 e2 e3 e2 e3", F: "g2 g3 g2 g3 g2 g3 g2 g3",
  G: "b1 b2 b1 b2 b1 b2 b1 b2",
})).s("gm_synth_brass_1").gain(0.35).pan(0.4)

// other · synth bass 1
const synth_bass_1 = note(`<
  ~@16 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C ~@8 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B
  C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C ~@8
>`.pickRestart({
  A: "e3 g3 b3 g3 e3 g3 b3 g3 e3 g3 b3 g3 e3 g3 b3 g3", B: "g3 b3 d4 b3 g3 b3 d4 b3 g3 b3 d4 b3 g3 b3 d4 b3",
  C: "b3 d4 f#4 d4 b3 d4 f#4 d4 b3 d4 f#4 d4 b3 d4 f#4 d4",
})).s("gm_synth_bass_1").gain(0.29).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A B ~@6 C D ~@8 E@6 C D E@14 C D ~@8 E@6 C D ~@8 E@6 C D ~@14 C D ~@6 C D E@6 ~@8 C D ~@6 C D
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", B: "x ~ x!7 ~ x ~ x ~@3", C: "~@9 x!7", D: "x!16", E: "~@2 x ~@3 x!2",
})).gain(0.37)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@14 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@7 A ~@15 A ~@7 A ~>".pickRestart({
  A: "x!9 ~@7",
})).gain(0.19)

// drums · hihat
const hihat = s("hh").struct("<~@8 [x!4]!8 ~@4 [x!4]!104 ~@4>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!8 ~@4 [~ x ~ x ~ x ~ x]!104 ~@4>").gain(0.37)

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

stack(bass, synth_brass_1, synth_brass_1_2, synth_bass_1, kick, snare, snare_soft, hihat, open_hat, crash)

More by Mo-Do