Strudelify

Die Nachtigall Singt

K2

KeyE♭ majorTempo143 bpm
0:00/0:00
// Die Nachtigall Singt — K2
// 143 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 · electric bass finger
const bass = note(`<
  ~@20 A B C D A B C ~ A B C ~ A B C ~ E F G H E F G I E F G I E F G I E F G I ~@4 A B C D A B C D ~@2 A B C ~ A B C D A
  B C ~ A B C D A B C ~@5 A B C D A B C D A B C D ~@2 A B C ~ E F G J E F G I E F G I ~@5
>`.pickRestart({
  A: "f1@2 f2!2 f1@2 f2!2 f1@2 f2!2 f1@2 f2!2", B: "c2@2 c3!2 c2@2 c3!2 c2@2 c3!2 c2@2 c3!2",
  C: "ab1@2 ab2!2 ab1@2 ab2!2 ab1@2 ab2!2 ab1@2 ab2!2", D: "bb1@2 bb2!2 bb1@2 bb2!2 bb1@2 bb2!2 bb1@2 bb2!2",
  E: "eb1 eb2 bb1 eb2 eb1 eb2 bb1 eb2", F: "eb1 eb2 bb1 eb2 bb1 bb2 f2 bb2", G: "bb1 bb2 f2 bb2 bb1 bb2 f2 bb2",
  H: "bb1 bb2 ~ bb2 eb2 ~ bb1 ~", I: "bb1 bb2 ~ bb2 eb1 ~ bb1 ~", J: "bb1 bb2 ~ bb2 eb1 ~@3",
})).s("gm_electric_bass_finger").gain(0.31)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@16 A B C D A B C D A B C D E F G ~ E F G ~ H I J K H I J K H I J K H I J K H I J K ~@4 A B C D A B C D ~@6 E F G J E
  F G ~ E F G J E F G ~@5 A B C D A B C D A B C D ~@6 H I J K H I J K H I J K ~@5
>`.pickRestart({
  A: "f2@2 f3@2 f2@2 f3@2 f2 f3 f2 f3 eb3@2 f3@2", B: "c2@2 c3@2 c2@2 c3@2 c2 c3 c2 c3 bb2@2 c3@2",
  C: "ab2@2 ab3@2 ab2@2 ab3@2 ab2 ab3 ab2 ab3 g3@2 ab3@2", D: "bb2@2 bb3@2 bb2@2 bb3@2 bb2 bb3 bb2 bb3 ab3@2 bb3@2",
  E: "~ f2 ~ f2 ~ f2 ~ f2", F: "~ c2 ~ c2 ~ c2 ~ c2", G: "~ ab2 ~ ab2 ~ ab2 ~ ab2", H: "~ eb2 ~ eb2 ~ eb2 ~ eb2",
  I: "~ eb2 ~ eb2 ~ bb2 ~ bb2", J: "~ bb2 ~ bb2 ~ bb2 ~ bb2", K: "~ bb2 ~ bb2 eb2 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.29)

// chords · pad halo
const pad_halo = note("<A@6 B@2 C@2 D@3 E@5 F@8 G@8 ~@22 H@6 F@4 G@8 ~@16 H@6 F@8 G@8 ~@12 I@5>".pickRestart({
  A: "[[eb3,c4]@2 [d3,bb3], g3]/6", B: "[eb3,ab3,c4]/2", C: "[f3,bb3,d4]/2", D: "[[g3,bb3]@7 [ab3,c4]@17, eb3]/3",
  E: "[[f3,d4] g3@2 [f4,ab4] [c4,g4], bb3@3 ~@2, ~ eb4@4]/5", F: "[ab4 [f4,bb4] [f4,ab4] [c4,g4], eb4]/4",
  G: "[ab4 [f4,bb4] ~@6, eb4]/8", // Bb5
  H: "[[g3,bb3]@7 [ab3,c4]@12 [f3,d4]@8 g3@5 [f4,ab4]@8 [c4,g4]@8, eb3@19 bb3@13 ~@16, ~@9 eb4@7]/6", // Gm Ab Dm Fm C5
  I: "[[g3,bb3]@7 [ab3,c4]@12 [f3,d4]@8 g3@13, eb3@19 bb3@21]/5", // Gm Ab Dm
})).s("gm_pad_halo").gain(0.2).pan(0.3)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@16 A@3 B A@3 B A@3 B C D E ~ C D E F ~@24 A@3 B A@3 B ~@26 A@3 B A@3 B A@3 B ~@2 C D E F ~@17
>`.pickRestart({
  A: "[[f5,ab5] g5 ab5, c6, ~ eb5@2]/3", B: "[f5,bb5,d6]",
  C: "[ab5,c6,f6]@2 ~ [ab5,c6,f6] ~@2 [ab5,c6,f6]@3 ~ [ab5,c6,f6] ~ [ab5,c6,f6] ~ [ab5,c6,f6] ~", // Fm
  D: "[g5,c6,eb6]@2 ~ [g5,c6,eb6] ~@2 [g5,c6,eb6]@3 ~ [g5,c6,eb6] ~ [g5,c6,eb6] ~ [g5,c6,eb6] ~", // Cm
  E: "[ab5,c6,eb6]@2 ~ [ab5,c6,eb6] ~@2 [ab5,c6,eb6]@3 ~ [ab5,c6,eb6] ~ [ab5,c6,eb6] ~ [ab5,c6,eb6] ~", // Ab
  F: "[bb5,d6,f6]@2 ~ [bb5,d6,f6] ~@2 [bb5,d6,f6]@3 ~ [bb5,d6,f6] ~ [bb5,d6,f6] ~ [bb5,d6,f6] ~", // Bb
})).s("gm_drawbar_organ").gain(0.17).pan(0.7)

// chords · trumpet
const trumpet = note("<~@36 A B C D A B E F A B C D A B E F A B C D ~@56 A B C D A B E F A B C D ~@5>".pickRestart({
  A: "[eb5,g5] [eb5,g5]@3 c5 ~ bb4 ~ [eb5,g5] [eb5,g5]@2 ~ c5 ~ bb4 ~", // Eb
  B: "[eb5,g5] [eb5,g5]@2 ~ c5 ~ [bb4,g5] ~ [ab4,ab5]@3 ~@3 bb4 ~", // Eb Ab
  C: "[d5,ab5] [d5,ab5]@2 ~ c5 ~ bb4 ~ [d5,ab5] [d5,ab5]@2 ~ c5 ~@2 bb4", // Ddim
  D: "[bb4,bb5] [bb4,bb5]@2 ~ [c5,ab5] ~ [d5,ab5] ~ [eb5,g5] ~@7", // Bb Fm Ddim Eb
  E: "[d5,ab5] [d5,ab5]@2 ~ c5 ~ bb4 ~ [d5,ab5] [d5,ab5]@2 ~ c5 ~ bb4 ~", // Ddim
  F: "[d5,ab5] [d5,ab5]@2 ~ c5 ~ [bb4,ab5] ~ [g4,g5]@3 ~@3 bb4 ~", // Ddim Bb7 G
})).s("gm_trumpet").gain(0.23)

// other · electric bass pick
const electric_bass_pick = note(`<
  ~@20 A B C D A B C ~ A B C ~ A B C ~@22 E ~@2 A B C D A B C D ~@2 A B C ~ F B C D A B C ~ A B C D A B C ~@2 E ~@2 A B
  C D A B C D A B ~@21 G H I ~
>`.pickRestart({
  A: "~@2 f4 ~@3 f4 ~@3 f4 ~ eb4 ~ f4 eb4", B: "~@2 c4 ~@3 c4 ~@3 c4 ~ bb3 ~ c4 ~",
  C: "~@2 eb4 ~@3 eb4 ~@3 eb4 ~ c4 ~ eb4 c4", D: "~@2 f4 ~@3 f4 ~@3 f4 ~ ab4 ~ f4 ~", E: "~@8 ab4 ~@3 ab4 ~@3",
  F: "~@6 f4 ~@3 f4 ~ eb4 ~ f4 eb4", G: "~@7 eb4 ~@3 eb4 ~@3 eb4", H: "~ c4 ~ eb4 c4 ~@2 f4 ~@3 f4 ~@3 f4",
  I: "~ ab4 ~ f4 ~@12",
})).s("gm_electric_bass_pick").gain(0.23).pan(0.4)

// bass · acoustic guitar steel
const bass_2 = note("<~@28 A B C ~ A B C D ~@34 A B C ~ A B C D A B C ~ E B C D A B C ~@19 A B C D ~@17>".pickRestart({
  A: "f1@2 f1!2 ~@2 f1@2 ~ f1 ~ f1!4 ~", B: "f1@2 f1!2 ~@2 f1@2 ~ f1!4 ~ f1 ~",
  C: "f1@2 f1!2 ~ f1 f1@2 ~ f1!2 ~ f1!3 ~", D: "f1@2 f1!2 ~ f1 f1@2 ~ f1!6 ~", E: "~@2 f1!2 ~@2 f1@2 ~ f1 ~ f1!4 ~",
})).s("gm_acoustic_guitar_steel").gain(0.2).pan(0.7)

// bass · acoustic guitar steel · soft notes
const bass_soft = note("<~@28 A B C ~ A B C ~@35 A B C ~ A B C ~ A B C ~ A B C ~ A B C ~@19 A B C ~@18>".pickRestart({
  A: "~@5 f1 ~@4 f1 ~@5", B: "~@5 f1 ~@7 f1 ~@2", C: "~@11 f1 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.7)

// other · alto sax
const alto_sax = note("<~@9 A@2 B C D E ~@40 C F B G@2 ~@29 C F B G@2 ~@29 C F B G@2 ~>".pickRestart({
  A: "[~@13 c5@2 bb4@5 bb5@2 g5@4 f5@4 c5@2]/2", B: "c5@9 ~@7", C: "~@7 c5", D: "d5 ~ d5@6 ~ c5@2 d5@5", E: "eb5 ~",
  F: "bb4@2 bb5 g5@2 f5@2 c5", G: "[~@4 c5@2 d5 ~ d5@6 ~ c5@2 d5@5 eb5@8 ~@2]/2",
})).s("gm_alto_sax").gain(0.23)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A@7 B A@7 B A@3 C A@16 ~@4 A@13 B A@7 B A@7 B ~@4 A@12 ~@2 A@3 D A@11 D ~@5
>`.pickRestart({
  A: "x!4", B: "x", C: "x!2", D: "x!3 ~",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  ~@20 A@7 ~ A@3 ~ A@3 ~@5 A@15 B ~@4 A@13 ~ A@7 ~ A@7 ~@5 A@12 ~@2 A@3 ~ A@11 B ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.3)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20 A@7 ~ A@7 ~@5 A@15 B ~@4 A@13 ~ A@7 ~ A@7 C ~@4 A@12 ~@2 A@3 D ~@4 A@7 B ~@5
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", B: "x!2 ~ x!3 ~ x!2 ~@7", C: "x", D: "x!2 ~ x!3 ~ x!3 ~ x!2 ~@3",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@20 A@7 ~ A@7 ~@4 B A@15 C ~@4 A@13 ~ A@7 ~ A@7 ~@5 A@12 ~@2 A@3 D ~@4 A@7 C ~@5
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x", C: "~ x ~ x ~@4", D: "~ x ~ x ~ x ~@2",
})).gain(0.35)

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

stack(
  bass, lead_2_sawtooth, pad_halo, drawbar_organ, trumpet, electric_bass_pick, bass_2, bass_soft, alto_sax, kick, clap,
  snare, hihat, open_hat, crash
)

More by K2