Strudelify
Allright Now cover art

1984 · Remember the 70’s, Volume 5

Allright Now

Free

KeyA majorTempo120 bpm
0:00/0:00
// Allright Now — Free
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 132 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): Guitar 2.
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 · "Bass Gtr"
const bass = note(`<
  ~@24 A B C D E B F G@2 ~@20 A B F H A I F J K L K L K M K N K O K O K O K O K O K O P Q P ~ P O R O P S P O P T P ~
  U@2 A B V W A B V X A B V W A B V X A B V W A B V X A B V W A B Y@3
>`.pickRestart({
  A: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", B: "a1@3 ~ a1@3 ~ a1@2 f#1@2 e1@3 ~", C: "a1@3 ~ a1@4 e1@2 f#1@2 a1@4",
  D: "a1@2 ~ a1 ~ f#1 e1 f#1", E: "a1@3 ~ a1@4 a1@3 ~ a1@3 ~", F: "a1@3 ~ a1@4 e1@2 f#1@2 a1@3 ~", G: "a1/2",
  H: "a1@4 ~@2 a1@2 ~@2 f#1@3 ~ e1@2", I: "a1@3 ~ a1@3 ~ a1@2 f#1@2 e1@2 f#1@2", J: "a1",
  K: "a1!2 ~ a1 e1@2 f#1@2 a1 ~ a1@2 f#1 ~ e1@2", L: "~@6 a1@2 a1 ~ a1@4 a1 ~", M: "~@3 a2!2 a3@3", N: "~@3 a2 a2@4",
  O: "~@3 a2!2 a2@2 a2", P: "a1@3 a1 e1@2 f#1@2 a1 ~ a1@2 f#1 ~ e1@2", Q: "a1 ~ a1@2 b1@2 c2@2 d2 ~ e1@2 f#1@2 g1@2",
  R: "a1@3 ~ e1@2 f#1@2 a1 ~ a1@2 f#1 ~ e1@2", S: "~@3 a2@5", T: "a1@2 b1 ~@3 c2 ~@3 c#2 ~@3 d2@2", U: "e1/2",
  V: "a1@3 ~ a1@3 ~ e1@2 f#1@2 a1@3 ~", W: "a1@3 ~@3 a1@2 ~@2 f#1@2 e1@2 f#1@2", X: "a1@9 ~ f#1@2 ~@2 f#1 ~",
  Y: "[a1@3 ~ a1@3 ~ e1@2 f#1@2 a1@2 a1@23 ~@11]/3",
})).s("gm_electric_bass_finger").gain(0.54)

// bass · acoustic bass · "Ac. Bass"
const bass_2 = note("<~@62 A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 C ~ A ~ D ~ A ~ C ~@3 E ~@35>".pickRestart({
  A: "g3 d4 f#3 d4", B: "g3@2 d4@2 f#3@2 d4 ~", C: "g3@2 d4@2 f#3 g3 f#3@2", D: "g3@2 d4@2 f#3 g3@3", E: "g3 d4 f#3@2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "Ac.Piano"
const piano = note("<~@64 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@2 ~@33>".pickRestart({
  A: "[g2,d3,g3] [d2,a2,d3]", B: "[a2,e3,a3]", C: "[e2,b2,e3]/2",
})).s("gm_piano").gain(0.45)

// other · drawbar organ · "El.Organ"
const drawbar_organ = note("<~@75 A@8 ~@49>".pickRestart({
  A: "a5/8",
})).s("gm_drawbar_organ").gain(0.04)

// chords · overdriven guitar · "Guitar 3"
const overdriven_guitar = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D ~@9 A B C D A B C D A B C D A B C D A B C D ~@19 E F E F E F E F E F E
  F E F E F E F E F E F E F E G@2 ~@33
>`.pickRestart({
  A: "a2@2 ~@3 a2 d3 ~", B: "a2@2 ~@5 a2", C: "d3@3 ~ d3@3 ~ d3@3 ~ d3@2 a2@2", D: "a2 ~@3",
  E: "[b3,d4,g4]@7 ~ [a3,d4,f#4]@7 ~", F: "[a3,c#4,e4]@15 ~", G: "[e3,b3,e4]/2",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.2)

// chords · overdriven guitar · "Guitar 2"
const overdriven_guitar_2 = note(`<
  A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@11 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@21 C D ~@2 E@2 ~@2 F G ~@2 H@3
  ~ I J@3 ~ K L M@2 ~@35
>`.pickRestart({
  A: "c#4@2 ~@3 c#4 f#3 ~", B: "c#4 ~@3", C: "e4@5 ~ e4@2 [e4,f#4]@5 ~ [e4,f#4]@2", D: "e4, f#4 ~@7", E: "a4/2",
  F: "e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 ~", G: "c#5", H: "[c5@6 f#4 a4@14 ~@3]/3",
  I: "e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 ~",
  J: "[a5@10 a5@2 e5@2 d6@4 c6 [a5,b5] c6@2 a5@6 a5@2 a5@18]/3", K: "~@6 a5 e5", L: "d6@6 d6@8 c6 a5",
  M: "[c6 a5@15]/2",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.8)

// chords · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D E@2 F@2 E@2 G@3 A B C D A B C D A B C D A B C D A B C D E@2 F@2 E@2
  F@2 ~@4 H I J@2 K L M@2 ~ N@2 ~@2 O P ~@2 Q@3 ~ Q@3 ~@2 R S T ~ U V@3 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2
  E@2 F@2 E@2 W@3
>`.pickRestart({
  A: "[e3,a3]@2 ~@3 [e3,a3] [a3,d4] ~", B: "[e3,a3]@2 ~@5 [e3,a3]",
  C: "[f#3,a3,d4]!4 [f#3,a3,d4]@2 [f#3,a3,d4]@2 [f#3,a3,d4]!4 [f#3,a3,d4]@2 [f#3,a3,d4]@2", D: "[e3,a3,c#4] ~@3",
  E: "[[a3,e4,a4] ~ [a3,e4,a4] ~ a3 f#3 e3 [g3,d4,g4]@9, ~@2 [e4,a4] ~@5]/2", // A5 G5 A5
  F: "[[f#3,d4,f#4]@2 ~@2 [f#3,d4,f#4]@9 ~ [a3,e4,a4]@16 ~@2]/2", // D A5
  G: "[[f#3,d4,f#4]@2 ~@2 [f#3,d4,f#4]@9 ~ [a3,e4,a4]@32 ~@2]/3", H: "a3@15 ~, g3 ~@15",
  I: "b3@10 a3@2 b3@3 ~, a3 ~@15", J: "[b3 a3@10 a3 b3@3 b3]/2", K: "a3@7 ~",
  L: "e4@6 e4@2 [e4,f#4]@5 ~ [e4,f#4]@2, d4 ~@15", M: "[e4@27 ~@5, f#4 ~@15]/2",
  N: "[~@10 b3@2 c4@2 b3@2 a3@15 ~, b3@9 ~@23, ~@3 a4@13]/2", O: "~@2 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 e4 f#4 a4 ~",
  P: "c#5", Q: "[c5@6 f#4 a4@14 ~@3]/3", R: "~@7 a5", S: "e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 e5 f#5 a5 ~",
  T: "a5@5 ~ a5@10", U: "~@5 a5@2 g5", V: "[a5 e5@3]/3",
  W: "[[f#3,d4,f#4]@2 ~@2 [f#3,d4,f#4]@9 ~ [a3,e4,a4]@20 ~@14]/3", // D A5
})).s("gm_distortion_guitar").gain(0.35)

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

// drums · snare
const snare = s("sd").struct(`<
  A@23 B A@3 C A@24 B A@3 C A@3 B D A@33 B@2 E F A@6 G H A@7 I A@7 I A@6 J ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "x!16", C: "~ x ~@2 x ~ x ~", D: "~@3 x", E: "~@15 x", F: "x ~@2 x", G: "~@4 x ~@7 x ~@2 x",
  H: "x!2 ~@4 x ~", I: "x!8 ~@8", J: "~@2 x ~@3 x!2",
})).gain(0.45)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@25 A ~ A ~ A ~@24 A ~ A ~ A ~@2 B ~@70>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2",
})).gain(0.45)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@37 A ~ A ~ A ~ A B A ~ A B A B@12 ~@2 B ~ B A ~ A ~ A ~@2 B A ~ A ~ A ~@2 B A ~ A ~ A ~@2 B A ~ A ~ A C ~@2
>`.pickRestart({
  A: "~@3 x", B: "x", C: "~@7 x",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@98 [~@3 x!2 ~@11] ~@15 [~@8 x!4 ~@4] ~@7 [~@8 x!4 ~@4] ~@8 [~ x ~@2]>").gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~@24 [x!4]!9 ~@20 [x!4]!8 x ~@37 [x!4]!31 ~@2>").gain(0.35)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<A@73 B A@5 B A B A@3 C A@2 C A C@2 A@38 ~@2>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@3 x!2 ~@2", C: "x ~@3 x ~@3 x!2 ~@2 x ~@3",
})).gain(2.22)

stack(
  bass, bass_2, piano, drawbar_organ, overdriven_guitar, overdriven_guitar_2, distortion_guitar, kick, snare, hihat,
  low_tom, open_hat, mid_tom, crash, high_tom, tambourine, agogo_bells
)