Strudelify

The Mighty Turtle Head

Joe Satriani

KeyB majorTempo135 bpm
0:00/0:00
// The Mighty Turtle Head — Joe Satriani
// 134.5 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Bass 2" electric bass finger (copy of ch 1 "Bass 1" acoustic bass)
// note: Full arrangement: all 172 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(134.5/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.

// bass · acoustic bass · "Bass 1"
const bass = note(`<
  ~@6 A@8 B@3 C D@12 E@3 F G H I J K L M N O P Q@3 R@12 S@2 T@2 U V W X Y Z AA AB@8 AC@16 AD AE@7 AF AG@8 AH@4 AI@8 E@3
  F AA AJ AK AL AM AN AO AP AA AJ AK AL AM AN AO AP AA AJ AK AL AM AN AO AP AA AJ AK AL AM AN AO AP AQ AR AQ AR AQ AR AQ
  AR ~@4 AS
>`.pickRestart({
  A: "[~@14 g1@4 f#1@4 e1@4 e2@4 c#2@4 e2@2 f#2 [f#2,g2] e2@2 f#2@2 e2@2 c#2@2 e1@4 f1@4 f#1@4 g1@4 g#1@4 b1@2 c#2 [c#2,d2] b1@2 c#2@2 b1@2 g#1@2 g1@4 f#1@2 ~@2 e1@4 e2@4 c#2@4 e2@2 f#2 [f#2,g2] e2@2 f#2@2 e2@2 c#2@2 e1@4 f1@4 f#1@4 g1@4 g#1@2]/8", // Gmaj7 Dmaj7 Gmaj7
  B: "[~@2 b1@2 c#2 [c#2,d2] b1@2 c#2@2 b1@2 g#1@2 g1@4 f#1@4 e1@8 c#2@4 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2]/3", // Dmaj7
  C: "c#2@2 c#2!6 c#2@2 b1@6",
  D: "[c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 b1@4 b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 f#1@4 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 e1@4 e1@2 e1@2 e1@2 e1!2 e1@4 e1@2]/4",
  E: "[c#2@2 c#2@2 c#2@2 c#2@2 c#2!3 ~ c#2@2 b1@4 b1!2 b1@2 b1!2 b1@2 b1@2 b1@2 f#1@4 f#1@4 f#1!2 f#1@2 f#1!2 f#1@2 f#1@2]/3",
  F: "f#1!5 ~ f#1!2", G: "a1@2 a1!2 a1@2 a1@2 a1@2 a1!2 a1@2 a1!2", H: "e1@2 e1!2 ~@2 e1@2 e1!4 g1@2 g#1@2",
  I: "b1!4 b1@2 b1@2 b1!4 b1@2 b1@2", J: "f#1@2 f#1@4 f#1@2 f#1!6 f#1@2", K: "a1@2 a1!2 a1@2 a1@2 a1!4 a1@2 a1!2",
  L: "e1@2 b1@2 e2@2 e2@3 e1 e1@2 e1@4", M: "b1@2 b1@2 b1@2 b1@3 b1!3 b1@2 f#1@2",
  N: "b1!2 b1@2 b1@2 b1@2 b1!2 b1@2 b1@2 f#1@2", O: "a1!4 a1@2 a1@2 a1!2 a1@2 b1@2 e1@2",
  P: "a1!2 a1@2 a1@2 a1@2 a1@2 a1!2 a1@2 c#2!2",
  Q: "[c#2!2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@2 c#2!2]/3",
  R: "[c#2!2 c#2@2 c#2@2 c#2@2 c#2!2 c#2@2 c#2@2 b1@4 b1!2 b1@2 b1@2 b1@2 b1@2 b1@2 f#1@4 f#1!2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 e1@4 e2@2 e2@2 e1@4 e1@2 e1@2 c#2!2]/4",
  S: "[c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 b1@4 b1!2 b1@2 b1!5 ~ b1@2 e1@2]/2", T: "f#1!8",
  U: "a1@2 a1!2 a1@2 a1@2 a1!4 a1@2 a1@2", V: "e1@2 e1!2 ~@2 e1@2 e1!2 e1@2 g1@2 g#1@2",
  W: "b1!2 b1@4 b1!4 b1@2 f#2@2 f#2@2", X: "f#1!2 f#1@4 f#1@2 f#1!2 f#1@2 f#1!2 f#1@2",
  Y: "a1@2 a1 a1@3 a1@2 a1!2 a1@2 a1@4", Z: "e1@2 e1 e1@3 e1@2 e1!4 e1@2 e1!2", AA: "b1!7 f#1",
  AB: "[b1!4 b1@2 b1!2 b1@2 b1@2 b1@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 b1]/8",
  AC: "[~@2 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 e1@3 f1@2 f#1@2 e1@2 f1@2 f#1@2 ~@3 b1@3 c2@2 c#2@2 b1@2 c2@2 c#2@2 ~@3 b1]/8",
  AD: "~ c2 c#2 b1 c2 c#2 g2@2", AE: "b1!16", AF: "b1!12 c#2@4",
  AG: "[~@14 e1@4 f1@4 f#1@4 g1@4 g#1@4 b1@2 c#2 [c#2,d2] b1@2 c#2@2 b1@2 g#1@2 g1@4 f#1@4 e1@4 e2@4 c#2@4 e2@2 f#2 [f#2,g2] e2@2 f#2@2 e2@2 c#2@2 e1@4 f1@4 f#1@4 g1@4 g#1@4 b1@2 c#2 [c#2,d2] b1@2 c#2@2 c#2@2 g#1@2 g1@4 f#1@4 e1@8 c#2@2]/8", // Dmaj7 Gmaj7 Dmaj7
  AH: "[~ c#2!6 b1@2 b1!6 f#1@2 f#1!6 g#1@2 g#1!6 c#2]/4", AI: "[c#2!7 b1@2 b1!6 f#1@2 f#1!6 g#1@2 g#1!6 c#2]/4",
  AJ: "b1!4 b1@2 b1!4 b1@2 b1@2 b1!2", AK: "f#1@2 f#1!2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 e1@2",
  AL: "f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1!2 f#1@2 f#1@2", AM: "b1!4 b1@2 b1!6 b1@2 f#1@2",
  AN: "b1@2 b1 b1@3 b1!2 b1@2 b1@2 b1@2 b1@2", AO: "a1!8", AP: "f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1!4 f#1@2",
  AQ: "~@2 b1!6 f#2@2 b1 f2@2 b1 e2@2", AR: "~@2 b1!6 d2@2 e2@2 ~ d2 b1@2, ~@10 b1 ~@5",
  AS: "~@2 b1!6 d2@2 b1 e2@2 d2 b1@2",
})).s("gm_acoustic_bass").gain(0.36)

// other · distortion guitar · "E. Guitar"
const distortion_guitar = note("<~@79 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D C E C D C E ~@69>".pickRestart({
  A: "e2 f2 f#2 e2 f2 f#2 ~@2", B: "b2 c3 c#3 b2 c3 c#3 ~@2", C: "[b2,a3,d4]", D: "[b2,a#3,d4]", E: "[b2,g#3,d4]",
})).s("gm_distortion_guitar").gain(0.3).pan(0.3)

// chords · synth strings 2 · "Synth"
const synth_strings_2 = note("<~@139 A@2 B C A@2 C@2 A@2 B C A@2 C@2 A@2 B C D@8 ~@5>".pickRestart({
  A: "[b4,d#5,f#5]", B: "[a4,c#5,e5]", C: "[f#4,a#4,c#5]", D: "[b4,d#5,f#5]/8",
})).s("gm_synth_strings_2").gain(0.15)

// chords · synth strings 2 · "Synth" · soft notes
const synth_strings_2_soft = note("<~@128 A B@2 A@2 C B A@2 B@2 ~@33>".pickRestart({
  A: "[b4,d#5,f#5]", B: "[f#4,a#4,c#5]", C: "[a4,c#5,e5]",
})).s("gm_synth_strings_2").gain(0.05)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C B C B C B C ~ D E D@17 F D F D F D F D F D F@2 D@17 F D F D F D F D F D F D F D F@2 D F D F D F D F D F D F
  D F D@8 G C B C B C B C ~ D@48 ~@13
>`.pickRestart({
  A: "~@5 x ~@2", B: "x!4", C: "x", D: "x ~@3 x!2 ~@2", E: "x ~@3 x!3 ~", F: "x ~@3 x!2 ~ x", G: "x!2 ~ x!2 ~@3",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A ~@8 B C D C@19 E C@3 E C@3 E@2 C@19 E C@3 E C@3 E C@3 E@2 C@22 F ~@7 B C@48 ~@13
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x!5", C: "~ x ~ x", D: "~@2 x ~ x!4", E: "~@4 x ~@7 x!2 ~@2", F: "~@4 x ~@5 x!6",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@159 A B A B C B A B ~@4 A>".pickRestart({
  A: "~@2 x!7 ~ x!2 ~ x!2 ~", B: "~@2 x!7 ~ x ~@2 x!2 ~", C: "~@2 x!7 ~@2 x ~ x!2 ~",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B C@16 A@3 D A@3 D A@3 D@2 C@16 A@3 D A@3 D A@3 D A@3 D@2 A@22 E ~@8 C@48 ~@13
>`.pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "x", D: "x!6 ~@2", E: "x!5 ~@3",
})).gain(0.43)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A B A B A B A B ~@2 C ~@19 D ~@3 D ~@3 D@2 ~@19 D ~@3 D ~@3 D ~@3 D@2 ~@23 B A B A B A B ~@62
>`.pickRestart({
  A: "x!4", B: "x", C: "~@4 x!3 ~", D: "~@7 x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@32 A ~ A ~@3 A ~@3 A ~@18 A ~ A ~@3 A ~@3 A ~@3 A ~@4 A ~@91>".pickRestart({
  A: "x",
})).gain(0.57)

// drums · ride
const ride = s("rd").struct("<~@18 [x ~ x!6]!16 ~@13 [x ~ x!6]!16 ~@48 [x ~ x!6]!48 ~@13>").gain(0.57)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@18 [~ x ~@6]!16 ~@13 [~ x ~@6]!16 ~@48 [~ x ~@6]!48 ~@13>").gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<~@18 [~ x ~ x]!16 ~@13 [~ x ~ x]!16 ~@48 [~ x ~ x]!48 ~@13>").gain(0.64)

// drums · cowbell
const cowbell = s("cb").struct("<[x!4]!16 ~@87 [x!4]!8 ~@61>").gain(0.5)

stack(
  bass, distortion_guitar, synth_strings_2, synth_strings_2_soft, kick, snare, snare_soft, hihat, open_hat, crash, ride,
  ride_soft, tambourine, cowbell
)

More by Joe Satriani