Strudelify

I Thing We're Alone Now

Tiffany

KeyB minorTempo120 bpm
0:00/0:00
// I Thing We're Alone Now — Tiffany
// 120 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "CLEAN GTR" electric guitar clean (copy of ch 5 "A.PIANO 1" piano)
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): JAZZ GTR.
setcpm(120/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A B C D C D C D A B C D C D C E F G H I F J H K A B C D C D C D A B C D A B C D C D C E F G H I F J H K A B C D C D
  C D A B C D C D C D L M N O P Q R S F G H I F J H K A B C D C D C D A B C D C D C D ~@8 A B C D C D C D L M N O P Q R
  T ~
>`.pickRestart({
  A: "b1@3 ~ b1@2 ~ b1 ~ b1 ~ b1 d2 ~ c#2 ~", B: "a1@3 ~ a1@2 ~ g1 ~ g1 ~ g1!2 ~ a1 ~",
  C: "b1@2 ~@2 b1@2 ~ b1 ~ b1 ~ b1 d2 ~ c#2 ~", D: "a1@2 ~@2 a1@2 ~ g1 ~ g1 ~ g1!2 ~ a1 ~",
  E: "a1@2 ~@2 a1@2 ~ g1 ~ g1 ~ g1!2 ~ g1 ~", F: "g1@2 ~ g1@2 ~ g1@2 ~ g1@2 ~ g2 ~ f#2 ~",
  G: "e2@2 ~ e2@2 ~ e2@2 ~ e2@2 ~ e2 ~ f#2 ~", H: "d2@2 ~ d2 ~@2 d2@2 ~ d2@2 ~ d2 ~ d2 ~",
  I: "b1@2 ~ b1@2 ~ a1@2 ~ a1@2 ~ a1 ~ a1 ~", J: "e2@2 ~ e2@2 ~ e2@2 ~ e2@2 ~ [e2,f2] ~ f#2 ~",
  K: "d2 ~ c#2 ~ b1 ~ a1@3 ~ a1@2 a1 ~ a1 ~", L: "b1@2 ~ b1 d2 e2@2 b1@2 ~@2 b1 d2@2 e2@2",
  M: "d2@2 ~ d2!2 a1@2 d2@3 ~ a1 d2@2 c#2 ~", N: "b1@2 ~ b1 d2 e2 ~ b1@3 b1 a1@2 ~ f#1@2",
  O: "a1@3 f#1 ~ f#1 b1@5 ~ b1 ~ a1@2", P: "b1@2 ~ b1 d2 e2 ~ b1@3 ~ b1 d2@2 e2@2",
  Q: "d2@2 ~ d2!2 a1@2 d2@4 a1 d2@2 c#2 ~, ~@12 c2 ~@3", R: "b1@2 ~ b1 d2 e2 ~ b1@3 ~ b1 a1@2 f#1@2",
  S: "a1@2 ~ a1 f#1@2 b1@5 ~ a1@2 ~@2", T: "a1@3 a1@3 b1@9 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@2 A ~ B C D ~ E ~@8 F@5 G H I J A K A ~ L ~ M ~ A ~ A ~@7 N@2 O@7 P Q R A S T U D V A ~ D ~ W ~@2 X Y Z AA AB AC AD
  AE@3 AF@3 AG@3 AH AI AJ A AK AL AM A AN AO AP AQ AR AQ AS AT ~@16 X Y Z AA AB AC AD AU@2
>`.pickRestart({
  A: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ [d4,g4] ~ [d4,g4] ~", // A5 G5
  B: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ [d4,f#4] ~ [d4,g4] ~", // A5 G5 D G5
  C: "~@10 g4 ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D G5 D
  D: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 ~ g4 ~ [d4,g4] ~ [d4,g4] ~, ~@9 [d4,g4]@2 ~@5", // A5 G5
  E: "[e4,a4]!4 ~ [e4,a4] ~ [e4,f4,a4] [e4,a4] [d4,g4]!2 ~ [d4,g4] ~ [d4,g4] ~", // A5 Fmaj7 A5 G5
  F: "[g4@6 g4@4 ~@2 a4@3 ~ f#4@2 e4@3 ~ [a3,c#4,e4]@4 a3@2 [c#4,e4] ~ [a3,d4,f#4]@7 ~ [a3,d4,f#4]@8 ~@2 [d4,f#4]@2 [c#4,e4] ~ [b3,d4] ~ [c#4,e4]@4 a3 ~@2 e4 ~@2 [d4,g4]@5 ~ [d4,g4]@4 d4 ~ [d4,a4]@2 d4 ~, d4@15 ~ d4@5 ~@39 c#4@2 ~ b3@6 ~@11, b3@10 b3@5 b3@6 ~@26 [a3,d#4]@2 ~@31]/5", // A C#m D C#m Bm C#m G5 D5 …
  G: "[d4,f#4]@3 ~ e4 ~ d4@3 ~ e4@2 d4@2 e4 ~", H: "[d4,f#4]@4 a3@2 f#4@5 ~ f#4@2 ~@2, ~@6 d4@9 ~",
  I: "[a3,f#4] ~ [a3,e4,f#4] ~ [a3,d4] ~ [a3,c#4]@5 ~ [a3,c#4] ~@3", // D F#m7 D5 A
  J: "[d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4]@2 ~@2 g4@2 [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D G5 D
  K: "~@10 [d4,g4] ~ [d4,f#4] ~ [d4,g4] ~", // G5 D G5
  L: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 [d4,f4,g4] [d4,g4] ~ [d4,f#4] ~ [d4,g4] ~", // A5 G7 G5 D G5
  M: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ [d4,g4] ~ [d4,f#4] ~", // A5 G5 D
  N: "[~@16 g4@10 ~@2 a4@3 ~, ~@15 b3@11 b3@6, ~ d4]/2",
  O: "[f#4@2 e4@3 ~ [a3,c#4,e4]@4 ~@2 [c#4,e4] ~ [a3,d4,f#4]@7 ~ [a3,d4,f#4]@9 ~ [d4,f#4] ~ [c#4,e4] ~ [a3,d4] ~ [c#4,e4]@4 a3@2 c#4 ~ e4 ~ [d4,g4]@6 [d4,g4]@4 ~@2 a4@3 ~ f#4@2 e4@2 ~@2 [a3,c#4,e4]@4 a3@2 [c#4,e4] ~ [d4,f#4]@7 ~ [d4,f#4]@4 a3@2 d4@2 ~@2 f#4 ~ [a3,e4] ~ [a3,d4] ~ [a3,c#4]@4 a3 ~ [a3,e4]@4, d4@5 ~@5 a3@4 ~@17 a3@4 ~@12 b3@6 ~@5 d4@4 ~ d4@4 ~@11 a3@12 ~@5 a3@2 ~@15]/7", // A C#m D C#m D5 C#m G5 A …
  P: "[d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4]@3 ~ g4@2 [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D G5 D
  Q: "[e4,a4]!4 ~ [e4,a4] [e4,a4]@2 [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,f#4] ~", // A5 G5 D
  R: "[d4,f#4]@3 [d4,f#4]@2 ~ [d4,f#4]@2 ~@2 [f#4,g4]@2 [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D Gmaj7 D G5 D
  S: "[d4,f#4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 ~@2 [f#4,g4] ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D Gmaj7 D G5 D
  T: "[e4,a4]!4 ~ [e4,a4] ~ [e4,a4]!2 ~ [f4,g4] ~ [d4,g4] ~ [d4,g4] ~, ~@9 [d4,g4]@2 ~@5", // A5 Fsus2 G5
  U: "[d4,f#4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 ~@2 g4 ~ [d4,f#4] ~ [d4,g4] ~, ~@4 [d4,f#4] ~@3, ~@9 d4@2 ~@5", // D G5 D
  V: "[d4,f#4] ~@15", W: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [d4,g4]!2 ~ [d4,g4] ~ [d4,g4] ~",
  X: "b2@3 b2 d3 e3 ~ f#3 ~ f#3 ~ f#3 e3@2 f#3 ~", Y: "a3@3 a3!2 b3 ~ f#3@7 e3@2",
  Z: "d3@3 d3 ~ e3@2 b2@2 b2 ~@2 d3@2 e3@2, ~@4 d3@2 ~@5 b2@2 ~@3", AA: "c#3@3 a2@2 f#2 b2@8 ~@2",
  AB: "b2@3 ~@2 e3@2 f#3 ~ f#3 ~ f#3 e3@2 f#3@2, ~@3 b2@2 ~@11, ~@2 d3 ~@5",
  AC: "a3@3 a3 ~ b3@2 f#3@7 e3@2, ~@2 a3 ~@5", AD: "d3@3 d3!2 e3 ~ b2@2 b2 ~@2 d3@2 e3@2, ~@11 b2@2 ~@3",
  AE: "[c#3@3 a2@2 f#2 b2@7 ~@3 g4@12 a4@3 ~ f#4@3 ~ e4@2 e4@6 e4@2 ~@2, ~@15 b3@15 ~ a3@6 ~ [a3,c#4]@8 ~@2, ~@16 d4@16 d4@6 d#4 ~@9]/3", // A
  AF: "[[b3,d4,f#4]@5 ~ [a3,d4,f#4]@7 ~@3 [d4,f#4] ~ [c#4,e4] ~ [b3,d4] ~ [c#4,e4]@4 a3 ~ [c#4,e4] ~@3 g4@5 ~@7 a4@2 b3@2, ~@15 a3@2 ~@14 b3@11 b3@4 ~@2, ~@32 d4@15 ~, ~@19 g4@3 ~@2]/3", // Bm D C#m Bm C#m
  AG: "[[d4,f#4]@2 [c#4,e4]@3 ~ [c#4,e4]@4 a3@2 [c#4,e4] ~ [a3,d4,f#4]@7 ~ [a3,d4,f#4]@7 ~@3 f#4 ~ [a3,e4] ~ [a3,d4] ~ [a3,c#4]@6 [a3,c#4] ~@3, ~@31 a3@2 ~@15]/3", // D C#m D A5 D5 A
  AH: "[d4,f#4] ~@2 [d4,f#4] ~@2 [d4,f#4]@2 [d4,f#4] ~ g4 ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D G5 D
  AI: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] [e4,f#4,a4]@2 [d4,g4]!2 ~@2 [d4,g4] ~ [d4,g4] ~", // A5 F#m7 G5
  AJ: "[d4,f#4]@2 ~ [d4,f#4]@2 ~ [d4,f#4]@2 [d4,f#4] ~ g4 ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D G5 D
  AK: "[d4,f#4]@2 ~ [d4,f#4]@2 ~ [d4,f#4] ~ [d4,f#4] ~ [f#4,g4] ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D Gmaj7 D G5 D
  AL: "[e4,a4] e4 [e4,a4]!2 ~ [e4,a4] ~ [e4,a4]!2 ~ g4 ~ [d4,g4] ~ [d4,f#4] ~, ~@9 [d4,g4]@2 ~@5", // A5 G5 D G5
  AM: "[d4,f#4]@2 ~ [d4,f#4]@2 ~ [d4,f#4] ~ [d4,f#4]!2 [d4,g4] ~ [d4,f#4] ~ [d4,g4] ~", // D G5 D G5
  AN: "[d4,f#4] ~@2 [d4,f#4] ~@2 [d4,f#4] ~ [d4,f#4] ~ [f#4,g4] ~ [d4,f#4] ~ [d4,g4] ~, ~@9 [d4,f#4]@2 ~@5", // D Gmaj7 D G5 D
  AO: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ d4 ~ [d4,f#4] ~", // A5 G5 D
  AP: "[d4,f#4] ~@2 [d4,f#4] ~@2 [d4,f#4]!4 g4 ~ [d4,f#4] ~ [d4,g4] ~", // D G5
  AQ: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ [d4,g4] ~ [d4,f#4] ~", // A5 G5 D
  AR: "[d4,f#4] ~@2 [d4,f#4] ~@2 [d4,f#4] ~@2 f#4 [d4,f#4,g4] ~ [d4,f#4] ~ [d4,g4] ~, ~@4 [d4,f#4] ~@3", // D Gmaj7 D G5 D
  AS: "[d4,f#4] ~ f#4 [d4,f#4] ~@2 [d4,f#4]!3 ~ [d4,f#4] [d4,e4,f#4,g4] [d4,f#4] ~ [d4,g4] ~", // D Em7 D G5
  AT: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]!2 [d4,g4]!2 ~ [d4,g4] ~ [d4,g4] ~", AU: "[c#3@3 a2@3 b2@13 ~@13]/2",
})).s("gm_electric_guitar_clean").gain(0.14)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B A B A B A B ~@8 C D@2 E F G@2 H A B A B A B A B A B I B ~@8 C D@2 E F G@2 H A B A B A B A B A B A B A B A B ~@8
  C D@2 E F G@2 H A B A B A B A B A B A B A B A B A J A K L B M J A B A B A B A B N ~@8
>`.pickRestart({
  A: "[b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4] [b3,d4,g4]@2 [b3,d4,f#4]@2 [b3,d4,g4]@2", // Bm G Bm G
  B: "[c#4,e4,a4]@3 [c#4,e4,a4]@3 [b3,d4,g4]@3 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,f#4]@2 [b3,d4,e4]@2", // A G Bm E7
  C: "[b3,d4,g4]@6 [b3,d4]@3 ~ [b3,d4]@2 b3@2 b3@2, ~@3 g4@3 [d4,a4]@2", // G Bm D5
  D: "[f#4@2 e4@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4]@2 [a3,c#4,e4]@2 [a3,d4,f#4]@6 ~@2 [a3,d4,f#4]@10, [b3,d4]@3 ~@13]/2", // A D Bm
  E: "f#4@2 [c#4,e4]@2 [b3,d4]@2 [c#4,e4]@3 ~ a3@2 c#4@2 e4@2, a3 ~@3, d4 ~@15", // C#m Bm C#m
  F: "b3@5 ~ b3@2 d4@2 b3@2 d4@2 b3 a3, [d4,g4]@2 g4 a4", // G5
  G: "[f#4@2 e4@3 ~ a3@3 ~ a3@2 [c#4,e4]@2 [d4,f#4]@6 a3@2 [a3,d4,f#4]@4 [d4,f#4]@2 ~@2 a3@2, [a3,d4]@4 ~@2 [c#4,e4]@6 ~@2 a3@5 ~@7 a3@4 ~@2, ~@7 [d4,f#4]]/2", // C#m D D5 C#m D
  H: "[d4,f#4]@2 [c#4,e4]@2 [b3,d4]@2 [a3,c#4]@3 ~ [a3,c#4]@2 [a3,c#4]@3 ~", // D C#m Bm A
  I: "f#4@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4] [b3,d4,g4]@2 [b3,d4,f#4]@2 [b3,d4,g4]@2, d4 ~@15", // Bm G Bm G
  J: "[c#4,e4,a4]@3 [c#4,e4,a4]@3 [b3,d4,g4]@3 [b3,d4,g4]@3 [b3,d4,f#4]@2 [b3,d4,e4]@2", // A G Bm E7
  K: "[c#4,e4,a4]@3 [c#4,e4,a4]@3 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,f#4]@2 [b3,d4,e4]@2", // A G Bm E7
  L: "[b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4] [b3,d4,g4]@2 [b3,d4,f#4]@2 [b3,d4,g4]@2, ~@9 f#4@2 ~@5", // Bm G Bm G
  M: "[b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,f#4]@3 [b3,d4,g4]@3 [b3,d4,f#4]@2 [b3,d4,g4]@2", N: "[d4,f#4]@3 ~@13",
})).s("gm_piano").gain(0.28)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~ A B A C A C A C A D A D A D A D E F@2 G H I@2 J A B A C A C A C A B A B A D A D A D A D K F@2 G H I@2 J A B A C A C
  A C A B A C A C A C ~@8 K F@2 G H I@2 J A B A C A C A C A B A C A C A C ~@8 A B A C A C A C ~@9
>`.pickRestart({
  A: "[b4,d5,f#5]", B: "[c#5,e5,a5] [b4,d5,g5]", C: "[c#5,e5,a5]@3 [b4,d5,g5]@5", D: "[a4,c#5,e5]@3 [g4,b4,d5]@5",
  E: "[b4,d5,g5]@6 [b4,d5]@3 ~ [b4,d5]@2 b4@2 b4@2, ~@3 g5@2 ~ [d5,a5]@2", // G Bm D5
  F: "[f#5@2 e5@3 ~ [a4,c#5,e5]@3 ~ [a4,c#5]@2 [a4,c#5,e5]@2 [a4,d5,f#5]@6 ~@2 [a4,d5,f#5]@10, [b4,d5]@3 ~@13]/2", // A D Bm
  G: "f#5@2 [c#5,e5]@2 [b4,d5]@2 [c#5,e5]@3 ~ a4@2 c#5@2 e5@2, a4 ~@3, d5 ~@15", // C#m Bm C#m
  H: "b4@5 ~ b4@2 d5@2 b4@2 d5@2 b4 a4, [d5,g5]@2 g5 a5", // G5
  I: "[f#5@2 e5@3 ~ a4@3 ~ a4@2 [c#5,e5]@2 [d5,f#5]@6 a4@2 [a4,d5,f#5]@4 [d5,f#5]@2 ~@2 a4@2, [a4,d5]@4 ~@2 [c#5,e5]@6 ~@2 a4@5 ~@7 a4@4 ~@2, ~@7 [d5,f#5]]/2", // C#m D D5 C#m D
  J: "[d5,f#5] [c#5,e5] [b4,d5] [a4,c#5]@2 e4 e5@2", // D C#m Bm A
  K: "[b4,d5,g5]@6 [b4,d5]@3 ~ [b4,d5]@2 b4@2 b4@2, ~@3 g5@3 [d5,a5]@2", // G Bm D5
})).s("gm_rock_organ").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A C ~
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2", C: "x ~@2 x ~@4",
})).gain(0.56)

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@68 B C B@4 D B ~@24 B C B@4 D B ~@8 B C B@5 E ~>".pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@3 x ~ x ~ x ~@3 x", C: "x ~@2 x ~@3 x ~ x ~ x ~@2 x!2", D: "x ~@2 x ~@3 x ~ x ~ x!2 ~@3",
  E: "~@2 x ~@2 x ~@10",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!123 [x!2 ~ x!3 ~@10] ~>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@68 B C B@4 D B ~@24 B C B@4 D B ~@8 B C B@5 E ~>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@2 x!2 ~@2 x!2", C: "~@4 x ~ x ~@5 x!2 ~@2", D: "~@4 x ~ x ~@7 x!2", E: "x!2 ~ x!2 ~ x ~@9",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~ [~ x ~ x ~ x ~ x]!123 [~ x ~@6] ~>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@7 A ~@7 A ~@5 A ~@13 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@6 B ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.48)

stack(bass, electric_guitar_clean, piano, rock_organ, kick, snare, low_tom, hihat, mid_tom, open_hat, crash)