Strudelify
KeyB minorTempo183 bpm
0:00/0:00
// boogie body — de Rock The Factoryarr. par Jonathan Paugois
// 183 bpm, 6/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 9 "Rhythm Guitar 1" named as a guitar, played on electric guitar clean (its pad bowed patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5843841; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 40 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(183/6)

// 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 · electric guitar clean · "Rhythm Guitar 1"
const electric_guitar_clean = note("<~@22 A B C D E F ~ D E G@2 ~@7>".pickRestart({
  A: "~@11 d3", B: "e3 f3!5", C: "f#3", D: "~@6 [f4,g#4]@2 ~ [d#4,g4]@2 ~", E: "[d4,f#4] ~@2", F: "g#4 g#4@3",
  G: "[~@3 b3@2 b3 b3@2 b3 [e3,b3,e4]@5 ~@10, ~ [e3,e4] [f#3,f#4] ~@5]/2", // E5 E F#
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · electric guitar clean · "Rhythm Guitar 1" · soft notes · C# D
const electric_guitar_clean_2 = note("<~@2 [[c#4,f4] [d4,f#4]@23] ~@16 [~@3 g#3 ~ f#3@5 ~@2] ~@20>")
  .s("gm_electric_guitar_clean").gain(0.25)

// chords · distortion guitar · "Rhythm Guitar 2"
const distortion_guitar = note(`<
  A@2 B@2 C@2 D@2 E F G H E I G H J K L K L K M N E F G H E F G H J K J K J K M O
>`.pickRestart({
  A: "[~@2 f#3 ~@2 b2 ~@2 f#3 ~@2 b2 ~@2 f#3 ~@2 [b2,f#3] a3@2 a3 e3@2 d3, ~@5 f#3@3 ~@3 f#3@3 ~@10, ~@2 b2 ~ b2 ~ [a2,d3] [e2,a2]]/2", // B5 D5 A5
  B: "[f#3@4 f#3@2 ~@4 b2@2 ~@4 f#3@2 ~@4 b2@2 ~@4 f#3@2 ~@5 [g3,g#3] [a2,d3,a3]@6 e3@4 e3@2, b2@3 ~@2 f#3@3 ~@3 f#3@3 ~@10, ~@6 b2@3 ~@3 b2@3 ~@2 [b2,f#3] ~@3 a2@3]/2", // G#maj7 D5 B5
  C: "[f#3@2 f#3 ~@2 b2 ~@2 f#3 ~@2 b2 ~@2 f#3 ~@2 [b2,f#3] [a2,d3,a3]@3 e3@2 d3, b2@3 ~@2 f#3@3 ~@3 f#3@3 ~@10, ~@2 b2 ~ b2 ~@2 [e2,a2]]/2", // B5 D5 A5
  D: "[f#3@4 f#3@2 ~@4 b2@2 ~@4 f#3@2 ~@4 b2@2 b2@4 [b2,f#3]@2 ~@5 [g3,g#3] [a2,d3,a3]@6 [e2,b2,e3]@6, b2@3 ~@2 f#3@3 ~@3 f#3@3 ~@10, ~@6 b2@3 ~@8 [b2,f#3] ~@6]/2", // B5 G#maj7 D5 E5 B5
  E: "f#3@2 f#3 ~@2 [b2,f#3] f#3@2 f#3 ~@2 [b2,f#3], b2 ~ b2 ~", // B5
  F: "f#3@2 f#3 ~@2 [b2,f#3] [a2,d3,a3]@3 [e2,a2,e3,g#3]@3, b2 ~@3", // B5 D5 Amaj7
  G: "f#3@2 f#3 ~@2 f#3 f#3@2 [b2,f#3] ~@2 [b2,f#3], b2@3 ~@2 b2@3 ~@4", // B5
  H: "f#3@2 f#3 ~@2 [b2,f#3] [a2,d3,a3]@3 [e2,b2,e3]@3, b2 ~@3", // B5 D5 E5
  I: "f#3@2 f#3 ~@2 [b2,f#3] [a2,d3,a3]@3 e3@2 d3, b2 ~@2 [e2,a2]", // B5 D5 A5
  J: "[e3,b3]@2 [e3,b3]@2 ~ [b2,e3,b3] [a2,e3]@2 [a2,e3]@2 ~ [a2,e3], b2 ~@2", // E5 A5
  K: "f#3@2 f#3 ~@2 [b2,f#3] [b2,f#3]@2 [b2,f#3] ~@2 [b2,f#3], b2 ~@3", // B5
  L: "[e3,b3]@2 [e3,b3] ~@2 [b2,e3,b3] [a2,e3]@2 [a2,e3] ~@2 [a2,e3], b2 ~@3", // E5 A5
  M: "f#3@2 f#3 ~@2 [c#3,f#3] f#3@2 f#3 ~@2 [c#3,f#3], c#3 ~ c#3 ~", N: "f#3@2 f#3 f#3@2 f#3 f#3@2 f#3 f#3@2 a3, c#3!4",
  O: "f#3@2 f#3 f#3@2 f#3 f#3@2 f#3 f#3@2 f#3, c#3!4",
})).s("gm_distortion_guitar").gain(0.5)

// bass · fretless bass · "Bass Guitar"
const bass = note("<~@8 A B A B A B A B C A C A C A D E A B A B A B A B C F C F C F D G>".pickRestart({
  A: "b2@2 b2@2 b2@2 d3 ~@3 b2@2 b2@2 b2@2 b2@2 d3 ~@3 b2@2", B: "b2@2 b2@2 b2@2 d3 ~@3 b2@2 a2@6 e2@6",
  C: "e2@2 e2@2 e2@2 a2 ~@3 e2@2 a2@2 a2@2 a2@2 c#3 ~@3 a2@2",
  D: "f#2@2 f#2@2 f#2@2 f#2 ~@3 f#2@2 f#2@2 f#2@2 f#2@2 f#2 ~@3 f#2@2", E: "f#2!11 a2",
  F: "b2@2 b2@2 b2@2 d3 ~@3 b2@2 b2@2 b2@2 b2@2 c#2@2 d2@2 f#2@2", G: "f#2!11 d#2",
})).s("gm_fretless_bass").gain(0.4)

// chords · rock organ · "Synthétiseur Pad"
const rock_organ = note("<A@8 B C B D B C B D E B E B E B F G B C B D B C B D E B E B E B F G>".pickRestart({
  A: "[b3,b4]/4", B: "[b4,d5,f#5]!3 [b4,d5,f#5]@2 ~ [b4,d5,f#5]!3 [b4,d5,f#5]@2 ~",
  C: "[b4,d5,f#5]!3 [b4,d5,f#5]@2 [b4,d5,f#5] [d5,f#5,a5]@2 ~ [b4,e5,g#5]@2 ~", // Bm D E
  D: "[b4,d5,f#5]!3 [b4,d5,f#5]@2 [b4,d5,f#5] [d5,f#5,a5]@2 ~ [e5,g#5,b5]@2 ~", // Bm D E
  E: "[b4,e5,g#5]!3 [b4,e5,g#5]@2 ~ [c#5,e5,a5]!3 [c#5,e5,a5]@2 ~", // E A
  F: "[a#4,c#5,f#5]!3 [a#4,c#5,f#5]@2 ~ [a#4,c#5,f#5]!3 [a#4,c#5,f#5]@2 ~", G: "[a#4,c#5,f#5]!12",
})).s("gm_rock_organ").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@8 A@2 B A@12 ~ A@2 B A@3 B A@8 ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@5 x ~ x",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@10 x!2] ~@7 [~ x ~@2 x!2] ~@24>").gain(0.25)

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

// drums · high tom
const high_tom = s("ht").struct("<x ~@6 [~ x ~ x ~@2 x!2 ~@4] ~@32>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@8 x ~@15 x ~@3 x ~@11>").gain(0.25)

stack(
  electric_guitar_clean, electric_guitar_clean_2, distortion_guitar, bass, rock_organ, snare, low_tom, mid_tom,
  high_tom, crash
)