Strudelify
Shock in my town cover art

Gommalacca

Shock in my town

Battiato

KeyA minorTempo84 bpm
0:00/0:00
// Shock in my town — Battiato
// 84 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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 · synth bass 1 · "SHOCKINM"
const synth_bass_1 = note("<A@44 B C B C B C ~@4 A@12 B C B C B C B C A@11 ~>".pickRestart({
  A: "[a2,e3]@7 ~ [f2,c3]@7 ~", B: "[a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]",
  C: "[g3,c4] ~ [g3,c4]!2 ~ [g3,c4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2", // C5 Bm
})).s("gm_synth_bass_1").gain(0.23)

// chords · synth bass 1 · "SHOCKINM"
const synth_bass_1_2 = note("<A@27 B C A@13 B C D E D E D E F@4 A@12 D E D E D E D E F@8 A B C ~>".pickRestart({
  A: "~@2 [a3,e4]!6 ~@2 [c4,f4]!6", // A5 F5
  B: "a5 ~ [a3,e4,a5] [a3,e4] [a3,e4,a5] [a3,e4] [a3,e4,a5] [a3,e4] f5 ~ [c4,f4,f5] [c4,f4] [c4,f4,f5] [c4,f4] [c4,f4,f5] [c4,f4]", // A5 F5
  C: "c6 ~ [a3,e4,c6] [a3,e4] [a3,e4,c6] [a3,e4] [a3,e4,c6] [a3,e4] a5 ~ [c4,f4,a5] [c4,f4] [c4,f4,a5] [c4,f4] [c4,f4,a5] [c4,f4]", // Am A5 Am A5 Am A5 F F5 …
  D: "d5 a4 d5 a4 d5 a4 d5 a4 d5 a4 d5 a4 d5 a4 d5 a4", E: "e5 g4 e5 g4 e5 g4 e5 g4 d5 g4 d5 g4 d5 g4 d5 g4",
  F: "e3!8 f3!8",
})).s("gm_synth_bass_1").gain(0.08)

// chords · lead 2 sawtooth · "SHOCKINM"
const lead_2_sawtooth = note(`<
  ~@8 A ~ B C D E ~@2 A ~ F B C D G B C D ~ H I ~@2 A ~ F B C D G B C D ~ H I J K J L J K M@2 N@2 ~@2 A ~ F B C D G B C
  D J K J L J K J L M@2 N@2 M@2 O@2 ~ H I P
>`.pickRestart({
  A: "[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [f4,c5] ~ [f4,c5] ~ [f4,c5] ~ [f4,c5] ~", // A5 F5
  B: "a4@2 b4 ~ g4 ~ c5 ~ f4 ~@3 d5 ~ c5 ~", C: "a4@2 b4 ~ g4 ~ c5 ~ f4 ~@3 b4 ~@3",
  D: "a4@2 b4@2 g4@2 c5@2 f4 ~@3 b4 ~@3", E: "a4 ~ b4 ~ g4@2 c5@2 f4@2 ~@2 d5@2 c5 ~",
  F: "[c5,e5] ~ [c5,e5] ~ [c5,e5] ~ [c5,e5] ~ [c5,f5] ~ [c5,f5] ~ [c5,f5] ~ [c5,f5] ~", // C F5
  G: "[a4,e5] ~ [a4,b4,e5] ~ [a4,e5] ~ [a4,e5] ~ f4@2 [f4,c5] ~ [f4,c5] ~ [f4,c5] ~, ~@4 g4@2 c5@2 c5 ~@3 d5@2 ~@2", // A5 Asus2 A5 F5
  H: "a4 ~ a4 ~ a4 ~ a4 ~ f4 ~ f4 ~ f4 ~ f4 ~", I: "c5 ~ c5 ~ c5 ~ c5 ~ a4 ~ a4 ~ a4 ~ a4 ~",
  J: "[a4,a5]!16, [a3,d4,f#4]@15 ~", K: "[g4,g5]!16, g3@15 ~, [c4,e4]@7 ~ [b3,d4]@7 ~",
  L: "[g4,g5]!16, g3, [c4,e4]@7 ~ [b3,d4]@8", M: "[e4@8 d4@8 e4@7 ~ d4@7 ~, a3@31 ~]/2",
  N: "[e4@8 d4@8 e4@8 d4@7 ~, a3@31 ~]/2", O: "[e4@8 ~@8 e4@8 d4@7 ~, a3@31 ~, ~ d4@2 ~]/2", P: "[a4,b4,e5] ~@3",
})).s("gm_lead_2_sawtooth").gain(0.18)

// bass · slap bass 1 · "SHOCKINM"
const bass = note(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B C@3 A B A B A B A B A B A B C@3 ~@6 D E F G A B A B A B A B A B A B ~@12 H
  I H I C@3 J
>`.pickRestart({
  A: "a0@7 ~@2 e1 f1 ~ f1@2 ~@2", B: "a0@7 ~@2 e2 f2 ~ f2@2 ~@2", C: "a1@2 g#1 [e1,f1,f#1,g1] [d1,d#1] ~@11", D: "a2",
  E: "a3@13 a1@3", F: "a1@3 ~ a0!2 ~ a0!2 ~ a0 e1 f1 ~ g1 f1", G: "g1 a1@3 ~@5 a1 e2 ~ f2@4",
  H: "a1 ~ a1!2 g1@2 a1@2 ~@8", I: "a1!4 g1@2 a1@2 ~@8", J: "a1@4 a0!2 ~@10",
})).s("gm_slap_bass_1").gain(0.48)

// bass · slap bass 1 · "SHOCKINM" · soft notes
const bass_soft = note(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B ~@3 A B A B A B A B A B A B ~@13 A B A B A B A B A B A B ~@19 C
>`.pickRestart({
  A: "a1 ~@10 e1 ~@4", B: "a1 ~@10 e2 ~@4", C: "~@6 a0!6 ~@4",
})).s("gm_slap_bass_1").gain(0.08)

// bass · electric bass finger · "SHOCKINM"
const bass_2 = note("<~@44 A B C D A B ~@16 A B C D A B C D E F@2 G ~@8>".pickRestart({
  A: "d2 ~ d2@3 a1 b1 d2@2 ~ d2@2 d2 d2@2 d2", B: "c2 ~ c2@2 ~ c2@2 c2 g1@2 g1@2 ~ g1@2 g1",
  C: "d2 ~ d2@3 a1 b1 d2@2 ~ d2@2 ~ d2@2 d2", D: "c2 ~ c2@3 c2 ~@2 g2 ~ g2!6", E: "a1 ~",
  F: "[~@14 g2 a2@13 ~@2 e3@2]/2", G: "a3@6 ~ c4 b3@4 ~@4",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · electric bass finger · "SHOCKINM" · soft notes
const bass_soft_2 = note("<~@46 A B ~@20 A B ~@2 A B ~ C ~ D ~@8>".pickRestart({
  A: "~@12 d2 ~@3", B: "~@7 c2 ~@8", C: "~@13 d2 ~@2",
  D: "~@6 b3 ~@5 [g#3,a3,a#3] [d3,d#3,e3,f3,f#3,g3] [g#2,a2,a#2,b2,c3,c#3] [e2,f2,f#2,g2]",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · synth drum · "SHOCKINM" · A5
const synth_drum = note(`<
  ~@26
  [a0 ~@3 [a0,e1] ~@3 a0 ~ a0 ~ [a0,e1] ~@3]!3
  ~@12
  [a0 ~@3 [a0,e1] ~@3 a0 ~ a0 ~ [a0,e1] ~@3]!3
  ~@38
  [a0 ~@3 [a0,e1] ~@3 a0 ~ a0 ~ [a0,e1] ~@3]!3
  ~
>`).s("gm_synth_drum").gain(0.19)

// other · string ensemble 2 · "SHOCKINM"
const string_ensemble_2 = note(`<
  A B C A B C A B C A B C A B C A B C A B C A B C A B ~@3 C A B C A B C A B C A B ~@3 D E D E D E ~@2 F G C A B C A B C
  A B C A B D E D E D E D E ~@2 F G H I H J ~@4
>`.pickRestart({
  A: "e2 f2", B: "a2 c3", C: "b2 a2", D: "d3 e3 f#3 g3", E: "c3 d3 b2 e3", F: "c4 d4 e4@2 f4@4", G: "e4@3 d4@4 ~",
  H: "b4@8 c5@4 e5@3 ~", I: "b4@8 a4@7 ~", J: "b4@7 ~ a4@8",
})).s("gm_string_ensemble_2").gain(0.19)

// chords · synth strings 1 · "SHOCKINM"
const synth_strings_1 = note(`<
  A@16 B@2 C@2 B@2 C@2 B@2 D@2 E C@2 B@2 C@2 F@2 B@2 A@2 D@2 E ~@6 G@4 B@2 A@2 B@2 A@6 ~@8 G@6 H@2 D@2 E I
>`.pickRestart({
  A: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a3,c4,a4,c5]]/2", // E F E F Am
  B: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [c4,a4,c5], a3@9 ~@7]/2", // E F E F
  C: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a3,a4,c5], c4@9 ~@7]/2", // E F E F Am
  D: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a3,c4,c5], a4 ~]/2", E: "[e3,e4] [f3,f4], [a3,c4,a4,c5]",
  F: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a4,c5], [a3,c4]@9 ~@7]/2", // E F E F Am
  G: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a1,a3,c4,a4,c5]]/2", // E F E F Am
  H: "[[e3,e4] [f3,f4] [e3,e4] [f3,f4], [a1,a3,c5], [c4,a4]@7 ~]/2", I: "[e3,a3,c4,e4,a4,c5] ~@3",
})).s("gm_synth_strings_1").gain(0.11)

// chords · overdriven guitar · "SHOCKINM" · A5 F5 A5 F5
const overdriven_guitar = note("<[~@2 [a3,e4]!6 ~@2 [c4,f4]!6]!44 ~@10 [~@2 [a3,e4]!6 ~@2 [c4,f4]!6]!12 ~@20>")
  .s("gm_overdriven_guitar").gain(0.03).pan(1)

// chords · distortion guitar · "SHOCKINM"
const distortion_guitar = note("<~@44 A B C D A B ~@16 A B C D A B C D E@2 F G H I J K L@3 ~>".pickRestart({
  A: "[d3,a3,d4]@2 [a3,d4] [d3,a3] [d3,a3,d4,f#4] ~ d3 [d3,a3,d4,f#4] ~ d3 [d3,a3,d4,f#4]@2 d3 [d3,a3,d4,f#4]@2 d3, f#4 ~@15", // D5 D
  B: "[c3,g3,c4,e4]@2 [g3,c4] c3 [c3,g3,c4,e4]@2 c3 [g2,d3,g3,d4] ~ g2 [g2,d3,g3,d4]@2 g2 [g2,d3,g3,d4] ~ [g2,d3]", // C C5 C G5
  C: "[d3,a3,d4,f#4]@2 [d3,a3,d4] d3 [d3,a3,d4,f#4]@2 d3 [d3,a3,d4,f#4] ~ d3 [d3,a3,d4,f#4]@2 d3 [d3,a3,d4,f#4]@2 d3", // D D5 D
  D: "[c3,g3,c4,e4]@2 [c3,g3,c4] c3 [c3,g3,c4,e4]@2 c3 [g2,d3,g3,d4]@2 g2 [d3,g3,d4] ~@3 [g2,d3,g3]!2, ~@11 g2@2 [g2,d4]@2 ~, ~@6 [d3,g3] ~", // C C5 C G5
  E: "[~@13 c4 g4 e4@7 ~@10]/2", F: "~@5 a3@2 c4 d4 ~ e4@4 d4 c4", G: "~ d4 c4 ~@6 g3@5 ~@2, ~@3 a3@12 ~",
  H: "~@9 [e3,a3] ~@2 a3 ~@3", I: "~@3 c4@6 b3 ~ a3 b3 c4 ~@2", J: "b3 ~ a3 ~@2 g3 ~ e3@4 ~@5",
  K: "~@3 e4 a4@6 g4 e4@4 ~", L: "~@2 [a3,e4]!6 ~@2 [c4,f4]!6",
})).s("gm_distortion_guitar").gain(0.22).pan(0.3)

// chords · distortion guitar · "SHOCKINM" · soft notes
const distortion_guitar_soft = note("<~@45 A ~@3 A ~@17 A ~@3 A ~@2 B C ~ D E F G ~@5>".pickRestart({
  A: "~@3 g3 ~@12", B: "~@13 a3 ~@2", C: "~@6 d4 [f3,g3,a3,b3,c4] [g2,a2,b2,c3,d3,e3] [c2,d2,e2,f2] ~@6",
  D: "a3@3 ~@13", E: "~@12 e3 ~ e3!2", F: "~@15 a3", G: "~ g3 ~@4 d3 ~@9",
})).s("gm_distortion_guitar").gain(0.1).pan(0.3)

// chords · bandoneon · "SHOCKINM"
const bandoneon = note("<A@44 ~@6 B C D B A@12 ~@8 B C D B@2 C D B A@3 ~>".pickRestart({
  A: "~ [e4,a4] ~ [e4,a4] ~@2 [e4,a4] ~@2 [c4,f4,a4] ~ [c4,f4,a4] ~@2 [c4,f4,a4] ~", // A5 F
  B: "~ [e4,a4] ~@2 [e4,a4] ~@2 [e4,a4] ~@2 [d4,a4] ~@2 [d4,a4] ~@2", // A5 D5
  C: "[d4,a4] ~@2 [e4,a4] ~@2 [e4,a4] ~@2 [d4,a4] ~@2 [d4,a4] ~@2 [d4,a4]", // D5 A5 D5
  D: "~@2 [e4,a4] ~@2 [e4,a4] ~@2 [e4,a4] ~@2 [d4,a4] ~@2 [d4,a4] ~", // A5 D5
})).s("gm_bandoneon").gain(0.09)

// chords · electric guitar clean · "SHOCKINM"
const electric_guitar_clean = note("<~@6 A@20 ~@3 A@12 ~@3 B C B C B C ~@4 A@12 B C B C B C B C ~@12>".pickRestart({
  A: "[a3,c4,e4]@2 [a3,c4,e4]!6 [c4,f4]@2 ~@5 c4, ~@8 a3@3 c4@2 c4@2 ~, ~@5 [c4,f4] [a3,f4]!2", B: "d3 e3 f#3 g3",
  C: "c3 d3 b2 e3",
})).s("gm_electric_guitar_clean").gain(0.06)

// drums · kick
const kick = s("bd").struct("<~@6 A@20 B@3 A@12 B@3 C@6 A@3 D A@12 C@8 A@6 E F B@3 G>".pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x ~@2 x!2 ~@3", E: "~ x", F: "x ~@7 x ~@6 x", G: "x",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@44 A B A B A@2 ~@16 A B A B A B A@2 C@8 ~@4>".pickRestart({
  A: "x ~ x ~@4 x!2 ~ x ~@5", B: "x ~ x ~@4 x!2 ~ x ~@4 x", C: "x ~@3 x!2 ~@2",
})).gain(0.48)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@6 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 A ~ A ~ A ~ A ~ A ~ A ~@10 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~
  A ~@5
>`.pickRestart({
  A: "~@15 x",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A@3 B A@3 B A@3 B A@3 B A@3 C D ~@2 A@3 B A@3 B A@3 C D ~@8 A@3 E A@3 B A@3 B A@3 C ~@8 A@6 F G D ~@3
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!6 ~@2", D: "x", E: "x ~ x ~ x ~ x ~@2 x!3 ~@4", F: "x ~ x!6",
  G: "x ~ x ~ x ~ x ~ x!2 ~@6",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@6 A@3 B A@3 B A@3 B A@3 B A@3 C ~@3 A@3 B A@3 B A@3 C ~@9 A@3 D A@3 B A@3 B A@3 C ~@8 A@6 E F ~@4
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", C: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
  D: "~ x ~@3 x ~ x ~ x ~@2 x ~@3", E: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", F: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@47 A ~@17 B ~@3 A ~ A ~@9 B ~@4>".pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 A ~@17 B ~@3 A ~ A ~@14>".pickRestart({
  A: "~@13 x ~@2", B: "~@7 x",
})).gain(0.48)

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

// drums · high tom
// … 42 more lines

More by Battiato