Strudelify
Santeria cover art

Santeria

Sublime

KeyE majorTempo150 bpm
0:00/0:00
// Santeria — Sublime
// 150.3 bpm, 4/4, key E 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: duplicate parts dropped: ch 2 "guitar 2" electric guitar jazz (copy of ch 1 "guitar 1" electric guitar jazz); ch 2 "guitar 2" acoustic guitar steel (copy of ch 1 "guitar 1" acoustic guitar steel); ch 5 "guitar 4" acoustic guitar steel (copy of ch 4 "guitar 3" acoustic guitar steel); ch 6 "guitar 5" acoustic guitar steel (copy of ch 4 "guitar 3" acoustic guitar steel, 0.125 beats late); ch 8 "vocals 2" distortion guitar (copy of ch 7 "vocals 1" distortion guitar)
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150.3/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.

// other · electric guitar jazz · "guitar 1"
const electric_guitar_jazz = note("<A@8 ~@127>".pickRestart({
  A: "[~@12 e3@4 b3@2 e4@4 b3@2 e3@4 e3@4 b3@2 ~ e4@4 b3@2 e3@4 ~@4 d#3@2 d#4@4 c4@2 g#3@4 g#3@4 ~@3 d#4@6 c#3@4 c#3@4 g#3@2 c#4@4 b3@2 g#3@2 e4@6 ~ g#3@4 b3@4 e3@4 d#3@6 f#4@4 d#4@2 b3@4 ~, ~@12 e2@32 ~ g#2@20 g#2@17 ~@46]/8",
})).s("gm_electric_guitar_jazz").gain(0.64)

// chords · acoustic guitar steel · "guitar 1"
const acoustic_guitar_steel = note(`<
  ~@9 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D E@3 F G@3 F G@3 F H@4 A B@2 C@2 D@2 A@2 B@2 C@2 D E@3 F G@3 F G@3 F H@4 A B@2 C@2
  D@2 A@2 B@2 C@2 D E@3 F G@3 F G@3 F H@4 A B@2 C@2 D@2 A@2 B@2 C@2 D E@3 F G@3 F G@3 F I@3 J K L M@3
>`.pickRestart({
  A: "~@4 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@3", B: "~@4 [c4,d#4,g#4] ~@7 [c4,d#4,g#4] ~@3",
  C: "~@4 [c#4,e4,g#4] ~@7 [c#4,e4,g#4] ~@3", D: "~@4 [d#4,f#4,b4] ~@7 [d#4,f#4,b4] ~@3",
  E: "[~@4 [d#4,f#4,b4] ~@7 [d#4,f#4,b4] ~ a4@6 e4@4 c#4@6 b4@6 f#4@4 d#4@4 d#4@4]/3", F: "e3@2 g#4 ~ d#3@2 f#4 ~",
  G: "[c#3@3 [c#4,e4,g#4]@4 a4@3 e4@2 c#4@3 b4@3 f#4@2 d#4@2 d#4@2]/3", // C#m
  H: "[c#3@6 [c#4,e4,g#4]@8 a4@6 e4@4 c#4@6 b4@6 f#4@4 d#4@12 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@3]/4", // C#m E
  I: "[c#3@3 [c#4,e4,g#4]@4 a4@3 e4@2 c#4@3 b4@3 f#4@2 d#4@4]/3", J: "[e3,b3,e4,g#4] [d#3,a#3,d#4,f#4]",
  K: "[c#3,g#3,c#4,e4] [b2,f#3,b3,d#4]", L: "[a2,e3,a3,c#4] [b2,f#3,b3,d#4]", M: "[~ [e2,b2,e3,g#3,d4,e4]@18 ~@5]/3",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@4 A@5 B C D@2 E F G@2 B C D@2 E F H@2 I J K L@2 J K L@2 J K L@2 J B C D@2 E F G@2 B C D@2 E F H@2 I J K L@2 J K L@2
  J K L@2 J B C D@2 E F G@2 B C D@2 E F H@2 I J K L@2 J K M I J K L@2 J B C D@2 E F G@2 B C D@2 E F H@2 I J K L@2 J K
  L@2 J K L@2 J N O P Q@3
>`.pickRestart({
  A: "[~@10 c#2@2 ~@2 c#2@29 e2@4 d#2@16 b1@7 ~ e1 b1@3 c#2 e2@3 f#2]/5", B: "e2@3 e2 ~@4 b1@3 c#2 e2@2 ~@2",
  C: "e2@3 e2 ~@3 e2 b2@4 b2@4", D: "g#2@3 g#2 ~@4 d#2@3 f2 g#2@2 ~@2", E: "c#2@2 ~@5 g#1 c#2@2 ~@5 g#1",
  F: "c#2@2 ~@5 g#1 c#2@4 c2@4", G: "[b1@4 b1@4 b1@3 b1@4 b1@4 b1@4 e1 b1@3 c#2 e2@3 f#2]/2",
  H: "[b1@4 b1@4 b1@3 b1@4 b1@4 b1@4 b1@4 b1@3 b1@2]/2", I: "a1@4 e2@3 e2 e2@3 e2 e2@3 e2",
  J: "b1@4 f#2@3 f#2 f#2@3 f#2 f#2@3 f#2", K: "e2@3 e2 d#2@4", L: "[c#2@4 g#1@6 g#1@4 a1@6 e2@3 e2 e2@3 e2 e2@3 e2]/2",
  M: "c#2@2 g#1@3 g#1@2 a1", N: "e2 d#2", O: "c#2 b1", P: "a1 b1", Q: "[~ [e1,e2]@18 ~@5]/3",
})).s("gm_electric_bass_finger").gain(0.8)

// other · acoustic guitar steel · "guitar 3"
const acoustic_guitar_steel_2 = note("<~@69 A B C D E@2 F@2 G@2 H@2 I@2 J@2 ~@50>".pickRestart({
  A: "e3@7 f#3 g#3@3 b3 c#4@3 e4", B: "~ g#4 f#4 e4", C: "d#4@8 d#4@3 c#4@4 e4", D: "d#4",
  E: "[c#4@4 c#4@2 b3 g#3 b3@3 g#3 f#3@3 g#3@4 g#3 f#3 g#3 f#3@2 e3@3 d#3 c#3@3 d#3]/2",
  F: "[e3@3 f#3 g#3@3 f#3 e3@4 c#3@3 b2@16 g#4]/2",
  G: "[g#4@4 f#4@4 e4@3 e4 c#4@3 e4@4 e4 f#4@3 f#4 g#4@3 g#4 f#4@4]/2", H: "[g#3 c4 g#3 c4@5]/2",
  I: "g#4@8 c#5@3 f#4@2 e4@3", J: "[g#4@4 f#4@11 b4@5 b4@2 c#5@4 b4@2 g#4@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~@9 x!7 [x ~@2 x] x!112 [x!2]!3 [~ x ~@6] ~ [~@3 x ~@12]>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@9 A@7 B A@7 B A@13 C A@15 B A@13 C A@15 C A@13 C A@7 B A@7 B A@14 ~@5 D>".pickRestart({
  A: "~ x", B: "~@8 x ~@2 x ~@4", C: "~@8 x!2 ~@6", D: "~ x ~@6",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@13 B ~@15 B ~@13 B ~@15 C ~@13 B ~@7 B ~@7 D ~@20>".pickRestart({
  A: "~@14 x!2", B: "~@7 x", C: "~@3 x", D: "~@15 x",
})).gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@9 A@7 B A@7 C A@47 D A@3 D A@3 D A@3 B A@44 ~@6>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@3", C: "x ~@2 x!2 ~@2 x!2 ~@7",
  D: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@15 B ~@13 C ~@15 D ~@13 C ~@15 E ~@13 C ~@7 B ~@7 F ~@20>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@13 x!2 ~", C: "~@11 x ~@2 x ~", D: "~@6 x!2", E: "~@12 x ~ x!2", F: "~@7 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@72 [~@15 x] ~@3 [~@15 x] ~@3 [~@15 x] ~@54>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@15 B ~@13 C ~@15 D ~@13 C ~@29 C ~@15 E ~@20>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@13 x ~@2", C: "~@11 x ~@4", D: "~@3 x", E: "~@12 x!2 ~@2",
})).gain(0.64)

// drums · splash
const splash = s("cr").struct("<~@9 A ~@6 B ~@8 A@2 ~@28 A ~@29 A ~@13 A ~@15 A ~@13 C@3 D ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "x!2", D: "~@2 x!3 ~@11",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@98 [~@15 x] ~@36>").gain(1.68)

stack(
  electric_guitar_jazz, acoustic_guitar_steel, bass, acoustic_guitar_steel_2, kick, snare, low_tom, pedal_hat, mid_tom,
  open_hat, high_tom, splash, bongos
)

More by Sublime