Strudelify
Wunderland Bei Nacht cover art

1961 · Wunderland bei Nacht

Wunderland Bei Nacht

Kaempfert

KeyC majorTempo134 bpm
0:00/0:00
// Wunderland Bei Nacht — Kaempfert
// 134 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric guitar jazz
const bass = note(`<
  A B A B C D E@2 A F A F C F A F C D G@2 A F A F A H@4 D I@2 J K L M N O P Q R O S T O P R N U F V@2 W@2 X@2 Y Z AA Z Y
  Z Y Z AB AC Y AD N R AE AF R O Q AG AH AI AJ T O Q N AD R O AK AL R O AM AN R AO AP@2 O AQ O AD R AH AR AL AH O AS AT
  R AU AV@2 O AW R AX AY
>`.pickRestart({
  A: "c2", B: "g1@15 ~", C: "c2@15 ~", D: "f2 g2", E: "[c2@25 ~@7]/2", F: "g1@7 ~", G: "[c2@5 ~@3]/2",
  H: "[~ c2, g1]/2", I: "[~@18 g1@2 a1@2 g1 ~@3 g1@2 a1@2 g1 ~, c2]/2", J: "c2@3 ~@2 g1 a1@2, ~@3 c2@5",
  K: "c2@3 ~@2 g1 a1 c2, ~@3 c2@4 ~", L: "f1@5 ~ f1 ~@5 d1@4", M: "f1@5 ~ f1 ~@5 f1@2 g1@2",
  N: "c2@5 ~ c2 ~@3 g1@2 a1@2 ~@2", O: "c2@5 ~ c2 ~@3 g1@2 a1@2 c2@2", P: "g1@6 g2 ~@3 g1@2 a1@4",
  Q: "g1@6 g2 ~@5 g1@2 a1@2", R: "c2@5 ~ c2 ~@3 g1@2 a1@4", S: "a1@6 c2 ~@5 g1@2 a1@2", T: "f1@5 ~ f1@2 ~@4 g1@2 a1@2",
  U: "c2@7 ~", V: "[~@8 g1@7 ~, c2]/2", W: "[~@2 f2 g2, c2]/2", X: "[~@2 g1 b1, c2]/2", Y: "c2@5 ~ c2 ~@9", Z: "g1 b1",
  AA: "c2@5 ~ c2 ~@7 c2@2", AB: "c2@5 ~ c2 ~@5 e1@4", AC: "f1 g1", AD: "~ g1 a1 g1 ~ g1 a1 g1",
  AE: "f1@4 ~@2 f1 ~@5 g1@2 c2@2", AF: "f1@5 ~ f1 ~@3 d1@2 f1@2 g1@2", AG: "g1@5 ~ g1 ~@3 g1@2 a1@2 d2@2",
  AH: "c2@5 ~ c2 ~@5 g1@2 a1@2", AI: "c2@5 ~ c2@2 ~@2 g1@2 a1@2 d2@2", AJ: "a1@5 ~ a1@2 ~@4 a1@2 c2@2",
  AK: "f1@5 ~ f1 ~@5 d1@3 ~", AL: "f1@5 ~ g1@2 ~@2 a1 ~@3 g1@2", AM: "g1@5 ~ g1 ~@5 d1@2 e1@2",
  AN: "g1@5 ~ f1 ~@3 e1 ~@3 d1@2", AO: "c2@5 ~ c2 ~@3 g1@2 a1@2 c2 ~",
  AP: "[a1@10 g1@3 ~ f1@7 ~ f1 ~@3 g1@2 ~@2 a1@2]/2", AQ: "g1@5 ~ g1 ~@3 g1@2 a1@2 g1 ~",
  AR: "f1@5 ~ f1 ~@3 d1 ~@3 d1@2", AS: "g1@6 d2 ~@5 d1@2 e1@2", AT: "g1@2 f1 ~@3 e1 ~@3 f1 ~@3 g1@2",
  AU: "c2@5 ~ c2 ~@3 g1@2 a1@2 d2@2", AV: "[a1@5 ~@5 g1 ~@3 f1@7 ~ f1 ~@3 e1@2 f1@2 g1@2]/2",
  AW: "g1@4 ~@2 g1 ~@5 g1@2 a1@2", AX: "c2 ~@4 g1 a1 g1", AY: "c2@3 ~",
})).s("gm_electric_guitar_jazz").gain(0.71)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@4 B C B ~ A@6 B D@4 ~ A@4 B E B E F@3 ~ G@4 H@4 I@2 J@2 A@2 K@2 L@4 F@3 ~ M@4 A@2 N@2 O@4 G@4 I@2 P@2 I@2 J@2 A@2
  Q@2 G@4 R@4 I@2 J@2 S@4 G@4 R@4 I@2 J@2 A@2 T@3
>`.pickRestart({
  A: "[[c4,e4] [b3,d4], g3@15 ~]/2", B: "[g3,c4,e4]@15 ~", C: "[a3,c4,f4]@7 ~ [b3,d4]@8, ~@4 g4@3 ~",
  D: "[[b3,d4]@15 ~@17 f3@7 ~ [b3,d4]@8 [c4,e4]@12 ~@4, g3@30 ~ a3@7 ~@2 g3@19 ~@5, ~@2 [c4,e4]@3 ~@3]/4", // Bm C
  E: "[g3,b3,d4]@15 ~", F: "[g3@14 ~@2 [f3,a3]@7 ~ [b3,d4]@8 [c4,e4]@15 ~, [c4,e4] g3]/3",
  G: "[g3@30 ~@2 [f3,a3]@31 ~, [c4,e4]@63 ~]/4", H: "[e4@32 ~@15 b3@15 ~@2, g3@31 ~, c4@3 ~, ~@32 d4@31 ~]/4",
  I: "[[g3,c4,e4]@31 ~]/2", J: "[[a3,c4,f4]@31 ~]/2", K: "[[g3,c4,e4]@5 ~@3]/2",
  L: "[[c4,e4] [b3,d4] [c4,e4] [b3,d4], g3@63 ~]/4", M: "[[c4,e4]@16 [b3,d4]@16 [c4,e4]@15 ~ [b3,d4]@16, g3@63 ~]/4",
  N: "[[c4,e4]@16 [b3,d4]@15 ~, g3@15 ~]/2", O: "[g3@7 ~ [f3,a3]@3 ~ [b3,d4]@4 [c4,e4]@9 ~@7, [c4,e4]@24 g3@25 ~@15]/4",
  P: "[c4@15 b3@16 ~, d4, g3@15 ~]/2", Q: "[[g3,c4,e4]@11 ~@5]/2",
  R: "[e4@32 ~@16 b3@15 ~, g3@31 ~, c4@3 ~, ~@32 d4@31 ~]/4", S: "[[c4,e4]@2 [b3,d4]@2 [c4,e4]@3 ~, g3@55 ~@9]/4",
  T: "[e4@22 d4@9 ~ e4@14 ~@2, [g3,c4]@23 ~]/3", // C5
})).s("gm_string_ensemble_1").gain(0.24).pan(0.3)

// chords · vibraphone
const vibraphone = note(`<
  A B C D A E F D ~@12 G H I J K L M H N O P D ~@32 Q R S D ~@4 T U ~@6 U ~@7 V ~@7 U ~@7 U ~@7 U ~ W X ~
>`.pickRestart({
  A: "~@2 [c5,g5] ~ [d5,g5] ~ [e5,g5] ~ [d5,g5] ~@3 [c5,g5] ~@3", B: "~@2 d5 ~@3 g4 ~@3 c5 ~ d5 ~ g5 ~",
  C: "~@2 [c5,g5] ~ [d5,g5] ~ [e5,g5] ~ [d5,g5] ~@5 [c5,g5] ~", D: "~@2 g4 ~@3 [b4,d5] ~@3 g4 ~@3 [c5,e5] ~",
  E: "[d5,g5] ~@5 g4 ~@3 c5 ~@3 c5 ~", F: "~@2 [c5,g5] ~ [d5,g5] ~ [e5,g5] ~ [d5,g5] ~@5 [c5,e5] ~",
  G: "~@4 [e5,g5] ~ [d5,g5] ~@3 [c5,g5] ~@5", H: "~@2 [d5,g5] ~@7 g4 ~ d5 ~ g5 ~",
  I: "~@2 [e5,g5] ~ [d5,g5] ~ [c5,g5] ~@7 [c5,g5] ~", J: "[d5,g5] ~@9 g4 ~ d5 ~ g5 ~",
  K: "~@6 [c5,g5] ~ [d5,g5] ~ [e5,g5] ~@5", L: "~@2 g4 ~@7 g4@2 d5@2 g5 ~",
  M: "~@2 [e5,g5] ~ [d5,g5] ~ [c5,g5] ~@3 [d5,g5] ~ [e5,g5] ~@3", N: "~@4 [c5,g5] ~ [d5,g5] ~@3 [c5,g5] ~@5",
  O: "~@2 [d5,g5] ~@3 [c5,f5] ~@3 d5 ~ c5 ~@3", P: "~@6 [e5,g5] ~ [d5,g5] ~@5 [c5,g5] ~", Q: "~@2 g4 ~ c5 ~@5 g4 ~@5",
  R: "~@2 a4 ~ c5 ~@5 g4 ~ d5 ~@3", S: "~@6 [e5,g5] ~ [d5,g5] ~@5 [c5,e5] ~", T: "~@14 [g4,d5] ~",
  U: "~@10 [g5,d6] ~@5", V: "~@14 [g5,d6] ~", W: "~@4 [e5,g5] ~@3 [d5,g5] ~@5 [c5,e5] ~",
  X: "~@2 g4 ~@3 [c5,d5] ~@3 g4 ~@3 [c5,e5] ~", // Csus2 C
})).s("gm_vibraphone").gain(0.28).pan(0.7)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@48 A B A B C D C E ~@61>".pickRestart({
  A: "~@4 c3 ~@5 c3 ~@5", B: "~@4 g2 ~@5 g2 ~@3 g2 ~", C: "~@4 c3 ~@5 c3 ~@3 c3 ~", D: "~@4 f3 ~@5 g2 ~@3 g2 ~",
  E: "g2 ~@15",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.6)

// other · pizzicato strings
const pizzicato_strings = note(`<
  A B A C A D E ~@41 A B A C A D E ~ A B A C F G F H A D E ~@33 I@2 J K I@2 L B I@2 J@2 I B I@2 M
>`.pickRestart({
  A: "c5 ~@5 d5 ~@5 e5 ~@3", B: "d5 ~@5 b4 ~@5 g4 ~@3", C: "d5 ~@15", D: "d5 ~@5 c5 ~@5 b4 ~@3", E: "c5 ~@15",
  F: "g5 ~@5 e5 ~@5 g5 ~@3", G: "f5 ~@5 d5 ~@5 b4 ~@3", H: "f5 ~@15", I: "e5 ~@5 c5 ~@5 g4 ~@3",
  J: "f5 ~@5 c5 ~@5 a4 ~@3", K: "c5 ~@5 a4 ~@5 f4 ~@3", L: "d5 ~@5 c5 ~@5 g4 ~@3", M: "e5 ~@15",
})).s("gm_pizzicato_strings").gain(0.36).pan(0.2)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  ~@32 A@6 B C A@2 D@2 A C A@2 ~@20 A@6 B C A@2 D@2 A C A@2 ~@8 A@2 D@2 A C A@2 ~@8 A@2 D@2 A C A E F
>`.pickRestart({
  A: "e5 ~ c5 ~ g4 ~ e5 ~ c5 ~ g4 ~ e5 ~ c5 ~", B: "d5 ~ c5 ~ g4 ~ d5 ~ c5 ~ g4 ~ d5 ~ c5 ~",
  C: "d5 ~ b4 ~ g4 ~ d5 ~ b4 ~ g4 ~ d5 ~ b4 ~", D: "f5 ~ c5 ~ a4 ~ f5 ~ c5 ~ a4 ~ f5 ~ c5 ~",
  E: "e5 ~ c5 ~ g4 ~ e5 ~ c5 ~ g4 ~ d5 ~ c5 ~", F: "e5 ~@15",
})).s("gm_pizzicato_strings").gain(0.19).pan(0.6)

// other · music box
const music_box = note(`<
  ~@8 A B A C D E D F A G H ~ A B A C D E D F A G H ~@25 A B A C D E D F A G H ~@50
>`.pickRestart({
  A: "c5 ~@5 d5 ~@5 e5 ~@3", B: "d5 ~@5 b4 ~@5 g4 ~@3", C: "d5 ~@15", D: "g5 ~@5 e5 ~@5 g5 ~@3",
  E: "f5 ~@5 d5 ~@5 b4 ~@3", F: "f5 ~@15", G: "d5 ~@5 c5 ~@5 b4 ~@3", H: "c5 ~@15",
})).s("gm_music_box").gain(0.28).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A B C D E D B F D F G H I F J K F L C F J K M N O P I Q ~@7 H C D F ~ B R S T B D U V W ~ B@2 X B@3 Y Z AA AB B S
  B AC B L F ~ B L AD AE P B@2 AF B@2 AG AH C M AD AI M AJ AK AL AB AD AG AM C AN AO AP ~
>`.pickRestart({
  A: "x ~ x ~@11 x!2", B: "x!2 ~@6", C: "x!2 ~@5 x", D: "x!2 ~ x ~@4", E: "x ~ x!2 ~@3 x", F: "x!2 ~@4 x!2",
  G: "~@2 x!3 ~@3", H: "~@14 x!2", I: "x!3 ~@4 x", J: "x!3 ~@3 x!2", K: "~ x ~@4 x!2", L: "~ x ~@6", M: "~@7 x",
  N: "~@6 x!2", O: "x!3 ~@2 x ~@2", P: "x!3 ~@5", Q: "~@2 x!2", R: "x ~ x ~ x ~@9 x!2", S: "x", T: "x ~ x ~@3 x!2",
  U: "x ~ x!2 ~@4", V: "x ~@10 x ~@4", W: "x ~ x!2 ~@2 x!2", X: "x ~@2 x!2 ~ x ~@9", Y: "x!4 ~@4", Z: "x!2 ~@3 x ~ x",
  AA: "x ~ x!2 ~@2 x ~", AB: "~ x ~@2", AC: "~ x ~ x ~@4", AD: "x ~@6 x", AE: "~@2 x ~@2 x ~@2", AF: "x!2 ~@2 x ~@3",
  AG: "~ x ~@4 x ~", AH: "~ x", AI: "~@2 x ~@11 x!2", AJ: "~@10 x!2 ~@4", AK: "~@5 x ~@2", AL: "~ x!2 ~@2 x!2 ~",
  AM: "~@10 x ~@4 x", AN: "~@2 x ~@2 x ~ x", AO: "x!4 ~@2 x!2", AP: "~ x!3 ~@2 x ~",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct("<~@58 [~ x] ~@58>").gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 A B C D ~ C E F C G ~@2 C@5 E C H C I C@2 F ~@2 J ~@8 C E C E@2 A K C E L A ~ C E C E D E@3 D F E@5 M E@2 C E@3 C
  K E@3 D E@2 C L C@4 H F N ~ E A O F C F C@2 J
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~ x", D: "~@7 x", E: "~@4 x ~@2 x", F: "~@3 x ~@4", G: "~@3 x!2 ~@3",
  H: "~@3 x ~ x ~@2", I: "~@8 x ~@2 x ~@4", J: "x", K: "~@3 x ~@3 x", L: "~@3 x", M: "~@6 x!2", N: "x ~@2 x ~@4",
  O: "~@7 x!2 ~@7",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<A@7 ~ B@11 ~ B@11 ~ C@15 D C@7 D C@11 D E F@47 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "x!4", D: "x", E: "x!2 ~ x", F: "~ x ~ x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<A ~@7 A ~@11 A ~@11 A ~@7 A ~@7 A ~@7 A ~@11 A ~@15 A ~@15 A ~@15 A>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@19 A ~@27 A ~@7 B ~@11 A ~@8 A ~@6 A ~@8 A ~@6 A ~@8 A ~@6 A ~>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@32 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~
>`.pickRestart({
  A: "~ x", B: "~@3 x",
})).gain(0.35)

// drums · congas
const congas = s("conga:33").struct(`<
  ~@20 A B A C D ~ A E@3 F ~ B A B A@4 E B A G H I J@2 ~@9 A ~ A K A B L B A M D N ~ O A@2 D A@3 ~ P ~ Q A@3 M A B A G
  A@3 R B A@2 B A@2 S T A H@2 A U V P W X B Y Z A AA ~ Y ~
>`.pickRestart({
  A: "~@2 x!2 ~@4", B: "~@3 x ~@4", C: "~@4 x!3 ~", D: "~ x", E: "~ x ~@2", F: "x", G: "x!4 ~@4", H: "~ x!3 ~@4",
  I: "~@7 x", J: "~@3 x!2 ~@3", K: "~ x ~ x ~@4", L: "~ x!2 ~@5", M: "~@4 x!2 ~@2", N: "~@6 x!2", O: "x!2 ~ x ~@4",
  P: "~@3 x", Q: "x!2 ~@6", R: "x!2 ~@4 x ~", S: "~@2 x!2 ~@3 x", T: "~ x ~ x ~ x ~@2", U: "x!3 ~@5",
  V: "x ~ x ~@3 x!2", W: "~@3 x!2 ~ x!2", X: "x ~@2 x ~@4", Y: "x ~@6 x", Z: "x!2 ~@4 x!2", AA: "x ~@2 x",
})).gain(1.11)

// drums · claves
const claves = s("clave:2").struct("<~@56 [~@2 x ~@2 x ~@2]!10 [~ x ~@2] ~@50>").gain(1.7)

stack(
  bass, string_ensemble_1, vibraphone, string_ensemble_1_2, pizzicato_strings, pizzicato_strings_2, music_box, kick,
  rim, snare, hihat, crash, ride, tambourine, congas, claves
)

More by Kaempfert