Strudelify

T & P Combo

311

KeyA majorTempo100 bpm
0:00/0:00
// T & P Combo — 311
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// chords · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  ~ A B A B A B A C D E D E D E D E F G F G H@4 I J I J I J I J K@2 L A B A B A B A C D E D E D E D E F G F G H@4 I J I
  J I J I J K@2 L
>`.pickRestart({
  A: "~@2 [c#4,g#4] ~@2 [c#4,g#4] ~@2 [c#4,g#4] ~@2 [c#4,g#4] ~@2 [c#4,g#4]!2", // C#5
  B: "~@2 [c#4,g#4] ~@2 [c#4,g#4] ~@2 [c#4,g#4] [d4,a4]!6 [c#4,g#4]", // C#5 D5 C#5
  C: "~@2 [c#4,g#4] ~@2 [c#4,g#4] ~@2 [c#4,g#4] [d4,a4]!7", D: "e2 f2!2 e2 f2!2 e2 f2 e2 f2!2 e2 f2!2 e2 f2",
  E: "f2 f#2!2 f2 f#2!2 f2 f#2 f2 f#2!2 f2 f#2!2 f2 f#2",
  F: "[d4,f#4,b4]!2 ~ [d4,f#4,b4] ~ [d4,f#4,b4]!5 ~ [d4,f#4,b4] ~ [d4,f#4,b4]!3", // Bm
  G: "[d4,f#4,b4]!2 ~ [d4,f#4,b4] ~ [d4,f#4,b4]!5 ~ [d4,f#4,b4] [d#4,g4,c5]!4", // Bm Cm
  H: "[d4,f#4,b4]!2 ~ [d4,f#4,b4] ~ [d4,f#4,b4]!3 f#2 f#3!2 f#2 g2 g3!2 g2", // Bm
  I: "d3 d#3 e3 g3 g#3 a3 g#3 g3 e3 d#3 d3 b2 a#2 a2 g2@2", J: "e2 ~@2 e2 g2 a2 ~ g2@2 e2 ~ e2 g2 a2@3",
  K: "g2@2 e2@2 g2 a2 ~ g2@2 e2 ~ e2 g2 a2@3", L: "g2@2 e2@2 g2 a2 ~ g2@2 e2 ~@6",
})).s("gm_distortion_guitar").gain(0.48)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B A B A B A C D E D E D E D E F@4 G@4 H I H I H I H I J@2 K A B A B A B A C D E D E D E D E F@4 G@4 H I H I H I H
  I J@2 K
>`.pickRestart({
  A: "f#1!2 ~@4 f#2!2 ~@4 b1!2 ~@2", B: "c#2!2 ~@4 e2!2 ~@4 f1!2 f1@2", C: "c#2!2 ~@4 e2!2 ~@4 f1 f1@2 f1",
  D: "e1 f1!2 e1 f1!2 e1 f1 e1 f1!2 e1 f1!2 e1 f1", E: "f1 f#1!2 f1 f#1!2 f1 f#1 f1 f#1!2 f1 f#1!2 f1 f#1",
  F: "e2 e1 ~ e1 ~ e1@2 e1 e2 e1 ~ e1 ~ e1@2 e1", G: "e2 e1 ~ e1 ~ e1@2 e1 f#1 f#2!2 f#1 g1 g2!2 g1",
  H: "d2 d#2 e2 g2 g#2 a2 g#2 g2 e2 d#2 d2 b1 a#1 a1 g1@2", I: "e1 ~@2 e1 g1 a1 ~ g1@2 e1 ~ e1 g1 a1@3",
  J: "g1@2 e1@2 g1 a1 ~ g1@2 e1 ~ e1 g1 a1@3", K: "g1@2 e1@2 g1 a1 ~ g1@2 e1 ~@6",
})).s("gm_electric_bass_finger").gain(0.48)

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

// drums · rim
const rim = s("rim").struct("<[~@11 x ~@4] ~@70>").gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct("<~ A B@2 C B@4 ~@27 A B@2 C B@4 ~@27>".pickRestart({
  A: "~ x!6 ~", B: "x!7 ~", C: "x ~ x ~ x ~ x ~ x!4 ~@4",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@7 x] ~@34 [~@7 x] ~@35>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@3 B A@4 C@7 D ~@8 E F E F E F E F@3 G A@3 B A@4 C@7 D ~@8 E F E F E F E F@3 G
>`.pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~@2", C: "~ x!7", D: "~ x!3 ~@4", E: "~ x!6 ~", F: "~ x!5 ~@2", G: "~@2 x ~ x!2 ~ x ~ x ~@6",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<[~@11 x!2 ~@3] ~@70>").gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A@7 B A ~@3 A ~@2 C D E D E D E D E@3 A@2 ~@7 A@7 B A ~@3 A ~@2 C D E D E D E D E@3 A
>`.pickRestart({
  A: "x", B: "x ~@3 x!2 ~@2", C: "~@8 x ~@6 x", D: "x ~@6 x", E: "x ~@12 x ~@2",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct("<~@17 A B@3 A B@2 C ~@27 A B@3 A B@2 C ~@11>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~@4",
})).gain(0.56)

stack(distortion_guitar, bass, kick, rim, snare, hihat, mid_tom, open_hat, high_tom, crash, ride_bell)

More by 311