Strudelify

Tubinga

Battisti

KeyC majorTempo130 bpm
0:00/0:00
// Tubinga — Battisti
// 130 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic guitar steel · "Chit"
const acoustic_guitar_steel = note(`<
  A B A B A B A B C D C D C D C D E F E G E F E G E F E G H I@3 E F E G E F E G E F E G E F E G E F E G J@2 K@2 L@2 K@2
  M N E F E G E F E G E F E G E F E G H I O@8 P@2 Q R Q G E F E G E F E G E F E G E F E G E F E G E F E G E F E G E F E
  G E F E G E F E G E F E G E F E G E F E G E F E G E F E G ~@3
>`.pickRestart({
  A: "~ [a3,c4,f4] [a3,c4,e4]@2", B: "[g3,b3,d4]@3 [g3,a3,d4] ~@4", C: "~@2 a3!2 ~ c4 c4@2 e4 e4@2 g4@3 b4 d5",
  D: "f#5@2 a3!2 ~ c4 c4@2 e4 e4@2 g4@3 b4 d5", E: "~@2 [a3,c4,f4] ~ [g3,c4,e4]@2 ~@2",
  F: "~@2 [d4,g4,b4]@2 [e4,f4,a4,c5]@3 [d4,g4,b4] ~@2 [g4,c#5,f5] [g4,d5] [g4,d5,f5] [g4,d5,f5]@3", // G Fmaj7 G Gm7b5 G5 G7
  G: "~@2 [d4,g4,b4]@2 [e4,f4,a4,c5]@3 [d4,g4,b4] ~@2 [c4,f4,a4]@2 ~@4", // G Fmaj7 G F
  H: "~@2 a3@2 ~@2 [a3,c4]@2 [c4,e4]@3 [c4,g4]@3 [d4,b4]@2", // Am C C5 G
  I: "f#4@2 a3@2 ~@2 [a3,c4]@2 [c4,e4]@3 [c4,g4]@3 [d4,b4]@2", J: "[a4,c5,e5]/2", K: "[c4,e4,a4]/2", L: "[a4,c5,f5]/2",
  M: "[a4,b4,d5]", N: "[a4,c5,e5]", O: "~@2 [d#4,f4,g#4]@2 ~ [d#4,f4,g#4]@2 ~ [d#4,f4,g#4]@3 [d#4,f4,g#4] ~@4",
  P: "[a4,d5,e5,a5]/2", Q: "[d4,g4,b4]", R: "~@2 [d4,g4,b4]@2 [e4,f4,a4,c5]@3 [d4,g4,b4] ~@8",
})).s("gm_acoustic_guitar_steel").gain(0.23).pan(0.4)

// bass · electric bass finger · "Basso"
const bass = note(`<
  ~@4 A B A B C@8 D E D E D E D E D E D E C@4 D E D E D E D E D E D E D E D E D E D E C@10 D E D E D E D E D E D E D E D
  E C@2 F@8 C@2 D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E
  D E D E D E D E D E D G H I J
>`.pickRestart({
  A: "f3@5 g2@2 e3 c3@5 g2@2 b2", B: "g2 ~", C: "a2@4 a2@4 a2@3 e2 ~ e2 g2@2", D: "f2@4 f2@4 c3@3 c3@2 g2 b2@2",
  E: "g2@4 g2@4 g2@3 g2 d2@2 e2@2", F: "a#2@4 a#2@4 a#2@3 f2 ~ f2 g#2@2", G: "g2@4 g2@4 g2@3 g2 d3@2 e3@2",
  H: "f3@5 g2 e3@2 c3@5 g2 b2@2", I: "g2", J: "f3@5 g2 e3@2 ~@8",
})).s("gm_electric_bass_finger").gain(0.61)

// drums · kick
const kick = s("bd").struct("<[x!8]!156 [x ~ x ~ x!2 ~ x ~@8]>").gain(0.08)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!156 [~ x ~@2]>").gain(0.08)

// drums · mid tom
const mid_tom = s("mt").struct("<[x!2 ~ x!3 ~ x]!156 [x ~ x ~@2 x ~ x ~@8]>").gain(0.08)

// drums · high tom
const high_tom = s("ht").struct("<[~ x ~ x]!156 [~ x ~@2]>").gain(0.08)

// drums · ride bell
const ride_bell = s("rd").struct("<[~ x ~ x]!156 [~ x ~@2]>").gain(0.08)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<[~ x ~ x]!156 [~ x ~@2]>").gain(0.99)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<[~@10 x!5 ~]!156 ~>").gain(0.12)

stack(acoustic_guitar_steel, bass, kick, snare, mid_tom, high_tom, ride_bell, vibraslap, woodblocks)

More by Battisti