Strudelify

I Saved the World Today

Eurythmics

KeyD♭ majorTempo120 bpm
0:00/0:00
// I Saved the World Today — Eurythmics
// 120 bpm, 4/4, key C# major. 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 139 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): guitar program 30.
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.

// bass · electric bass finger
const bass = note(`<
  ~@5 A B C D E F A G A B C D E F A G A B C D E F A H I J K L I J K L I J M N O P Q R S B T D E U A G V W X Y Z AA AB AC
  I J K L I J K L I J M N O P Q@2 AD@2 Q@2 AD@2 Q@2 AD@2 Q@2 AD@2 AE@2 V W X Y Z AA AB AC I J K L I J K L I J M N O AF
  AG AH AI AJ AK AL M AM AN AO M AP O@2 P@7 ~@3
>`.pickRestart({
  A: "bb1 ~@3 bb1@4", B: "a1 ~@3 a1@4", C: "ab1 ~@3 ab1@4", D: "g1 ~@3 g1@4", E: "gb1 ~@3 gb1@4", F: "f1 ~@3 f1@4",
  G: "bb1@2 ~@4 bb1 ~@3 f1@2 ab1@4", H: "bb1@2 ~@4 bb1 ~@3 c2@2 db2@4", I: "eb2@3 ~@3 eb2@6 gb1@4",
  J: "ab1@2 ~ ab1@3 c2@2", K: "db2@3 eb2@3 f1@2", L: "gb1@5 ~ gb1@4 bb1@2 db2@4", M: "db2@3 eb2@3 f2@2",
  N: "gb2@5 ~ gb2@6 gb2@4", O: "a1@5 ~ a1@2 a1@7 ~", P: "b1@5 ~ b1@2 b1@6 ~@2", Q: "bb1 ~@3 bb1@2 ~ f1",
  R: "bb1 ~@3 bb1 f1 ab1@2", S: "bb1 ~@3 bb1@3 ~", T: "ab1 ~@3 ab1@2 db2 ~", U: "f1 ~@3 f1@2 db2 ~",
  V: "bb1 ~@3 f2@2 bb2@2", W: "a2 ~@3 a1@2 ~@2", X: "ab1 ~@3 eb2@2 ab2@2", Y: "g2 ~@3 g1@2 ~@2",
  Z: "gb1 ~@3 db2@2 gb2@2", AA: "f2 ~@3 f1@2 ~ f1", AB: "bb1 ~@3 bb1@2 ~@2", AC: "bb1@2 ~@4 bb1 ~ bb1@2 bb1@2 db2@4",
  AD: "b1 ~@3 b1@2 ~ gb1", AE: "eb2 ~@3 eb2@2 ~ bb1", AF: "ab1@5 ~ ab1@2 ab1@6 ~@2", AG: "eb2@3 f2@3 gb2@2",
  AH: "ab2@3 bb2@3 c3@2", AI: "db3@3 eb2@3 f2@2", AJ: "gb2@6 bb1@6 db2@3 ~", AK: "eb2@3 f1@3 gb1@2",
  AL: "ab1@3 bb1@3 c2@2", AM: "gb2@3 gb1@2 bb1 db2@2", AN: "eb2@6 f2@6 gb2@3 ~", AO: "ab2@2 ~ bb1@3 c2@2",
  AP: "gb2@2 gb2@2 ~ db2 bb1@2",
})).s("gm_electric_bass_finger").gain(0.48)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~@5 A B C D E F A ~ A B C D E F A ~ A B C D E F A ~@15 A@2 G B H D E I A ~ A J C K E F L ~@15 A@2 M@2 A@2 M@2 A@2 M@2
  A@2 M@2 N@2 A J C K E F L ~@36 O ~@2
>`.pickRestart({
  A: "~@3 bb1 ~@4", B: "~@3 a1 ~@4", C: "~@3 ab1 ~@4", D: "~@3 g1 ~@4", E: "~@3 gb1 ~@4", F: "~@3 f1 ~@4",
  G: "~@3 bb1 ~@3 c2", H: "~@3 ab1 ~@3 ab1", I: "~@3 f1 ~@3 f1", J: "~@3 a1 ~@3 f1", K: "~@3 g1 ~@3 f1",
  L: "~@3 bb1 ~@3 f1", M: "~@3 b1 ~@4", N: "~@3 eb2 ~@4", O: "b1",
})).s("gm_electric_bass_finger").gain(0.28)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@5 A@2 B@2 C@2 D@2 ~@8 E@4 C@2 F@2 ~@12 G H A@2 I@2 ~@2 J@2 ~@2 K L M N O P Q@2 ~@12 G H ~@14 R@2 S@2 T U V W X Y Z@2
  AA AB AC AD AE AF AG AH AI AJ AK AL G AM AA AB AC AD AE AF AG AH AI AJ AK AL AN@5 ~@7
>`.pickRestart({
  A: "[c6@6 bb5 f5@3 db5@2 eb5@2 f5@2]/2", B: "[c6@12 bb5@2 db6@15 ~@3]/2", C: "f5/2", D: "[bb4@13 ~@3]/2",
  E: "[c6@3 bb5]/2", F: "[bb4@31 ~]/2", G: "~ db5, [a3,db4,e4,a4]", H: "~ eb5, [b3,eb4,gb4,b4]", I: "[bb4,bb5]/2",
  J: "[bb4,f5]/2", K: "[bb4,db5]", L: "[a4,eb5]", M: "[ab4,f5]", N: "[g4,db5]", O: "[gb4,bb4,db5]", P: "[f4,a4,eb5]",
  Q: "[~@24 bb5@7 ~, [f4,bb4,db5]@31 ~, ~@16 f5@15 ~]/2", // Bbm
  R: "[[b2,gb3,eb4,b4]@28 [b4,b5] [ab4,bb4,ab5,bb5] [f4,gb4,f5,gb5] [db4,eb4,db5,eb5]]/2", // B Absus2 Gbmaj7 Dbsus2
  S: "[[eb2,eb3,bb3,g4,bb4], [b3,b4] ~@31]/2", T: "[bb3,f4,f5,bb5]", U: "a3", V: "ab3", W: "g3@15 ~",
  X: "f5@2 eb5 db5 eb5@2 db5 bb4 db5@8", Y: "[f3,a3,f4,c5]", Z: "[[bb3,db4]@12 bb4 c5 db5 f5, bb4@11 ~@5]/2",
  AA: "[gb2,db3,bb3,bb4,bb5]@3 [ab4,ab5]@3 [gb4,gb5]@2, ~@6 bb5 ~@9", AB: "[ab2,eb3,c4,f4,f5] [eb4,eb5]",
  AC: "[db3,f3,ab3,db4,f4,f5]@3 [db4,db5]@3 ab4@2", AD: "[gb2,bb3,bb4] bb3@9 [db4,db5]@2 [eb4,eb5]@2 [f4,f5]@2",
  AE: "[eb3,gb4,gb5]@3 [bb4,bb5] eb4 [ab4,ab5] [gb4,gb5]@2", AF: "[ab2,ab3,ab4,ab5]@3 [eb4,eb5]@5",
  AG: "[db3,f3,db4,f4,f5]@3 [ab4,ab5]@5", AH: "[gb2,bb3,gb4,gb5]@3 [f4,f5]@5 [eb4,eb5]@4 [db4,db5]@4",
  AI: "[eb3,gb3,gb4,gb5]@3 [ab4,ab5]@3 [bb4,bb5]@2", AJ: "[ab2,ab4,ab5]@3 [eb4,eb5] ab3@2 [ab4,ab5]@2",
  AK: "[db3,db4,f4,f5]@12 [db4,db5]@3 gb2", AL: "[gb3,bb3,gb4,gb5]", AM: "~ eb5, [c4,eb4,ab4,c5]",
  AN: "[~@5 eb5@4 ~, [a3,db4,e4,a4]@2 [b3,eb4,gb4,b4]@2 ~, ~ db5@4 ~@5]/5", // A B
})).s("gm_string_ensemble_2").gain(0.29)

// chords · pad new age
const pad_new_age = note(`<
  ~ A ~ A ~ B@5 C D@2 B@5 C D@2 B@5 C D@2 E F G H E F G H E F G H I J D@2 B@5 C D@2 B@5 C D@2 E F G H E F G H E F G H I
  J D@2 K@2 D@2 K@2 D@2 K@2 D@2 K@2 L@2 B@5 C D@2 E F G H E F G H E F G H I M E F G H E F G H E F G H N@2 O@2 ~@8
>`.pickRestart({
  A: "[b2,gb3,b3,db4,gb4]@5 ~@3", B: "[bb3 a3 ab3 g3 gb3, [db4,f4]]/5", C: "[f3,c4,eb4]", D: "[bb3,db4,f4]/2",
  E: "[eb3,bb3,eb4,gb4]", F: "[ab2,ab3,c4,eb4,gb4]", G: "[db3,ab3,db4,f4]", H: "[gb2,gb3,bb3,db4,gb4]",
  I: "[a2,e3,a3,db4,e4]@15 ~", J: "[b2,gb3,b3,eb4,gb4]", K: "[b3,eb4,gb4]/2", L: "[bb3,eb4,g4]/2",
  M: "[c3,ab3,c4,eb4,ab4]", N: "[a2,e3,a3,db4,e4]/2", O: "[b2,gb3,b3,eb4,gb4]/2",
})).s("gm_pad_new_age").gain(0.14)

// other · trumpet
const trumpet = note("<~@80 A B@2 C D E F G H I@2 ~@48>".pickRestart({
  A: "~@14 db4 ~, ~@13 c4@2 ~", B: "[eb4@22 ~@2 gb4@7 ~]/2", C: "f4 eb4 f4@14",
  D: "bb3@8 ~@2 ab4 gb4 ab4 gb4 ~ gb4, ~@7 f4",
  E: "ab4 gb4 ab4 bb4 ab4 gb4 ~ gb4 ab4 gb4 ab4 gb4 ab4 bb4 ab4 gb4, ~@3 f4 ~@4",
  F: "f4 gb4 ab4 gb4 f4 gb4 ab4 gb4 f4 gb4 ab4 gb4 ab4 gb4 ~ gb4, ~@7 f4", G: "~ b4 bb4 ab4 bb4@6 ~@6, bb4 ~@7",
  H: "~@6 f4 ~ bb4@3 c5@2 db5@2 b4", I: "[db5@3 b4@2 ~ bb4@2 b4@16 b4 bb4 ab4 gb4 f4 ~ eb4@2, c5 ~@31]/2",
})).s("gm_trumpet").gain(0.25).pan(0.7)

// other · french horn
const french_horn = note(`<
  ~ A@2 B C D ~@30 E@2 F G@2 H I J ~@24 E@2 F G@2 H I J ~@15 K@2 ~@3 L M@2 N@2 ~@7 E@2 F G@2 H O ~@17 P Q R S T ~@2
>`.pickRestart({
  A: "[~@4 bb3@4 ~@2 f4@3 ~ gb4@9 ~ f4@4 eb4@4]/2", B: "db4@4 eb4 ~ bb3@8 ~@2", C: "ab3@4 bb3 ~ gb3@6 ~@2 ab3 gb3",
  D: "f3 ~@3", E: "[~@4 db4@3 ~ eb4 ~ f4@2 ~@2 gb4@17 ~]/2", F: "ab4@15 ~",
  G: "[ab4@8 gb4 ~ f4@3 ~ eb4@4 f4@2 ~@2 db4@8 ~@2]/2", H: "db4@15 ~", I: "eb4 gb4", J: "f4@15 ~",
  K: "[[eb3,bb3,g4]@15 ~]/2", L: "~@13 db4 ~ eb4", M: "[f4@25 ~ eb4@3 ~ db4@2]/2",
  N: "[~@2 db4 ~@3 bb3@16 ~@10, c4@5 ~@27]/2", O: "eb4", P: "~@4 b3@5 ~ f4@5 ~", Q: "gb4@7 ~ f4@3 ~ eb4@3 ~",
  R: "db4@6 ~ bb3@7 ~@2", S: "ab3@4 bb3 ~ gb3@4 ~@5 [gb3,ab3]", T: "f3",
})).s("gm_french_horn").gain(0.55)

// chords · oboe
const oboe = note("<~@28 A B ~@30 A B ~@38 A B ~@37>".pickRestart({
  A: "~@4 [db4,bb4] eb4 f4 [db4,bb4], ~@5 c5@2 ~, ~@12 db5 ~@3", B: "[gb3,eb4] ~",
})).s("gm_oboe").gain(0.23).pan(0.6)

// chords · pad choir · Bsus2
const pad_choir = note("<~ [[b3,gb4,b4,db5,gb5]@5 ~@3] ~ [[b3,gb4,b4,db5,gb5]@5 ~@3] ~@135>")
  .s("gm_pad_choir").gain(0.07).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A ~@3 B C D E F G B H B C D E F G B H B C D E F G B H I J K L I J K L I J K L M N B@3 C D E F G B H B C D E F G B H
  I J K L I J K L I J K L M N B@2 O@2 B@2 O@2 B@2 O@2 B@2 O@2 P@2 B C D E F G B H I J K L I J K L I J K L M Q I J K L I
  J K L I J K L M@2 N@7 R@2 ~
>`.pickRestart({
  A: "~@3 eb4@3 ~@2, ~ bb3@2 ~", B: "~@3 f4@5, bb3, ~ db4@7", C: "~@3 f4@5, a3, ~ db4@7", D: "~@3 f4@5, ab3, ~ db4@7",
  E: "~@3 f4@5, g3, ~ db4@7", F: "~@3 f4@5, gb3, ~ db4@7", G: "~@3 eb4@5, f3, ~ c4@7",
  H: "~@3 f4@4 ~, bb3@13 ~@3, ~@2 db4@11 ~@3",
  I: "~@4 eb4 bb3 gb4 eb4, eb2@3 f2@3 gb2@2, gb4 bb3 ~@2, ~ eb4@2 gb4@2 ~@3",
  J: "~@2 ab3 ~@2 ab3 gb4 eb4, [ab2,gb4]@3 [bb2,gb4]@3 c3@2, ~ eb4@2 ~ eb4@2 ~@2", // Ab7 Ebm
  K: "~@2 ab3 ~ db4 ab3 f4 db4, [db3,f4]@3 eb2@3 f2@2, ~ db4@2 f4@2 ~@3", // Db
  L: "~@2 bb3 ~@2 bb3 ~ db4, [gb2,gb4]@3 ab2@3 [bb2,gb4]@2, ~ db4@2 gb4@2 ~@3, ~@2 db4 ~", M: "[a3,db4,e4]",
  N: "[b3,eb4,gb4]", O: "~@3 gb4@5, b3, ~ eb4@7", P: "~@3 g4@5, bb3, ~ eb4@7", Q: "[c4,eb4,ab4]", R: "[b3,eb4,gb4]/2",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A ~ A ~ B C D E F G B@3 C D E F G B@3 C D E F G B@2 H I J K H I J K H I J K L M B N@2 C D E F G B@3 C D E F G B@2 H
  I J K H I J K H I J K L M B O@2 P@2 O@2 P@2 O@2 P@2 O@2 Q@2 R@2 C D E F G B@2 H I J K H I J K H I J K L S H I J K H I
  J K H I J K L@2 M@7 ~@3
>`.pickRestart({
  A: "~@3 f4@3 ~@2, b2@3 ~, ~ b3@5 ~@2, ~ db4@2 ~", B: "~@7 f4, bb2, ~ db4@4 db4@3, ~ bb3@2 bb3, ~@3 f4@4 ~",
  C: "~@7 f4, a2, ~ db4@4 db4@3, ~ a3@2 a3, ~@3 f4@4 ~", D: "~@7 f4, ab2, ~ db4@4 db4@3, ~ ab3@2 ab3, ~@3 f4@4 ~",
  E: "~@7 f4, g2, ~ db4@4 db4@3, ~ g3@2 g3, ~@3 f4@4 ~",
  F: "~@6 gb3 f4, gb2@15 ~, ~@2 db4@8 db4@5 ~, ~ gb3@2 ~, ~@3 f4@4 ~",
  G: "~@7 f4, f2, ~ eb4@3 f3@4, ~@2 c4@3 eb4@3, ~@3 f4@3 c4@2", H: "~@7 gb4, eb3, bb3!4, ~ eb4@4 eb4@3, ~@3 gb4@4 ~",
  I: "~@7 gb4, ab2, c4@5 eb4@3, ~ ab3@2 gb4@3 c4@2, ~ eb4 ab3@2",
  J: "~@7 f4, db3, db4@2 db4@3 db4@3, ~ ab3@3 ab3@2 ab3@2, ~@3 f4@4 ~",
  K: "~@7 gb4, gb2, gb3@2 bb3@3 db4@3, ~ db4@3 gb3@4, ~@2 gb3 gb4@3 bb3@2",
  L: "~@7 e4, a2, ~ db4@4 db4@3, ~ a3!3, ~@3 a4@5", M: "~@7 gb4, b2, ~ eb4@4 eb4@3, ~ b3!3, ~@3 b4@5",
  N: "[~@15 f4, bb2 bb2, ~ db4@4 db4@3 ~ db4@4 db4@3, ~ bb3@2 bb3 ~ bb3@2 bb3, ~@3 f4@4 f4@4 f4@4 ~]/2",
  O: "[~@15 gb4, bb2 b2, ~ db4@4 db4@3 ~ eb4@2 gb4@3 b3@2, ~@2 bb3@4 bb3@2 ~@2 b3@3 eb4@3, ~@3 f4@4 f4@9]/2",
  P: "[~@15 f4, b2 bb2, ~ eb4@4 eb4@3 ~ db4@2 f4@3 bb3@2, ~@2 b3@4 b3@2 ~@2 bb3@3 db4@3, ~@3 gb4@4 gb4@9]/2",
  Q: "[~@15 g4, b2 eb3, ~ eb4@4 eb4@3 ~ eb4@2 g4@3 bb3@2, ~@2 b3@4 b3@2 ~@2 bb3@3 eb4@3, ~@3 gb4@4 gb4@9]/2",
  R: "[~@15 f4, eb3 bb2, ~ eb4@4 eb4@3 ~ db4@2 f4@3 bb3@2, ~@2 bb3@4 bb3@2 ~@2 bb3@3 db4@3, ~@3 g4@4 g4@9]/2",
  S: "~@7 ab4, ab2, ~ eb4@4 eb4@3, ~ c4!3, ~@3 ab4@4 ~",
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.7)

// other · piano
const piano = note("<~@58 A@2 ~@2 B C@3 D E@3 F@4 ~@20 G H ~@6 B C@3 D I@3 F@4 ~@2 B C@3 D I@3 J@3 ~@12>".pickRestart({
  A: "[~@3 f5@4 ~]/2", B: "c6 ab5 bb5 c6", C: "[db6@4 bb5 ab5@6 bb5@7 db6@6]/3", D: "c6",
  E: "[db6@7 db6@2 bb5@8 ~ db6 c6 db6@4]/3", F: "[c6@6 eb6 f6@4 db6@2 ab5@4 bb5@8 ~@7]/4", G: "~@5 eb6 f6@2", H: "db6",
  I: "[[f5,db6]@2 [eb5,db6]@2 [db5,db6] [c5,db6]@2 [db5,db6]@2 [db5,bb5]@2 [ab4,bb5]@7 db6 c6 db6@4]/3", // Db Eb7 Db Dbmaj7 Db Gb Absus2
  J: "[c6@6 eb6 f6@4 db6@2 ab5@2 ab5@2 bb5@7]/3",
})).s("gm_piano").gain(0.05)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@14 A C A B A B A B A B A B A B A B A B ~@78
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@4 x", C: "~ x ~@2",
})).gain(0.32)

// drums · rim
const rim = s("rim").struct("<~ [~ x]!4 [~@3 x]!24 [~ x ~ x]!14 [~@3 x]!18 [~ x ~ x]!77 ~>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<A B@4 C@71 D E@2 C D E@6 C D E@4 C@42 D F@2 G>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@3 x!2 ~@2 x ~@3 x", C: "~@3 x!2 ~@2 x ~@3 x!2 ~@2 x", D: "~@3 x!2 ~@2 x ~@3 x!2 ~@3",
  E: "~ x ~ x", F: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", G: "x",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@29 A ~@31 A ~@31 A ~@7 A ~@13 A ~@23>".pickRestart({
  A: "x",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct("<~ [x!8]!135 ~@3>").gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~@29 [x!8]!14 ~@18 [x!8]!75 ~@3>").gain(0.4)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@89 [x!8]!4 ~@46>").gain(1.04)

stack(
  bass, bass_soft, string_ensemble_2, pad_new_age, trumpet, french_horn, oboe, pad_choir, electric_guitar_clean,
  acoustic_guitar_steel, piano, kick, kick_soft, rim, snare, crash, ride, tambourine, jingle_bells
)

More by Eurythmics