Strudelify
The Good, the Bad & The Ugly cover art

Arena Concerto

The Good, the Bad & The Ugly

Ennio Morricone

KeyE♭ majorTempo122 bpm
0:00/0:00
// The Good, the Bad & The Ugly — Morricone Ennio
// 122 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "BASS" named as a bass, played on electric bass finger (its electric guitar jazz patch is not one)
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "BASS"
const bass = note(`<
  A B C B C D C E F G F C B C D C E F G H C B I@2 J@2 K L M N O P Q R S M C B T U T V T W X Y X T Z@2 AA@2 AB AC AD AE
  AF AG AH AI AJ AD T AK T AL T AM AN Y X AO AP T AQ T AR AS AQ AT AQ AO AU AV@2
>`.pickRestart({
  A: "d2@4 ~@2 d2 ~ d2@3 ~@5", B: "d2 ~ d2@2 ~@2 d2 ~ d2@4 ~@4", C: "d2@4 ~@2 d2 ~ d2@4 ~@4",
  D: "g1 ~ g1@2 ~@2 g1 ~ g1@4 ~@4", E: "c2 ~ c2@2 ~@2 c2 ~ c2@5 ~@3", F: "bb1@4 ~@2 bb1 ~ bb1@4 ~@4",
  G: "a1 ~ a1@2 ~@2 a1 ~ a1@5 ~@3", H: "bb1@4 ~@2 bb1 ~ bb1@3 ~@5", I: "[d2@5 ~ a1@24 ~@2]/2",
  J: "[bb1@5 ~ f1@23 ~@3]/2", K: "d2@2 ~ a1@5", L: "c2", M: "a1@7 ~", N: "d2@5 ~ d2@2 g1@5 ~ g1 ~",
  O: "d2@5 ~ d2 ~ g1@5 ~@3", P: "d2@3 ~ g1@3 ~ d2@3 ~ g1@3 ~", Q: "d2@4 c2@3 ~ b1@3 ~ a1@3 ~",
  R: "g1@3 ~ f1@3 ~ c2@3 ~ bb1@3 ~", S: "f1", T: "eb2@4 ~@2 eb2 ~ eb2@5 ~@3", U: "eb2 ~ eb2@2 ~@2 eb2 ~ eb2@4 ~@4",
  V: "ab1 ~ ab1@2 ~@2 ab1 ~ ab1@4 ~@4", W: "db2@4 ~@2 db2 ~ db2@5 ~@3", X: "b1@4 ~@2 b1 ~ b1@5 ~@3",
  Y: "bb1 ~ bb1@2 ~@2 bb1 ~ bb1@6 ~@2", Z: "[eb1@4 ~@2 bb1@23 ~@3]/2", AA: "[b1@5 ~ gb1@23 ~@3]/2", AB: "eb2@6 bb1@9 ~",
  AC: "db2@15 ~", AD: "bb1@13 ~@3", AE: "eb2@4 ~@2 eb2 ~ ab1@4 ~@2 ab1@2", AF: "eb2@4 ~@2 eb2@2 ab1@4 ~@2 ab1 ~",
  AG: "eb2@3 ~ ab1@3 ~ eb2@4 ab1@3 ~", AH: "eb2@3 ~ db2@3 ~ c2@4 bb1@3 ~", AI: "ab1@4 gb1@3 ~ db2@3 ~ b1@4",
  AJ: "gb1@7 ~", AK: "eb2 ~ eb2@2 ~@2 eb2 ~ eb2@7 ~", AL: "ab1 ~ ab1@2 ~@2 ab1 ~ ab1@6 ~@2",
  AM: "db2 ~ db2@2 ~@2 db2 ~ db2@6 ~@2", AN: "b1@4 ~@2 b1 ~ b1@8", AO: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2",
  AP: "b1@5 ~@3 ab1@6 ~@2", AQ: "b1@2 ~ b1 ab1@2 ~ ab1", AR: "b1@4 ~@2 b1 ~ ab1@4 ~@2 ab1@2",
  AS: "eb2@4 ~@2 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~", AT: "eb1@5 ~ eb2 ~ eb2 ~ eb2@3 ~ eb2 ~", AU: "b1@5 ~ b1@2 ab1@8",
  AV: "[eb1@31 ~]/2",
})).s("gm_electric_bass_finger").gain(0.6)

// other · whistle
const whistle = note(`<
  ~@4 A B A C A D E F@2 A G A H A I E J ~@19 K L K M K N O P ~@16 K L K M K N O Q O R O Q S Q O Q S P O T@2
>`.pickRestart({
  A: "~@3 f5", B: "g5@4 d5@11 ~", C: "g5 c6@3", D: "e5@2 d5@2 c5@9 ~@3", E: "~@3 g5", F: "[d5@11 ~@5]/2",
  G: "g5@4 d5@9 ~@3", H: "g5@4 c6@11 ~", I: "e5@2 d5@2 c5@11 ~", J: "d5", K: "~@3 gb5", L: "ab5@4 eb5@11 ~",
  M: "ab5 db6@3", N: "f5@2 eb5@2 db5@11 ~", O: "~@3 ab5", P: "eb5@15 ~", Q: "eb5@13 ~@3", R: "eb5@5 ~@3",
  S: "~@12 bb5@3 ~", T: "[eb5@19 ~@13]/2",
})).s("gm_whistle").gain(0.4).pan(0.6)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A@5 B A C D E F A@3 G A C D E H A@2 I E J K I C E L M N O P Q R A@2 S@3 T S U V D W S X D Y Z AA U D AB AC AD AE AF AG
  AH S@2 AI T S U V D W S AJ S AJ S AK S AL S AL S AK AM@2
>`.pickRestart({
  A: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  B: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3]@2", // G5
  C: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  D: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  E: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  F: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~@7", // Bb5
  G: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  H: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3]@2 ~@6", // Bb5
  I: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // D5 A5
  J: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // Bb5 F5
  K: "[f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~", // F5
  L: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // D5 G5
  M: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~", // D5 G5
  N: "[d3,gb3,a3] ~ [d3,a3] ~ [g2,d3] ~ [g2,d3] ~ [d3,a3] ~ [d3,a3] ~ [g2,d3] ~ [g2,d3] ~", // D D5 G5 D5 G5
  O: "[bb2,f3]@4 [a2,e3]@4 [g2,d3]@4 [f2,c3]@3 ~", P: "[e2,b2]@3 ~ [f2,c3]@3 ~ [c3,g3]@3 ~ [bb2,f3]@3 ~",
  Q: "c3@9 ~@7, f2@7 ~@9", R: "[a2,e3]@5 ~@3",
  S: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~", // Eb5
  T: "[ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~", // Ab5
  U: "[db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~", // Db5
  V: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~", // B5
  W: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~@7", // B5
  X: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [bb2,f3]@5 ~ [bb2,f3] ~ [bb2,f3] ~", // Eb5 Bb5
  Y: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~", // B5 Gb5
  Z: "[gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~", // Gb5
  AA: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Eb5 Bb5
  AB: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~", // Eb5 Ab5
  AC: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ eb3 ~", // Eb5 Ab5
  AD: "[eb3,bb3] ~ [eb3,bb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [ab2,eb3] ~ [ab2,eb3] ~", // Eb5 Ab5 Eb5 Ab5
  AE: "[b2,gb3]@3 ~ [bb2,f3]@3 ~ [ab2,eb3]@4 [gb2,db3]@3 ~", AF: "[f2,c3]@3 ~ [gb2,db3]@3 ~ [db3,ab3]@3 ~ [b2,gb3]@3 ~",
  AG: "[gb2,db3]@13 ~@3", AH: "[bb2,f3]@3 ~",
  AI: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3] ~", // Eb5
  AJ: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3]@2", // B5 Ab5
  AK: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~", // B5 Ab5
  AL: "[b2,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ [b2,gb3]@2 [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3]@2", // B5 Ab5
  AM: "[[eb3,bb3]@23 ~@9]/2", // Eb5
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@21 A B@4 C D E F G@2 H I J K L@2 ~@9 M N@4 O P Q R@2 S T U K V W@2 ~@21
>`.pickRestart({
  A: "~@7 a3", B: "[d4 a3 f3 c4@11 ~ a3]/2", C: "d4 a3 f3 c4 ~ e4 ~ c4", D: "g4", E: "a4@15 ~",
  F: "f4 e4 d4@6 g4@6 d4@2", G: "[f4 e4 d4@6 g4@6 d4@2 f4 e4 d4@2 g4@2 d4@2 f4 e4 d4@2 g4@2 d4@2, ~@7 g4@3 ~@6]/2",
  H: "f4 d4 e4 c4 d4 b3 c4 a3", I: "b3@2 g3@2 a3@2 f3@2 g3 f3 e3@2 f3@2 d3 ~", J: "c3", K: "db3", L: "[d3@3 ~]/2",
  M: "~@7 bb3", N: "[eb4@2 bb3@2 gb3@2 db4@23 ~ bb3@2]/2", O: "eb4 bb3 gb3 db4 ~ f4 ~ db4", P: "ab4", Q: "bb4@15 ~",
  R: "gb4 f4 eb4@6 ab4@6 eb4@2", S: "gb4 f4 eb4@2 ab4@2 eb4@2 gb4 f4 eb4@2 ab4@2 eb4@2",
  T: "gb4 eb4 f4 db4 eb4 c4 db4 bb3", U: "c4@2 ab3@2 bb3@2 gb3 ~ ab3 gb3 f3@2 gb3@2 eb3 ~", V: "d3", W: "eb3/2",
})).s("gm_overdriven_guitar").gain(0.5).pan(0.7)

// other · harmonica
const harmonica = note(`<
  ~@13 A B A C A D E F@2 ~@18 G H G I G J K L ~@16 G H G I G M K N ~@2 K L ~@2 K N ~@2 K O@2
>`.pickRestart({
  A: "~@3 f4", B: "g4@2 d4@5 ~", C: "g4@4 c5@11 ~", D: "e4@2 d4@2 c4@9 ~@3", E: "~@3 g4", F: "[d4@23 ~@9]/2",
  G: "~@3 gb4", H: "ab4 eb4@3", I: "ab4 db5@3", J: "f4 eb4 db4@6", K: "~@3 ab4", L: "eb4@7 ~",
  M: "f4@2 eb4@2 db4@9 ~@3, gb4 ~@15", N: "eb4", O: "[eb4@15 ~]/2",
})).s("gm_harmonica").gain(0.45).pan(0.7)

// other · trumpet
const trumpet = note("<~@33 A B C D E F G ~@45>".pickRestart({
  A: "~@4 [d4,d5] ~@7 [d4,d5] ~@3", B: "[c4,c5]", C: "[db4,db5]@7 ~", D: "~@2 f4!2 d4 ~ f4 ~ f4!3 ~ d4 ~ g4 ~",
  E: "d4!2 f4 ~ f4 ~ d4 ~ g4!3 ~ d4 ~ f4 ~", F: "~@2 eb4!3 ~ gb4 ~ gb4 ~ eb4!3 ~ ab4 ~",
  G: "eb4!2 gb4 ~ gb4 ~ ab4 ~ ab4@3 ~ bb4 ~ bb4@2",
})).s("gm_trumpet").gain(0.6).pan(0.7)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@28 A@2 B C D E F G H ~@3 I J I K I L M N ~@5 O@5 P Q R S@2 ~@9 T@2 U@2 V@2 U@2 W@2 X@3
>`.pickRestart({
  A: "[[c4,e4]@16 [d4,f4]@8 [b3,d4,g4]@7 ~, a4@23 ~@9]/2", B: "[d4,f4,a4]@8 [b3,d4,g4]@7 ~",
  C: "[d4,f4,a4]@3 ~ [b3,d4,g4]@4 [d4,f4,a4]@3 ~ [b3,d4,g4]@2 ~@2", // Dm G Dm G
  D: "[d4,f4,bb4]@3 ~ [c4,e4,a4]@3 ~ [b3,d4,g4]@3 ~ [a3,c4,f4]@2 ~@2", // Bb Am G F
  E: "[b3,e4,g4]@3 ~ [a3,c4,f4]@3 ~ [c4,e4,g4]@3 ~@2 d4@2 ~, ~@6 [bb3,f4] ~", F: "[c4,f4,a4,c5]@15 ~",
  G: "db5!2 a4 [a4,db5] db5 a4 [a4,db5] db5 a4 db5 a4 [a4,db5] db5 a4 db5 ~, [a3,db4,e4], a4 ~@7", // A
  H: "[d4,f4,d5]@9 ~@7, a4 ~@3", I: "~@3 [gb4,gb5]", J: "[ab4,ab5] [eb4,eb5]@3", K: "[ab4,ab5]@4 [db5,db6]@11 ~",
  L: "[f4,f5]@2 [eb4,eb5]@2 [db4,db5]@11 ~", M: "~@3 [ab4,ab5]", N: "[eb4,eb5]",
  O: "[~@4 db5@4 f5@4 ab5@4 bb5@16 eb6@47 ~, [db4,f4]@30 ~@2 eb4@45 ~@3, ab4@15 ~ bb4@27 ~@37, ~@32 gb4@11 ~@37]/5", // Db
  P: "[eb5,eb6]@4 [ab5,ab6] ~@3 [eb5,eb6]@4 [ab5,ab6] ~@3", Q: "[ab5,ab6]@4 [gb5,gb6]@3 ~ [f5,f6]@4 [eb5,eb6]@3 ~",
  R: "[db5,db6]@15 ~", // Db
  S: "[[d5,d6] [eb5,eb6] [d5,d6,eb6] [eb5,d6] [d5,eb5,d6,eb6] [d5,eb6] [eb5,d6] [d5,d6,eb6] [eb5,eb6] [d5,d6] [eb5,d6,eb6] [d5,d6,eb6] [eb5,eb6] [d5,eb5,d6] [d6,eb6] [eb5,eb6] d6 eb5@3 ~@12, ~@15 d5@2 ~@15, ~@4 eb6 ~@3]/2", // D Eb Ebmaj7 Eb D Ebmaj7 Eb Ebmaj7 …
  T: "[gb5@8 ab5@8 [gb5,bb5]@3 ~@13, eb5@9 ~@7, b4@15 ~@17]/2", // Gb
  U: "[gb5@2 ab5@2 [bb4,gb5] ~@3, eb5@5 ~@3, b4@15 ~@17]/2", // Ebm
  V: "[gb5@8 ab5@8 [bb4,gb5,bb5]@3 ~@13, eb5@9 ~@7, b4@15 ~@17]/2", // Ebm
  W: "[gb5@2 ab5@2 [bb4,gb5,bb5] ~@3, eb5@5 ~@3, b4@15 ~@17]/2", // Ebm
  X: "[gb5@7 ~ ab5@7 ~ eb4@26 ~@6, eb5@2 ~, b4@7 ~ gb4@10 ~@6]/3",
})).s("gm_string_ensemble_1").gain(0.3)

// drums · kick
const kick = s("bd").struct("<A@22 B C B D B E C A@2 F G@2 H@2 A@12 B C B I B E C J@2 F G@2 H@2 A@21 ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@4", C: "x ~@3 x!2 ~@2", D: "x ~@3 x!2 ~ x", E: "x!2 ~ x!2 ~@3", F: "x!2", G: "x!4",
  H: "x", I: "x!2 ~@2 x ~@3", J: "x ~@3 x ~@2 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A B A C A@6 D A E A@6 D A F A@7 G@2 A@2 E ~@2 A B A H A@6 D A@8 G@2 A@2 E ~@2 A I A@6 D A J A@3 J A@2 K J A G ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~@3", C: "~@2 x ~@2 x!3", D: "x!5 ~@3", E: "~@4 x ~@7 x ~ x!2",
  F: "~@4 x ~@3 x!4 ~@4", G: "~@2 x ~@2 x!2 ~", H: "~@4 x ~@6 x!2 ~ x ~", I: "~@4 x ~@6 x!2 ~ x!2",
  J: "~@4 x ~@5 x ~ x ~ x!2", K: "~@2 x ~@2 x ~ x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@15 x] ~@17 [~@7 x] ~@7 [~@14 x!2] ~@37>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A C A@4 B A D B E A@5 C D F D A@12 G@2 B C B H A@6 D@2 A@12 G@2 B A@7 D A@12 ~@2
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", D: "x!5 ~@3",
  E: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", F: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", G: "x", H: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 [~@7 x] ~@17 [~@3 x] ~@7 [~@3 x] ~@37>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@21 [~@12 x!2 ~@2] ~@17 [~@5 x ~@2] ~@7 [~@5 x ~@2] ~@37>").gain(0.72)

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

stack(
  bass, whistle, electric_guitar_muted, overdriven_guitar, harmonica, trumpet, string_ensemble_1, kick, snare, low_tom,
  hihat, mid_tom, high_tom, crash
)

More by Ennio Morricone