Strudelify

Blechbuchse roll!

Dolls United

KeyC majorTempo100 bpm
0:00/0:00
// Blechbuchse roll! — Dolls United
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@10 A B A B A B A ~ C D E F C D E F G C G C G C B C A@3 B A@3 B A@3 B A@3 B C D E F C D E F G C G C G C B C ~@8 A@4
  H@2 I ~ C D E F C D E F G C G C G C B C A@3 B A@3 B A@3 B A@3 B C D E F C D E F ~@8 G C G C G C B ~@3
>`.pickRestart({
  A: "~ a2 ~ a2 ~ a2 ~ a2", B: "~ f2 ~ f2 ~ g2 ~ g2", C: "~ c2 ~ c2 ~ c2 ~ c2", D: "~ f2 ~ f2 ~ c2 ~ c2",
  E: "~ g2 ~ g2 ~ c2 ~ c2", F: "~ d2 ~ d2 ~ g2 ~ g2", G: "~ g2 ~ g2 ~ g2 ~ g2", H: "~ d2 ~ d2 ~ d2 ~ d2",
  I: "~ f2 ~ f2 ~ f2 ~ f2",
})).s("gm_synth_bass_1").gain(0.36)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@10 A B A C A B A D E F G H E F G H A I A I A I B I J K J L J K J L J K J L J K J L E F G H E F G H A I A I A I B I
  ~@8 M N O P Q R S T E F G H E F G H A I A I A I B I J K J L J K J L J K J L J K J L E F G H E F G H ~@8 A I A I A I B
  ~@3
>`.pickRestart({
  A: "~@2 c4 ~ d4 ~ c4 ~ g4 ~@2 b3 ~@2 c4 ~", B: "~@2 c4 ~ d4 ~ c4 ~ f4 ~@2 b3 ~@2 c4 ~",
  C: "~@2 c4 ~ d4 ~ c4 ~ f4 ~ e4 ~ d4 ~ c4 ~", D: "[f3,f4]!8 [g3,g4]!8", E: "[c3,c4]!16", F: "[f3,f4]!8 [c3,c4]!8",
  G: "[g3,g4]!8 [c3,c4]!8", H: "[d3,d4]!8 [g3,g4]!8", I: "~@2 c4 ~ d4 ~ c4 ~ e4 ~ c4 ~ d4 ~ c4 ~",
  J: "~@2 a4 ~@3 a4 ~@3 a4 ~@3 a4 ~", K: "~@2 a4 ~@3 a4 ~ a4 ~ c5 ~ a4 ~ g4 ~", L: "f4 ~ f4 ~ g4 ~ g4 ~",
  M: "~@4 c5 ~ c5 ~ c5 ~ e5 ~ e5 ~ c5 ~", N: "g5 ~ g5 ~ g5 ~ b4 ~ b4 ~ c5 ~ c5 ~ a4 ~",
  O: "a4 ~ a4 ~ b4 ~ b4 ~ b4 ~ e5 ~ e5 ~ b4 ~", P: "g5 ~ g5 ~ g5 ~ a4 ~ a4 ~ b4 ~ b4 ~ g4 ~",
  Q: "g4 ~ g4 ~ a4 ~ a4 ~ a4 ~ c5 ~ c5 ~ a4 ~", R: "f5 ~ f5 ~ f5 ~ f4 ~ f4 ~ a4 ~ a4 ~ f4 ~",
  S: "f4 ~ f4 ~ a4 ~ a4 ~ a4 ~ c5 ~ c5 ~ f5 ~", T: "f5 ~@15",
})).s("gm_synth_brass_1").gain(0.2).pan(0.4)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@10 A B A B A B A ~@9 C D C D C D E D F G F H F G F H F G F H F G F H ~@8 C D C D C D E D ~@15 I ~@8 C D C D C D E D
  F G F H F G F H F G F H F G F H ~@16 C D C D C D E ~@3
>`.pickRestart({
  A: "[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~@2 [a4,e5] ~@2 [a4,e5] ~", // A5
  B: "[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~@2 [g4,d5] ~@2 [a4,e5] ~", // A5 G5 A5
  C: "~@2 c5 ~ d5 ~ c5 ~ g5 ~@2 b4 ~@2 c5 ~", D: "~@2 c5 ~ d5 ~ c5 ~ e5 ~ c5 ~ d5 ~ c5 ~",
  E: "~@2 c5 ~ d5 ~ c5 ~ f5 ~@2 b4 ~@2 c5 ~", F: "~@2 a3 ~@3 a3 ~@3 a3 ~@3 a3 ~",
  G: "~@2 a3 ~@3 a3 ~ a3 ~ c4 ~ a3 ~ g3 ~", H: "f3 ~ f3 ~ g3 ~ g3 ~",
  I: "[g3,g4]!3 ~ [g3,g4] ~ [g3,g4] ~ [g3,g4]!3 ~ [g3,g4]@3 ~", // G
})).s("gm_lead_2_sawtooth").gain(0.24).pan(0.6)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<A@7 ~ B@2 ~@56 C@7 ~ D@7 ~@59>".pickRestart({
  A: "[[a2,a3,c4]@31 [g2,g3,b3]@32 [a2,f3,a3,d4]@32 [g2,g3,b3,e4]@16 ~, e4@9 ~@7]/7", B: "a1/2",
  C: "[[a2,a3,c4]@31 [g2,g3,b3]@32 [a2,f3,a3,d4]@32 [e2,g3,b3,e4]@16 ~, e4@9 ~@7]/7", // Am G Dm Em
  D: "[[a2,a3,c4]@31 [g2,g3,b3]@32 [a2,d4]@32 [f2,c4]@16 ~, e4@63 [f3,a3]@48 ~]/7", // Am G D5 F5 F
})).s("gm_synth_strings_1").gain(0.24)

// other · pad new age · "FANTASIA"
const pad_new_age = note("<~@66 A B@2 C@2 D@2 E A B@2 C@2 F@3 ~@58>".pickRestart({
  A: "~ c6 e6 c6", B: "[g6@2 b5@2 c6@2 a5@3 ~ b5@2 e6@2 b5@2]/2", C: "[g6@2 a5@2 b5@2 g5@3 ~ a5@2 c6@2 a5@2]/2",
  D: "[f6@2 f5@2 a5@2 f5@3 ~ b5@2 d6@2 b5@2]/2", E: "g6@3 ~@5", F: "[f6@2 f5@2 a5@2 f5@3 ~ a5@2 c6@2 f6@4 ~@6]/3",
})).s("gm_pad_new_age").gain(0.28).pan(0.6)

// bass · synth bass 1 · "+SYNBASS 3"
const bass_2 = note("<~@42 A@3 B A@3 B ~@56 A@3 B A@3 B ~@26>".pickRestart({
  A: "a2 ~ e3 ~ a3 ~ e3 ~ g3 ~ a3 ~ e3 ~ g3 ~", B: "f2 ~ c3 ~ f3 ~ c3 ~ g2 ~ d3 ~ g3 ~ d3 ~",
})).s("gm_synth_bass_1").gain(0.16)

// other · trumpet
const trumpet = note(`<
  ~@18 A B C D A B C E F G@2 H F I J K ~@16 A B C D A B C E F G@2 H F I J K ~@16 A B C D A B C E F G@2 H F I J K ~@16 A
  B C D A B C L A B C L A B C E F G@2 H F I J K ~@2
>`.pickRestart({
  A: "c4 ~ c4 ~ c4@2 ~ e4 g4 ~ g4 ~ g4@2 ~@2", B: "a4 ~ a4 ~ a4@2 ~@2 g4 ~ g4 ~ g4@2 ~@2",
  C: "f4 ~ f4 ~ f4@2 ~@2 e4 ~ e4 ~ e4@2 ~ e4", D: "d4 ~ e4 ~ f#4 ~ d4 ~ g4 ~ g4 ~ g4@2 ~@2",
  E: "d4 ~ e4 ~ f#4 ~ d4 ~ g4 ~@2 c5 b4 ~ a4 ~", F: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~", G: "g4 ~@10 g4!2 ~@2 g4",
  H: "g4 ~@10 c5 b4 ~ a4 ~", I: "g4 ~@9 g4 ~ g4 ~@2 g4", J: "a4 ~@6 a4 b4 ~@6 b4", K: "c5 ~@15",
  L: "d4 ~ e4 ~ f#4 ~ d4 ~ g4 ~@7",
})).s("gm_trumpet").gain(0.28)

// other · music box
const music_box = note("<~@66 A B C D E F G H A B C D E F I ~@59>".pickRestart({
  A: "~@4 c5@3 ~ e5@2 ~@2 c5@3 ~", B: "g5@3 ~ b4@2 ~@2 c5@3 ~ a4@3 ~", C: "~@4 b4@3 ~ e5@2 ~@2 b4@3 ~",
  D: "g5@3 ~ a4@2 ~@2 b4@3 ~ g4@3 ~", E: "~@4 a4@3 ~ c5@2 ~@2 a4@3 ~", F: "f5@3 ~ f4@2 ~@2 a4@3 ~ f4@3 ~",
  G: "~@4 b4@3 ~ d5@2 ~@2 b4@3 ~", H: "g5@3 ~@13", I: "~@4 a4@3 ~ c5@3 ~ f5@4",
})).s("gm_music_box").gain(0.2).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A B C B D B C B D B C B E B C B E B C B E B C B E B C B D B C B D B C B D B C B D B C B E B C B E B C B E B C B E
  F ~@7 B C B C B C B C B C B E B C B E B C B E B C B E B C B D B C B G B C B D B C B D B C B E B C B E B C B E B C B E
  B C B E B C B F ~@2
>`.pickRestart({
  A: "~@8 x!3 ~ x!4", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x ~@2 x!2 ~@3 x ~@2 x!2 ~ x ~",
  E: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", F: "x", G: "x!5 ~@3 x ~@2 x!2 ~ x ~",
})).gain(0.63)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B C@7 D E F@6 G E F@2 G E F@3 C@14 A@2 E F@6 G E F@2 G E F@3 ~@14 D@2 E F@6 G E F@2 G E F@3 C@14 A@2 E F@6 G E
  F@6 G E F@2 G E F@2 ~@3
>`.pickRestart({
  A: "x!16", B: "x!6 ~ x!9", C: "~ x ~ x", D: "x!5 ~ x!10", E: "x!8 ~ x!7", F: "~ x!7 ~ x!7", G: "~ x!15",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@10
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!56
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!63
  x
  ~@2
>`).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~ x ~ x ~ x ~ x]!56 ~@8 [~ x ~ x ~ x ~ x]!63 ~@3>").gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@6 B A ~@2 C ~@3 D A ~@3 A ~@3 A ~@7 A ~@6 D A ~@2 C ~@3 D A ~@3 A ~@3 A ~@7 A ~@6 D A ~@2 C ~@3 D A ~@3 A ~@3
  A ~@7 A ~@6 D A ~@2 C ~@3 D A ~@2 C A ~@2 C A ~@3 A ~@2 A ~@2
>`.pickRestart({
  A: "x", B: "x!4", C: "~@3 x", D: "x!3 ~",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~@10 A@7 ~@9 A@8 ~@16 A@16 ~@24 A@8 ~@32 A@7 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.44)

stack(
  bass, synth_brass_1, lead_2_sawtooth, synth_strings_1, pad_new_age, bass_2, trumpet, music_box, kick, snare, hihat,
  open_hat, crash, tambourine
)

More by Dolls United