Strudelify

æåé I miss you

Yakkle Shing02

KeyC majorTempo100 bpm
0:00/0:00
// æåé I miss you — Yakkle Shing02
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/6038789; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 90 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · piano
const piano = note(`<
  A@2 B@2 C@3 D E F G H I J K D L F M H N O P Q R S T U V W X Y Z AA AB AC AD AE AF Q R S T U V W X D L F M H N O P Q R
  S T U V W X Y Z F M H N O P Q R S T U V W X Y AA AB AC AD AE AG AH AI AJ AK
>`.pickRestart({
  A: "[~@19 f4@2 [b3,g4]@4 a4@4 [a3,c4,g4]@4 f4@3 [g3,b3]@4 g4@4 [a2,g3,a3,d#4]@4, ~@18 e4@2 ~ [c2,b2]@7 ~ [d2,c3]@7 [e2,d3]@7 ~@5]/2", // Em Am7 G Am7b5 Cmaj7 D7 E7
  B: "[[e3,c#4,e4]@3 ~@8 e5@4 d5@3 c5@4 e6@4 c6@4 ~ c4@2 ~@2 [c3,f3,g4]@6 a4@4 c5@3, ~@3 f#2@30 [g2,a3]@7 ~@8, ~@3 b3@7 ~@20 a3@2 ~@16, ~@4 a2@29 ~ [a2,c4]@7 ~@7, ~@5 [c3,e3]@29 ~@14]/2", // C#m Csus4 Gsus2 Am C
  C: "[f4@7 ~@10 [b3,e4]@6 e3 g#3 b3 e4!2 [g#4,b4] e5!2 g#5 b5 e6!2 g#6 b6 e7 ~@7 g4 g5@12 ~ e5@12 ~, ~@6 e2@17 ~@13, ~@15 e3@7 ~@50, ~@16 b2@29 ~@27, ~@16 g#3@7 ~@36 e4 ~@12]/3", // E5 G#m
  D: "~@2 [b3,b4]@7 [e3,g3,b3]@9 [e3,g3,b3]@6, [c3,d4]@3 ~@5, ~ [e3,g3,e4,g4]@8 ~@15", // B Em Csus2 Em
  E: "~@2 [b3,b4]@7 [e3,g3,b3]@6 c5@6 d5@3, [c3,d4]@3 ~@5, ~ [e3,g3,e4,g4]@8 ~@15", // B Em Csus2 Em
  F: "~@2 g3@7 [c3,e3,g3]@9 [c3,e3,g3]@6, [a2,c4]@3 ~@5, ~ [c3,e3,e4,b4]@8 ~@15", // C Am Cmaj7
  G: "~@2 g3@7 [c3,e3,g3]@6 c5@6 d5@3, [a2,c4]@3 ~@5, ~ [c3,e3,e4,b4]@8 ~@15", // C Am Cmaj7
  H: "~@2 c4@7 [f3,a3,c4]@9 [f3,a3,c4]@6, [d3,a4]@3 ~@5, ~ [f3,a3,c5,e5]@8 ~@15", // F D5 Fmaj7
  I: "~@2 c4@7 [f3,a3,c4]@6 f5@6 g5@3, [d3,a4]@3 ~@5, ~ [f3,a3,c5,e5]@8 ~@15", // F D5 Fmaj7
  J: "d#5 ~ f3@7 [b2,d3,f3]@9 [b2,d3,f3]@6, g2@3 ~@5, ~ [b2,d3]@8 ~@15, ~ e5@2 ~@21", // Bdim Bm
  K: "~@2 f3@7 ~@3 c#5 [f4,d5]@5 [b2,d3,f3]@6, g2@3 ~@5, ~ [b2,d3]@8 [b2,d3,f3]@9 ~@6", // Dm Bdim Bm Bdim
  L: "~@2 [b3,b4]@7 [e3,g3,b3]@6 [e4,c5]@6 [f4,d5]@3, [c3,d4]@3 ~@5, ~ [e3,g3,e4,g4]@8 ~@15", // B Em C Dm Csus2 Em
  M: "~@2 g3@7 [c3,e3,g3]@6 [e4,c5]@6 [f4,d5]@3, [a2,c4]@3 ~@5, ~ [c3,e3,e4,b4]@8 ~@15", // C Dm Am Cmaj7
  N: "~@2 c4@7 [f3,a3,c4]@6 [a4,f5]@6 [b4,g5]@3, [d3,a4]@3 ~@5, ~ [f3,a3,c5,e5]@8 ~@15", // F Dm Em D5 Fmaj7
  O: "d#5 ~ f3@7 [b2,d3,f3]@9 [b2,d3,f3]@6, g2@3 ~@5, ~ [b2,d3]@8 ~@15, ~ [f4,e5]@2 ~@21", // Bdim Bm Fmaj7
  P: "~@2 [f3,d5]@7 [b2,d3,g3]@9 [b2,d3,g3]@6, [g2,d4]@3 ~@5, ~ [b2,d3,g4,b4]@8 ~@15", // Dm G G5 G
  Q: "~@2 g5@7 [c3,e3,g3]@9 [e3,g3,a#3,g5]@6, [c2,g4]@3 ~@5, ~ [c3,c5,d5]@8 ~@15", // C Edim C5 Csus2
  R: "[g2,a#2,d3,f3,a#3,d4,f4,a4]@3 [c3,e3,g3,a#3]@3 g5 f5, ~@3 [e3,g3,a#3]", // Gm7 C7 Edim
  S: "~@2 [a#3,g5]@7 ~@3 g4@2 a#4@2 d5@2 g5@2 a#5@2 d6@2, [a#2,g4]@3 ~@5, ~ [d3,g3,a#4,d5]@8 [d3,a#3]@9 [g3,a#3]@6", // D# Gm
  T: "~@2 [a#3,g6]@7 ~@3 [g4,g5]@4 ~@4 [a#4,a#5]@4, [a#2,g5]@9 ~@7 [a4,a5]@4 ~@4, ~ [d3,g3,a#5,d6]@8 [d3,a#3]@9 [g3,a#3]@6", // D# G A# D# A Gm
  U: "~@3 [g3,a#3,d4]@3 [g3,a#3,d4]@2, [e2,e3]@8 g5@7 ~@9, ~@2 g4@3 ~@3, ~@7 [a#4,d5]@8 ~@9", // Gm E A#
  V: "~@2 f4@7 ~@9 [c#3,f3]@6, [a2,a3]@3 ~ e5@4, ~ [c#3,f3,a#3,c#4]@8 [c#3,f3]@9 ~@6", // C# A A#m C#
  W: "~@2 [c4,d5]@7 ~@6 g5@3 f5@3 g5@3, [d3,f4]@3 ~@5, ~ [f3,a3,a4,c5]@8 [f3,a3,c4]@9 [f3,a3,c4]@6", // Csus2 Dm F
  X: "~@2 f3@7 ~@3 [e4,e5]@6 [b2,d3,f3,d4,d5]@6, [g2,e4,e5]@3 ~@5, ~ [b2,d3]@8 [b2,d3,f3]@9 ~@6", // E Bdim C Bm Bdim
  Y: "~@2 b3@7 ~@3 [a3,a4]@6 [e3,g3,b3,b4]@6, [c3,e4,e5]@3 ~@5, ~ [e3,g3]@8 [e3,g3,b3]@9 ~@6", // A Em C Em
  Z: "~@2 b3@7 ~@3 [e4,e5]@6 [e3,g3,b3,d4,d5]@6, [c3,e4,e5]@3 ~@5, ~ [e3,g3]@8 [e3,g3,b3]@9 ~@6", // E Em7 C Em
  AA: "~ e6@2 d6 c6 b5 a5 b5, a2@3 ~@5, e5@2 g3@7 ~@15, ~ [c3,e3]@8 [c3,e3,g3]@9 [c3,e3,g3]@6", // C
  AB: "~ g5 f5 [c3,e3,g3,e5]@3 d5 c5, a2@3 ~@5, a5@2 g3@7 ~@15, ~ [c3,e3]@8 ~@9 [c3,e3,g3]@6", // C
  AC: "~@2 e5 [f3,a3,c4,c5]@3 [f3,a3,c4,c5]@2, d3@3 ~@5, e5 ~@3, ~ [f3,a3]@8 ~@15, ~@2 c4@7 ~@15", // F
  AD: "~@2 c4@7 ~@3 d5@6 [f3,a3,c4,c5]@6, [d3,d5]@3 ~@5, ~ [f3,a3,a5]@8 [f3,a3,c4]@9 ~@6", // F D F
  AE: "~@2 f3@7 [b2,d3,f3]@9 [b2,d3,f3]@6, [g2,f4]@3 ~@5, ~ [b2,d3,b4,e5]@8 ~@15", // Bdim G7 E7
  AF: "~@2 [f3,d5]@7 [b2,d3,f3]@9 [b2,d3,f3]@6, [g2,d4]@3 ~@5, ~ [b2,d3,g4,b4]@8 ~@15", AG: "[g2,b2,d3,f3,f4,e5]@23 ~",
  AH: "~@3 e5, g2, f4 f3@11, ~ [b2,d3]@23, ~ [b4,e5]@17 ~@6", AI: "c2 e2 g2 b2 c3 e3 g3 b3 c4 e4 g4 b4",
  AJ: "c5@2 e5@2 a5@2 f#5@3 f#5@3 a5@6 d6@6", AK: "d6@23 ~",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass · "Contrabass"
const bass = note(`<
  ~@7 A B C D E F G H A B C D E F G H I J ~@6 I J ~@6 I J ~@6 A B C D E F G H ~@10 C D E F G H ~@19
>`.pickRestart({
  A: "c2@3 c2@3 g2@2", B: "c2 g2", C: "a1@3 a1@3 e2@2", D: "a1 e2", E: "d2@3 d2@3 a2@2", F: "d2 a2",
  G: "g2@3 g2@3 d2@2", H: "d2 g2", I: "c2@3 g2@3 g2@2", J: "c2 ~",
})).s("gm_acoustic_bass").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@7 [~ x ~ x]!78 ~@5>").gain(0.2)

// drums · shaker
const shaker = s("sh").struct("<~@7 [x!8]!78 [~ x ~ x]!2 ~@3>").gain(0.2)

stack(piano, bass, snare, shaker)