Strudelify

She's So High

Tal Bachman

KeyA majorTempo80 bpm
0:00/0:00
// She's So High — Tal Bachman
// 80 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// other · acoustic guitar steel · "Acoustic Guitar (Steel)"
const acoustic_guitar_steel = note(`<
  A B@3 A B@3 C@4 ~@11 D@3 A B@3 ~ E@2 ~@17 F@2 A B@3 A G@3 H@2 ~@10 I J@7 K@2
>`.pickRestart({
  A: "~ e4 a4 b4@2 a4@2 e4@2 a4@2 b4",
  B: "[~ c#5 b4 a4 ~ e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4 ~ e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4]/3",
  C: "[e4@2 e4@2 g#4@2 a4@4 g#4@4 a4@17 ~@3 e4@2 a4@2 b4@4 a4@4 e4@4 a4@4 b4@2 ~@2 c#5@2 b4@2 a4@2 e4@2 e4@2 g#4@2 a4@4 g#4@4 a4@17 ~]/4",
  D: "[~@5 e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4 ~ e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4]/3",
  E: "[~@5 e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4 ~@4]/2", F: "[~@9 e4 a4 b4@2 a4@2 e4@2 a4@2 b4 ~ c#5 b4 a4]/2",
  G: "[~@2 c#5@2 b4@2 a4@2 e4@2 e4@2 g#4@2 a4@4 g#4@4 a4@17 ~@3 e4@2 a4@2 b4@4 a4@4 e4@4 a4@4 b4@2 ~@2 c#5@2 b4@2 a4@2]/3",
  H: "[e4@2 e4@2 g#4@2 a4@4 g#4@4 a4@17 ~@17]/2", I: "~@9 e4 a4 b4", J: "[~ a4@2 e4@2 a4@79]/7",
  K: "[~@7 b4@2 ~@2 c#5@2 b4@3 a4@3 a4@23 ~@6]/2",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// chords · electric guitar clean · "Electric Guitar (Clean)"
const electric_guitar_clean = note(`<
  A B C D A B C D E@2 F@2 G H I J K L M N O P Q R S T U V W T X@2 Y@2 G H I J K L M N O P Q Z AA AB AC AD AE D A B C D A
  AF@2 D AG@2 AH N O P I J K L M N AI AJ ~@6 AK@2
>`.pickRestart({
  A: "a3!4 [f#3,a3]!4 [e3,a3]!3 [d3,a3]", B: "[d3,a3]!4 a3!4 [f#3,a3]!4", C: "[e3,a3]!3 [d3,a3]!5 a3!4",
  D: "[f#3,a3]!4 [e3,a3]!3 [d3,a3]!5", // F#m A5 D5
  E: "[e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~ a3@2 a3@2 a3@2 a3@2 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@2]/2", // E A5 E D5 F#m
  F: "[[e3,a3]@2 [e3,a3]@2 [e3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~]/2", // A5 D5 E A5 E D5
  G: "[c#3,e3]!8 [b2,e3,g#3]!4", H: "[b2,e3,g#3] [b2,e3,a3]@2 [b2,e3,g#3]@2 [b2,e3]!7", I: "[b2,f#3]!8 [a2,d3]!4",
  J: "[a2,d3]!4 [a2,e3]!8", K: "[b2,e3]!8 [b2,f#3]!4", L: "[b2,f#3]!4 [a2,d3]!8", M: "[a2,e3]!8 [b2,e3]!4",
  N: "[b2,e3]!4 [b2,f#3]!8", O: "[a2,d3]!8 [a2,e3]!4", P: "[a2,e3]!4 [b2,e3]!8",
  Q: "[b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [a2,d3]@3 ~ [a2,d3]@3 ~", // B5 D5
  R: "~@4 a3!4 [f#3,a3]!4", S: "[e3,a3]!3 [d3,a3]!5 [e3,a3]!4", T: "[c#3,f#3]!4 [b2,e3]!3 [a2,d3]!5",
  U: "[e3,a3]!4 [c#3,f#3]!4 [b2,e3]!3 [a2,d3]", V: "[a2,d3]!4 [e3,a3]!4 [c#3,f#3]!4",
  W: "[b2,e3]!3 [a2,d3]!5 [e3,a3]!4", // E5 D5 A5
  X: "[e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~ [e3,a3]@2 [e3,a3]@2 [e3,a3]@2 [e3,a3]@2 [c#3,f#3]@2 [c#3,f#3]@2 [c#3,f#3]@2 [c#3,f#3]@2]/2", // E A5 E D5 A5 F#5
  Y: "[[b2,e3]@2 [b2,e3]@2 [b2,e3]@2 [a2,d3]@2 [a2,d3]@2 [a2,d3]@2 [a2,d3]@2 [a2,d3]@2 e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~]/2", // E5 D5 E A5 E D5
  Z: "~@4 [a2,e3]!8", AA: "[g2,d3]!8 [f#2,d3]!4", AB: "[f#2,d3]!4 [f2,d3]!8", AC: "[a2,e3]!8 [g2,d3]!4",
  AD: "[g2,d3]!4 [f#2,d3]!8", AE: "[f2,d3]!8 [a2,e3,a3] a3!3",
  AF: "[[d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~ a3@2 a3@2 a3@2 a3@2]/2", // D5 E A5 E D5
  AG: "[e3@2 [e3,g#3]@2 [e3,g#3]@2 [e3,a3]@4 [e3,g#3]@4 [d3,a3]@17 ~ [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2 [c#3,e3]@2]/2", // E A5 E D5 C#m
  AH: "[b2,e3,g#3]!5 [b2,e3,a3]@2 [b2,e3,g#3]@2 [b2,e3]!3", AI: "[a2,d3]@3 ~ [a2,d3]@3 ~@9 a3@2 a3@2 a3@2 a3@2",
  AJ: "[f#3,a3]!4 [e3,a3]!2 ~@6", // F#m A5
  AK: "[~@4 [e3,a3]@2 ~ [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@3 [d3,a3]@3 [a3,c#4,e4]@23 ~@6]/2", // A5 D5 A
})).s("gm_electric_guitar_clean").gain(0.72)

// other · electric guitar jazz · "Electric Guitar (Jazz)"
const electric_guitar_jazz = note("<~@19 A@3 ~@5 B C@2 ~ B D@2 ~@7 A@3 ~ E@2 F@4 ~@17 G@2 H ~@11>".pickRestart({
  A: "[~@6 b4@4 c#5@4 b4@4 a4@4 b4@4 c#5@4 b4@4 a4@5 ~ e4@15 ~@17]/3", B: "~@12 c#5@3 ~ b4@2 a4@5 ~",
  C: "[g#4@3 ~ a4@3 ~ f#4@3 ~ g#4@6 e4@13 ~@17]/2", D: "[g#4@3 ~ a4@3 ~ f#4@3 ~ g#4@3 ~ e4@15 ~@17]/2",
  E: "[~@12 c#5@3 ~ c#5@2 b4@2 a4@2 g4@5 ~ c#5@3 ~ c#5@2 b4@2 a4@2 f#4@5 ~ c#5@3 ~]/2",
  F: "[c#5@2 b4@2 a4@2 f4@4 g4@4 a4@4 b4@4 c#5@12 a4@2 e5@2 d5@4 c#5@4 a4@4 b5@4 a5@12 e5@2 f#5@2 g5@4 f#5@4 e5@4 c#5@4 a4@9 ~]/4",
  G: "[~@14 b4@4 c#5@4 b4@4 a4@4 b4@4 c#5@4 b4@4 a4@5 ~]/2", H: "e4@5 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.72)

// bass · electric bass finger · "Electric Bass (Finger)"
const bass = note(`<
  ~@10 A@2 B C D E@2 F@2 G@2 H D ~ I J K L M J N@2 O P B C D E@2 F@2 G@2 H D Q R S T U V@2 ~@8 W@2 C X@2 H D E@2 F@2 Y@2
  ~@7 Z@2
>`.pickRestart({
  A: "[~@16 e2@2 b2@2 e3@2 a2@4 g#2@4 d2@17 ~]/2", B: "c#2!8 e2!4", C: "e2!12",
  D: "b1@3 ~ b1@3 ~ b1@2 c#2@4 d2@5 ~ d2@3 ~",
  E: "[d2@2 d2@4 a1@5 ~ a1@3 ~ a1@2 a1@4 e2@5 ~ e2@3 ~ e2@2 e2@5 ~ b1@3 ~ b1@3 ~]/2",
  F: "[b1@2 c#2@4 d2@5 ~ d2@3 ~ d2@2 d2@4 a1@5 ~ a1@3 ~ a1@2 a1@4 e2@5 ~ e2@3 ~]/2",
  G: "[e2@2 e2@5 ~ b1@3 ~ b1@3 ~ b1@2 c#2@4 d2@5 ~ d2@3 ~ d2@2 d2@4 a1@5 ~ a1@3 ~]/2",
  H: "a1@2 a1@4 e2@5 ~ e2@3 ~ e2@2 e2@5 ~", I: "~@8 a2!4", J: "f#2!4 e2!3 d2!5", K: "a2!4 f#2!4 e2!3 d2",
  L: "d2!4 a2!4 f#2!4", M: "e2!3 d2!5 a2!4",
  N: "[e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@17 ~ a2@2 a2@2 a2@2 a2@2 f#2@2 f#2@2 f#2@2 f#2@2]/2", O: "e2!3 d2!5 e2!4",
  P: "e2!3 d2!9", Q: "~@4 a1!8", R: "g1!8 d2!4", S: "d2!4 f1!8", T: "a1!8 g1!4", U: "g1!4 d2!8",
  V: "[f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 a1@15 ~@17]/2",
  W: "[e2@2 b2@2 e3@2 a2@4 g#2@4 d2@17 ~ c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2]/2",
  X: "[e2@2 e2@2 e2@2 e2@2 b1@3 ~ b1@3 ~ b1@2 c#2@4 d2@5 ~ d2@3 ~ d2@2 d2@4 a1@5 ~ a1@3 ~]/2",
  Y: "[e2@2 e2@5 ~ b1@3 ~ b1@3 ~ b1@2 c#2@4 d2@5 ~ d2@3 ~@17]/2", Z: "[~@13 e2@5 ~ a2@23 ~@6]/2",
})).s("gm_electric_bass_finger").gain(0.72)

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

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

// drums · crash
const crash = s("cr").struct("<~@22 A ~@21 A ~@5 B ~@21 C ~@7 D ~>".pickRestart({
  A: "~@5 x", B: "~@2 x", C: "~ x ~@4", D: "~@19 x ~@4",
})).gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<~@14 A@8 B ~ C A@5 D E A@12 B F A@4 B ~@12 F A@8 ~@10>".pickRestart({
  A: "x!12", B: "x!8 ~@4", C: "~@5 x!7", D: "x!9 ~ x ~", E: "x ~ x ~ x!8", F: "~@4 x!8",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@8 A ~ B C ~@45 D ~ E A ~@21>".pickRestart({
  A: "x!4 ~ x ~ x ~@4", B: "~@14 x!3 ~ x ~ x ~ x ~", C: "~ x ~ x ~@8", D: "~@4 x!4 ~ x ~ x", E: "~@22 x!2",
})).gain(0.72)

stack(acoustic_guitar_steel, electric_guitar_clean, electric_guitar_jazz, bass, kick, snare, crash, tambourine, ride)