Strudelify

Dark Eyes

Ehsan Shayan

KeyF majorTempo140 bpm
0:00/0:00
// Dark Eyes — Ehsan Shayan
// 140 bpm, 3/4, key F 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/5932930; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 94 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): Electric Guitar.
setcpm(140/3)

// 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 · overdriven guitar
const overdriven_guitar = note("<~@92 [~@11 a4@5] [d5@5 ~@11]>").s("gm_overdriven_guitar").gain(0.4)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~ A@4 ~@2 B@2 C@2 D@2 E@2 F@2 G@2 D@2 H ~@2 I@2 J@2 K@4 L M N O P@2 Q R ~ I@2 J@2 K@4 L M N O P@2 Q R S@2 T@2 U V W X
  Y@2 Z AA AB AC AB AC AD AE AF R AG B@2 C@2 D@2 E@2 F@2 G@2 D@2 H ~
>`.pickRestart({
  A: "[~@7 g3@16 g3@16 g3@16 e4@5 ~@4]/4", B: "[g4@8 f4@3 f4@10 e4@5 ~ f4@5]/2", C: "[e4@8 d4@3 d4@10 f4@5 ~ g4@5]/2",
  D: "[f4@8 e4@3 e4@10 e4@5 ~ f4@5]/2", E: "[e4@8 d4@3 d4@10 d4@5 ~ e4@5]/2", F: "[d4@8 db4@3 db4@10 e4@5 ~ f4@5]/2",
  G: "[e4@8 d4@3 d4@10 ab4@5 ~ g4@5]/2", H: "d4@5 ~@11", I: "[g4@21 ~@11]/2", J: "[f4@21 ~@11]/2", K: "[a4@21 ~@11]/2",
  L: "~@5 e4@5 ~ e4@5", M: "e4@5 ~@11", N: "~@5 f4@5 ~ f4@5", O: "f4@5 ~@11", P: "~@5 g4@5 ~ g4@5",
  Q: "~@5 a4@5 ~ a4@5", R: "a4@5 ~@11", S: "c4@5 d4@5 ~ gb4@5", T: "bb3@5 d4@5 ~ g4@5", U: "a3@5 db4@5 ~ g4@5",
  V: "g3@5 a3@5 ~ db4@5", W: "d4@5 a3@5 ~ d4@5", X: "f4@5 a3@5 ~ d4@5", Y: "~@5 gb4@5 ~ gb4@5", Z: "~@5 d4@5 ~ d4@5",
  AA: "~@5 d4@5 ~ db4@5", AB: "a4", AC: "ab4", AD: "a4@5 f4@5 ~ e4@5", AE: "d4@5 c4@5 ~ bb3@5", AF: "a3@11 ~@5",
  AG: "~@5 ab3@5 ~ a3@5",
})).s("gm_electric_guitar_jazz").gain(0.2)

// chords · piano
const piano = note(`<
  A B@4 ~@2 C@2 D E F C D@2 G@2 E@2 C@2 H I ~ J@2 K@2 L@2 M N O@2 P@2 Q@2 R S ~ J@2 K@2 L@2 M N O@2 P@2 Q@2 T S U@2 V@2
  W X Y Z AA@2 AB@2 AC AD AC AD AE AF AG AH ~ AI AJ T AK AL AJ T@2 AM@2 AK@2 AJ@2 AN I
>`.pickRestart({
  A: "~@3 ab2",
  B: "[~@2 a2@5 e4@3 f4@2 e4@3 d4@3 e4@5 d4@3 e4@2 d4@3 db4@3 d4@5 db4@3 d4@2 db4@3 b3@3 db4@5 [a2,e3,db5,g5]@5 ~@4, ~@7 a2@15 ~ a2@15 ~ a2@15 ~@10]/4", // A7
  C: "~@5 [a3,e4,db5,g5]@5 ~ [a3,e4,db5,g5]@5, a2@15 ~", D: "~@5 [a3,d4,a4,f5]@5 ~ [a3,d4,a4,f5]@5, d3@15 ~",
  E: "~@5 [a3,d4,a4,f5]@5 ~ [a3,d4,a4,f5]@5, a2@15 ~", F: "~@5 [a3,e4,db5,g5]@5 ~ [a3,e4,db5,g5]@5, e3@15 ~",
  G: "~@5 [g3,d4,bb4,e5]@5 ~ [g3,d4,bb4,e5]@5, g2@15 ~", H: "[a2,a3,d4,a4,f5]@5 ~@6 [a2,a3]@5", I: "[d3,d4]@5 ~@11",
  J: "[e4@3 f4@2 e4@3 d4@3 ~@5 a2@15 ~, db3@15 ~@17, ~@11 e4@20 ~]/2",
  K: "[d4@3 e4@2 d4@3 db4@3 ~@5 a2@15 ~, d3@15 ~@17, ~@11 d4@20 ~]/2",
  L: "[db4@3 d4@2 db4@3 b3@3 ~@5 a2@15 ~, e3@15 ~@17, ~@11 db4@20 ~]/2", M: "[d3,d4]@15 ~", N: "[d3,f4]@15 ~",
  O: "[e4@3 f4@2 e4@3 d4@3 ~@5 g2@15 ~, g2@15 ~@17, ~@11 e4@20 ~]/2",
  P: "[d4@3 e4@2 d4@3 db4@3 ~@5 a2@15 ~, a2@15 ~@17, ~@11 d4@20 ~]/2",
  Q: "[db4@3 d4@2 db4@3 b3@3 ~@5 a2@15 ~, a2@15 ~@17, ~@11 db4@20 ~]/2", R: "d4@5 [a2,d3,a4,f5]@5 ~ [a2,d3,a4,f5]@5",
  S: "[a2,d3,a4,f5]@5 ~@11", T: "d3@5 [a2,d3,a4,f5]@5 ~ [a2,d3,a4,f5]@5", U: "c4@5 d4@5 ~ gb4@5",
  V: "bb3@5 d4@5 ~ g4@5", W: "a3@5 db4@5 ~ g4@5", X: "g3@5 a3@5 ~ db4@5", Y: "d4@5 a3@5 ~ d4@5", Z: "f4@5 a3@5 ~ d4@5",
  AA: "d3@5 [c3,d3,d5,gb5]@5 ~ [c3,d3,d5,gb5]@5", AB: "g2@5 [g2,d3,bb4,g5]@5 ~ [g2,d3,bb4,g5]@5",
  AC: "[a2,e3,db5,a5]@15 ~", AD: "[ab2,e3,bb4,ab5]@15 ~", AE: "[a2,e3,db5,a5]@5 f4@5 ~ e4@5", AF: "d4@5 c4@5 ~ bb3@5",
  AG: "a3@5 ~@3", AH: "[a2,e3,db5,a5]@5 ~@11", AI: "db4@5 [a2,e3,db5,g5]@5 ~ [a2,e3,db5,g5]@5",
  AJ: "a2@5 [a2,e3,db5,g5]@5 ~ [a2,e3,db5,g5]@5", AK: "a2@5 [a2,d3,a4,f5]@5 ~ [a2,d3,a4,f5]@5",
  AL: "e3@5 [a2,e3,db5,g5]@5 ~ [a2,e3,db5,g5]@5", AM: "g2@5 [g2,d3,bb4,e5]@5 ~ [g2,d3,bb4,e5]@5",
  AN: "[a2,d3,a4,f5]@5 ~@6 [a2,a3]@5", // Dm A
})).s("gm_piano").gain(0.2)

// other · violin
const violin = note(`<
  ~ A@4 ~@2 B@2 C@2 D@2 E@2 F@2 G@2 D@2 H ~@2 I@2 J@2 K@2 L@2 M H M H N@2 O P ~ I@2 J@2 K@2 L@2 M H M H N@2 O P Q@2 R@2
  S T U V W@2 X Y Z AA Z AA AB AC AD AE AF B@2 C@2 D@2 E@2 F@2 G@2 D@2 H ~
>`.pickRestart({
  A: "[~@7 db4@16 db4@16 db4@16 db4@5 ~@4]/4", B: "[g4@8 f4@3 f4@10 e4@5 ~ f4@5]/2",
  C: "[e4@8 d4@3 d4@10 f4@5 ~ g4@5]/2", D: "[f4@8 e4@3 e4@10 e4@5 ~ f4@5]/2", E: "[e4@8 d4@3 d4@10 d4@5 ~ e4@5]/2",
  F: "[d4@8 db4@3 db4@10 e4@5 ~ f4@5]/2", G: "[e4@8 d4@3 d4@10 ab4@5 ~ g4@5]/2", H: "d4@5 ~@11", I: "[db4@21 ~@11]/2",
  J: "[d4@21 ~@11]/2", K: "[g4@21 ~@11]/2", L: "[f4@21 ~@11]/2", M: "~@5 d4@5 ~ d4@5", N: "~@5 db4@5 ~ db4@5",
  O: "~@5 f4@5 ~ f4@5", P: "f4@5 ~@11", Q: "c4@5 d4@5 ~ gb4@5", R: "bb3@5 d4@5 ~ g4@5", S: "a3@5 db4@5 ~ g4@5",
  T: "g3@5 a3@5 ~ db4@5", U: "d4@5 a3@5 ~ d4@5", V: "f4@5 a3@5 ~ d4@5", W: "~@5 c4@5 ~ c4@5", X: "~@5 bb3@5 ~ bb3@5",
  Y: "~@5 d4@5 ~ db4@5", Z: "db4", AA: "d4", AB: "db4@5 f4@5 ~ e4@5", AC: "d4@5 c4@5 ~ bb3@5", AD: "a3@11 ~@5",
  AE: "db4@5 ~@11", AF: "~@5 ab3@5 ~ a3@5",
})).s("gm_violin").gain(0.08)

// other · pizzicato strings
const pizzicato_strings = note("<~@21 [~@11 a3@5] [d4@5 ~@11] ~@69 [~@11 a3@5] [d4@5 ~@11]>")
  .s("gm_pizzicato_strings").gain(0.12)

// bass · contrabass
const bass = note(`<
  A B@4 ~@2 C D E D F D E@2 G@2 D@4 E ~@2 H D I D H D I D J K L M N@2 O E ~ H D I D H D I D J K L M N@2 ~@39
>`.pickRestart({
  A: "~@3 ab1", B: "[~@2 a1@5 a1@16 a1@16 a1@16 a2@5 ~@4]/4", C: "db2@5 ~@11", D: "a1@5 ~@11", E: "d2@5 ~@11",
  F: "e2@5 ~@11", G: "g1@5 ~@11", H: "e2@5 g2@5 ~ a2@5", I: "d2@5 f2@5 ~ a2@5", J: "g1", K: "g2@5 ~@11", L: "a1",
  M: "a2@5 ~@11", N: "a1@11 ~@5", O: "d2",
})).s("gm_contrabass").gain(0.26)

// bass · acoustic bass
const bass_2 = note("<~@21 A B ~@32 C D ~@9 D E F G H G H I J K L ~ M N B N O N B@2 P@2 N@4 Q B>".pickRestart({
  A: "~@11 a1@5", B: "d2@5 ~@11", C: "d2@5 a1@5 ~ f1@5", D: "d2", E: "[g1,g2]", F: "[bb1,g2]", G: "[a1,e2]",
  H: "[bb1,e2]", I: "[a1,e2]@5 f2@5 ~ e2@5", J: "d2@5 c2@5 ~ bb1@5", K: "a1@11 ~@5", L: "[a1,e2]@5 ~@11",
  M: "db2@5 ~@11", N: "a1@5 ~@11", O: "e2@5 ~@11", P: "g1@5 ~@11", Q: "d2@5 ~@6 a1@5",
})).s("gm_acoustic_bass").gain(0.31)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@57 d2!2 g1!2 a1!2 d2!3 ~@28>").s("gm_acoustic_bass").gain(0.21)

// other · flute
const flute = note(`<
  A B C@3 ~@17 D E ~@8 F@2 G@2 H@2 I D E ~@8 F@2 G@2 H@2 ~@23 J@2 K@2 L@2 M@2 N@2 O@2 L@2 P Q
>`.pickRestart({
  A: "~@3 ab5", B: "~@2 a5@5 a5@5 a5@4",
  C: "[~@2 a5@5 a5@3 a5@2 a5@3 a5@3 a5@2 a5@3 a5@3 a5@2 a5@3 a5@3 a5@2 a5@3 a5@5 ~@4]/3", D: "~@5 d5@3 c5@3 bb4@2 a4@3",
  E: "ab4@5 ~@11", F: "[f5@8 e5@3 bb5@10 e5@5 ~ f5@5]/2", G: "[e5@8 d5@3 a5@10 ab4@5 ~ a4@5]/2",
  H: "[bb4@8 a4@3 a4@10 f5@5 ~ e5@5]/2", I: "e5@8 d5@3 d5@5", J: "[g5@8 f5@3 f5@10 e5@5 ~ f5@5]/2",
  K: "[e5@8 d5@3 d5@10 f5@5 ~ g5@5]/2", L: "[f5@8 e5@3 e5@10 e5@5 ~ f5@5]/2", M: "[e5@8 d5@3 d5@10 d5@5 ~ e5@5]/2",
  N: "[d5@8 db5@3 db5@10 e5@5 ~ f5@5]/2", O: "[e5@8 d5@3 d5@10 ab5@5 ~ g5@5]/2", P: "d5@5 ~@6 a4@5", Q: "d5@5 ~@11",
})).s("gm_flute").gain(0.26)

// other · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@32 A@2 B@2 ~ C ~@11 A@2 B@2 ~ C ~@39>".pickRestart({
  A: "[~@11 e5@10 ~@11]/2", B: "[~@11 d5@11 ~@10]/2", C: "~@5 e4@5 ~ f4@5",
})).s("gm_electric_guitar_clean").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@7 A@15 ~@2 A@15 ~@2 A@14 ~@2 A@12 ~@9 A@15 ~>".pickRestart({
  A: "x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@7 A@14 B ~@2 A@15 ~@2 A@14 ~@2 A@12 ~@9 A@15 ~>".pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "~@11 x ~@4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@17 B ~@16 B ~@15 B ~@13 B@5 ~@2 B ~@16 B>".pickRestart({
  A: "~@7 x ~@8", B: "x",
})).gain(0.3)

stack(
  overdriven_guitar, electric_guitar_jazz, piano, violin, pizzicato_strings, bass, bass_2, bass_soft, flute,
  electric_guitar_clean, kick, pedal_hat, crash
)