Strudelify

Speciale aanbieding

Het Goede Doel

KeyD minorTempo136 bpm
0:00/0:00
// Speciale aanbieding — Het Goede Doel
// 136 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 C@2 D E D F G H G I J K L M N O P Q D E D F G H G I J K L M N O P Q R S T U R S T U V W X U R S T
  U R S T U V W X U D E D F G H G I J K L M N O P Q R S T U R S T U V W X U Y Z AA V Y Z AA V AB AC AD AE R S T U R S T
  U V W X U R S T U R S T U V W X U R S T U R S T U V W X U R S T AF ~@9
>`.pickRestart({
  A: "[e1@2 a1@2 b1@2 c2@4 b1@2 a1@2 c2@4 b1@2 a1@2 c2@4 b1@2 a1@2 e1 ~]/2",
  B: "[e1 a1 b1 c2@2 b1 a1 c2@2 b1 a1 c2@2 b1 a1 ~]/2", C: "[e1 a1 b1 c2@2 b1 a1 c2@2 b1 a1@6]/2",
  D: "d2 ~ d2 ~ d2@2 ~ d2", E: "~ d2!2 ~ c2 ~ db2 ~", F: "~@2 d2 ~ d2@2 ~@2 f2@2 ~@2 f2@2 ~@2",
  G: "d2@2 ~@2 d2@2 ~@2 d2@3 ~@3 d2@2", H: "~@2 d2 ~ d2@2 ~@2 c2@2 ~@2 db2@2 ~@2",
  I: "~@2 d2 ~ d2@2 ~@2 d2 ~ a2 ~ f2 ~ g2 ~", J: "bb1 ~ bb1 ~ bb1 ~@2 bb1",
  K: "~@2 bb1 ~ bb1@2 ~@2 bb1@2 bb2@2 a1@2 a2@2", L: "g1 ~ g1 ~ g1 ~@2 g1", M: "~ g1!2 ~ g1 ~ g1 ~",
  N: "a1 ~ a1 ~ a1 ~@2 a1", O: "~@2 a1@2 a1@2 ~@2 a1@2 a1@2 a2 g2 e2 ~", P: "a1@2 ~@2 a1@2 ~@2 a1@3 ~@3 a1@2",
  Q: "~@2 a1@5 ~", R: "d2 ~ d2 ~ d2 ~@2 a1", S: "d2@2 e2@2 f2@2 e2@2 ~@2 d2 ~ a1@2 ab1@2", T: "g1 ~ g1 ~ g1 ~ g1 ~",
  U: "a1 ~ a1 ~ a1 ~ a1 ~", V: "bb1 ~ bb1 ~ c2 ~ c2 ~", W: "d2 ~ d2 ~ d2 ~ d2 ~", X: "g1 ~ g1 ~ g1 ~ a1 ~",
  Y: "~@3 d2 f2 g2 a2 c2", Z: "~@6 c2@2 e2@3 ~ f2@2 g2@2", AA: "d2@2 ~@4 a1@2 d2@2 e2 ~ f2@2 d2@2",
  AB: "bb1 ~ bb1 ~ bb1@2 ~@4 bb1 ~ bb1 ~ bb1 ~", AC: "~@2 bb1 ~@3 bb1 ~@3 bb1 ~ bb1 ~ bb1 ~",
  AD: "a1 ~ a1 ~ a1 ~@3 a1 ~ g1@2 a1 ~ g1@2", AE: "a1 ~ db2 ~ e2 ~ db2 ~ e2@2 g2 ~ a2 ~ db3 ~", AF: "a1 ~@7",
})).s("gm_synth_bass_1").gain(0.55)

// bass · synth bass 1 · "SYN BASS" · soft notes
const bass_soft = note("<~@147 A B C D E F G H E ~>".pickRestart({
  A: "~@2 a1 ~ a1 ~ a1 ~", B: "d2 ~ d2 ~ d2 ~@2 a1", C: "d2@2 e2@2 f2@2 e2@2 ~@2 d2 ~ a1@2 ab1@2",
  D: "g1 ~ g1 ~ g1 ~ g1 ~", E: "a1 ~ a1 ~ a1 ~ a1 ~", F: "bb1 ~ bb1 ~ c2 ~ c2 ~", G: "d2 ~ d2 ~ d2 ~ d2 ~",
  H: "g1 ~ g1 ~ g1 ~ a1 ~",
})).s("gm_synth_bass_1").gain(0.21)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@4 A@2 B ~ C@2 B ~@57 D ~ E ~ E ~ D ~@82>".pickRestart({
  A: "[e5,g5,a5,c6]/2", B: "[e5,g5,a5,c6] ~@7", C: "[[e5,g5,a5,c6]@15 ~]/2", D: "[a4,c5,d5,f5]@9 ~@7",
  E: "[a4,c5,d5,f5] ~", // Dm7
})).s("gm_acoustic_guitar_steel").gain(0.57)

// chords · rock organ · "ORGAN 3"
const rock_organ = note("<~@11 A B ~@83 C@2 D@2 C@2 D@2 E@2 F@2 ~@49>".pickRestart({
  A: "~ [g4,a4,c5,e5]@3", B: "[a4,d5,f5]", C: "[[f6,a6] [e6,g6], c6]/2", D: "[a6@2 bb5 [c6,e6,g6], [d6,f6]@3 ~]/2",
  E: "[bb5,d6,f6]/2", F: "[~@8 a5@7 ~ db6@15 ~, [e6,a6]@15 ~]/2",
})).s("gm_rock_organ").gain(0.31)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@20 A@2 B@2 C@2 ~@10 A@2 B@2 C@2 ~@10 D E F@2 ~@8 D E F@2 G@2 H@2 I@2 J@2 K@4 L@4 ~@8 M E F@2 ~@20 D E F@2 ~@8 D E
  F@2 ~@8 D E F@2 ~@13
>`.pickRestart({
  A: "[g4@6 g4 ~@7 f4@17 ~]/2", B: "[d5@5 ~ d5@4 c5@2 a4@12 g4@4 f4@4]/2", C: "[e4@21 ~@11]/2",
  D: "[d4,f4]@8 [c4,e4,g4]@7 ~, bb3@3 ~@5", E: "[d4,f4,a4]@7 ~", F: "[[g3,bb3,d4]@11 ~ [a3,db4,e4]@20]/2",
  G: "[~@8 a3@2 c4@2 a3@2 f4@15 ~@3]/2", H: "[~@4 a3 c4 a3 d4@8 ~]/2", I: "[~@4 a3 c4 a3 [d4,f4,a4]@8 ~]/2",
  J: "[~@8 a3@2 c4@2 a3@2 d4@15 ~@3]/2",
  K: "[~ g4@5 g4@8 f4@13 ~ f4 ~ g4 ~ d5@5 ~ d5@8 g5@5 ~ g5@3 ~ g5 f5 e5@2 d5@2 e5@2, ~@31 a4@2 ~@31]/4",
  L: "[db5@14 a5@15 ~ a5@15 ~ a5@11 ~@7]/4", M: "[d4,f4] [c4,e4,g4], bb3@3 ~@5",
})).s("gm_electric_guitar_clean").gain(0.56)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note("<~@152 A B C@2 ~>".pickRestart({
  A: "[d4,f4]@8 [c4,e4,g4]@7 ~, bb3@3 ~@5", B: "[d4,f4,a4]@7 ~", C: "[[g3,bb3,d4]@11 ~ [a3,db4,e4]@20]/2",
})).s("gm_electric_guitar_clean").gain(0.32)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note(`<
  ~@27 A B@4 C@2 D@2 E@4 F@4 G@3 H I@3 H J K L@2 G@3 H I@3 H J K L@2 B@4 C@2 D@2 E@4 F@4 G@3 H I@3 H J K L@2 M@2 N@2 O@4
  P@2 Q@2 G@3 H I@3 H J K L@2 G@3 H I@3 H J K L@2 G@3 H I@3 H J K L@2 G@3 H I@3 ~@6
>`.pickRestart({
  A: "~@2 [g4,g5] [ab4,ab5]", B: "[[d5,f5,a5]@24 [c5,e5,g5]@7 [d5,f5,a5]@25 g5@4 ab5@4]/4",
  C: "[[d5,f5,a5]@23 [c5,e5,g5]@9]/2", D: "[d5,f5,a5]/2", E: "[[bb4,d5,f5]@30 ~@2 g4@31 ~, ~@31 [bb4,d5]@31 ~@2]/4",
  F: "[[db5,e5]@15 [db5,f5]@15 ~@2 [db5,g5]@15 [a4,db5,e5,a5]@17, a4@23 ~@9, ~@31 e5@15 ~@18]/4", // Dbm Db Dbdim A
  G: "[a4@2 [g4,bb4], d5@47 ~, f4@5 ~@3]/3", H: "[a4,db5,e5]", I: "[a4@31 ~ [g4,bb4]@16, [d5,f5]]/3",
  J: "[d5,f5] [c5,e5,g5], bb4@3 ~@5", K: "[d5,f5,a5]@7 ~", L: "[[g4,bb4,d5]@3 [a4,db5,e5]@5]/2",
  M: "[[f5,a5]@15 ~ [e5,g5]@16, c5@15 ~]/2", N: "[a5@16 bb4@7 ~ g5@8, [d5,f5]@23 [c5,e5]@9]/2",
  O: "[d5@4 ~@12 [e5,g5]@15 a5@17 bb4@8 [c5,e5,g5]@8, [f5,a5] ~@3, ~@4 c5@26 ~ [d5,f5]@25 ~@8]/4", // Em C F Dm
  P: "[~@3 bb5, [bb4,f5], d5@15 ~]/2", Q: "[[e5,a5]@15 ~, db5@7 ~]/2",
})).s("gm_string_ensemble_2").gain(0.3)

// chords · string ensemble 2 · "SLOWSTRIN" · soft notes
const string_ensemble_2_soft = note("<~@151 A B C D@2 ~>".pickRestart({
  A: "[a4,db5,e5]", B: "[d5,f5] [c5,e5,g5], bb4@3 ~@5", C: "[d5,f5,a5]@7 ~", D: "[[g4,bb4,d5]@3 [a4,db5,e5]@5]/2",
})).s("gm_string_ensemble_2").gain(0.15)

// chords · brass section · "BRASS 1" · A
const brass_section = note("<~@83 [~@2 [a4,db5,e5,a5]@5 ~] ~@73>").s("gm_brass_section").gain(0.47)

// drums · kick
const kick = s("bd").struct("<A@11 B A@15 B A@15 B A@39 B A@72 ~>".pickRestart({
  A: "x!2", B: "x!4",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<A@11 ~ A@15 ~ A@15 ~ A@39 ~ A@61 ~@12>".pickRestart({
  A: "~ x ~ x",
})).gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@145 [~ x ~ x]!11 ~>").gain(0.23)

// drums · hihat
const hihat = s("hh").struct("<A@11 ~ A@15 ~ A@15 ~ A@39 ~ A@35 B A@23 B A@12 ~>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2",
})).gain(0.47)

// drums · low tom
const low_tom = s("lt").struct("<~@55 A ~@11 A ~@27 A ~@10 B C ~@11 D ~@11 A ~@11 D ~@11 A ~>".pickRestart({
  A: "~@7 x", B: "~@2 x ~@2 x ~@2", C: "x ~@2 x ~@2 x ~", D: "~ x!2 ~@2 x ~ x",
})).gain(0.47)

// drums · mid tom
const mid_tom = s("mt").struct("<~@119 [~@9 x ~@3 x ~@2] ~@23 [~@9 x ~@3 x ~@2] ~@13>").gain(0.47)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~@7 x] ~@146>").gain(0.54)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@11 A ~@15 A ~@15 A ~@11 A ~@11 A ~@15 A ~@11 A ~@10 B C ~@11 D ~@11 A ~@11 D ~@11 A ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2 x ~@2 x", C: "~@2 x ~@2 x ~@2", D: "~@8 x!2 ~@2 x ~@3",
})).gain(0.47)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@11 ~ A@15 ~ A@15 ~ A@39 ~ A@72 ~>".pickRestart({
  A: "x!8",
})).gain(1.96)

stack(
  bass, bass_soft, acoustic_guitar_steel, rock_organ, electric_guitar_clean, electric_guitar_clean_2, string_ensemble_2,
  string_ensemble_2_soft, brass_section, kick, snare, snare_soft, hihat, low_tom, mid_tom, open_hat, high_tom, crash,
  cabasa
)