Strudelify

Show and Tell

Al Wilson

KeyD majorTempo87 bpm
0:00/0:00
// Show and Tell — Al Wilson
// 87 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Track 1" piano (copy of ch 2 "Track 2" epiano2)
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(87/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.

// chords · epiano2 · "Track 2"
const epiano2 = note("<A@16 ~ B C D@2 E@7 A@8 ~ B C D@2 F@8 G@2 H@2 I J I K B C D@2 E@7 L@7 M@2 N ~>".pickRestart({
  A: "[~@14 [b3,d4,f#4]@10 ~@2 [b3,e4,f#4]@2 ~@2 [b3,d4,f#4]@11 ~ [b3,e4,f#4]@2 ~@2 [a3,d4,f#4]@10 ~@2 [b3,e4,f#4]@2 ~@2 [a3,d4,f#4]@10 ~@6 [b3,d4,f#4]@10 ~@2 [b3,e4,f#4]@2 ~@2 [b3,d4,f#4]@11 ~ [b3,e4,f#4]@2 ~@2 [a3,d4,f#4]@10 ~@2 [b3,e4,f#4]@2 ~@2 [a3,d4,f#4]@2]/8", // Bm Bsus4 Bm Bsus4 D Bsus4 D Bm …
  B: "[c4,f4,a4]@5 ~ [d4,f4,a4]@8 ~@2", C: "[e4,f4,a4]@2 ~ [d4,f4,a4]@4 ~",
  D: "[[d4,f4,a4]@18 ~@2 [d4,f4,a4]@2 ~@2 [c#4,e4,a4]@7 ~]/2", // Dm A
  E: "[~@5 [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~@3 [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]]/7", // Bsus4 Bm Bsus4 D Bsus4 D Bm Bsus4 …
  F: "[~@5 [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~@3 [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@4 ~@5]/8", // Bsus4 Bm Bsus4 D Bsus4 D Bm Bsus4 …
  G: "[d4,f4] ~ [d4,f4] ~ [d4,f4] ~ [d4,f4] ~, ~ a#3@2 ~@2 a#3@2 ~", // Dm
  H: "[d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~, ~ a#3@2 ~@2 a#3@2 ~", I: "[e4,f#4]@2 a3 [e4,f#4]@2 a3 [e4,f#4] a3",
  J: "[d4,f#4]@2 a3 [d4,f#4]@2 a3 [d4,f#4] a3", K: "[d4,f#4]@4 a3@2 [d4,f#4]@4 a3@2 [d4,f#4]@2 a3 ~",
  L: "[~@7 [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [b3,d4,f#4]@5 ~ [b3,e4,f#4] ~ [a3,d4,f#4]]/7", // Bm Bsus4 Bm Bsus4 D Bsus4 D Bsus4 …
  M: "[~@10 [b3,e4,f#4]@2 ~@2 [a3,d4,f#4]@11 ~@7]/2", N: "[b3,d4,f#4]",
})).s("gm_epiano2").gain(0.41)

// bass · electric bass finger · "Track 3"
const bass = note(`<
  A B C D E B C D E B C D E B C D F G H I J K C D E B C D E B C D E B C D F G H I J K C D E B C D L M N O P D@3 Q G H I
  J K C D E B C D E B C D E B C D F R ~
>`.pickRestart({
  A: "~@7 g1", B: "~@2 d2 ~ e2 ~ d2 e2 d2 ~ d2 ~ e2 ~ g1@2", C: "~@2 d2 ~ e2 ~ d2 e2 d2 ~ d2 ~ e2 ~ d2@2",
  D: "~@2 a2 ~ b2 ~ a2 b2 a2 ~ a2 ~ b2 ~ d2@2", E: "~@2 a2 ~ b2 ~ a2 b2 a2 ~ a2 ~ b2 ~ g1@2",
  F: "~@2 a2 ~ b2 ~ a2 b2 a2 ~ a2 ~ b2 ~@3", G: "f2 ~ f2@2 ~@2 f1@2 ~ f1 a1!2 c2 a1 d2 c2",
  H: "f2 ~ f2@2 ~@2 f1@2 ~ f1 a1!2 c2!2 d2 ~", I: "a#1 ~ a#1@2 ~@2 a#1@2 ~@2 a#1 ~ a#1 d2 f2 ~",
  J: "a1 ~ a1@3 ~@3 a1@2 b1@2 d2@2 e2@2", K: "g1 ~ d2 ~ e2 ~ d2 e2 d2 ~ d2 ~ e2 ~ g1@2",
  L: "~@2 a2 ~ b2 ~ a2 b2 a2 ~ a2 ~ b2 ~ a#1@2", M: "~@2 f2 ~ g2 ~ f2 g2 f2 ~ f2 ~ g2 ~ a#1@2",
  N: "~@2 f2 ~ g2 ~ f2 g2 f2 ~ f2 ~ g2 ~ d#2@2", O: "~@2 a#2 ~ c3 ~ a#2 c3 a#2 ~ a#2 ~ c3 ~ d#2@2",
  P: "~@2 a#2 ~ c3 ~ a#2 c3 a#2 ~ a#2 ~ c3 ~ d2@2", Q: "~@2 a2 ~ b2 ~ a2 b2 a2 ~ a2 ~ b2 ~ d2 ~", R: "g1",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · clavinet · "Track 4"
const clavinet = note("<~ A B C D E F G ~@71>".pickRestart({
  A: "~@6 e4 f#4 d4 ~@7, ~@3 b3@2 ~@3", B: "~@5 a3 b3 a3 d4 ~@7", C: "~@6 [f#3,a3] a3 d3@2 a3 ~@5, ~@7 f#3@4 ~@5",
  D: "~@2 [f#4,b4]!2 [f#4,a4]@5 ~ [f#4,b4] ~@5", E: "~@6 d5 c#5 d5 ~@7, ~@6 b4@3 ~@7",
  F: "~@6 [f#4,a4] d4 [d4,g4] ~ [b3,d4] ~@5", G: "~@5 a3 b3 a3 c#4 ~ [a3,c#4] ~@5",
})).s("gm_clavinet").gain(0.41)

// other · brass section · "Track 5"
const brass_section = note(`<
  ~@8 A ~@3 A ~@4 B@2 C@2 D E@2 F G@3 H ~@8 B@2 C@2 D E@2 F G@3 ~ I@2 J K ~@7 L D E@2 F G@3 L D E@2 F G@3 ~ M ~
>`.pickRestart({
  A: "~@8 [a3,a4] [b3,b4] [d4,d5] ~ [e4,e5] ~@3", B: "[~@8 [c4,c5] ~ [d4,d5]@2 ~@2 [f4,f5]@16 ~@2]/2",
  C: "[~@4 [d4,d5]@2 [f4,f5]@3 ~ [g4,g5]@2 [f4,f5]@2 [a4,a5]@7 ~@3 [a3,a4]@2 [b3,b4]@2 [d4,d5]@2 [e4,e5]@2]/2", // D F G F A B D E
  D: "[f#4,f#5]", E: "[~@2 [e4,e5] [d4,d5] [e4,e5] [f#4,f#5] [d4,d5] [c#4,c#5]@9]/2",
  F: "[a3,a4]@3 ~ [a3,a4] [b3,b4] [d4,d5] [e4,e5]", // A B D E
  G: "[[d4,f#4,d5,f#5]@9 ~ [c#4,e4,c#5,e5]@2 ~@2 [d4,f#4,d5,f#5]@10 ~@2 [c#4,e4,c#5,e5]@2 ~@2 [d4,f#4,d5,f#5]@15 ~@3]/3", // D C#m D C#m D
  H: "~@8 [a3,a4] [b3,b4] d4@2 [e4,e5] ~@3, ~@10 d5 ~@5", // A B E
  I: "[~@2 [g3,g4]@2 a#4@2 [c4,c5]@2 ~@2 [d4,d5]@13 ~ [d4,d5]@2 [c4,c5]@2 [a#3,a#4]@2 [c4,c5]@2, ~@4 a#3 ~@27]/2", // G C D C A# C
  J: "[d4,d5]@6 [c4,c5] [a#3,a#4]", K: "[c4,c5]@15 ~", L: "~@4 [a3,a4] [b3,b4] [d4,d5] [e4,e5]",
  M: "[b3,d4,f#4,b4,d5,f#5]", // Bm
})).s("gm_brass_section").gain(0.45)

// other · string ensemble 1 · "Track 6"
const string_ensemble_1 = note(`<
  ~@8 A@3 B@4 C D E F G ~@8 A@3 B@4 C D E F G ~@9 H I J K L@2 M N O F P Q R ~@17
>`.pickRestart({
  A: "[~@8 a5 b5 d6 ~ e6 ~ f#6@22 e6@4 d6@4 e6@4]/3",
  B: "[c#6@18 ~@2 c#6 d6 c#6 b5 a5 b5 d6 ~ e6 ~ f#6@22 e6@4 d6@4 b5@4]/4", C: "c#6@13 ~@3", D: "~ f#5 a5 c#6", E: "c6",
  F: "g6@3 f6@3 c6@2", G: "d6@15 ~", H: "a6 a#6 a6 f6 d6 ~ a6 a#6 a6 f6 d6@2 a6 a#6 a6 ~",
  I: "a6 a#6 a6 f6 d6 ~ a6 a#6 a6 f6 d6 ~ a6 a#6 a6 ~", J: "d6 d#6 d6 c6 a#5 ~ d6 d#6 d6 c6 a#5 ~ d6 d#6 d6 ~",
  K: "d6 d#6 d6 c6 a#5 ~ d6 d#6 d6 c6 a#5 ~ b5 c#6 d6 e6", L: "f#6 ~ f#6 ~ f#6 ~ f#6@4 e6@2 d6@2 e6@2",
  M: "f#6 ~ f#6 ~ f#6 ~ f#6@4 e6@2 d6@2 e6 ~", N: "f#6 ~ f#6 ~ f#6@2 ~@2 f#6 g6 a6 g6 f#6 c#6 a5 g5", O: "f5@3 c6",
  P: "d6@7 ~", Q: "~@4 a5 b5 d6 e6", R: "f#6@11 ~@5",
})).s("gm_string_ensemble_1").gain(0.45)

// chords · lead 4 chiff · "Track 8"
const lead_4_chiff = note("<~@12 A ~@3 B C D ~@13 B ~@3 E C F ~@10 G H I J K L K M C D ~@20>".pickRestart({
  A: "[a4,c#5] [g4,b4] [f#4,a4] [g4,b4] [a4,c#5]@9 ~@3", B: "[a4,c#5] [g4,b4] [f#4,a4] [g4,b4] [a4,c#5]@8 ~@4", C: "c5",
  D: "a4@7 ~", E: "[a4,c#5] [g4,b4] [f#4,a4] [g4,b4] [a4,c#5]@6 ~@6", F: "a4@15 ~", G: "c5 ~@2 a4 ~@2 c5 ~",
  H: "~ c5 ~@2 a4 ~ c5 ~", I: "d5 ~@2 a#4 ~@2 d5 ~", J: "~ d5 ~@2 a#4 ~ d5 ~", K: "c#5", L: "b4", M: "d5",
})).s("gm_lead_4_chiff").gain(0.17)

// drums · kick
const kick = s("bd").struct("<A B C@18 D C@19 D C@15 D C@3 D C@3 D C@3 D C@3 D C@3 D E ~>".pickRestart({
  A: "~@7 x", B: "~@4 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x!2 ~@2 x ~@3", E: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<A B@19 C B@3 D B@15 C B@3 D B@11 C B@3 C B@3 C B@3 C B@3 C B@3 C ~@2>".pickRestart({
  A: "~@7 x!2 ~ x ~ x ~@3", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!2 ~@2", D: "~@4 x ~@7 x ~ x!2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A B C@2 D C@15 E C@19 E C@15 E C@3 E C@3 E C@3 E C@3 E C@3 E F ~>".pickRestart({
  A: "x!2 ~@2", B: "~ x!7", C: "x!8", D: "x!6 ~ x", E: "x!5 ~ x ~", F: "x!2 ~@6",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<A B@19 C B@19 C B@15 C B@3 C B@3 C B@3 C B@3 C B@3 C ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~ x ~ x", C: "~@2 x ~@4 x",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 B ~@7 A ~@3 A ~@3 A ~@3 B ~@7 A ~@3 A ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<[~@7 x] ~@76 x ~>").gain(0.5)

stack(
  epiano2, bass, clavinet, brass_section, string_ensemble_1, lead_4_chiff, kick, snare, hihat, mid_tom, open_hat, crash
)