Strudelify

Gut Feeling

Devo

KeyG majorTempo148 bpm
0:00/0:00
// Gut Feeling — Devo
// 148 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Distorted Guitar" named as a guitar, played on distortion guitar (its piano patch is not one)
// note: duplicate parts dropped: ch 3 "More Bass" acoustic bass (copy of ch 1 "Bass, Master" electric bass pick); ch 13 "Track 13" rock organ (copy of ch 4 "Distorted Guitar" distortion guitar); ch 8 "Big Hit" overdriven guitar (copy of ch 7 "Big Hit" distortion guitar)
// note: Full arrangement: all 200 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/4)

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

// bass · electric bass pick · "Bass, Master"
const bass = note(`<
  ~@5 A B C D E F B C D E F B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B
  C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A
  B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E ~@30
>`.pickRestart({
  A: "e2", B: "g2", C: "c3", D: "a2", E: "d3", F: "e3",
})).s("gm_electric_bass_pick").gain(0.41)

// chords · electric bass pick · "Rhythm"
const electric_bass_pick = note(`<
  A B C D E F B C G H F B C G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G
  H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I
  G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H F B I G H ~@30
>`.pickRestart({
  A: "~@5 e4@3, e2, ~@4 e3@7 ~@5, ~@3 b3@3 ~@2", B: "~@5 g4@3, g2, ~@2 g3@3 ~@3, ~@3 b3@3 ~@2",
  C: "~@5 c4@3, c3, ~ c4 ~@2, ~@3 e4@3 ~@2", D: "~@5 e4@3, a2, ~@4 a3@7 ~@5, ~@3 c#4@3 ~@2",
  E: "~@5 d4@3, d3, ~ d4 ~@2, ~@3 f#4@3 ~@2", F: "~@5 e4@3, e2, ~@2 e3@3 ~@3, ~@3 b3@3 ~@2",
  G: "~@5 e4@3, a2, ~@2 a3@3 ~@3, ~@3 c#4@3 ~@2", H: "~@5 d4@3, d3, ~@4 d4@5 ~@7, ~@3 f#4@3 ~@2",
  I: "~@5 c4@3, c3, ~@3 e4@3 ~@2",
})).s("gm_electric_bass_pick").gain(0.41)

// other · distortion guitar · "Distorted Guitar"
const distortion_guitar = note(`<
  ~@15 A B C D E F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G
  H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F
  G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J F G H I J ~@30
>`.pickRestart({
  A: "~ e2 ~@6", B: "~ g2 ~@6", C: "~ c3 ~@6", D: "~ a2 ~@6", E: "~ d3 ~@6",
  F: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", G: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  H: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", I: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  J: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
})).s("gm_distortion_guitar").gain(0.41)

// chords · string ensemble 1 · "Bass Strings"
const string_ensemble_1 = note(`<
  ~@55 A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B
  C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E A B C D E
  ~@30
>`.pickRestart({
  A: "[e3,g#3]", B: "[g3,b3]", C: "[g3,c4]", D: "[e3,a3]", E: "[a3,d4]",
})).s("gm_string_ensemble_1").gain(0.41)

// chords · string ensemble 2 · "Treble Strings"
const string_ensemble_2 = note("<~@75 A B C D E F G H I J K L M N O ~@110>".pickRestart({
  A: "[e4,b4]", B: "[g4,b4]", C: "[g4,c5]", D: "[e4,c#5]", E: "[a4,d5]", F: "[b4,e5]", G: "[b4,d5]", H: "[c5,e5]",
  I: "[c#5,e5]", J: "[d5,f#5]", K: "[e5,g#5]", L: "[d5,g5]", M: "[e5,g5]", N: "[a4,a5]", O: "[d5,a5]",
})).s("gm_string_ensemble_2").gain(0.41)

// other · distortion guitar · "Big Hit"
const distortion_guitar_2 = note("<~@170 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 C>".pickRestart({
  A: "[d2,d3]@2 [d2,d3]!2 ~ [d2,d3]!2 ~ [c2,c3]@2 [c2,c3]!2 ~ [c2,c3]!2 ~", // D C
  B: "[d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3]!8", C: "[d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~@9",
})).s("gm_distortion_guitar").gain(0.41)

// other · acoustic guitar nylon · "Track 12"
const acoustic_guitar_nylon = note("<~@176 A B A C A B ~@8 A B A C A B A B ~@2>".pickRestart({
  A: "d5@2 c5 d5 ~ c5 d5 ~ c5@2 b4 c5 ~ b4 c5 ~", B: "d5!12 ~ d5 ~ d5", C: "d5 ~ d5 ~ d5 ~ d5 ~ d5!4 ~ d5 ~ d5",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~@25 A@9 B A@135 ~@4 C@8 D E D F D F D F C@7 G D H>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@2 x!3 ~ x", C: "~ x ~ x ~ x ~ x", D: "x!2", E: "x ~ x ~ x ~ x ~ x!8", F: "x!8",
  G: "~@2 x ~@3 x!9 ~", H: "x!4 ~@4",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  ~@24 A B@9 C B@4 D B@4 E B@4 E B@4 F B@4 G B@4 H B@4 I B@4 J B@4 K B@4 L B@4 M B@4 N B@4 O B@4 P B@4 Q B@4 R B@4 S B@3
  T U B@3 V W B@4 X B@3 Y Z B@4 AA B@4 G B@4 AB B@4 I B@3 AC AD B@4 AE ~ AF ~ AF AG@8 AH S AH S AH S AH S AG@7 AI AH AJ
>`.pickRestart({
  A: "~@2 x!2 ~ x!2 ~", B: "~ x ~ x", C: "~@4 x!2 ~ x!3 ~ x ~ x!2 ~", D: "~@4 x ~@3 x!8", E: "~@4 x ~@3 x ~ x!3 ~ x!2",
  F: "~@4 x ~@4 x!3 ~ x!3", G: "~@4 x ~@3 x!3 ~ x!4", H: "~@4 x ~@3 x!2 ~ x!5", I: "~@4 x ~@3 x ~ x!6",
  J: "~@4 x ~@4 x!7", K: "~@4 x ~@3 x ~ x!4 ~ x", L: "~@4 x ~@3 x!2 ~ x!2 ~ x!2", M: "~@4 x ~@3 x!3 ~@2 x!2 ~",
  N: "~@4 x ~@3 x!2 ~ x ~ x!3", O: "~@4 x ~@4 x!2 ~@2 x!2 ~", P: "~@4 x ~@3 x ~ x!2 ~ x!2 ~",
  Q: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x", R: "~@4 x ~ x ~ x!2 ~ x!2 ~ x ~", S: "x ~ x ~ x ~ x ~ x!8", T: "~@2 x ~@3 x!2",
  U: "x ~@2 x!2 ~@2 x!9", V: "~@4 x ~@6 x!2 ~ x ~", W: "x!3 ~ x ~ x ~ x!8", X: "x ~ x!3 ~@3 x!6 ~ x",
  Y: "~@4 x ~@6 x!2 ~@2 x", Z: "x ~@2 x!2 ~@3 x!5 ~ x!2", AA: "~@4 x ~@3 x!4 ~ x!3", AB: "x ~ x ~ x ~ x ~ x!2 ~ x!5",
  AC: "~@4 x ~@7 x!4", AD: "~ x ~ x!3 ~ x ~ x!7", AE: "~@4 x ~ x ~ x ~ x!6", AF: "~@8 x!8", AG: "~ x ~ x ~ x ~ x",
  AH: "x!2", AI: "~@2 x ~@3 x!9 ~", AJ: "x!4 ~@4",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@171 [~@14 x!2] ~ [~@14 x!2] ~@26>").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@171 [~@5 x!2 ~] ~ [~@5 x!2 ~] ~@26>").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@90 x ~@108 [~@3 x ~@4]>").gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@171 [~@8 x!2 ~@6] ~ [~@8 x!2 ~@6] ~@26>").gain(0.41)

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

// drums · ride
const ride = s("rd").struct("<~@90 x ~@108 [~@3 x ~@4]>").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@25 [x!8]!145 ~@30>").gain(0.41)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@10 [~ x ~ x]!15 ~@175>").gain(2.08)

stack(
  bass, electric_bass_pick, distortion_guitar, string_ensemble_1, string_ensemble_2, distortion_guitar_2,
  acoustic_guitar_nylon, kick, snare, low_tom, mid_tom, open_hat, high_tom, crash, ride, tambourine, cabasa
)

More by Devo