Strudelify

Allison Road

Gin Blossoms

KeyA majorTempo133 bpm
0:00/0:00
// Allison Road — Gin Blossoms
// 133 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(133/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 · electric guitar clean · "GUITAR 1"
const electric_guitar_clean = note(`<
  A B A C D E F G D H D I D H D J D H D I D H D J K L M N K L M F G O H O H O H O H D H D I D H D J P H P H P H P H K L
  M N K L M F G A I A I O H O H Q R S R S R T@2 U I V I V I V W G P H P H P H P H P H P H P H X Y@6 ~
>`.pickRestart({
  A: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4] ~ [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@4 [e2,b2,e3,g#3,b3] ~ [d3,f#3,a3,d4]@2", // A E D
  B: "[d3,f#3,a3,d4]@4 [d3,f#3,a3,d4] ~ [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] ~ [a2,e3,a3,b3]@4 [a2,e3,a3,b3]@2", // D A Asus2
  C: "[d3,f#3,a3,d4]!3 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!3", // D A
  D: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4] ~ [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3] ~ [d3,f#3,a3,d4]@2", // A E D
  E: "[d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4] ~ [a2,e3,a3,c#4]!3 ~ [a2,e3,a3,b3]@4 [a2,e3,a3,b3]@2", // D A Asus2
  F: "[g2,b2,d3,g3,d4,g4]@5 [g2,b2,d3,g3,d4,g4]!3", G: "[g2,b2,d3,g3,d4,g4]!6 [g2,b2,d3,g3,d4,g4]@2",
  H: "[d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,b3]!3", // D A Asus2
  I: "[d3,f#3,a3,d4]@3 [a2,e3,a3,c#4]@2 [a2,e3,a3,b3]!3", // D A Asus2
  J: "[d3,f#3,a3,d4]@3 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!2 [a2,e3,a3,b3]", // D A Asus2
  K: "[b2,d3,f#3,b3]@2 [b2,d3,f#3,b3]!5 [b2,d3,f#3]", // Bm
  L: "[d3,f#3,a3,d4]@2 [d3,f#3,a3,d4] [d3,f#3,a3] [d3,f#3,a3,f#4] [d3,f#3,a3,e4] [d3,f#3,a3,d4] [d3,a3,d4,e4]", // D Dsus2
  M: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!2 [a2,e3,a3,d4] [a2,e3,a3,c#4] [a2,e3,a3,b3] [a2,e3,a3,c#4]", // A Asus4 A Asus2 A
  N: "~ e3@2 g#3 a3 g#3 e3 [e2,b2], [e2,b2,g#3]@3 ~@5", // E5 E
  O: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4] ~ [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]@3 ~ [d3,f#3,a3,d4]@2", // A E D
  P: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [e2,b2,e3,g#3,b3]!2 [e2,b2,e3,g#3,b3]@2 [d3,f#3,a3,d4]", // A E D
  Q: "[b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!3", // G
  R: "[d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]!3", // D
  S: "[g2,b2,d3,g3,d4,g4]@3 [g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!3", T: "[a2,e3,a3,e4]!8",
  U: "[e3,a3,c#4]@3 [e2,b2,e3,g#3,b3] [e2,b2,e3,g#3,b3]@3 [d3,f#3,a3,d4]", // A E D
  V: "[a2,e3,a3,c#4]@3 [e2,b2,e3,g#3,b3] [e2,b2,e3,g#3,b3]@3 [d3,f#3,a3,d4]", W: "[g2,b2,d3,g3,d4,g4]!8",
  X: "[a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] [e2,b2,e3,g#3,b3]!2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]", // A E
  Y: "[[d3,f#3,a3,d4]@4 [e2,b2,e3,g#3,b3]@5 [a2,e3,a3,c#4]@84 ~@3]/6", // D E A
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.6)

// chords · electric guitar clean · "GUITAR 2"
const electric_guitar_clean_2 = note(`<
  ~@2 A B A C D@2 A B A B A B A B A B A B A B A B E F G H E F G D@2 A B A B A B A B A B A B A B A B A B A B A B A B E F
  G H E F G D@2 A B A B A B A B I J I J I J K@3 B A B A B A D@2 A B A B A B A B A B A B A B A L@7
>`.pickRestart({
  A: "~@2 b3 ~@3 b3!2, c#4@2 ~ b3@2 e4@3, ~ e4@3 g#3@3 ~", B: "~ e4!3 ~ e4 b3!2, d4@2 b3 ~",
  C: "~@2 e4@2 e4@2 e4 ~@3 e4@2 b3@2 b3@2, d4@7 e4@3 ~@6, ~@2 b3 ~",
  D: "[~@15 d4, g3 g3@2 g3 ~ g3@2 g3, ~@2 d4@8 d4@4 d4@4 d4@7 ~ d4@4 ~@2, ~@3 g4@5 g4@3 g4@5]/2",
  E: "~@7 d4, b3@3 b3@3 b3@2, ~ f#4@3 f#4@4, ~@2 d4@3 d4@2 ~",
  F: "~@7 d4, d3@3 a3@3 a3@2, ~ e4@3 e4@4, ~@2 d4@3 d4@2 ~",
  G: "~@4 d4 c#4 ~ a3, a3@2 a3@3 ~@3, ~ b3@3 ~@2 b3@2, ~@3 e3@3 ~@2",
  H: "~@4 a3 ~@2 b2, b2@3 b2@3 ~@2, ~ g#3@3 ~ g#3@2 ~, ~@2 e3@3 ~ e3@2",
  I: "~@7 d4, g4@3 g4@5, ~@2 d4@7 ~ d4@4 ~@2, ~ g3@2 g3", J: "~@3 g4@2 ~@2 a3, d4 d4@2 d4, ~@2 f#4@7 ~ f#4@4 ~@2",
  K: "[~@18 b3 ~@3 b3!2, a3@3 a3@3 a3@2 a3@3 a3@3 a3@2 c#4@2 ~ b3@2 e4@3, ~ a4@3 a4@3 ~@2 a4@3 a4@3 ~@9, ~@2 e4@3 e4@2 e4@3 e4@3 e4@2 e4@2 e4@3 g#3@3 ~]/3",
  L: "[~@2 e4@2 b3@2 ~ d4@2 [a2,e3,a3]@89 ~@14, d4@7 ~@2 c#4@84 ~@19]/7", // A5
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.4)

// other · overdriven guitar
const overdriven_guitar = note("<~@74 A@2 ~@2 B@3 C D@2 ~@19 E F G H@6 ~>".pickRestart({
  A: "[~@2 f#4@10 f#4 ~ f#4@16 ~@2]/2", B: "[~@14 g4@12 ~@4 f4@4 g#4@2 g#4 ~ g#4 ~ g#4 ~ g#4 ~ g#4 ~ g#4 ~]/3",
  C: "a#4 g#4!2 g#4@2 g#4@2 ~", D: "[~@7 d4@4 ~@5]/2", E: "~@7 e4", F: "e4!5 e4@3", G: "c#4 b3 a3 b3",
  H: "[a3@4 b3@5 c#4@84 ~@3]/6",
})).s("gm_overdriven_guitar").gain(0.55).pan(0.4)

// bass · electric bass pick · "BASS"
const bass = note(`<
  ~@4 A B C D E F E G E F E H E F E G E F I J K L M N K L O P Q R S T U E F V J E W E G E X V Y E G E Z E F I J K L M N
  K L O P Q E S R U E S E AA AB AC AB AD AE AF AG AH E F E Z E F AI P Q AJ S E AK AJ S E AL E G E G E F E AM@6 ~
>`.pickRestart({
  A: "a1@3 e1 e2@3 d2", B: "d2@3 a1 ~ a1 e2 f#2", C: "g2@2 g2@2 g2@2 g2!2 g2@2 g2@2 d2@2 f#2@2",
  D: "g2@2 g2@2 g2@4 g2!2 g2@2 g2@4", E: "a1@3 e1 e2@3 e2", F: "d2@3 a1 ~ a1 e1 f#1",
  G: "d2@6 a1@2 a2!2 a2@2 g2@2 e2@2", H: "d2@6 d2@2 a1@5 ~ a1@2", I: "a1@3 a1 e2@3 e2", J: "d2@3 d2 a1@3 a1",
  K: "b1@3 b1 b1@2 a1 b1", L: "d2@3 d2 d2@2 e2 g2", M: "a2@3 a2 a2@2 g2@2", N: "e2@3 e2 e2@2 a1 a#1",
  O: "a2@3 a2 a1@2 e2 f#2", P: "g2!6 d2 f#2", Q: "g2!3 d2 g2!2 e2 d2", R: "a1@3 e1 e2 e2@2 e2", S: "d2@3 a1!3 e1 f#1",
  T: "a1 a1@2 e1 e2@3 e2", U: "d2@3 d2 a2!2 g2 e2", V: "a1@6 a1@2 e2@5 ~ e2@2",
  W: "d2@6 a1@4 a1 ~ e1@2 f#1@2, ~@11 a1@2 ~@3", X: "d2@6 a1@2 ~@2 a1 e1 e1@2 f#1@2",
  Y: "d2@6 e2 f#2 a2@2 a2 a2@3 a1@2", Z: "d2@3 a1 a2!2 g2 e2", AA: "d2@3 e2 a2!4",
  AB: "g1@2 g1@2 g1 ~ g1@4 g1@2 a1@2 b1@2", AC: "d2@2 d2@2 d2 ~ d2@4 d2@2 d2@2 a1@2",
  AD: "d2@2 d2@2 d2 ~ d2@4 d2@2 d2@2 d2@2", AE: "g2!7 e2", AF: "d2!7 f#2",
  AG: "a2 ~ a2 ~ a2 ~ a2 ~ a2@2 a2@2 a2@2 a2@2", AH: "b2 a2!7", AI: "a1@3 e1 e2@3 f#2", AJ: "a1@3 e1 e1@3 e1",
  AK: "d2@6 a1@2 a2 ~ a2!2 g2@2 e2@2", AL: "d2@6 e2@2 a2!4 a2@4", AM: "[d2@4 ~@3 e2@2 a1@84 ~@3]/6",
})).s("gm_electric_bass_pick").gain(0.42)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@12 B ~@19 A ~@41 C ~@10>".pickRestart({
  A: "~@6 x!2", B: "~@3 x", C: "~@15 x",
})).gain(0.75)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@8 A B C D C B ~@2 A B C D C B ~@2 A B A E A B F ~@10 C B C D C B ~@10 A B A E A B F ~@6 A C ~@19 A B C B C B ~@6 A G
  C H ~@6
>`.pickRestart({
  A: "~ x!7", B: "x!7 ~", C: "x!8", D: "x!5 ~ x ~", E: "~ x!4 ~@3", F: "~ x!6 ~", G: "x!3 ~ x ~ x ~", H: "~ x ~@6",
})).gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@3 B ~@15 C ~@3 D ~@4 B ~ E ~@5 F ~@3 E ~@11 C ~@3 D ~@4 G ~@5 E ~ C ~@7 A ~@5 E ~@2 B ~@11 H ~@10
>`.pickRestart({
  A: "~@12 x!4", B: "~@12 x ~ x!2", C: "~@14 x!2", D: "~@5 x ~@2", E: "~@7 x", F: "~@10 x!2 ~@4", G: "~@10 x ~@3 x!2",
  H: "~@10 x!2 ~@2 x ~",
})).gain(0.75)

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

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@3 A ~@15 B ~@8 A ~@7 A ~@15 B ~@16 B ~@7 C ~@8 A ~@22>".pickRestart({
  A: "~@5 x ~@2", B: "~@12 x!2 ~@2", C: "~@10 x!2 ~@4",
})).gain(0.75)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@3 A B@2 C D ~@8 E@11 F E@3 C D E@8 ~@8 E@11 F E@3 C D E@8 G@17 E@11 H G@3 I ~@6
>`.pickRestart({
  A: "~@9 x!7", B: "x!3 ~ x!3 ~", C: "x!8", D: "x!7 ~", E: "~ x ~ x", F: "~@2 x ~ x!4", G: "x!16",
  H: "x ~ x ~ x ~ x ~ x!8", I: "x!6 ~ x!3 ~@6",
})).gain(0.53)

stack(
  electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, bass, kick, snare, low_tom, pedal_hat, mid_tom,
  open_hat, high_tom, crash, tambourine
)

More by Gin Blossoms