Strudelify

The Conductor's Train

Pascal Michael Stiefel

KeyA majorTempo98 bpm
0:00/0:00
// The Conductor's Train — Pascal Michael Stiefel
// 98 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Alto Saxophone" named as a reed, played on alto sax (its slap bass 1 patch is not one); ch 2 "Electric Guitar" named as a guitar, played on electric guitar clean (its slap bass 2 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5934719; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 30 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@9 A B C D B E@2 B D E F B@2 G H G I J K G L>".pickRestart({
  A: "~@2 c4 ~@2 d4 ~@2 e4 ~@2 d4 ~@4", B: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~",
  C: "~@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~", // E
  D: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  E: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", G: "~@2 c5 ~@2 a4 ~@2 c5 ~@2 a4 ~@4",
  H: "~@2 e5 ~@2 c5 ~@2 d5 ~@2 c5 ~@4", I: "~@2 e5 ~@2 d5 ~@2 c5 ~@2 a4 ~@4", J: "~@2 f5 ~@2 c5 ~@2 f5 ~@2 c5 ~@4",
  K: "~@2 f5 ~@2 c5 ~@2 e5 ~@2 d5 ~@4", L: "~@2 c5 ~@2 d5 ~@2 e5 ~@2 d5 ~@4",
})).s("gm_electric_guitar_clean").gain(0.25)

// other · banjo
const banjo = note("<~@2 A B C D E F G H ~@12 A B C D E F G ~>".pickRestart({
  A: "g4 c4 e4 g3 c4 e4 g3 c4 e4 g3 c4 e4 g4 g3 c4 e4", B: "g3 g#3 b3 g#3 e4 d4 b3 e4 d4 b3 e4 d4 e4 b3 ~@2",
  C: "e4@2 c5@3 c5 a4 e4 c5 a4 e4 c5 a4 e4 ~@2", D: "g4@2 e4 g3 c4 e4 g3 c4 e4 g3 c4 e4 g4 g3 c4 e4",
  E: "f4@2 a4@3 a4 c4 f4 a4 c4 f4 a4 c5 a4 f4 a4", F: "g#4@2 f5@3 f5 c5 a4 f5 c5 a4 f5 c5 a4 ~@2",
  G: "g4@2 e4 g3 c4 e4 g3 c4 e4 g3 c4 e4 g4 g3 c4 d4", H: "e4@2 c5 ~@2 d5 ~@2 e5 ~@2 d5 ~@4",
})).s("gm_banjo").gain(0.25)

// other · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note("<~@9 A ~@7 B C D E F G H G I J K G A>".pickRestart({
  A: "~@2 c4 ~@2 d4 ~@2 e4 ~@2 d4 ~@4", B: "~@7 [c#4,d4]", C: "[d4,d#4]@2 d4 ~ c4 ~ d4 c4@4 ~@3 a3@2",
  D: "e3@2 ~@4 c3 g3 [g3,a3] g3 ~ e3@3 d3@2", E: "c3@4 ~@6 c3 g2 e2 g2 e2@2", F: "c2 ~@3",
  G: "~@2 c4 ~@2 a3 ~@2 c4 ~@2 a3 ~@4", H: "~@2 e4 ~@2 c4 ~@2 d4 ~@2 c4 ~@4", I: "~@2 e4 ~@2 d4 ~@2 c4 ~@2 a3 ~@4",
  J: "~@2 f4 ~@2 c4 ~@2 f4 ~@2 c4 ~@4", K: "~@2 f4 ~@2 c4 ~@2 e4 ~@2 d4 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · piano
const piano = note("<A B C D E C F@2 C G C D E C F@2 C E H I C@3 D E C F@2 C G>".pickRestart({
  A: "c3 ~ [e3,g3] ~ g2 ~ [e3,g3] ~ c3 ~ [e3,g3] ~ g2 ~ [e3,g3] ~", // Em
  B: "c3 ~ [e3,g3] ~ g2 ~ [e3,g3] ~ c3 ~ [g2,g3] ~ a2 ~ b2 ~", // Em G
  C: "c3 ~ [e3,g3,c4,e4,g4] ~ g2 ~ [e3,g3,c4,e4,g4] ~ c3 ~ [e3,g3,c4,e4,g4] ~ g2 ~ [e3,g3,c4,e4,g4] ~", // C
  D: "e3 ~ [g#3,b3,e4,g#4] ~ b2 ~ [g#3,b3,e4,g#4] ~ e3 ~ [g#3,b3,e4,g#4] ~ b2 ~ [g#3,b3,e4,g#4] ~", // E
  E: "a2 ~ [c3,e3,c4,e4,a4] ~ e2 ~ [c3,e3,c4,e4,a4] ~ a2 ~ [c3,e3,c4,e4,a4] ~ e2 ~ [c3,e3,c4,e4,a4] ~", // Am
  F: "f3 ~ [a3,c4,f4,a4] ~ c3 ~ [a3,c4,f4,a4] ~ f3 ~ [a3,c4,f4,a4] ~ c3 ~ [a3,c4,f4,a4] ~", // F
  G: "c3 ~ [e3,g3,c5] ~ d3 d5 [f3,a3] ~ [e3,e5] ~ [g#3,b3] d5 e3 ~ [g#3,b3] ~", // C F E G#m
  H: "f3 ~ [a3,c4] ~ c3 ~ [a3,c4] ~ f3 ~ [a3,c4] ~ c3 ~ [a3,c4] ~", // Am
  I: "g3 ~ [b3,d4] ~ d3 ~ [b3,d4] ~ g3 ~ [b3,d4] ~ d3 ~ [b3,d4] ~", // Bm
})).s("gm_piano").gain(0.25)

// bass · acoustic bass
const bass = note("<A B C D E F G H C I C D E F H@2 F J H K C@3 D E F G H C I>".pickRestart({
  A: "c2 ~ g1 ~ c2 ~ g1 ~", B: "c2@2 ~@2 g1@2 ~@2 c2 ~ g1 ~ a1 ~ b1 ~", C: "c2 g1 c2 g1", D: "e2@4 b1@4 e2@4 b1@3 a1",
  E: "a1 e1 a1 e1", F: "c2 g2 c2 g2", G: "f2@4 c2@4 f2@4 c2@3 c2", H: "f2 c2 f2 c2", I: "c2 d2 e2 b1", J: "a1 e2 a1 e2",
  K: "g2 d2 g2 d2",
})).s("gm_acoustic_bass").gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!19 ~ [~ x ~ x]!8>").gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!19 ~ [~ x ~ x]!8>").gain(0.2)

// drums · ride
const ride = s("rd").struct("<~@2 [x!8]!19 ~ [x!8]!8>").gain(0.2)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<A B A C D A@6 C D A@5 E F G H A C D A@5>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x!2 ~ x ~", C: "~@2 x ~@3 x!2 ~@2 x ~@3 x ~", D: "~@2 x ~@3 x ~@3 x ~@3 x!2",
  E: "~@2 x!2 ~@2 x ~@3 x ~@3 x ~", F: "x ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", G: "~@2 x ~@3 x!2 ~@2 x!2 ~@2 x!2",
  H: "~@2 x ~@3 x ~@4 x!2 ~ x ~",
})).gain(0.36)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~ [x ~@4 x ~ x] ~@16 [~ x!3]!2 [x!4] [x ~ x ~ x!2 ~@2] ~@8>").gain(0.36)

// drums · shaker
const shaker = s("sh").struct("<~@2 A B@2 A B@2 A B A B@2 A B@2 A B@4 ~ A B@2 A B@2 A B>".pickRestart({
  A: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", B: "~ x ~ x ~ x ~ x",
})).gain(0.2)

stack(
  electric_guitar_clean, banjo, acoustic_guitar_steel, piano, bass, kick, snare, clap, ride, woodblocks, woodblocks_2,
  shaker
)