Strudelify

I Think We're Alone Now

Tommy James

KeyD majorTempo120 bpm
0:00/0:00
// I Think We're Alone Now — Tommy James
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 7 "Acoustic Grand Piano" named as a piano, played on piano (its acoustic guitar nylon patch is not one)
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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 · fretless bass
const bass = note(`<
  A B C D E F G H I J K L M I N O P Q R S O H T U I V W O X B T I A J G Y E J Z Y AA O AB U P Q L AC I B AD A AE AF W O
  AE B AD A U V C A@2 J G Y E J Z Y AA O AB U P Q L AC I B AD A AE AF W O U AG U Y AH D U AF AH I U V AD O@2 V AI O
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2", B: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  C: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2", D: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 c#2 ~",
  E: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 f2 ~", F: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2 a#1 ~",
  G: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 b0 b1 b0 b1!2", H: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 a0 a1 a0 a1!2",
  I: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 d1 d2 d1 d2!2", J: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 f#1 f#2 f#1 f#2!2",
  K: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", L: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 a0",
  M: "f#2 ~ f#2 ~ f#2 ~ f#2 f#1 f#2 ~ f#2 ~ f#2@2 c#2 ~", N: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2 c#2 ~",
  O: "d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~ d2 ~", P: "c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2@2",
  Q: "c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2 ~ c2 ~ c2 ~", R: "a1 ~ a1@2 a1@2 a1 a0 a1 ~ a1 ~ a1 ~ a1@2",
  S: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 a0 a1 ~ a1 ~", T: "g2 ~ g2 ~ g2 ~ g2 g1 g2 ~ g2 ~ g2@2 c#2 ~",
  U: "d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~ d2 d1", V: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 f#2 ~",
  W: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 ~", X: "d2 ~ d2 ~ d2 ~ d2 d1 d2 ~ d2 ~ d2@2 g#1 ~",
  Y: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 ~", Z: "b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1 ~ b1 ~ b1 b0",
  AA: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2", AB: "f#2 ~ f#2 ~ f#2 ~ f#2@2 f#2 ~ f#2 ~ f#2 ~ f#2 f#1",
  AC: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1 ~ c#2 ~", AD: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 c#2 ~",
  AE: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 g#1 ~", AF: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1@2 f#2 ~",
  AG: "d2 ~ d2 ~ d2 ~ d2 d1 d2 ~ d2 ~ d2 ~ c#2 ~", AH: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 g1",
  AI: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 g1 g2 g1 g2!2",
})).s("gm_fretless_bass").gain(0.5)

// chords · piano · "Acoustic Grand Piano"
const piano = note(`<
  ~@4 A B C D A E C D B F E A G H D I A D J A F D K A ~@4 F E L D A E C D B F B A G H D I F D J A@2 D J F A D K F@2 D K
  F@2 E L D A E C D B F B A G H D I F D J A@2 D J F ~@2 F D K F A D J F@2 M N O ~@4
>`.pickRestart({
  A: "[f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3", // D
  B: "[f#4,a4,c#5,f#5] ~@3 [f#4,a4,c#5,f#5] ~@3 [f#4,a4,c#5,f#5] ~@3 [f#4,a4,c#5,f#5] ~@3", // F#m
  C: "[d4,f#4,b4,d5] ~@3 [d4,f#4,b4,d5] ~@3 [d4,f#4,b4,d5] ~@3 [d4,f#4,b4,d5] ~@3", // Bm
  D: "[c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3", // A
  E: "[a4,c#5,f#5] ~@3 [a4,c#5,f#5] ~@3 [a4,c#5,f#5] ~@3 [a4,c#5,f#5] ~@3", // F#m
  F: "[f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3", // D
  G: "[e4,g4,c5,e5] ~@3 [e4,g4,c5,e5] ~@3 [e4,g4,c5,e5] ~@3 [e4,g4,c5,e5] ~@3", // C
  H: "[e4,g4,c5,e5] ~@3 [e4,g4,c5,e5] ~@3 [e4,g4,c5,e5] ~@3 [e4,e5]@2 ~@2, ~@12 [g4,c5] ~@3", // C E C5
  I: "[c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,c#5]@2 ~@2, ~@12 [e4,a4] ~@3", // A C# A5
  J: "[b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3", // G
  K: "[g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3", // G
  L: "[d4,f#4,b4] ~@3 [d4,f#4,b4] ~@3 [d4,f#4,b4] ~@3 [d4,f#4,b4] ~@3", // Bm
  M: "[c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 a4 ~@3 [c#4,e4,a4,c#5] ~@3", // A
  N: "[g4,d5,g5] ~@3 [g4,b4,d5,g5] ~@7 [g4,b4,d5,g5] ~@3", O: "~@4 f#4 ~@11",
})).s("gm_piano").gain(0.43)

// chords · piano · "Acoustic Grand Piano" · soft notes · C#m G D D5 D A G D
const piano_soft = note(`<
  ~@99
  [~@8 [c#4,e4,c#5] ~@7]
  [b4 ~@7 [g4,b4,d5,g5] ~@7]
  [[f#4,a4,d5] ~@3 [a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3]
  [[f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3 [f#4,a4,d5,f#5] ~@3]
  [[c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3 [c#4,e4,a4,c#5] ~@3]
  [[g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3 [g4,b4,d5,g5] ~@3]
  [[f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3]
>`).s("gm_piano").gain(0.14)

// chords · piano · "Acoustic Grand Piano"
const piano_2 = note(`<
  ~@4 A B C D A B C D E A B A F@2 D@2 A D G A@2 D G A ~@4 A B C D A B C D E A B A F@2 D@2 A D H A@2 D G A@2 D H A@2 D H
  A@2 B C D A B C D E A B A F@2 D@2 A D H A@2 D G A ~@2 A D H A@2 D H A@2 D I ~@5
>`.pickRestart({
  A: "~@4 [f#4,d5] ~@7 [f#4,d5] ~@3", B: "~@4 [a3,f#4] ~@7 [a3,f#4] ~@3", C: "~@4 [d4,b4] ~@7 [d4,b4] ~@3",
  D: "~@4 [c#4,a4] ~@7 [c#4,a4] ~@3", E: "~@4 [f#4,c#5] ~@7 [f#4,c#5] ~@3", F: "~@4 [e4,c5] ~@7 [e4,c5] ~@3",
  G: "~@4 [g4,d5] ~@7 [g4,d5] ~@3", H: "~@4 [b3,g4] ~@7 [b3,g4] ~@3", I: "~@4 [b3,g4] ~@7 g4 ~@3",
})).s("gm_piano").gain(0.42)

// chords · piano · "Acoustic Grand Piano" · soft notes · D F#m G5 D
const piano_soft_2 = note(`<
  ~@100
  [~@12 b3 ~@3]
  [~@4 [f#4,d5] ~@7 [f#4,d5] ~@3]!2
  [~@4 [c#4,a4] ~@7 [c#4,a4] ~@3]
  [~@4 [g4,d5] ~@7 [g4,d5] ~@3]
  [~@4 [f#4,d5] ~@7 [f#4,d5] ~@3]
>`).s("gm_piano").gain(0.12)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@12 A@4 B@2 C@2 ~@12 A@2 D E A F G H F A@2 I B@2 C@2 I E J A@2 E J A I E J I A E J A@3 D E A F G H F A@2 I B@2 C@2 I
  E J A@2 E J A ~@2 I E K I A E K I A E K L ~@4
>`.pickRestart({
  A: "[a4,f#5]", B: "[c5,e5]/2", C: "[e4,c#5]/2", D: "[f#4,d5]", E: "[e4,c#5]", F: "[f#4,a4]", G: "[b4,d5]",
  H: "[a4,c#5]", I: "[d5,f#5]", J: "[g4,b4]", K: "[b4,g5]", L: "a4",
})).s("gm_string_ensemble_1").gain(0.56)

// chords · string ensemble 1 · soft notes · D C#m G D
const string_ensemble_1_soft = note("<~@101 f#5 [[a4,f#5]] [[e4,c#5]] [[g4,b4]] [[d5,f#5]]>")
  .s("gm_string_ensemble_1").gain(0.16)

// chords · electric guitar jazz · "Electric Guitar (jazz)"
const electric_guitar_jazz = note(`<
  ~@21 A B C ~ A B C ~@8 D E ~@2 F G F H ~ I J K L A B C ~ A B C ~ A B C ~ A B C ~@8 F G F H M N J K L A B C ~ A B C ~@3
  A B C ~ A B C ~ A O ~@5
>`.pickRestart({
  A: "~@7 [c#3,e3]", B: "[d3,g3] [g3,b3]!2 [d3,g3] [g3,b3]@2 [d3,g3] [g3,b3]",
  C: "[a3,d4] [a3,d4]@2 [f#3,a3] [g3,b3] [f#3,a3]@2 ~", D: "~@6 [a3,d4]@2 [a3,d4]@3 [a3,d4]@2 [d4,f#4]@3",
  E: "[c#4,f#4] [c#4,f#4]@5 ~@2", F: "[c#4,f#4]!3 [a3,c#4] [c#4,f#4]!4", G: "[d4,f#4] ~@3", H: "[d4,f#4] [a3,d4] ~@6",
  I: "~@5 [f3,a3] [c4,e4]!2", J: "[a3,c#4] [b3,d4] [a3,c#4]!3 [b3,d4] [a3,c#4]!2",
  K: "[b3,d4] [a3,c#4] [f#3,a3] [a3,c#4] [b3,d4] [a3,c#4] [f#3,a3] [a3,c#4]", L: "[f#3,a3] ~@3",
  M: "[c4,e4]!3 [c4,e4]@2 [a3,c4] [g3,c4]@2", N: "[c4,e4]!2 [a3,c4] [c4,e4]@2 [f3,a3] [c4,e4]!2",
  O: "[d3,g3] [g3,b3]!2 ~@5", // G5 G
})).s("gm_electric_guitar_jazz").gain(0.48)

// chords · electric guitar jazz · "Electric Guitar (jazz)" · soft notes · G5 G G5 G D5 F#m G F#m …
const electric_guitar_jazz_2 = note(`<
  ~@100
  [~@3 [d3,g3] [g3,b3]@2 [d3,g3] [g3,b3]]
  [[a3,d4] [a3,d4]@2 [f#3,a3] [g3,b3] [f#3,a3]@2 ~]
  ~
  [~@7 [c#3,e3]]
  [[d3,g3] [g3,b3]!2 [d3,g3] [g3,b3]@2 [d3,g3] [g3,b3]]
  [[a3,d4] [a3,d4]@2 [f#3,a3] [g3,b3] [f#3,a3]@2 ~]
>`).s("gm_electric_guitar_jazz").gain(0.08)

// other · rock organ
const rock_organ = note("<~@64 A B C@2 D E F@2 ~@34>".pickRestart({
  A: "~@8 f#4@3 f#4@2 g4@3", B: "a4", C: "[~@4 d4!2 e4 f#4@2 f#4 e4!2 d4@2 e4@2]/2", D: "~@6 f#4@2 f#4@3 f#4@2 b4@3",
  E: "b4 a4@5 ~@2", F: "[~@3 d4!3 e4 f#4@3 e4@2 d4@2 e4@2]/2",
})).s("gm_rock_organ").gain(0.72)

// chords · vibraphone
const vibraphone = note("<~@64 A B C@2 D E F@2 ~@34>".pickRestart({
  A: "~@8 [a3,d4]@3 [a3,d4]@2 [b3,d4]@3", B: "[c#4,f#4]",
  C: "[~@4 [f#3,b3]!3 [a3,c#4]@2 [b3,d4] [a3,c#4]!2 [e3,a3]@2 [a3,c#4]@2]/2", // B5 A Bm A A5 A
  D: "~@6 [a3,d4]@2 [a3,d4]@3 [a3,d4]@2 [d4,f#4]@3", E: "[c#4,f#4] [c#4,f#4]@5 ~@2",
  F: "[~@3 [f#3,b3]!4 [a3,c#4]@3 [a3,c#4]@2 [e3,a3]@2 [a3,c#4]@2]/2", // B5 A A5 A
})).s("gm_vibraphone").gain(0.56)

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

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 C A@3 B A D A D A C A E A@3 F A@3 C A B E ~ A@2 G H A@3 H A H A E A B A D A@3 I A@3 D F A@2 B J A D@2 A@2 G
  H A@3 H A H A E A B A D A@3 I A@3 D A ~ A@3 B A@3 K A@3 ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "x ~@2 x ~@2 x ~", C: "x ~ x ~@2 x!3", D: "x ~@5 x ~@3 x ~@2 x ~@2", E: "x!3 ~ x ~ x ~@5 x ~@3",
  F: "~@9 x ~@2 x ~@3", G: "~@4 x ~@4 x ~@2 x ~@3", H: "x!2 ~ x!2 ~ x!2 ~@2 x!3 ~@3", I: "~@3 x", J: "~@10 x!6",
  K: "x!2 ~@2 x!4 ~@2 x!4 ~ x",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@7 A ~@9 A ~@9 A ~@69 B ~@3 C D@3 E>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@2 x!2 ~@4 x!2 ~@6", C: "x!2 ~ x!2 ~ x!2 ~@2 x!3 ~@3", D: "~ x ~ x", E: "x ~ x!6",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@3 B ~@3 A ~ C ~ C ~ B ~ A ~@7 B ~ A ~ D ~@3 E ~@3 E ~ E ~@3 A ~ C ~@3 F ~@3 C ~@3 A G ~ C@2 ~@3 E ~@3 E ~ E
  ~@3 A ~ C ~@3 F ~@3 C ~ D ~@3 A ~@12
>`.pickRestart({
  A: "~@3 x", B: "~@3 x!5", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~@10 x!6", E: "~@7 x", F: "~@10 x!2 ~ x!3", G: "~@9 x ~@6",
})).gain(0.72)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@101 [~@7 x] ~@3 [~@3 x!5]>").gain(0.08)

// drums · hihat
const hihat = s("hh").struct("<~@35 A ~@3 A ~ A ~@25 A ~@3 A ~ A ~@32>".pickRestart({
  A: "x!4",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@101 [x!4] ~@4>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@7 A ~ B ~ B ~@13 A ~ C ~@3 D ~@3 D ~ D ~@3 A ~ B ~@3 C ~@3 B ~@3 A@2 ~ B@2 ~@3 D ~@3 D ~ D ~@3 A ~ B ~@3 C ~@3
  B ~ C ~@3 A ~@7 D ~@4
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x!4 ~@8", D: "~@13 x ~@2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<A@3 ~ A@2 B C A@3 ~@6 C ~@2 A@3 ~ A@3 C A ~@59 A ~@16 C>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x!2 ~@2 x ~@3", C: "x",
})).gain(0.64)

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

More by Tommy James