Strudelify

Shy Guy

Diana King

KeyB minorTempo94 bpm
0:00/0:00
// Shy Guy — King Diana
// 94 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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 2 · "SYN BASS 2"
const bass = note(`<
  ~@8 A B C D E F C G E H C G I J K L M N C G O P C G Q R C S T R C G I J K L M N C G O P C G U ~@2 V A B C D A B C D I
  J K L W X C G Y X C G W X C G Y X C G ~@2
>`.pickRestart({
  A: "b1@2 ~ b1@2 ~@4 b1 ~ b1 a1 ~ a1 ~@2 a1@2 ~@2 a1@2 ~", B: "g1@2 ~ g1@2 ~@4 g1 ~ g1 f#1 ~ f#1 ~@2 f#1@2 ~@2 g1@2 ~",
  C: "e1@3 ~@2 e1@3 ~ d1@3 e1@4 ~@8", D: "e1@2 ~ e1@3 f#1@2 ~ f#1@3 g1@2 ~ g1 ~ g1@3 g1 a1@3",
  E: "a1@2 ~ b1@2 ~@6 b1 f#1@2 ~ f#1 ~ f#1 ~@2 f#1 a1@2 ~", F: "a1@2 ~ b1@2 ~@9 f#1 f#1@2 ~ a1@2 ~ b1@2 ~",
  G: "e1@3 ~@2 e1@4 f#1@3 g1@2 ~ g1@2 ~ a1 ~ f#1 a1@3", H: "a1@2 ~ b1@2 ~@6 b1 f#1@4 ~ f#1 a1@2 ~ b1@2 ~",
  I: "g1@15 g1!2 ~ g2@5 ~", J: "a1@15 a1!2 ~ a2@5 ~", K: "e1 d1", L: "c1",
  M: "a1@2 ~ b1@2 ~@4 a1@2 ~@3 f#1 ~@2 f#1 ~@2 f#1 d2 ~ a1", N: "a1@2 ~ b1@2 ~@4 b1@3 g1@2 ~@3 g1 ~@2 g1 d2 ~ b1",
  O: "a1@2 ~ b1@2 ~@4 b1@3 f#1@2 ~@3 f#1@2 ~ f#1 d2 ~ a1", P: "a1@2 ~ b1@2 ~@4 b1@3 g1@2 ~@3 g1 ~@2 g1 d2 ~@2",
  Q: "a1@2 ~ b1@2 ~@6 b1 f#1@2 ~ f#1 ~ f#1 ~@2 f#1 d2@2 ~", R: "a1@2 ~ b1@2 ~@4 b1@3 f#1@2 ~ f#1 ~ f#1 ~@2 f#1 a1@2 ~",
  S: "~@12 g1@2 ~ g1@2 ~ a1 ~ f#1 a1@3", T: "a1@2 ~ b1@2 ~@4 b1 ~ b1 f#1@2 ~ f#1 ~ f#1 ~@2 f#1 d2 ~ a1",
  U: "b0@3 b0 ~@20", V: "~@5 a1", W: "a1@2 ~ b1@2 ~@4 a1@2 ~ f#1@2 ~ f#1 ~ f#1 ~@2 f#1 a1 ~ f#1",
  X: "a1@2 ~ b1@2 ~@4 a1@3 f#1@2 ~ f#1 ~ f#1 ~@3 a1@3", Y: "a1@2 ~ b1@2 ~@4 a1@3 f#1@2 ~ f#1 ~ f#1 ~@3 d2@3",
})).s("gm_synth_bass_2").gain(0.53)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@4 A B C@2 A B C D A E F G H B F G I J K L A E F M A E F G A E F G H B F G I J K L A E F M A E F G ~@12 I J K L A E F
  M A E F G A E F M A E F G ~@2
>`.pickRestart({
  A: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a3,c#4,e4] ~ [a3,c#4] ~@3 [a3,c#4,e4]@3", // Bm A
  B: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a3,c#4,e4] ~ [a3,c#4,e4] ~@3 [a3,c#4,e4]@3", // Bm A
  C: "~@3 [b3,d4,f#4,g4] ~@5 [b3,d4,f#4,g4] ~@5 [b3,d4,f#4,g4] ~@5 [b3,d4,f#4,g4] ~@2", // Gmaj7
  D: "~@3 [b3,d4,f#4,g4] ~@5 [b3,d4,f#4,g4] ~@5 [a#3,d4,f#4,a4] ~@5 [b3,d4,f#4,g4] ~@2", // Gmaj7 D Gmaj7
  E: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a3,c#4,e4] ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] [a3,c#4,e4]@3", // Bm A
  F: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@2", // Bm
  G: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a#3,c#4,a4]@2 ~@4 [a#3,c#4,g4]@2 ~", // Bm A#m Gdim
  H: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~ [a3,c#4,e4] [a3,c#4,e4]@3", // Bm A
  I: "~ [d4,f#4]@21 ~@2, [g3,b3]@7 ~", J: "[a3,c#4,e4]@5 ~", K: "[g3,b3,d4,f#4]@11 ~",
  L: "[f#3,c4,e4]@5 ~ [f#3,a#3,d4]@6, c2@11 ~", // F#m7b5 F#aug
  M: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [a#3,e4,a4]@2 ~@4 [a#3,e4,g4]@2 ~", // Bm A Edim
})).s("gm_piano").gain(0.19).pan(0.4)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@12 A@2 B C A@2 D@2 ~@4 A@2 B E A@2 B C ~@12 A@2 B E A@2 B C ~@16 A@2 B E A@2 B C A@2 B E A@2 B C ~@2
>`.pickRestart({
  A: "[b3,d4,f#4] [a3,c#4,e4]", B: "[g3,b3,d4]", C: "[g3,b3,d4]@2 a4 g4, ~ [a#3,e4]",
  D: "[[g3,b3,d4]@6 a4 g4, ~@3 [a#3,e4]]/2", E: "[g3,b3,d4] [f#3,a#3,e4]",
})).s("gm_pad_warm").gain(0.14).pan(0.6)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@4 A@8 ~@8 B@3 C ~@8 D@8 B@3 C ~@3 E@2 ~@3 B@3 ~ F@8 B@3 C ~@18>".pickRestart({
  A: "a3 ~ f#3 ~@3 b3 ~ a3 ~@2 a3 ~@3 e3 ~ e3 ~@2 e3 f#3@2 ~",
  B: "a3 ~ f#3 b3 ~@2 b3 ~ a3 ~@2 a3 ~@3 e3 ~ e3 ~@2 e3 f#3@2 ~",
  C: "f#3 ~ f#3!2 ~@2 f#3 ~ e3 ~@2 e3 ~@3 e3 ~ e3 ~@2 e3 f#3@2 ~",
  D: "a3 ~ f#3 ~@3 b3 ~ a3 ~@2 a3 ~@5 e3 ~@2 e3 f#3@2 ~",
  E: "[~@14 f#3 ~@2 d4 a4@3 g4@2 f#4@12 ~@13, ~@15 a#3@2 ~@31, ~@8 c4 ~@15]/2", F: "~@9 b2 ~@2",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.7)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note("<~@4 [~@3 b3 ~@20]!8 ~@20 [~@3 b3 ~@11 e3 ~@8]!8 ~@46>")
  .s("gm_electric_guitar_muted").gain(0.09).pan(0.7)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@20 A B C D E@2 F@2 E@2 F@2 G@2 H I G@2 H I A B C D E@2 F@2 J@2 K@2 L ~@3 G@2 H M G@2 H I N O C D E@2 F@2 J@2 K@2 E@2
  F@2 E@2 F@2 ~@2
>`.pickRestart({
  A: "[g2,b3,d4,f#4]", B: "[a2,a3,c#4,e4]", C: "e2 d2, [g3,d4,f#4]", D: "[c4,e4] [a#3,d4], [c2,f#3]",
  E: "[b4,f#5,b5]/2", F: "[f#5@4 ~@2 a4 g4, g4@3 [a#3,e4], b4@5 ~@3, ~@8 f#5@7 ~]/2", G: "[b3,d4,f#4] [a3,c#4,e4]",
  H: "[g3,b3,d4]", I: "[g3,b3,d4]@2 a4 g4, ~ [a#3,e4]", J: "[b5@5 d6 c#6 a5, [b4,f#5]]/2",
  K: "[f#5@4 f#5@2 a5 g5, g4@3 [a#3,e4], b4@5 ~@3]/2", L: "[b3,d4,f#5] ~@7", M: "[g3,b3,d4] [f#3,a#3,e4]",
  N: "[g2,d3,b3,f#4]", O: "[a2,e3,c#4,a4]",
})).s("gm_string_ensemble_2").gain(0.18).pan(0.4)

// chords · electric guitar jazz · "JAZZ GTR" · Bm
const electric_guitar_jazz = note("<~@56 [[b3,d4]@2 ~@7 [b3,d4]@2 ~@13]!8 ~@22>")
  .s("gm_electric_guitar_jazz").gain(0.13).pan(0.4)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@8 A@3 ~ A@3 ~ A@3 ~@5 A@3 ~@17 A@3 ~@5 A@3 ~ A@3 B ~@8 A@3 ~@5 A@3 ~@7
>`.pickRestart({
  A: "~ x", B: "x ~@2 x ~@7 x!2 ~@2 x ~@4 x!2 ~@2",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@15 A ~@4 A@4 ~@3 A ~@7 A ~@4 A@4 ~@3 A ~@7 A ~@7 A@5 ~@3 A ~@7 A ~@6>".pickRestart({
  A: "~@3 x",
})).gain(0.53)

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@19 B A@19 B A@11 ~ A@3 ~ A@7 B A@16 ~@2>".pickRestart({
  A: "x ~@5 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2", B: "x ~@5 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@5",
})).gain(0.38)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A@8 B@8 ~@4 B@16 ~@4 B@8 A@3 ~ B@3 ~ B@4 ~@4 B@16 ~@2>".pickRestart({
  A: "~ x ~@10", B: "~@2 x ~@8 x ~@12",
})).gain(0.23)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@19 B A@19 B A@11 ~ A@3 C A@7 B A@16 ~@2>".pickRestart({
  A: "~ x ~@6", B: "~ x ~@5 x", C: "~@7 x",
})).gain(0.3)

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

// drums · ht
const ht = s("ht").struct(`<
  ~@7 A ~@3 B ~@7 C ~@7 B ~@3 D ~@7 C ~@7 B ~@3 D ~@11 D ~@7 D ~@3 E ~@3 D ~@3 E ~@2
>`.pickRestart({
  A: "~@11 x!2 ~@11", B: "~@14 x!2 ~ x!2 ~@5", C: "~@17 x!2 ~@5", D: "~@9 x ~ x ~@2 x ~@9",
  E: "~@8 x!2 ~ x!2 ~ x ~ x ~ x ~@2 x ~@2",
})).gain(0.38)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@7 A ~@3 B ~@7 C ~@7 B ~@11 C ~@7 B ~@27 A ~@7 A ~@2>".pickRestart({
  A: "~@5 x ~@6", B: "~@2 x", C: "~@5 x ~@2",
})).gain(0.23)

// drums · mt
const mt = s("mt").struct("<~@7 A ~@11 B ~@11 C ~@7 C ~@11 C ~@11 D ~@7 D ~@7 D ~@6>".pickRestart({
  A: "~@14 x ~@2 x ~@2 x!2 ~ x", B: "~@7 x", C: "~@21 x ~ x", D: "~@17 x ~@3 x ~ x",
})).gain(0.3)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@12 A@8 ~@4 A@16 ~@4 A@8 ~@4 A@3 ~ A@4 ~@4 A@16 ~@2>".pickRestart({
  A: "~@11 x ~@5 x ~@6",
})).gain(1.44)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@12 A@8 ~@4 A@16 ~@4 A@8 ~@4 A@3 ~ A@4 ~@4 A@16 ~@2>".pickRestart({
  A: "~@8 x ~@5 x ~@8 x",
})).gain(1.44)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@59 [x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x] x ~@25>").gain(1.14)

stack(
  bass, piano, pad_warm, electric_guitar_muted, electric_guitar_muted_2, string_ensemble_2, electric_guitar_jazz, kick,
  kick_soft, clap, snare, hihat, hihat_soft, open_hat, crash, ht, ht_soft, mt, agogo_bells, agogo_bells_2, cabasa
)