Strudelify
Blue Spanish Eyes cover art

Blue Spanish Eyes

Al Martino

KeyB minorTempo106 bpm
0:00/0:00
// Blue Spanish Eyes — Al Martino
// 106 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 75 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B A B A B A B C@8 A B A B A B A B D@4 A B C@2 A B E F E F E F E F G@8 E F E F E F E F H@4 E F G@2 E F G@2 E F I
>`.pickRestart({
  A: "f#2@4 ~@5 f#2@2 ~ f#2@3 ~@3 c#2@3 ~@3", B: "f#2@5 ~@4 f#2@2 ~ f#2@3 ~@3 c#2@3 ~@3",
  C: "c#2@5 ~@4 c#2@2 ~ c#2@3 ~@3 g#2@3 ~@3", D: "b1@5 ~@4 b1@2 ~ b1@3 ~@3 f#2@3 ~@3",
  E: "g2@4 ~@5 g2@2 ~ g2@3 ~@3 d2@3 ~@3", F: "g2@5 ~@4 g2@2 ~ g2@3 ~@3 d2@3 ~@3",
  G: "d2@5 ~@4 d2@2 ~ d2@3 ~@3 a2@3 ~@3", H: "c2@5 ~@4 c2@2 ~ c2@3 ~@3 g2@3 ~@3", I: "g1 ~@5",
})).s("gm_acoustic_bass").gain(0.44)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A B C@7 D E@2 F@4 G H@3 I@5 J@3 K@2 L@2 M@6 N@4 O P Q@2 R@4 S T@3 U@5 V@3 W@2 X@2 Y@4 Z@4 ~
>`.pickRestart({
  A: "a#3 c#4", B: "~ f#5, a#4@5 ~@3",
  C: "[~@107 c#5@37 a#4@2 ~ a#4@5 b4@4 c#5@6 d#5@6, c#6@2 ~@5, ~@24 [c#4,f#4,a#4]@121 ~@23]/7", // F#
  D: "f5@5 f#5@6 g#5@6 a#5@6 ~", E: "[[c#5,f5,b5]@15 ~]/2", F: "[g#4@33 ~@3 g#4@5 a#4@4 b4@49 ~@2, [c#4,f4]@31 ~]/4",
  G: "g#4@2 a#4 b4@2 c#5", H: "[d#5@6 f5@5 f#5@6 ~ g#5@4 a#5@44 ~@6]/3",
  I: "[~@48 c#5@48 a#4@2 ~ a#4@3 ~@2 b4@3 ~ c#5@5 d#5@6 ~, [c#4,a#4]@97 ~@23, f#4@71 ~@49]/5", // F#
  J: "[e5@6 f#5@5 ~ g#5@5 f#5@6 d#6@43 ~@6]/3", K: "[[f#4,b4,d5]@23 ~]/2", L: "[~ c#5@44 ~@3, [f#4,a#4]@11 ~]/2",
  M: "[~ f4@43 ~@15 a#5@12 ~ c#6@12 f#6@11 ~ b5@45 ~@3, c#5@47 ~ c#4@46 ~@50, g#4@43 ~@4 [f#4,a#4]@47 ~ [d6,g6]@45 ~@4]/6", // F# G5
  N: "[~@59 d5@37, [g4,b4]@31 ~, d4@3 ~]/4", O: "b4@2 ~ b4@5 c5@4 d5@6 e5@6", P: "f#5@5 g5@6 a5@6 b5@6 ~",
  Q: "[[d5,f#5,c6]@15 ~]/2", R: "[a4@33 ~@3 a4@5 b4@4 c5@49 ~@2, [d4,f#4]@31 ~]/4", S: "a4@2 b4 c5@2 d5",
  T: "[e5@6 f#5@5 g5@6 ~ a5@4 b5@44 ~@6]/3",
  U: "[~@48 d5@48 b4@2 ~ b4@3 ~@2 c5@3 ~ d5@5 e5@6 ~, [d4,b4]@97 ~@23, g4@71 ~@49]/5", // G
  V: "[f5@6 g5@5 ~ a5@5 g5@6 e6@43 ~@6]/3", W: "[[g4,c5,d#5]@23 ~]/2", X: "[~ d5@44 ~@3, [g4,b4]@11 ~]/2",
  Y: "[~ f#4@43 ~@4 d4@46 ~@2, d5@47 ~@49, a4@43 ~@4 [g4,b4]@47 ~@2]/4", // G
  Z: "[[f#4,a4]@43 ~@29 g5@12 b5@12, d5@47 [d4,g4,b4]@47 ~@2]/4", // F#m G
})).s("gm_string_ensemble_2").gain(0.19).pan(0.7)

// other · trumpet
const trumpet = note("<~@38 A B C D@2 ~ E F G@2 H@2 ~@2 I@2 J@2 K L ~@2 M N O P Q R ~@4 S T U@2 V>".pickRestart({
  A: "~@9 d4 ~@2 g4@6 a4@6", B: "d4@3 ~", C: "~@2 g4 a4", D: "[b4@9 g4@3 e4@5 d4@9 ~@22]/2", E: "~@3 d5 c5@2 b4@2",
  F: "a4@2 g4 a4 f#4@2 e4@2", G: "[~@12 [f#4,a4]@6 [g4,b4]@5 [a4,c5]@17 ~@8]/2",
  H: "[~@12 [f#4,a4]@6 [g4,b4]@5 ~ c5@8 [f#4,a4]@2 ~ [f#4,a4]@6 g4@7, ~@23 a4@7 ~@11 e4@5 ~@2]/2", // F#m G F#m
  I: "[~@12 d5@8 c5 d5 ~ b4@7 a4@3 b4@3 g4@6 e4@6, ~@11 c5 ~@12]/2",
  J: "[d4@11 ~ [d4,g4]@5 ~ a4@5 [g4,b4]@18 ~@7, ~@17 f#4@6 ~@25]/2", K: "~@2 [d4,g4] [f#4,a4]",
  L: "b4@9 g4@3 e4@6 d4@5 ~, g4@7 ~@17", M: "~@9 c5@3 d5@6 e5@5 ~", N: "e5@3 d5 c5@2 d5@2", O: "d#5@3 c5 d5@2 d#5@2",
  P: "g5@4 f5@3 d#5", Q: "d5@3 b4 c5 e5", R: "d5@17 ~@7", S: "~@4 c5@4 ~ b4@3 a4@4 ~@2 g4@5 ~",
  T: "f#4@5 ~ g4@5 ~ a4@4 ~@2 c5@5 ~", U: "[[g3,b4]@47 ~]/2", V: "[g3,d4,b4] ~@7",
})).s("gm_trumpet").gain(0.19).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A@5 B@4 C@8 D@8 E F@7 G@3 H@7 I@8 J@3 K@6 L@4 M N@8 ~ O>".pickRestart({
  A: "[f#3, f#2@4 ~]/5", B: "[~@23 f#3@73]/4", C: "[~@72 c#4@41 d#4@7 c#4@72, ~@23 c#3@169]/8",
  D: "[~@23 [f#2,f#3]@45 ~@99 f#3@25, ~@71 f#3@94 ~@27, ~@120 c#4@71 ~]/8", E: "e4",
  F: "[d#4@48 d4@47 a#3@24 f#3@24 g#3@25, b3@95 c#4@48 ~@25]/7", G: "[~@23 f#3@49]/3",
  H: "[g2@24 ~@35 d4@30 c4@6 b3@42 a3@7 b3@24, g3]/7",
  I: "[~@23 f#3@48 ~@36 f#3@6 g3@7 a3@47 f#3@18 g3@7, ~@23 a3@84 ~@85, ~@71 d3@121]/8", J: "[a3@23 g3@47 ~@2]/3",
  K: "[d4@41 c4@6 b3@47 ~@25 [f3,b3,d4]@25, g3@127 ~@17, ~@47 g2@25]/6", L: "[c4@41 d4@6 d#4@36 d4@6 c4@7, [c3,g3]]/4",
  M: "[d3,b3]@23 g2", // G
  N: "[~@23 a3@24 d4@18 c4@6 [g3,b3]@48 a3@24 ~@24 [g2,g3,b3]@25, ~@23 d3@141 ~@28, ~@23 f#3@48 ~@48 f#3@45 ~@28, ~@143 d4@49]/8", // G
  O: "[g2,d3,g3,g4] ~@5", // G5
})).s("gm_string_ensemble_2").gain(0.31)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@6 A@4 ~ B ~@2 C D ~@3 E@2 ~ F G@3 ~@5 H ~@43>".pickRestart({
  A: "[~@29 c#4@2 f#3 ~@4 [a#3,c#4]@48 ~@12, ~@23 f#3@4 f#3@4 ~@4 f#3@48 ~@13, ~@6 a#3!3 ~@15, ~@25 c#4@4 ~@4 d#4@4 ~@59]/4", // A#m
  B: "c#5@4 ~ c#5@4 ~@6 [f4,b4]@5 [f4,a#4]@4, ~@3 c#5@4 ~", C: "~@4 [f4,g#4] [f#4,a#4] [f4,g#4] [f#4,a#4]",
  D: "[f4,g#4]@3 f#4 f4@3 ~", E: "[c#5@4 ~ c#5@3 ~@5 c#5@29 ~@6, ~@2 f#4@2 f#4@2 f#4@15 ~@3, ~@9 b4@5 ~@34]/2",
  F: "~@7 b3, ~@15 [f#3,c#4]@8 ~", G: "[[f#3,c#4]@4 f#3@4 ~ d#4@3 ~ c#4@48 ~@11, ~@4 c#4@9 ~@59, ~@2 f#3 f#3@12 ~@3]/3",
  H: "~ a#4@4 [c#4,f#4,a#4]@4 [c#4,f#4,a#4]@3 ~ a#4@7 ~@4, [c#4,f#4]@5 ~@7 [c#4,f#4]@8 ~@4", // F# F#5
})).s("gm_electric_guitar_jazz").gain(0.15).pan(0.7)

// chords · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note("<~@11 [f4@4 f4@4 f4@7 ~@9] ~@7 [f#4 ~@5] ~@55>")
  .s("gm_electric_guitar_jazz").gain(0.06).pan(0.7)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<A@4 B@6 C@8 D@8 E@6 F G@2 H@8 I@3 J@7 K@3 L@8 M N@8 O ~>".pickRestart({
  A: "[[f#3,a#3,c#4]@47 ~]/4", B: "[[f#3,a#3,c#4]@94 ~ [f#3,a#3,c#4]@47 ~@2]/6",
  C: "[~@48 c#4@23 ~ [f3,g#3,c#4]@23 ~, [f3,g#3]@71 ~@25, c#4@47 ~@49, ~ c#3@3]/8", // C# Fm
  D: "[[f#3,a#3,c#4]@46 ~ [f#3,a#3,c#4]@47 ~@2 [f#3,a#3]@94 ~@2, ~@95 c#4@94 ~@3]/8", // F#
  E: "[d#4@47 ~@24 g#3@13 f#3@10 ~ [f#3,a#3,c#4]@49, b3@31 ~@17, f#3 ~, ~@47 d4@48 ~@49]/6", F: "[g#3,f4], c#4 ~@23",
  G: "[~@23 [f#3,a#3,f#4]@25]/2", H: "[~@65 g4@42 f#4@12 [g3,b3,d4]@48 [g3,b3,d4]@25, ~@23 [g3,b3,d4]@93 ~@76]/8",
  I: "[~@12 d4@23 ~, ~@23 [f#3,a3]@46 ~@3]/3", // F#m
  J: "[f#4@66 g4@6 a4@23 [a3,f#4]@48 [g3,b3,d4]@25, d3@71 ~@13, d4@93 ~@2 d4@46 ~@27, a3@13 ~@11]/7", // D G
  K: "[~@23 [b3,d4]@42 [c4,e4]@7, ~@23 g3@49]/3", // Bm C
  L: "[[b3,d4]@45 ~@3 g4@23 f4@24 ~ e4@47 ~@36 f4@7 d#4@6, ~@47 [g3,b3,d4]@47 ~ [g3,c4]@46 ~@2 [g3,c4]@48 ~, ~@143 d#4@36 ~@13, ~@144 c3@47 ~]/8", // Bm G C5
  M: "[g3,b3,d4]", // G
  N: "[~@47 f#4@24 ~ g4@47 ~ [d4,a4]@17 [e4,g4]@6 d4@12 c4@9 ~@3 [g3,b3,d4]@25, ~@23 [d3,a3,d4]@48 [g3,b3]@47 ~ [d3,a3]@47 ~@26, ~@71 d4@45 ~@3 f#4@17 ~@7 f#4@24 ~@25]/8", // D5 Em G D5 G D5
  O: "~@23 g2",
})).s("gm_synth_strings_1").gain(0.11).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!74 x>").gain(0.59).pan(0.3)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!36 [~@6 x ~@8 x!4 ~@5]!2 [~ x ~ x]!36 ~>").gain(0.46).pan(0.3)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!36 [~ x!7] [x!8]!37 x>").gain(0.39).pan(0.3)

// drums · crash
const crash = s("cr").struct("<~@36 x ~@38>").gain(0.39).pan(0.3)

stack(
  bass, string_ensemble_2, trumpet, string_ensemble_2_2, electric_guitar_jazz, electric_guitar_jazz_2, synth_strings_1,
  kick, snare, hihat, crash
)

More by Al Martino