Strudelify

Shine

Aswad

KeyG minorTempo110 bpm
0:00/0:00
// Shine — Aswad
// 110 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// other · electric guitar muted · "soloGitr"
const electric_guitar_muted = note(`<
  ~@12 A B C B D B C B C ~@15 A B C B ~@20 E B F B ~@5 G ~@2 H I J ~@3 K ~@16
>`.pickRestart({
  A: "~@4 g4 ~@3", B: "~@4 db5 c5 bb4@2 g4@2 ~@6", C: "~@3 d4@2 ~ d4@2 g4@2 ~@6", D: "~@3 d4 ~@2 d4@2 g4@2 ~@6",
  E: "~@8 g4@3 ~@5", F: "~@2 d4 ~@3 d4@2 g4@2 ~@6", G: "~@8 g3 ~@2 g3 ~ g3 bb3@2", H: "~@4 g3 ~@3",
  I: "~ d3 ~ d3 g3 ~@3", J: "~@2 d3 ~@3 d3 ~ c3@2 ~@6", K: "d3@2 c3 ~ bb2@2 a2 ~@9",
})).s("gm_electric_guitar_muted").gain(0.26).pan(0.1)

// chords · electric guitar clean · "e guitar"
const electric_guitar_clean = note(`<
  ~@12 A B C B C B C B C B C B C B C B A B D@3 B D@3 B C E A B C B C B C B F G H I A B D@3 B D@3 B C B J K L K L K L K M
  K N G H I A B D@3 B D@3 B D@3 B D@2 O
>`.pickRestart({
  A: "~@10 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", B: "~@2 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~",
  C: "~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", // Dm Gm
  D: "~@2 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", E: "~@2 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@9",
  F: "~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Dm Cm
  G: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", // Cm Gm
  H: "~@2 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Gm Cm
  I: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~ [a3,d4,gb4]@2 ~@6", J: "~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@9",
  K: "~@3 [bb3,d4,g4] ~@4", L: "~@6 [a3,d4,f4] ~ [bb3,d4,g4]@2 ~@6", M: "~@5 [bb3,d4,g4] ~@2",
  N: "~@2 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 ~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", O: "~@2 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~@9",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.9)

// chords · brass section · "bl„ser"
const brass_section = note(`<
  ~@16 A B C B D ~@7 E ~@3 F ~@3 G H C B I ~@7 J@4 K ~@3 F ~@3 G H L H M ~@9 N@4 K ~@3 F ~@3 G O@7 P
>`.pickRestart({
  A: "~@10 [d4,g4]!2 [f4,bb4] [g4,c5] ~ [f4,bb4]", B: "~ [d4,g4]@7 ~@3 [d4,g4] [f4,bb4] [g4,c5] ~ [f4,bb4]",
  C: "~ [d4,g4]@3 [c4,f4]!3 ~@3 [d4,g4]!2 [f4,bb4] [g4,c5] ~ [f4,bb4]", D: "~ g4@2 ~ db5 c5 bb4 ~@9, ~ d4 ~@14",
  E: "[d4,g4] ~ [c4,f4] ~ [c4,e4] [bb3,d4] [g3,bb3] ~@5 [g4,d5,g5]@2 ~@2", // G5 F5 C Bb Gm G5
  F: "d4 e4 gb4 ~ gb4 g4 a4 ~@5 [g4,d5,g5]@2 ~@2", G: "d4 e4 gb4 ~ gb4 g4 a4 ~@3 [d4,g4]!2 [f4,bb4] [g4,c5] ~ [f4,bb4]",
  H: "~ [d4,g4]@6 ~@4 [d4,g4] [f4,bb4] [g4,c5] ~ [f4,bb4]", I: "~ [d4,g4] ~@2 db5 c5 bb4 ~@9",
  J: "[~@4 [g4,g5]@7 [a4,a5] [bb4,bb5]@6 [a4,a5] [bb4,bb5] eb4@7 bb4 [a4,a5] ~@3, ~@5 eb5@2 ~, ~@54 bb5 ~@9]/4", // G A Bb A Bb A
  K: "~@6 [g4,d5,g5] ~", L: "~ [d4,g4]@2 ~ [c4,f4]!3 ~@3 [d4,g4]!2 [f4,bb4] [g4,c5] ~ [f4,bb4]",
  M: "~ [d4,g4]@2 ~ db5 c5 bb4 ~@9", // G5
  N: "[~@4 [g4,g5]@7 [a4,a5] [bb4,bb5]@6 [a4,a5] [bb4,bb5] [eb4,eb5]@6 [bb4,bb5]@2 [a4,a5] ~@3]/4", // G A Bb A Bb Eb Bb A
  O: "~ [d4,g4] ~@8 [d4,g4]!2 [f4,bb4] [g4,c5] ~ [f4,bb4]", P: "~ [d4,g4] ~@6 [g4,d5,g5]@2 ~@6",
})).s("gm_brass_section").gain(0.35).pan(0.2)

// other · clavinet
const clavinet = note(`<
  ~@12 A B C D E D F D G H I H I J I K L M N@3 M N@2 O P Q H I H R H I S I S T U V W L M N@3 M N@2 X ~@7 Y@2 ~@4 Z AA AB
  AC L M N@3 M N@3 M N@3 M N@2 AD
>`.pickRestart({
  A: "~@8 g2!2 ~ g2 ~ g2 ~ g2", B: "~ g2 ~ g2 ~ g2!5 ~ g2 ~ g2 ~ g2", C: "~ d2 ~ d2 ~ d2 ~ d2 g2!6 ~ g2",
  D: "~ g2 ~ g2 ~ g2 ~ g2!3 ~ g2 ~ g2 ~ g2", E: "~ d2 ~ d2 ~ d2 ~ d2 g2!2 ~ g2 ~ g2 ~ g2",
  F: "~ d2 ~ d2 ~ d2 ~ [c2,d2] g2!2 ~ g2 ~ g2 ~ g2", G: "~ g2 ~ d2 ~ d2 ~ d2 g2 ~ g2!2 ~ g2 ~ g2",
  H: "~ g2 ~ g2 ~ g2 ~ g2!2 ~ g2!2 ~ g2 ~ g2", I: "~ d2 ~ d2 ~ d2 ~ d2 g2 ~ g2!2 ~ g2 ~ g2",
  J: "~ g2 ~ g2 ~ g2!2 [g2,a2] g2 ~ g2!2 ~ g2 ~ g2", K: "~ g2 ~ g2 ~ g2 ~ g2!2 ~@7", L: "~@8 g2 ~ g2!2 ~ g2 ~ g2",
  M: "~@2 g2!2 ~ g2 ~ g2!2 ~ g2!2 ~ g2 ~ g2", N: "d2 ~ d2!2 ~ d2 ~ d2 g2 ~ g2!2 ~ g2 ~ g2",
  O: "d2 ~ d2!2 ~ d2 ~ d2 g2 ~ g2!4 ~ g2", P: "~ g2 ~ g2 ~ g2!4 ~ g2!4 ~ g2", Q: "~ d2 ~ d2 ~ d2 ~ d2 g2 ~ g2!4 ~ g2",
  R: "~ g2 ~ g2 ~ d2 ~ d2 g2 ~ g2!2 ~ g2 ~ g2", S: "~ g2 ~ g2 ~ g2 ~ d2 g2 ~ g2!2 ~ g2 ~ g2",
  T: "~ d2 ~ d2 ~ d2 ~ d2 c3 ~ c3!2 ~ c3 ~ c3", U: "~ c3 ~ c3 ~ c3 ~ c3 g2 ~ g2!4 ~ g2",
  V: "~ g2 ~ g2 ~ g2 ~ g2 c2 ~ c3!4 ~ c3", W: "c2 c3 ~ c3 ~ c3 c2 c3 d2@2 ~@6", X: "d2 ~ d2!2 ~ d2 ~ d2 ~@8",
  Y: "~@8 g2@2 ~ g2 ~ g2 bb2@2", Z: "~@8 c2@2 c3!2 ~ c3 ~ c3", AA: "c2 c3 ~ c3 ~ c3 c2 c3 g2 ~ g2 ~ g2!2 ~ g2",
  AB: "~ g2 ~ g2 d2 g2 d2 g2 c2@2 c3!2 ~@2 c3 ~", AC: "c2 c3 ~ c3 ~ c3 c2 c3 d2@3 ~@5",
  AD: "d2 ~ d2!2 ~ d2 ~ d2 g2@3 ~@5",
})).s("gm_clavinet").gain(0.23).pan(0.1)

// chords · percussive organ · "organ"
const percussive_organ = note(`<
  ~@12 A B C B D E F E G B C B C B C H A B C@3 B C@2 I J F J K B@3 C B@3 L M N O A B C@3 B C@2 I J F J P ~@3 Q@2 ~@4 R M
  N O A B C@3 B C@3 B C@3 B C@2 S
>`.pickRestart({
  A: "~@10 [d4,g4] ~@3 [d4,g4] ~", B: "~@2 [d4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~",
  C: "~@2 [d4,a4] ~@3 [d4,a4] ~@3 [d4,g4] ~@3 [d4,g4] ~", D: "[d4,a4]@6 ~@4 [d5,g5]!2 [f5,bb5] [g5,c6] ~ [f5,bb5]",
  E: "~ [d5,g5]@4 ~@6 [d5,g5] [f5,bb5] [g5,c6] ~ [f5,bb5]", // G5 Bb5 C5 Bb5
  F: "~ [d5,g5]@2 ~ [c5,f5]!3 ~@3 [d5,g5]!2 [f5,bb5] [g5,c6] ~ [f5,bb5]", // G5 F5 G5 Bb5 C5 Bb5
  G: "~ [d5,g5]@2 ~ db6 c6 bb5 ~@3 [d4,g4] ~@3 [d4,g4] ~", H: "~@2 [d4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~@5",
  I: "~@2 [d4,a4] ~@3 [d4,a4] ~@3 [d5,g5]!2 [f5,bb5] [g5,c6] ~ [f5,bb5]", // D5 G5 Bb5 C5 Bb5
  J: "~ [d5,g5]@5 ~@5 [d5,g5] [f5,bb5] [g5,c6] ~ [f5,bb5]", K: "~ [d5,g5]@2 ~@7 [d4,g4] ~@3 [d4,g4] ~",
  L: "~@2 [d4,a4] ~@3 [d4,a4] ~@3 [c4,g4] ~@3 [c4,g4] ~", M: "~@2 [c4,g4] ~@3 [c4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~",
  N: "~@2 [d4,g4] ~@3 [d4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~", O: "~@2 [c4,g4] ~@3 [c4,g4] ~ [d4,a4]@2 ~@6",
  P: "~ [d5,g5]@2 ~@13", Q: "~@8 g4@2 ~ g4 ~ g4 bb4@2", R: "~@10 [c4,g4] ~@3 [c4,g4] ~",
  S: "~@2 [d4,a4] ~@3 [d4,a4] ~ [g3,d4]@3 ~@5", // D5 G5
})).s("gm_percussive_organ").gain(0.2).pan(1)

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D A D A D E F A D G H I J I H K H L M N H K O N P G H Q@2 I J Q@2 L M N P G N@2 H I N@2 H R S T U V H Q@2 I J
  Q@2 W ~@3 G X I N@2 J K Y M H R Z AA AB AC H Q@2 I J Q@2 L H Q@2 I J Q@2 W
>`.pickRestart({
  A: "g1@2 ~@2 g1@2 ~ d1 g1!2 g1@2 bb1 c2 d2@2", B: "g1@2 ~@2 g1@2 ~ g1 d1!2 d1@2 bb1 c2 d2 ~",
  C: "g1@2 ~@2 g1 ~@2 d1 g1!2 g1@2 bb1 c2 d2@2", D: "g1@2 ~@2 g1@2 ~ g1 d1!2 d1@2 bb1 c2 d2@2",
  E: "g1 ~@3 g1@2 ~ d1 g1!2 g1@2 bb1 c2 d2@2", F: "g1@2 ~@2 g1 ~@2 g1 d1!2 d1@2 bb1 c2 d2@2",
  G: "~@8 g1@2 ~@2 g1@2 ~ d1", H: "g1!2 g1@2 bb1 c2 d2@2 g1@2 ~@2 g1@2 ~ g1",
  I: "d1!2 d1@2 bb1 c2 d2@2 g1@2 ~@2 g1@2 ~ d1", J: "g1!2 g1@2 bb1 c2 d2@2 g1@2 ~@2 g1 ~@2 g1",
  K: "d1!2 d1@2 bb1 c2 d2@2 g1@2 ~@2 g1 ~@2 d1", L: "d1!2 d1@2 bb1 c2 d2 ~ g1@2 ~@2 g1@2 ~ d1",
  M: "g1!2 g1@2 bb1 c2 d2@2 g1@2 ~@2 g1 ~@2 d1", N: "g1!2 g1@2 bb1 c2 d2@2 g1@2 ~@2 g1@2 ~ d1",
  O: "g1!2 g1@2 bb1 c2 d2@2 g1 ~@3 g1@2 ~ d1", P: "g1!2 g1@2 bb1 c2 d2 ~@9",
  Q: "d1!2 d1@2 bb1 c2 d2@2 g1@2 ~@2 g1@2 ~ g1", R: "d1!2 d1@2 bb1 c2 d2@2 c2@2 ~@2 c2@2 ~ c2",
  S: "c2@2 d2@2 eb2@2 f2 ~ g2@2 ~@2 g2@2 ~ g2", T: "f2!2 g2 ~ g2 ~ d2@2 c2@2 ~@2 c2@2 ~ c2",
  U: "c2@2 d2@2 eb2@2 f2@2 d2@2 ~@5 d2", V: "d2@2 c2@2 bb1@2 a1@2 g1@2 ~@2 g1@2 ~ d1", W: "d1!2 d1@2 bb1 c2 d2 ~@9",
  X: "g1!2 g1@2 bb1 c2 d2@2 g1 ~@3 g1@2 ~ g1", Y: "g1!2 g1@2 bb1 c2 d2@2 g1 ~@3 g1 ~@2 d1",
  Z: "c2@2 d2@2 eb2@2 f2@2 g2@2 ~@2 g2@2 ~ d2", AA: "f2!2 g2 ~ g2@2 f2@2 c2@2 ~@2 c2@2 ~ c2",
  AB: "c2!2 d2@2 eb2@2 f2@2 d2@2 ~@5 d2", AC: "d2@2 c2@2 bb1@2 a1 ~ g1@2 ~@2 g1@2 ~ d1",
})).s("gm_electric_bass_finger").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@12 A B@15 C B@22 D A B@24 D A B@15 E>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x ~ x!2", D: "x!3 ~", E: "x!2 ~@2",
})).gain(0.55)

// drums · rim
const rim = s("rim").struct(`<
  ~@64
  [~@8 x ~@2 x ~@2 x ~]
  [x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~]!12
  [x ~@2 x ~@2 x ~ x ~@7]
  ~@17
>`).gain(0.55)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A B@2 C B D B D B@2 D E D E@2 B F B C B@2 E B@6 C B@2 E C@2 D@2 C E C G F B C B@2 E B@2 H ~@17 F B C B@2 E B@4 C
  B@2 E B@2 H
>`.pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", C: "~@3 x ~@2 x ~@3 x!2 ~@2 x ~",
  D: "~@3 x ~@2 x ~@4 x ~@2 x ~", E: "~@2 x!2 ~@2 x ~@4 x ~@2 x ~", F: "~@10 x!2 ~@2 x ~", G: "~@3 x ~@2 x ~@9",
  H: "~@2 x!2 ~@2 x ~@9",
})).gain(0.55)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@12 A ~@2 B ~ C ~ C ~@2 C A C A@2 ~@3 B ~@2 A ~@6 B ~@2 A B@2 C@2 B A B@2 ~@2 B ~@2 A ~@22 B ~@2 A ~@4 B ~@2 A ~@3
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~ x ~@3 x ~@2",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@46 [~ x ~@6] ~@48>").gain(0.28)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B@15 C B@22 D A B@24 D A B@15 E>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x ~ x!2", D: "x!3 ~", E: "x!2 ~@2",
})).gain(0.55)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A B@15 A B@22 C A B@24 C A B@15 C>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4",
})).gain(0.41)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@12 A B@2 C B@3 D B@4 D B@3 E B@22 F A B@7 G ~@3 A B@2 D H D B D H D@2 B C I A B@15 G
>`.pickRestart({
  A: "~@8 x ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!7 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x ~ x ~ x!3 ~ x!2",
  E: "x ~@7 x ~ x!3 ~ x!2", F: "x ~ x!3 ~ x!3 ~@7", G: "x ~ x!3 ~ x!2 ~@8", H: "x ~ x!5 ~ x ~ x!3 ~ x!2",
  I: "x ~ x!7 ~@7",
})).gain(0.28)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@4 [~ x ~ x ~@4]!8 ~@24 [~@5 x ~ x]!4 ~@20 [~@5 x ~ x]!4 ~@30 [~ x]>")
  .gain(4.87)

// drums · congas
const congas = s("conga:18").struct(`<
  [~@2 x ~@3 x!2 ~@2 x ~@3 x!2]!5
  [x ~ x ~@3 x!2 ~@2 x ~@3 x!2]!5
  [~@2 x ~@3 x!2 ~@2 x ~@3 x!2]!2
  ~@83
>`).gain(1.55)

// drums · congas
const congas_2 = s("conga:33").struct("<~@8 [~@7 x] ~@86>").gain(1.55)

// drums · ht
const ht = s("ht").struct(`<
  ~@11 A B ~@3 C ~@2 A C ~@3 D ~@2 A C ~@3 E ~@3 F ~@3 G ~@3 H ~@3 I ~@2 J K ~@3 E ~@3 F ~@3 E ~@3 L ~ M ~ I ~ N ~@2 A C
  ~@3 O ~@2 A P ~@3 E ~@3 I
>`.pickRestart({
  A: "~@15 x", B: "x ~ x ~ x!2 ~@10", C: "x!2 ~@6", D: "~ x ~@6", E: "~@3 x!3 ~@10", F: "~@4 x!2 ~@10", G: "~ x!3 ~@12",
  H: "~@2 x!2 ~@12", I: "~ x ~ x ~@12", J: "~ x ~@2", K: "~@3 x ~@12", L: "~ x ~@2 x ~@11", M: "~@3 x!2 ~@11",
  N: "~@2 x!4 ~@10", O: "~@3 x ~@4", P: "x!3 ~@13",
})).gain(0.55)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@15 A ~@32 B ~@2 C ~@18 B ~@3 D ~@15 B ~@4>".pickRestart({
  A: "~@15 x", B: "~ x ~@6", C: "~@3 x ~@12", D: "~ x ~@14",
})).gain(0.35)

// … 31 more lines

More by Aswad