Strudelify

Kleiner Satellit (Piep Piep)

Blumchen

KeyG majorTempo180 bpm
0:00/0:00
// Kleiner Satellit (Piep Piep) — Blumchen
// 180 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 175 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(180/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.

// chords · tenor sax
const tenor_sax = note(`<
  ~@14 A B C D A E C F ~@43 A B C D A E C G A B C D A E C G H I J K H I J K H I J K H I J L H I J K H I J K H I J K H I
  J K A B C D A E C F A B C D A E C F ~@22 A B C D A E C F ~@16
>`.pickRestart({
  A: "[b3,d4,g4]@2 ~@2 [b3,d4,g4] ~ [b3,d4,a4]@2 ~@2 [b3,d4,a4] ~ [b3,d4,b4]@2 ~@2", // G Bm7 Bm
  B: "[c4,d4,g4]@2 ~@2 [c4,d4,g4] ~ [c4,d4,a4]@2 ~@2 [c4,d4,a4] ~ [c4,d4,b4] ~@3", // Csus2 D7 G
  C: "[d4,g4,d5]@2 ~@2 [d4,g4,d5] ~ [d4,g4,a4]@2 ~@2 [d4,g4,a4] ~ [d4,g4,b4]@2 ~@2", // G5 Dsus4 G
  D: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,b4]@2 ~@2 [e4,g4,b4] ~ [e4,g4,a4] ~@3", // C Em A7
  E: "[c4,d4,g4]@2 ~@2 [c4,d4,g4] ~ [c4,d4,a4]@2 ~@2 [c4,d4,a4] ~ [c4,d4] ~@3, ~@6 b4 ~", // Csus2 D7 Csus2
  F: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,g4,b4] ~ [e4,g4,a4]@2 ~@2", // C Em A7
  G: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,a4] ~", // C Em A7
  H: "~@2 [g2,g3] ~@3 [g2,g3]@2 ~@2 [g2,g3]@2 ~@2 [g2,g3] ~", // G
  I: "[g2,g3]@2 ~@2 [g2,g3] ~ [g2,g3]@2 ~@2 [g2,g3] ~ [g2,g3]@2 ~@2", // G
  J: "[d#2,d#3] ~ [d#2,d#3]@2 ~@2 [d#2,d#3]@2 ~@2 [d#2,d#3]@2 ~@2 [d#2,d#3] ~", // D#
  K: "[c2,c3]@2 ~@2 [c2,c3] ~ [d2,d3]@2 ~@2 [d2,d3] ~ [a#1,a#2]@3 ~", L: "[c2,c3] ~@7",
})).s("gm_tenor_sax").gain(0.22)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@27
  [~ g2 ~ g2 ~ g2 ~ g2]!7
  ~
  [~ g2 ~ g2 ~ g2 ~ g2]!7
  ~
  [~ g2 ~ g2 ~ g2 ~ g2]!8
  ~@124
>`).s("gm_distortion_guitar").gain(0.52).pan(0.2)

// other · distortion guitar
const distortion_guitar_2 = note("<~@24 [~@2 g4 ~@3 g4 ~@3 g4 ~@3 g4 ~] ~ [~@2 g4 ~@3 g4 ~@3 g4 ~@3 g4 ~] ~@148>")
  .s("gm_distortion_guitar").gain(0.24).pan(0.8)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@6 A B C D E F G H ~@33 I J@2 K ~@6 A B C D E F G H ~@70 A B C D E F G H ~@22 A B C D E F G H ~@2
>`.pickRestart({
  A: "d5 g5 a5 d5 a5 d6 a5 g5 d5 g5 a5 d6 a5 g5 d5 a4", B: "g4 d4 g4 d5 a5 d6 a5 g5 d5 g5 a5 d6 a5 g5 d5 a4",
  C: "b4 e5 g5 b5 e6 b5 g5 e5 b4 e5 g5 b5 e6 b5 g5 e5", D: "c5 e5 a5 c6 e6 a6 e6 c6 e5 a5 c6 e6 a6 e6 c6 a5",
  E: "a3 d4 f#4 a4 d5 f#5 d5 a4 a3 d4 f#4 a4 d5 f#5 d5 a4", F: "g3 b3 d4 g4 b4 d5 b4 g4 g3 b3 d4 g4 b4 d5 g5 d5",
  G: "c4 e4 g4 c5 e5 g5 e5 c5 c4 e4 g4 c5 e5 g5 c6 g5", H: "~ a5 d6 a5 ~ a5 d6 a5 ~ a5 d6 a5 ~ a5 d6 a5",
  I: "~ g3 d4 g4 a4 d5 g5 a5 d6 a5 g5 d5 a4 g4 d4 a3", J: "g3 a3 d4 g4 a4 d5 g5 a5 d6 a5 g5 d5 a4 g4 d4 a3",
  K: "~ a3 d4 g4 a4 d5 g5 a5 d6 a5 g5 d5 a4 g4 d4 a3",
})).s("gm_pizzicato_strings").gain(0.33).pan(0.3)

// bass · synth bass 1
const bass = note(`<
  ~@27 A@3 B A@3 ~ A@3 B A@3 ~ A@3 B A@3 B ~@12 C D A E F G A H I C A J F K A J F K ~@4 L ~@3 A@2 M G A@2 M ~ A@2 M G
  A@2 M G A@2 M G A@2 M G ~@16 A N G B O N G P O J N B C Q A R C Q A R C Q A J F K A J F K A N G B O N G P O J N B C S
  ~@2
>`.pickRestart({
  A: "~ g1 ~ g1 ~ g1 ~ g1", B: "~@2 g1@2 ~@2 g1@2 ~@2 g1@2 ~@2 g1 ~", C: "~ c2 ~ c2 ~ c2 ~ c2",
  D: "~ c2 ~ c2 ~ d2 ~ g1", E: "~@2 a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 g1 ~", F: "~ b0 ~ b0 ~ b0 ~ b0",
  G: "~ c1 ~ c1 ~ c1 ~ c1", H: "~@2 a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 a1 ~", I: "~ b1 ~ b1 ~ b1 ~ b1",
  J: "~ a1 ~ a1 ~ a1 ~ a1", K: "~@2 c1@2 ~@2 c1@2 ~@2 c1@2 ~@2 c1 ~", L: "g1", M: "~ d#1 ~ d#1 ~ d#1 ~ d#1",
  N: "~ d1 ~ d1 ~ d1 ~ d1", O: "~ e1 ~ e1 ~ e1 ~ e1", P: "~@2 c1@2 ~@2 c1@2 ~@2 d1@2 ~@2 d1 ~",
  Q: "~ c2 ~ c2 ~ d2 ~ d2", R: "~@2 a1@2 ~@2 a1@2 ~@2 g1@2 ~@2 g1 ~", S: "~ c2 ~ d2 ~ d2 ~@2",
})).s("gm_synth_bass_1").gain(0.42)

// other · clavinet
const clavinet = note("<~@23 A@11 B A@7 B A@7 B ~@92 C D C E C D C E ~@24>".pickRestart({
  A: "g3!2 ~@2 g3!2 ~@2 g3!2 ~@2 g3!2 ~@2", B: "g3 ~@15", C: "b4 g4 b4 g4 b4 g4 b4 d5", D: "b4 g4 b4 g4 b4 g4 b4 c5",
  E: "b4@2 g4@2 b4@2 g4@2 b4@2 g4@2 b4 ~ c5 ~",
})).s("gm_clavinet").gain(0.41)

// other · synth bass 1
const synth_bass_1 = note("<~@23 A@4 B@7 C B@7 C B@7 C ~@124>".pickRestart({
  A: "g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~ g4 ~ d4 ~, ~ g4@2 ~@2 g4@2 ~@2 g4@2 ~@2 g4@2 ~",
  B: "g4!2 d4 ~ g4!2 d4 ~ g4!2 d4 ~ g4!2 d4 ~", C: "g4 ~@15",
})).s("gm_lead_8_bass_lead").gain(0.25)

// other · clavinet
const clavinet_2 = note(`<
  A B C D E F G@2 H I J K L M N O P Q P R S T ~@29 A B C D E F G@2 H I J K L M N O P Q P R S T ~ O P Q P R S T ~@26 U@5
  V@8 ~@9 A B C D E F G@2 H I J K L M N ~@15 A B C D E F G@2 H I J K L M N ~
>`.pickRestart({
  A: "g4 ~@3 g4 ~@11", B: "f#4 ~@15", C: "e4 ~@3 e4 ~@7 g4 ~@3", D: "d4 ~@11 d5 ~@3", E: "g4@2 ~@2 g4 ~@11",
  F: "a4@3 ~ a4@3 ~ b4@3 ~ g4@2 ~@2", G: "[c5@19 ~@13]/2", H: "b4@2 ~@2 b4@2 ~@2 b4@2 ~@2 b4@3 ~",
  I: "c5@3 ~ c5@2 ~@2 c5@2 ~@2 e5@3 ~", J: "a4@3 ~ a4@2 ~@2 a4@2 ~@2 a4@2 ~@2", K: "c5 ~ b4 ~ b4 ~ d5 ~",
  L: "g4 ~ g4 ~ g4 ~ g4 ~", M: "b4 ~ b4 ~ a4 ~ a4 ~", N: "g4 ~@15", O: "~@10 d4 ~ g4@2 d4@2",
  P: "g4 d5 d4 g4 ~ g4 ~ g4", Q: "~@2 g4@2 d4 ~ g4@2 d4 ~ d4@2 g4@2 d4 ~", R: "~@4 d4 ~ g4@2 ~@2 d4 ~ g4@2 d4@2",
  S: "g4@2 d5@2 d4@2 g4@2 ~@2 g4@2 d4 ~ g4@2", T: "~@2 d4@2 g4@2 d4 ~ g4 ~@7",
  U: "[~@15 d4@2 ~@14 d4@2 ~@14 d4@2 ~@14 d4@2 ~@14 d4, ~ d4@10 g5 d5 a4 g4@3 d4@10 g5 d5 a4 g4@3 d4@10 g5 d5 a4 g4@3 d4@10 g5 d5 a4 g4@3 d4@10 g5 d5 a4 g4@2, ~ g4@4 a5@4 g4@4 a5@4 g4@4 a5@4 g4@4 a5@4 g4@4 a5@3, ~@3 a4@6 d6@10 a4@6 d6@10 a4@6 d6@10 a4@6 d6@10 a4@6 d6@7, ~@4 d5 g5 a5 d6 g6@12 d5 g5 a5 d6 g6@12 d5 g5 a5 d6 g6@12 d5 g5 a5 d6 g6@12 d5 g5 a5 d6 g6@8]/5",
  V: "[~@8 g6 d6 a5 g5 ~@3 d4@113, ~ d4@14 ~@113, ~ g4@6 g4@57, ~@3 a4@10 a4@115, ~@4 d5 g5 a5 d6@2 ~@3 d5@116]/8",
})).s("gm_clavinet").gain(0.19)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@14 A B C D A E C F ~@21 G H I J K L M N O P Q R S P Q@2 S T P O Q P A B C D A E C U A B C D A E C U V W X Y V W X Y
  V W X Y V W X Z V W X Y V W X Y V W X Y V W X Y A B C D A E C F A B C D A E C F O P Q R S P Q@2 S T P O Q P ~@8 A B C
  D A E C F O P Q R S P Q@2 S T P O Q P ~@2
>`.pickRestart({
  A: "[b3,d4,g4]@2 ~@2 [b3,d4,g4] ~ [b3,d4,a4]@2 ~@2 [b3,d4,a4] ~ [b3,d4,b4]@2 ~@2", // G Bm7 Bm
  B: "[c4,d4,g4]@2 ~@2 [c4,d4,g4] ~ [c4,d4,a4]@2 ~@2 [c4,d4,a4] ~ [c4,d4,b4] ~@3", // Csus2 D7 G
  C: "[d4,g4,d5]@2 ~@2 [d4,g4,d5] ~ [d4,g4,a4]@2 ~@2 [d4,g4,a4] ~ [d4,g4,b4]@2 ~@2", // G5 Dsus4 G
  D: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,b4]@2 ~@2 [e4,g4,b4] ~ [e4,g4,a4] ~@3", // C Em A7
  E: "[c4,d4,g4]@2 ~@2 [c4,d4,g4] ~ [c4,d4,a4]@2 ~@2 [c4,d4,a4] ~ [c4,d4] ~@3, ~@6 b4 ~", // Csus2 D7 Csus2
  F: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,g4,b4] ~ [e4,g4,a4]@2 ~@2", // C Em A7
  G: "[g4,d5]@3 ~@3 [g4,d5]@2 ~@4 [g4,d5]@2 ~@2", H: "[g4,d5]@2 ~@4 [g4,d5]@2 ~@4 [g4,d5] ~ [g4,e5] ~",
  I: "[g4,c5] ~@2 [g4,c5] ~@2 g4 ~, ~@12 c5 ~@3", J: "[g4,c5]@2 ~@4 [g4,c5]@2 ~@4 [g4,c5] ~ [g4,d5] ~",
  K: "[g4,b4] ~@2 [g4,b4] ~ [g4,b4] ~@2", L: "[g4,b4]@2 ~@4 [g4,b4]@2 ~@4 [g4,b4] ~ [g4,d5] ~",
  M: "[g4,a4]@3 ~@3 [g4,a4]@2 ~@4 [g4,a4]@2 ~@2", N: "[g4,a4]@2 ~@4 [g4,a4]@2 ~@4 [g4,a4] ~ [g4,b4] ~",
  O: "[b3,d4,g4]!3 ~ [b3,d4,g4]!3 ~ [b3,d4,g4]!3 ~ [b3,d4,g4]!3 ~", // G
  P: "[d4,f#4,a4]!3 ~ [d4,f#4,a4]!3 ~ [d4,f#4,a4]!3 ~ [d4,f#4,a4]!3 ~", // D
  Q: "[c4,e4,g4]!3 ~ [c4,e4,g4]!3 ~ [c4,e4,g4]!3 ~ [c4,e4,g4]!3 ~", // C
  R: "[g3,b3,d4]!3 ~ [g3,b3,d4]!3 ~ [g3,b3,d4]!3 ~ [g3,b3,d4]!3 ~", // G
  S: "[b3,e4,g4]!3 ~ [b3,e4,g4]!3 ~ [b3,e4,g4]!3 ~ [b3,e4,g4]!3 ~", // Em
  T: "[c4,e4,a4]!3 ~ [c4,e4,a4]!3 ~ [c4,e4,a4]!3 ~ [c4,e4,a4]!3 ~", // Am
  U: "[e4,g4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,a4] ~", // C Em A7
  V: "~@2 [g3,g4] ~@3 [g3,g4]@2 ~@2 [g3,g4]@2 ~@2 [g3,g4] ~", // G
  W: "[g3,g4]@2 ~@2 [g3,g4] ~ [g3,g4]@2 ~@2 [g3,g4] ~ [g3,g4]@2 ~@2", // G
  X: "[d#3,d#4] ~ [d#3,d#4]@2 ~@2 [d#3,d#4]@2 ~@2 [d#3,d#4]@2 ~@2 [d#3,d#4] ~", // D#
  Y: "[c3,c4]@2 ~@2 [c3,c4] ~ [d3,d4]@2 ~@2 [d3,d4] ~ [a#2,a#3]@3 ~", Z: "[c3,c4] ~@7",
})).s("gm_lead_2_sawtooth").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A ~@2 B A ~ A ~@2 C A D A ~ A E@11 F E@3 G E@3 ~ E@3 G E@3 G ~@4 H ~ I G E G E G E G E G E G E G E G E G E G E G E
  G A ~@2 J A ~ A ~ E@7 A E G E G E G E G E G E G E G E G ~@3 K A C A ~ A C A K A D A ~ E G E G E G E G E G E G E G E G
  E G E G E G E G E G E G E G E G E G E G E G ~@8
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x", D: "~@13 x!3", E: "x!4", F: "x!2", G: "x ~ x ~ x ~ x!2", H: "x!2 ~@2", I: "x ~ x!2",
  J: "~@5 x!3", K: "~@14 x!2",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B ~@10 C D E B ~@11 F G ~@14 H B ~@7 D ~@21 I ~@4 J K J L J K J L J K I ~@16 M ~@4 J K J L J K J L J K@2 ~@22 N
  ~@24
>`.pickRestart({
  A: "x ~ x ~ x ~@3 x ~ x ~ x!4", B: "x!16", C: "~@4 x ~@2 x ~@4 x ~@3", D: "~@4 x ~@2 x!9", E: "~ x!15", F: "~@4 x!12",
  G: "~@10 x!6", H: "~@3 x!13", I: "~@2 x!14", J: "~@2 x!3 ~@2 x!7 ~@2", K: "~@2 x!3 ~@2 x!9", L: "~@2 x ~ x ~@2 x!9",
  M: "~ x!7", N: "~@5 x!11",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@20 A ~@12 B C ~@14 D ~@30 E ~@4 F G F H F G F H F G I ~@21 F G F H F G F H F G F ~@22 J ~@24
>`.pickRestart({
  A: "x", B: "x!4 ~@12", C: "~@8 x!2 ~@6", D: "x!3 ~@13", E: "x!2 ~@14", F: "~ x ~@3 x!2 ~@7 x!2", G: "x!2 ~@3 x!2 ~@9",
  H: "x!2 ~ x ~ x!2 ~@9", I: "x!3 ~@2 x!2 ~@7 x!2", J: "x!5 ~@11",
})).gain(0.17)

// drums · clap
const clap = s("cp").struct("<~@35 A@7 ~ A@7 B ~@4 A@26 ~@16 A@16 ~@16 A@42 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.52)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@31 A@3 ~@25 B@5 C B@5 D B@2 E B ~@22 B@8 F C G H B@2 H B ~@15 I B ~ B@5 D B E B@2 C B J B ~@6 E C E@2 B@2 C B E C
  B@3 C B@2 ~@8
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "x!4", C: "x!3 ~", D: "x ~ x!2", E: "~ x!3", F: "~@2 x!2", G: "x ~@2 x", H: "x", I: "~@3 x ~@4",
  J: "x!2 ~ x",
})).gain(0.17)

// drums · open hat
const open_hat = s("oh").struct("<~@81 A ~@2 B A ~ A ~ A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~@47>".pickRestart({
  A: "x", B: "~@5 x!3",
})).gain(0.46)

stack(
  tenor_sax, distortion_guitar, distortion_guitar_2, pizzicato_strings, bass, clavinet, synth_bass_1, clavinet_2,
  lead_2_sawtooth, kick, snare, snare_soft, clap, hihat, hihat_soft, open_hat
)

More by Blumchen