Strudelify

A Secret Love

Toto

KeyG majorTempo120 bpm
0:00/0:00
// A Secret Love — Toto
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · pad sweep
const pad_sweep = note("<A B@2 C@4 D@6 E F@3 G@5 H@2 ~@70>".pickRestart({
  A: "~ [f2,f3,a3,c4,e4]@7 ~ [a3,c4]@3 ~@2 [b3,c4]@6 ~@2 b3@2 ~ b3@3 ~@2 c3@2, ~@8 e4@3 ~@3 [g2,g3]@17 ~, ~@12 c4 ~@3", // Fmaj7 Am Cmaj7 G
  B: "[~@2 [c4,d4,g4]@5 ~@3 [d4,e4,b4]@5 ~@4 [g3,a3,d4]@11 ~@8 [b3,c4,f4]@4 ~ [b3,c4,f4]@3 a3@6 a2@3 ~ f4@2 ~ f4@3 e4@2, ~@2 a2@12 ~@17 d2@16 ~@9 f2@6 ~@2, ~@56 e4 ~ c5@3 ~@3]/2", // Csus2 E7 Gsus2 F
  C: "[~@5 d4@3 ~ [c4,a4,b4]@5 ~ [b3,g4]@5 [c4,e4]@8 ~ e4@7 [a3,c4,e4]@3 ~@2 [b3,c4]@6 ~@2 b3@2 c4@2 b3@3 ~@2 c3@3 [c4,d4,g4]@5 ~@3 [d4,e4,b4]@5 ~@5 [g3,a3]@10 ~@8 [b3,c4,f4]@4 ~ [b3,c4,f4]@3 a3@6 a2@3 ~@3 c5@2 f4@3 e4@2 [a2,a3]@4, ~ [a2,a3]@4 a2@18 ~@5 [f2,f3,a3,c4]@8 ~@5 [g2,g3]@17 ~@3 a2@13 ~@4 d4@11 ~@26 e4@2 ~@11, ~@4 [b4,c5]@4 ~@12 e2@12 ~@58 d2@16 ~@9 f2@6 ~@7, ~@58 f4 ~@5]/4", // F Em C Am Cmaj7 Csus2 E7 Gsus2 …
  D: "[[d4,b4,c5]@4 ~ [c4,a4]@4 ~@2 [b3,g4]@4 [c4,e4]@9 [f2,f3,a3,c4,e4]@7 [a3,c4,e4]@3 ~@2 g2 ~@9 c4@2 b3@3 ~@2 c3@3 ~ [c4,d4]@4 ~@4 d4@5 ~@4 [g3,a3,d4]@11 ~@8 [b3,c4]@4 [b3,c4,f4]@3 a3@6 a2@3 ~@3 c5@2 f4@3 e4@2 [a2,a3]@4 [d4,b4,c5]@4 ~ [c4,a4,b4]@5 ~ [b3,g4]@4 [c4,e4]@9 [f2,f3,a3,c4,e4]@7 [a3,c4,e4]@3 ~@2 g2 ~@8 b3@2 ~ b3@3 ~@2 c3@3 ~ [c4,d4,g4]@5 ~@3 [d4,e4,b4]@4, a2@18 ~@18 g3@17 ~@58 f4@2 ~@46 [b3,c4]@6 ~@5 c4@2 ~@20, ~@4 b4@5 ~@6 e2@12 ~@9 [b3,c4]@6 ~@3 b3@2 ~@9 g4@5 ~@3 [e4,b4]@4 ~@24 f4@4 ~@14 e4@2 ~@26 e2@12 ~@42, ~@37 g2@17 ~@2 a2@12 ~@17 d2@16 ~@9 f2@6 ~@7 a2@18 ~@19 [g2,g3]@17 ~@2 a2@13]/6", // G F Em C Fmaj7 Am Csus2 Gsus2 …
  E: "~@5 [g3,a3,d4]@11 ~@8 [b3,c4,f4]@4 ~ [b3,c4,f4]@3, ~ d2", // Gsus2 F
  F: "[~@5 a2@3 ~@3 c5@2 f4@3 e4@2 ~@9 [c4,a4,b4]@5 ~ [b3,g4]@4 [c4,e4]@9 [f2,f3,a3,c4,e4]@8 [a3,c4,e4]@3 ~@2 [b3,c4]@6 ~@2 b3@2 ~ b3@3 ~@2 c3@3 ~ [c4,d4,g4]@5 ~@3 [d4,e4,b4]@5 ~@4, a3@8 ~ f2@5 ~@5 [a2,a3]@5 ~@13 e2@12 ~@47, ~@9 e4@2 ~@11 [d4,b4,c5]@4 ~@43 c4@2 ~@25, ~@10 f4@2 ~@11 a2@18 ~@18 [g2,g3]@17 ~@3 a2@12 ~@5]/3", // F Em C Fmaj7 Am Cmaj7 Csus2 E7 …
  G: "[[g3,a3,d4]@11 ~@8 [b3,c4,f4]@4 ~ [b3,c4,f4]@3 ~@5 a2@3 ~@2 [e4,f4]@2 ~ f4@3 e4@2 ~@5 d4@3 ~ [c4,a4,b4]@5 ~ [b3,g4]@5 [c4,e4]@8 ~ [c4,e4]@7 [a3,c4,e4]@3 ~@2 [b3,c4]@6 ~@2 b3@2 c4@2 b3@3 ~@2 c3@3 [c4,d4,g4]@5 ~@3 [d4,e4,b4]@5 ~@5 [g3,a3]@10 ~@8 [b3,c4,f4]@4 ~ [b3,c4,f4]@3 a3@6 a2@3 ~, ~@12 d2@15 a3@8 ~@2 f2@6 ~@3 [a2,a3]@4 a2@18 ~@5 [f2,f3,a3]@8 ~@5 [g2,g3]@17 ~@3 a2@13 ~@5 d4@20 ~@16, ~@39 c5@3 ~@7 [b4,c5]@4 ~@12 e2@12 ~@58 d2@16 ~@9]/5", // Gsus2 F Fmaj7 F Em C Am Cmaj7 …
  H: "[~@2 c5@2 f4@3 e4@2 [a2,a3]@4 [d4,b4,c5]@4 ~ [c4,a4]@4 ~@2 [b3,g4]@4 [e2,c4,e4]@12 ~@24, f2@6 ~@7 a2@18 ~@33, e4 ~@31, ~ f4@2 ~@14 b4@5 ~@42]/2", // A G F Em C
})).s("gm_pad_sweep").gain(0.26)

// chords · piano
const piano = note("<~@23 A B@7 C@2 D@3 E@4 F@6 G@2 H I@4 J@2 K L@6 M@6 G@2 N O P ~ Q@8 R S@5 T U@5>".pickRestart({
  A: "~@13 g3@3",
  B: "[~@2 g3@8 a3@12 b3@5 ~@17 c4@6 [f3,a3]@26 ~@18 a3@8 b3@5 ~@3 b3@7 ~ c4@7 ~@17 c4@6 ~@2 f3@24 ~@18 b3@2 b3@2 a3@3 ~ b3@7 ~ b3@10 c4@6, ~@28 f2@43 ~@5 g2@44 ~@6 f2@50 ~@48, ~@28 g3@22 ~@52 g3@18 ~@6 [g3,b3]@18 ~@4 a3@28 ~@10 d3@37 ~, ~@28 b3@17 ~@31 b3@18 ~@80 b3@15 ~@35, ~@38 c3@13 ~@37 d3@32 ~@16 c3@13 ~@25 g2@48 ~@2]/7", // F G
  C: "[~@20 c4@8 f3@15 ~@5 f2@11 ~@5, ~@3 f2@18 ~@11, ~@3 b3@8 ~@3 a3@18, ~@4 c3@3 ~@9]/2",
  D: "[~@16 b3@2 a3@4 b3@7 ~@3 c4@6 ~@2 d4@6 ~@38 e3@4 g3@7 ~, g2@19 ~@16 g2@10 ~@3, b3@13 ~@9 g3@16 ~@10 [d4,e4]@36 ~@12, ~@5 d3@6 ~@37]/3", // Dsus2
  E: "[~@26 e4@6 d4@6 c4@5 ~@35 f#4@6 ~@8 b3@8 ~@10 g4@4 ~@2 f#4@6 d4@6, f#3@72 f#3@19 ~ e3@24 ~@12, ~@44 d4@34 a3@9 ~@5 d4@17 ~@5 d3@8 ~@6, ~@34 b2@11 ~@5 b3@14, ~@21 g4@5 ~@6]/4",
  F: "[~@4 f#4@6 c3@8 ~@30 [e3,g3]@6 f#3@15 ~@29 c4@6 ~@34 a3@6 g4@21 ~@19 g3@4 ~@4, ~@10 e4@72 e4@23 ~@29 b3@4 ~@54, ~@45 d4@7 d4@21 ~@23, ~@136 f#4@7 ~@49]/6", // Em
  G: "[g3@10 a3@8 b3@5 ~@17 c4@6 a3@16 ~@2, ~@3 f2@5, ~@24 g3@23 ~@17, ~@3 b3@2 ~@3, ~@17 c3@15]/2",
  H: "~@3 c5 [a4,b4] g4@4 ~@4 b3@2 ~", // Asus2
  I: "[b3@6 ~@2 b3@6 ~@2 b3@10 c4@2 ~@32 [d4,e4]@3 ~ c4@13 ~@27 b3@8 b3@8 b3@8, ~@7 b3@19 ~@6]/4", // Dsus2
  J: "[~@28 c4@6 a3@17 ~@13, b3@8 b3@17 ~@7, ~@8 c4@9 ~@47, ~@5 d3@13 ~@14, ~@3 f3@6 ~@7]/2", K: "~@20 b3@5 ~@3 b3@4",
  L: "[~@6 c4@5 ~@3 d4@6 ~@26 g3@2 e3@4 ~@6 g3@6 ~@32 d4@6 c4@5 ~@37 f#4@4 ~@8 b3@8 ~@10 g4@5 ~ [d3,f#4]@6 d4@6, ~@13 e4@32 e4@11 ~@10 b2@11 ~@5 b3@14, ~@52 e3@12 f#3@74 f#3@17 ~ e3@25 ~@11, ~@108 d4@34 a3@9 ~@5 d4@17 ~@19, ~@37 g4@5 ~@6]/6", // D
  M: "[~@4 f#4@6 c3@8 ~@30 [e3,g3]@6 f#3@15 ~@29 c4@6 ~@30 b3@4 [a3,f#4]@6 g4@21 ~@19 g3@4 ~@4, ~@10 e4@72 e4@23 ~@87, ~@45 d4@7 d4@21 ~@23]/6", // Em D
  N: "~@6 d5 ~ c5 ~ [g4,a4,b4] ~@17 b3@4", O: "b3@3 ~ b3@3 ~@2 b3@4 c4 ~@2", P: "~@4 b3@16 c4@7 ~@5",
  Q: "[~@6 b3@4 ~@8 b3@5 ~ b3@4 ~@2 b3@10 ~@18 c4@8 a3@24 ~@20 b3@8 ~@8 c4@5 ~@3 d4@5 ~@3 [a3,a#3,d4,a4] ~@113, ~@40 b3@70 ~@8 b3@27 ~@111, ~@40 f2@55 ~@161, ~@20 g3@13 ~@38 e4@54 ~@3]/8", // A#maj7
  R: "~@12 g3@5 ~@3 b3@6 ~@2 c4@4",
  S: "[~@2 d4@3 ~ [c4,e4]@7 f4@2 ~ d4@11 ~ f3@2 ~ [f3,a#3]@5 [a#3,d4]@2 ~ [a#3,d4]@3 [a#3,d4]@5 a4@23 ~@10, ~@6 f3@19 ~@2 f4@2 ~ [d4,f4]@6 f4@5 ~@6 d4@8 ~@25, ~@15 a#3@12 [a#3,d4]@4 ~@5 f3@9 ~@35, ~@76 [g3,g4]@4 ~@4 [a3,a4]@7 ~@3 a#3@33 ~@33]/5", // C A#5 A# Dm A# G A
  T: "~@10 g4@2 g#4@4 g4@2 d#4@2 c4@7 ~ [g4,g#4]@2 g4@2", U: "[~@2 c4@139 ~@19, d#4@141 ~@19]/5",
})).s("gm_piano").gain(0.31)

// chords · flute
const flute = note("<~@26 A@2 B ~ C D E F@2 ~@50 G H I J ~@5>".pickRestart({
  A: "[~@24 [b5,d6]@2 ~@2 [b5,d6]@3 c6@2 ~@2 d6@2 ~@2 f5@3 ~@22, ~@26 c6@3 ~@4 d6@2 ~@29, ~@27 e6@2 ~@5 b5@7 ~@23, ~@17 e6 ~@14]/2", // Bm
  B: "~@16 [a5,c6]@2 ~@2 [a5,c6]@2 ~ b5@2 d6@2 ~ b5@3 ~, ~@18 b5@3 ~@4 a5@5 ~@2, ~@19 d6@2 ~ d6@2 ~@8", // Am
  C: "~@5 [g5,b5]@2 [a5,c6]@2 [g5,b5]@2 c6 a5@2 [g5,c6]@2 b5@3 [d5,g5]@6 ~@7", D: "~@14 [a5,c6] [b5,d6]",
  E: "[a5,c6]@2 d6@2 ~@3 c6@2 f5@3 ~@20, ~@5 a5@3 ~@24, ~@3 d6 ~@12", // Am
  F: "[~@15 g5@2 ~ a5@2 ~ c6@2 ~@2 c6@2 b5@2 d5@7 ~@28, ~@17 c6@2 ~ g5@2 ~@2 g5@4 ~@36]/2", G: "~@28 [f5,a5]@3 ~",
  H: "~@2 [f5,a5]@3 ~@2 [f5,a5]@3 ~@3 f5@3 ~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3 ~, ~@12 a#5@3 ~@17", // F A#5
  I: "~ [f5,a#5]@2 ~@2 [f5,a5]@3 ~@2 [f5,a5]@3 ~ [f5,a5]@3 ~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3", // A#5 F A#5
  J: "~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3 ~@2 [f5,a#5]@3 ~@17", // A#5
})).s("gm_flute").gain(0.15)

// chords · flute · soft notes
const flute_soft = note("<~@26 A@2 B@2 ~@2 C D@2 ~@53 E ~@5>".pickRestart({
  A: "[~@31 e6@2 ~@4 a5@2 ~@25]/2", B: "[~@24 c6@5 f5@8 ~@27]/2", C: "~@3 b5@2 ~@4 a5@4 ~@19",
  D: "[~@15 b5@2 ~@2 b5@2 ~ a5@2 ~@5 g5@5 ~@30]/2", E: "~@9 a#5 ~@6, ~@18 f5 ~@13",
})).s("gm_flute").gain(0.1)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@34 A B@7 C@4 ~@2 D@4 E F@2 G@7 H@6 ~@2 I@5 J@8 K@4 L@7>".pickRestart({
  A: "~@14 [f#3,f#4] ~@17", // F#
  B: "[~@15 e4@7 ~@8 f#3 f#3@7 ~@79 g4@2 e3@28 f#4 f#4@22 g3@34 ~@17 g3@3, ~@22 e4@56 d4@34 ~@7 b3@51 ~@54, ~@38 f#3@55 f#3@30 ~@47 c3@54, ~@119 g4@18 ~@33 e4 ~@53]/7",
  C: "[~@2 f#3@40 ~ [b2,d4]@38 [e3,g3]@34 e3@8 ~@5, ~@43 b3@68 ~@17]/4", D: "[~@55 f2@2 f2@61 ~@10, ~@7 g2@22 ~@35]/4",
  E: "~ [c2,d4] ~@30", F: "[~@19 c4@13, ~@15 d2@43 ~@6]/2",
  G: "[~@2 [g2,a3,b3]@51 ~@3 e4@30 ~@9 f#3@7 ~@79 g4@2 ~@3 e2@26 [d2,f#4]@12, ~@55 [c2,d4]@82 ~@5 d4@34 ~@7 b3@41, ~@56 e3@34 ~@12 f#3@55 f#3@31 ~@36, ~@86 e4@57 ~@40 e3@29 ~@12, ~@183 g4@18 ~@23]/7", // G D Csus2
  H: "[~@10 e4 c2@49 ~@2 g3@4 f#3@40 ~@39 [e3,g3]@35 e3@8 ~@4, ~@10 g3@34 ~@63 d4@39 ~@46, ~@11 c3@56 ~@40 b3@32 [a3,b3]@36 ~@17, ~@54 b2@19 ~@23]/6", // Em Asus2
  I: "[~@14 [g2,a3]@50 ~ d2@45 e2@50, ~@7 b3@73, ~@64 f3@47 ~@49]/5", // Gsus2
  J: "[~@57 g3@4 ~@47 [f3,a3]@36 ~@2 b3@34 ~@2 a3@11 ~@4 d2@8 ~@11 g2@40, ~@4 f2@58 ~@46 c4@37 ~@36 c4@34 [g3,b3]@41, ~@4 a3@23 a3@36 ~@45 e4@110 ~@38, ~@5 b3@51 b3@57 ~@80 a3@25 ~@38, ~@56 g2@6 [g2,d3]@46 d2@3 ~@34 [e2,g3,d4]@37 [f2,f3]@36 ~@38]/8", // F G G5 Em7 F
  K: "[~@11 [g3,e4]@25 ~@50 f4@4 ~@18 d#4@18 ~@2, ~@10 a#2@79 ~@39, ~@10 a#3@75 [g3,a#3]@41 ~@2, ~@11 d4@74 d4@24 ~@19, ~@36 f4 f3@49 [d#2,d#3]@41 ~]/4", // C Gm D#
  L: "[~@18 d4@20 ~@41 c#2@125 ~@20, [d2,a#3]@43 ~@181, f3@10 ~@4 [f3,c4]@37 ~@5, c4@5 ~@51, ~ d3@41 ~@182]/7", // Gm F5
})).s("gm_string_ensemble_2").gain(0.15)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@39 A@7 ~@2 B@7 ~@6 C@6 D ~@2 E ~@2 F@3 G@4 ~@8 H@6>".pickRestart({
  A: "[~@19 d3@24 ~@55 a3@39 ~@23 a3@46 ~@14 g3 ~@3, ~@43 [d4,e4]@95 ~ f#3@37 ~@48]/7", // Dsus2
  B: "[~@129 e3 e4 ~@21 g2@23 ~@49, ~@14 [a3,b3]@137 a3@68 ~@5, ~@116 g2@35 b3@59 ~@14]/7", // Asus2
  C: "[~@19 d3@24 ~@55 a3@39 ~@23 a3@11 d2 f3 ~@19, ~@43 [d4,e4]@95 ~ f#3@37 ~@16]/6", D: "~@28 g3 ~@3",
  E: "~@13 [g2,a3,b3] ~@18", F: "[~@7 g3@34 ~@7, ~@7 a3@27 ~@14]/3",
  G: "[~@45 a3@31 ~@3 d2@34 ~@15, ~@29 g3@52 ~@47]/4",
  H: "[~@25 d#4@148 ~@19, ~@23 c#2@22 ~@147, ~@24 [c#3,g#3]@149 ~@19, ~@12 c#4@7 ~@77]/6", // C#5
})).s("gm_string_ensemble_2").gain(0.05)

// bass · contrabass
const bass = note("<~@34 A@2 B C ~@2 D@3 E@3 ~@5 F ~@6 B G ~@2 H@3 I@3 ~@26>".pickRestart({
  A: "[~@16 c2@6 g2@5 ~@2 e3@22 ~@13]/2", B: "~@6 c2@3 ~@3 g2@4 ~@2 e3@4 ~@10", C: "~@13 b1@3 ~@2 f#2@4 ~@2 b2@6 ~@2",
  D: "[~@11 c2@3 ~@2 g2@3 ~@4 e3@6 ~ c2@36 ~@30]/3", E: "[~@7 b1@41 ~ e2@33 ~@14]/3", F: "~@19 g2@2 ~@3 d3@3 ~@3 g3@2",
  G: "~@13 b1@3 ~@2 f#2@4 ~@3 b2@6 ~", H: "[~@12 c2@2 ~@3 g2@3 ~@3 e3@6 ~ c2@36 ~@30]/3", I: "[~@8 b1@41 e2@33 ~@14]/3",
})).s("gm_contrabass").gain(0.26)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@48
  [~@6 d5@2 c5@3 b4@6 ~@15]
  ~@21
  [~@6 d5@3 c5@2 b4@6 ~@15]
  ~@2
  [~@7 c5@2 b4@4 ~@3]
  ~@20
>`).s("gm_acoustic_guitar_steel").gain(0.2)

// other · pad choir
const pad_choir = note("<~@88 A@6>".pickRestart({
  A: "[~@25 c#4@3 ~ c#6@5 c#3@4 c#4@11 ~@87 c#6@21 ~@35, ~@22 c#3@4 ~@40 c#3@56 c#3@51 ~@19, ~@23 c#5@4 ~@26 c#5@36 c#5@24 ~@79, ~@81 c#4@29 c#4@63 ~@19, ~@96 c#6@25 ~@71]/6",
})).s("gm_pad_choir").gain(0.05)

// chords · pad bowed
const pad_bowed = note("<~@89 A@5>".pickRestart({
  A: "[~@3 c#6@11 ~@3 f#5@9 ~@4 b4@3 ~@7 a#4@2 ~@9 f#4@11 ~@10 a#3@8 ~ g#3@8 ~@2 f#3@3 ~@3 d#3 ~@62, ~@29 c#5@52 ~@79, ~@29 c5@6 ~@4 g#4@8 ~@17 c#4@77 ~@19]/5",
})).s("gm_pad_bowed").gain(0.2)

stack(
  pad_sweep, piano, flute, flute_soft, string_ensemble_2, string_ensemble_2_soft, bass, acoustic_guitar_steel,
  pad_choir, pad_bowed
)

More by Toto