Strudelify

Quietsche-Entchen (feat. Ernie)

Cosmix

KeyB♭ majorTempo152 bpm
0:00/0:00
// Quietsche-Entchen (feat. Ernie) — Cosmix
// 152 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(152/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(`<
  ~@8 A B C D A B C D A E A E A E A E A E A F A E A ~ A B C D A B C D A B C D A B C D A B C D A B C D A E A E A E A E A
  E A F A E A G ~@8 A B C D A B C D A E A E A E A E A E A F A E A G
>`.pickRestart({
  A: "bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3", B: "eb2 eb3 eb2 eb3 eb2 eb3 eb2 eb3", C: "f2 f3 f2 f3 f2 f3 f2 f3",
  D: "ab2 ab3 ab2 ab3 ab2 ab3 ab2 ab3", E: "eb2 eb3 eb2 eb3 f2 f3 f2 f3", F: "eb2 eb3 eb2 eb3 gb2 gb3 gb2 gb3",
  G: "f2 f3 f2 f3 f2 f3 f2 ~",
})).s("gm_synth_bass_1").gain(0.54)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A B C D E B C F A B C D E B C D G ~@15 H I J K L M N O P Q@14 ~@17 A B C D E B C R A B C D E B C D G ~@15
>`.pickRestart({
  A: "bb2@2 bb3@2 [bb2,bb4]@2 bb3@2 bb4@2 ~ g4 ab4 ~ eb4 g4, ~@8 ab4 ~ bb3@2 ~@4", // Bb
  B: "eb2@2 bb3@2 [eb2,bb4]@2 bb3@2 bb4@2 ~ g4 ab4 ~ bb4 g4, ~@2 eb4 ~@5 ab4 ~ bb3@2 ~@4", // Eb5
  C: "f2@2 bb3@2 [f2,bb4]@2 bb3@2 bb4@2 ~ g4 ab4 ~ eb4 g4, ~@2 bb4 ~@5 ab4 ~ bb3@2 ~@4", // Bb5
  D: "ab2 bb3 [ab2,bb4] bb3 [ab4,bb4] [bb3,g4] ab4 [g4,bb4], ~@2 eb4 ~@13", // Absus2 Eb Gm
  E: "[bb2,ab4]@2 [bb3,bb4]@2 [bb2,bb4]@2 bb3@2 bb4@2 ~ g4 ab4 ~ eb4 g4, ~@8 ab4 ~ bb3@2 ~@4", // Bb7 Bb
  F: "ab2 bb3 [ab2,bb4] bb3 bb4 bb3 ~@2, ~@2 eb4 ~@13", G: "ab4 bb4 ~@6", H: "bb4 f5 bb4 f5 bb4 f5 ab5 [f5,bb5]",
  I: "[eb4,ab5] [bb4,bb5] eb4 bb4 eb4 bb4 db5 bb4", J: "[f4,db5] [bb4,c5] f4 c5 f4 c5 eb5 [c5,f5]",
  K: "[ab4,eb5] [eb5,f5] ab4 eb5 ab4 eb5 gb5 eb5", L: "[bb2,bb4,gb5] [bb3,eb5,f5] bb4 f5 bb4 f5 ab5 [f5,bb5]",
  M: "[bb2,eb4,ab5] [bb3,bb4,bb5] eb4 bb4 eb4 bb4 db5 bb4", N: "[bb2,f4,db5] [bb3,bb4,c5] f4 c5 f4 c5 eb5 [c5,f5]",
  O: "[bb2,ab4,eb5] [bb3,eb5,f5] ab4 eb5 ab4 eb5 gb5 eb5", P: "[bb2,gb5] [bb3,eb5] ~@6", Q: "bb2 bb3 ~@6",
  R: "~@2 eb4 ~@13",
})).s("gm_lead_2_sawtooth").gain(0.27)

// chords · lead 2 sawtooth · "SAW WAVE" · soft notes
const lead_2_sawtooth_soft = note(`<
  A B C D E B C D A B C D E B C D F ~@15 G H I J K L M N O P@14 ~@17 A B C D E B C Q A B C D E B C D F ~@15
>`.pickRestart({
  A: "~@8 bb2@3 ~ bb4@2 bb3@2", B: "ab4 ~@2 g4 ~@2 eb4 ~ eb2@3 ~ bb4@2 bb3@2", C: "ab4 ~@2 g4 ~@4 f2@3 ~ bb4@2 bb3@2",
  D: "ab4 ~@2 g4 ~@2 eb4 ~ ab2@3 ~ bb4@2 bb3@2", E: "~@2 g4@2 ab4@2 ~@2 bb2@3 ~ bb4@2 bb3@2", F: "~ g4 ab4 bb4 ~@4",
  G: "~@6 bb4 ~", H: "bb4 f5 ab5 bb5 ~@2 eb4 ~", I: "eb4 ~ db5 bb4 ~@2 f4 ~", J: "f4 c5 ~ f5 ~@2 ab4 ~",
  K: "ab4 ~@2 eb5 bb2 bb3 bb4 ~", L: "bb4 f5 ab5 bb5 bb2 bb3 eb4 ~", M: "eb4 ~@2 bb4 bb2 bb3 f4 ~",
  N: "f4 c5 ~ f5 bb2 bb3 ab4 ~", O: "ab4 ~ gb5 eb5 bb2 bb3 ~@2", P: "~@4 bb2 bb3 ~@2", Q: "ab4 ~@2 g4 ~@2 eb4 ~@9",
})).s("gm_lead_2_sawtooth").gain(0.14)

// bass · lead 2 sawtooth · "SAW WAVE"
const bass_2 = note(`<
  A B C D A B C E A B C D A B C D ~@16 A B C D A B C D ~@8 A B C D A B ~@18 A B C D A B C ~ A B C D A B C D ~@16
>`.pickRestart({
  A: "bb2!16", B: "eb2!16", C: "f2!16", D: "ab2!16", E: "ab2!8 ~@8",
})).s("gm_lead_2_sawtooth").gain(0.37).pan(0.4)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<~@16 A@7 B@6 C@3 ~@24 A@7 B@6 C@3 ~@16 A@7 B@6 C@3>".pickRestart({
  A: "[[d4,f4]@2 [eb4,g4] [c4,a4] d4@2 [eb4,g4] [c4,a4] d4@2 [eb4,g4] [c4,a4] [d4,bb4]@2, bb4@3 f4@3 ~ f4@3 ~ f4@3, ~@4 bb4@3 ~ bb4@3 ~@3]/7", // Dm Eb F Eb F Eb F Gm
  B: "[[eb4,g4] [c4,a4] d4@2 [eb4,g4] [c4,a4] d4@2 g4 gb4 [d4,f4]@2, ~ f4@3 ~ f4@3 eb4@2 ~@2, ~@2 bb4@3 ~ bb4@6]/6", // Eb F Eb F Dm
  C: "[[eb4,g4] [c4,a4] [d4,bb4]@2 [c4,a4]@2, ~ f4@5]/3", // Eb F Gm F
})).s("gm_pad_warm").gain(0.17)

// chords · trumpet
const trumpet = note(`<
  ~@16 A B C D E F G D H I J K L I M N ~@24 A B C D E F G D H I J K L I M N ~@16 A B C D E F G D H I J K L I M N
>`.pickRestart({
  A: "~@2 d5@2 ~ d5@3, bb3", B: "[eb4,g4]@4 a4@2 c5 db5, ~ c4", C: "d5@3 ~ d5@4 d5@6 ~@2, bb3",
  D: "d5 c5 bb4@2 [a3,c5]@4, g3 ~", E: "~@4 bb4@3 ab4 g4@7 ~, bb3", F: "[eb4,g4] [c4,a4]", G: "~@4 d5@3 ~ d5@7 ~, bb3",
  H: "bb3", I: "g3 a3", J: "bb3@15 ~", K: "g3 gb3", L: "f3", M: "bb3@7 ~", N: "[f3,c5]@2 ~@2 [f3,c5]@3 ~@9",
})).s("gm_trumpet").gain(0.27).pan(0.4)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@24 A B@2 C D E F ~@33 A B@2 C D E F ~@25 A B@2 C D E F ~>".pickRestart({
  A: "~@2 f4@2 g4@3 ~ ab4@3 ~ g4@3 ~, ~@2 d4@6 d4@7 ~",
  B: "[~@4 eb5@3 ~ c5@2 ~@2 a4@3 ~ [d4,f4]@6 ~@2 f4@3 ~ gb4@3 ~, [eb4,g4]@8 ~@3 bb4@2 ~@2 g4@2 ~@7 d4@7 ~]/2", // Dm Eb
  C: "[eb4,g4]@7 ~ [eb4,gb4]@7 ~", D: "~@2 f4@2 g4@3 ~, ~@4 d4@9 ~@3", E: "[eb4,g4]@7 ~ [f4,a4]@6 ~@2",
  F: "~@4 [f4,bb4] ~@2 [f4,bb4]!2 ~@7", // Bb5
})).s("gm_electric_guitar_jazz").gain(0.37).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@80 A@8 ~@16>".pickRestart({
  A: "[bb5,bb6]/8", // Bb
})).s("gm_string_ensemble_1").gain(0.18).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!46 x ~ [x!4]!16 ~@7 x [x!4]!24>").gain(0.66)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@7 B C@6 A B C@6 A B A@20 B@2 ~@2 C@6 A B C@6 A B ~@8 A@7 B C@6 A B C@6 A ~
>`.pickRestart({
  A: "~ x ~ x", B: "x!16", C: "~@4 x ~@7 x ~@2 x",
})).gain(0.39)

// drums · clap
const clap = s("cp").struct("<~@32 A B A B A B A B A B A B A B A B A B A B A B ~@26 A B A B A B A B ~@16>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.39)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@8 ~@8 A@8 ~@8 A@32 ~@4 A@3 ~ A@23 B>".pickRestart({
  A: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", B: "x",
})).gain(0.39)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A@3 B ~@8 A@8 ~@8 A@8 ~@32 A@4 ~@28>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!3 [~ x ~ x ~@4] [~ x ~ x ~ x ~ x]!71 ~ [~ x ~ x ~ x ~ x]!23 ~>")
  .gain(0.39)

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

stack(
  bass, lead_2_sawtooth, lead_2_sawtooth_soft, bass_2, pad_warm, trumpet, electric_guitar_jazz, string_ensemble_1, kick,
  snare, clap, hihat, hihat_soft, open_hat, crash
)