Strudelify

Expresso Love

Dire Straits

KeyF majorTempo138 bpm
0:00/0:00
// Expresso Love — Dire Straits
// 138 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 electric guitar clean (copy of ch 4 overdriven guitar); ch 8 electric guitar clean (copy of ch 6 overdriven guitar); ch 11 overdriven guitar (copy of ch 9 electric guitar clean); ch 13 overdriven guitar (copy of ch 12 electric guitar clean); ch 15 electric guitar jazz (copy of ch 14 electric guitar clean)
// note: Full arrangement: all 176 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · piano
const piano = note(`<
  ~@8 A B C D E F@2 G A B C D H F@2 G A B C D E F@2 G I J K L M N O P Q R S@4 A B C D E F@2 G A B C D H F@2 G I J K L M
  N O P Q R S@4 T U V W X@2 Y Z AA@2 ~@16 A B C D H F@2 G A B C D E F@2 G I J K L M N O P Q R S@4 AB AC AD AE AF AG@2 AH
  A B C D E F@2 G AB AC AD AE AF AG@2 AH A B C D E F@2 G AB AC AD AE AF AG@2 AH A B C AI
>`.pickRestart({
  A: "d5!2 e5 [bb4,d5,f5]@5, [f4,a4]@3 ~@5", B: "~ e6 d6 [c5,e5]@2 a5@2 e5", C: "d5 e5 a5 [f4,bb4,d5]@5, [f4,a4]@3 ~@5",
  D: "~ a4 bb4 f5 e5 a4 c5 e5, [c4,f4]@3 ~@5", E: "d5 e5 f5 [bb4,d5,a5]@5, [f4,a4]@3 ~@5",
  F: "[~ f5 d6 c6 e5 c6 e6 d6@2 f6 e6 [bb4,d5] d5 a5 g5@2, ~@7 [f5,a5]@4 f5@2 [d5,bb5]@3, ~@3 bb4]/2", // Bb F Gm
  G: "~ d6 c6 [e5,g5] e5 f5 e5 c5, [f5,g5]@3 c5@4 ~", H: "d5@3 e5 f5@2 [bb4,d5,a5]@10, [f4,a4]@3 ~@5",
  I: "[f4,a4,c5,f5]@3 [f4,a4,c5,f5] [f4,a4,c5,f5]@4", J: "a4!3 [c4,f4,a4] a4!2 ~@2, [c4,f4]@3 ~ [c4,f4]@4",
  K: "[d4,f4,bb4,c5]@3 [d4,f4,bb4,c5] [d4,f4,bb4,c5]@4", // Bb
  L: "d4 bb4!2 [d4,f4,bb4] bb4 a4 g4 f4, bb3@3 ~ d4@4, ~@4 f4@3 ~", M: "[c4,f4,a4]@3 [c4,f4,a4] a4@3 a4, ~ [c4,f4]",
  N: "a4!2 c5 [f4,a4,c5] c5 c5@3, [c4,f4]@3 ~ [f4,a4]@4", O: "[d4,f4,bb4]@3 [d4,f4,bb4,c5] c5@2 c5@2, ~ [d4,f4,bb4]",
  P: "c5 c5@2 c5@2 c5@3, [d4,f4,bb4]@3 [d4,f4,bb4]@5", Q: "a4@2 ~ a4!2 a4@2 a4, [db4,e4]!2",
  R: "bb4 bb4@2 bb4@2 g4 g4@2, [d4,f4]@3 [d4,f4]@5", // Dm
  S: "[~@5 f4 ~ f4@2 d4!2 ~@9 f4 d4!3 d4@8, [g3,c4]@15 [g3,c4]@17, d4@6 d4@3 ~@2 d4@4 d4@6 ~@11, ~@7 f4 ~@8]/4", // C5
  T: "~@2 [db4,e4,a4]@2 b4 db5 ~ a4, ~ e4, ~@4 a4@3 ~", U: "db5@2 db5 [db4,e4]@5, [e4,a4]@3 a4@3 ~@2",
  V: "~@2 [c4,f4,a4]@2 a4!2 ~ g4, ~ [c4,f4]", W: "a4 c5 [c4,f4,a4] [a3,c4,f4], [c4,f4] ~",
  X: "[~@2 g4!2 g4@2 g4 g4@2 g4 a4 g4@2 g4!2 a4, [g3,c4,e4]@4 [c4,e4]@3 [c4,e4]@4 [c4,e4]@5]/2", // C
  Y: "bb4 g4 [bb3,d4]@2, [d4,f4]@2 f4 ~", Z: "~@3 [bb3,d4,f4]@2 [bb3,d4,f4]@3",
  AA: "[~@3 c4 e4 f4 g4 [c4,e4]@9, ~@4 c4@3 g4@3 ~@6]/2", // C
  AB: "d5!2 [a2,e5] bb2@2 c3 bb2 a2, [f4,a4]@3 [bb4,d5,f5]@5, d3 ~@3", // A5 F Bb
  AC: "~ e6 d6 [c3,c5,e5]@2 d3 ~ e5, g2@3 ~@2 a5@2 ~, ~@3 c3", // C
  AD: "d5 e5 [a2,a5] bb2@2 c3 bb2 a2, [f4,a4]@3 [f4,bb4,d5]@5, d3 ~@3", // A F Bb
  AE: "~ a4 bb4 f5 e5 [d3,a4] c5 e5, [c3,c4,f4]@3 c3@2 ~ c3@2", // D5 F5
  AF: "[d3,d5]@3 e5 [a2,f5]@2 bb2@4 c3@2 bb2@2 a2@2, [f4,a4]@3 [bb4,d5,a5]@5", // D Dm F Bbmaj7
  AG: "[~ f5 d6 c6 e5 [d3,c6] e6 ~@2 f6 [a2,e6] [bb4,d5] d5 [c3,a5] bb2 a2, g2@3 c3@2 ~ c3@2 d3@2 ~ [bb2,f5]@2 ~ g5@2, ~@7 [f5,a5]@4 ~ bb4@4, ~@7 d6@2 ~@4 [d5,bb5]@3]/2", // D7 A5 Bb F Bb5 F Gm
  AH: "~ d6 c6 [e5,g5] e5 [d3,f5] e5 c5, [c3,f5,g5]@3 c5@4 ~, ~@3 c3@2 ~ c3@2", AI: "~ a4 bb4 f5 e5 ~@3, [c4,f4]@3 ~@5",
})).s("gm_piano").gain(0.4).pan(0.6)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D C@4 E F G H I J K L I J K M I N K M I J K O I J K P Q R S T Q R S U V W X@3 Y Z J K M I J K M I J K AA I J K
  AA Q R S T Q R S U V W X@2 AB AC AD AE AF AG AH AI AJ AK AL AM I J K M I J K M I J K M I J K AA AN J K AO AP AQ K AM I
  J K M I J K AH Q R S T Q R S U V W X@2 AB AR I J K M I J K AM I J K M I J K AM I J K AM I J K AM I J K AM I J K AM I J
  K AM I J K AM I J K AS
>`.pickRestart({
  A: "~@7 [d3,a3,d4]", B: "d3!6 [d3,a3,d4]!2, [a3,d4]@3 [a3,d4]@3 ~@2",
  C: "d3@2 d3!4 [d3,a3,d4]!2, [a3,d4]@3 [a3,d4]@3 ~@2", D: "d3@2 d3!3 [d3,a3,d4]!3, [a3,d4]@3 [a3,d4]@2 ~@3",
  E: "[d3,a3] ~ d3 ~ a2@2 [bb2,f3]@2 [bb2,f3]@2 [c3,f3]@2 [bb2,f3]@2 a2@2", // D5 Bb5 F5 Bb5
  F: "[g2,d3] a2 [a2,d3] [c3,g3]!2 [d3,g3] [c3,g3] [a2,d3]", // G5 D5 C5 G5 C5 D5
  G: "[d3,a3]@2 d3 ~ [a2,d3]@2 bb2@2 bb2 ~ [c3,f3]@2 [bb2,f3,bb3]@2 [a2,d3]@2, ~@3 f3@2 ~@3", // D5 F5 Bb5 D5
  H: "[c3,g3]!5 [d3,g3] [c3,g3] [a2,d3]", I: "[d3,a3] a2!2 [bb2,f3]@2 [c3,f3] [bb2,f3] [a2,d3]",
  J: "[g2,d3] a2!2 [c3,g3]@2 [d3,g3] [c3,g3] [a2,d3]", K: "[d3,a3] a2!2 [bb2,f3]!2 [c3,f3] [bb2,f3] [a2,d3]",
  L: "[c3,g3]@2 [c3,g3]!2 c3@2 d3 a2, ~@4 g3 ~@3", M: "[c3,g3]@4 [c3,g3] ~ [c3,g3]@2 [c3,g3]@2 d3@2 c3@2 [a2,d3]@2",
  N: "[g2,d3]@2 a2 ~ a2@2 [c3,g3]@4 [d3,g3]@2 [c3,g3]@2 [a2,d3]@2", O: "[c3,g3]@2 [c3,g3] [c3,g3]@2 d3 c3 [a2,d3]",
  P: "[c3,g3]@4 [c3,g3]@2 [c3,g3]@4 [c3,g3]@2 [c3,g3]@2 [c3,g3]!2", // C5
  Q: "[f2,c3,f3]@6 [f2,c3,f3]!2 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2", // F5
  R: "[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]!2", // F5 C
  S: "[bb2,f3,bb3]@6 [bb2,f3,bb3]!2 [bb2,f3,bb3]@4 [bb2,f3,bb3]@2 [bb2,f3,bb3]@2", T: "[bb2,f3,bb3]!8",
  U: "[bb2,f3,bb3]!6 [a2,e3]!2", V: "[a2,e3,a3,db4]@2 [a2,e3]!6", W: "[bb2,f3]!6 [a2,e3]!2",
  X: "[g2,d3]@2 [g2,d3] [g2,d3]@2 [g2,d3]!3", Y: "[g2,d3]@2 [g2,d3] [g2,d3]@2 [g2,d3]!2 a2",
  Z: "[d3,a3]@2 a2!2 a2@2 [bb2,f3]@4 [c3,f3]@2 [bb2,f3]@2 [a2,d3]@2", // D5 Bb5 F5 Bb5 D5
  AA: "[c3,g3]@2 [c3,g3] [c3,g3]@2 [c3,g3]!2 [a2,d3]", AB: "[g2,d3]!8",
  AC: "[g2,d3]@2 [g2,d3]!2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [a2,d3]@2", // G5 D5
  AD: "[a2,e3]@3 [a2,e3] [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2", // A5
  AE: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [f2,c3]!2", // A5 F5
  AF: "[f2,c3]@6 [f2,c3]!2 [f2,c3]@6 [f2,c3]!2", AG: "[f2,c3]@6 [f2,c3]!2 [f2,c3]@6 [c3,g3]!2", AH: "[c3,g3]!8",
  AI: "[c3,g3]!7 a2", AJ: "[bb2,f3]@2 [bb2,f3]!6", AK: "[bb2,f3]!7 [a2,d3]", AL: "[c3,g3]@2 [c3,g3]!6",
  AM: "[c3,g3]!7 [a2,d3]", AN: "[d3,a3]@2 d3 ~ a2@2 [bb2,f3]@2 [bb2,f3]@2 [c3,f3]@2 [bb2,f3]@2 [a2,d3]@2",
  AO: "[c3,g3]@2 [c3,g3] [c3,g3]@2 [d3,g3] [c3,g3] [a2,d3]", // C5 G5 C5 D5
  AP: "[d3,a3]@2 a2 ~ a2@2 [bb2,f3]@2 [bb2,f3]@2 [c3,f3]@2 [bb2,f3]@2 [a2,d3]@2", // D5 Bb5 F5 Bb5 D5
  AQ: "[g2,d3]@2 a2 ~ a2@2 [c3,g3]@4 [d3,g3]@2 [d3,g3]@2 a2@2", AR: "[g2,d3]!7 [a2,d3]", AS: "[c3,g3]!5 ~@3",
})).s("gm_electric_guitar_muted").gain(0.15)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A B C D C@4 E F G H I J K L I J K M I N K M I J K O I J K P Q R S T Q R S U V W X@3 Y Z J K M I J K M I J K AA I J K
  AA Q R S T Q R S U V W X@2 AB AC AD AE AF AG AH AI AJ AK AL AM I J K M I J K M I J K M I J K AA AN J K AO AP AQ K AM I
  J K M I J K AH Q R S T Q R S U V W X@2 AB AR I J K M I J K AM I J K M I J K AM I J K AM I J K AM I J K AM I J K AM I J
  K AM I J K AM I J K AS
>`.pickRestart({
  A: "~@7 [d4,a4,d5]", B: "d4!6 [d4,a4,d5]!2, [a4,d5]@3 [a4,d5]@3 ~@2",
  C: "d4@2 d4!4 [d4,a4,d5]!2, [a4,d5]@3 [a4,d5]@3 ~@2", D: "d4@2 d4!3 [d4,a4,d5]!3, [a4,d5]@3 [a4,d5]@2 ~@3",
  E: "[d4,a4] ~ d4 ~ a3@2 [bb3,f4]@2 [bb3,f4]@2 [c4,f4]@2 [bb3,f4]@2 a3@2", // D5 Bb5 F5 Bb5
  F: "[g3,d4] a3 [a3,d4] [c4,g4]!2 [d4,g4] [c4,g4] [a3,d4]", // G5 D5 C5 G5 C5 D5
  G: "[d4,a4]@2 d4 ~ [a3,d4]@2 bb3@2 bb3 ~ [c4,f4]@2 [bb3,f4,bb4]@2 [a3,d4]@2, ~@3 f4@2 ~@3", // D5 F5 Bb5 D5
  H: "[c4,g4]!5 [d4,g4] [c4,g4] [a3,d4]", I: "[d4,a4] a3!2 [bb3,f4]@2 [c4,f4] [bb3,f4] [a3,d4]",
  J: "[g3,d4] a3!2 [c4,g4]@2 [d4,g4] [c4,g4] [a3,d4]", K: "[d4,a4] a3!2 [bb3,f4]!2 [c4,f4] [bb3,f4] [a3,d4]",
  L: "[c4,g4]@2 [c4,g4]!2 c4@2 d4 a3, ~@4 g4 ~@3", M: "[c4,g4]@4 [c4,g4] ~ [c4,g4]@2 [c4,g4]@2 d4@2 c4@2 [a3,d4]@2",
  N: "[g3,d4]@2 a3 ~ a3@2 [c4,g4]@4 [d4,g4]@2 [c4,g4]@2 [a3,d4]@2", O: "[c4,g4]@2 [c4,g4] [c4,g4]@2 d4 c4 [a3,d4]",
  P: "[c4,g4]@4 [c4,g4]@2 [c4,g4]@4 [c4,g4]@2 [c4,g4]@2 [c4,g4]!2", // C5
  Q: "[f3,c4,f4]@6 [f3,c4,f4]!2 [f3,c4,f4]@4 [f3,c4,f4]@2 [f3,c4,f4]@2", // F5
  R: "[f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2 [c4,g4,c5,e5]@2 [c4,g4,c5,e5]!2", // F5 C
  S: "[bb3,f4,bb4]@6 [bb3,f4,bb4]!2 [bb3,f4,bb4]@4 [bb3,f4,bb4]@2 [bb3,f4,bb4]@2", T: "[bb3,f4,bb4]!8",
  U: "[bb3,f4,bb4]!6 [a3,e4]!2", V: "[a3,e4,a4,db5]@2 [a3,e4]!6", W: "[bb3,f4]!6 [a3,e4]!2",
  X: "[g3,d4]@2 [g3,d4] [g3,d4]@2 [g3,d4]!3", Y: "[g3,d4]@2 [g3,d4] [g3,d4]@2 [g3,d4]!2 a3",
  Z: "[d4,a4]@2 a3!2 a3@2 [bb3,f4]@4 [c4,f4]@2 [bb3,f4]@2 [a3,d4]@2", // D5 Bb5 F5 Bb5 D5
  AA: "[c4,g4]@2 [c4,g4] [c4,g4]@2 [c4,g4]!2 [a3,d4]", AB: "[g3,d4]!8",
  AC: "[g3,d4]@2 [g3,d4]!2 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [a3,d4]@2", // G5 D5
  AD: "[a3,e4]@3 [a3,e4] [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2", // A5
  AE: "[a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [a3,e4]@2 [f3,c4]!2", // A5 F5
  AF: "[f3,c4]@6 [f3,c4]!2 [f3,c4]@6 [f3,c4]!2", AG: "[f3,c4]@6 [f3,c4]!2 [f3,c4]@6 [c4,g4]!2", AH: "[c4,g4]!8",
  AI: "[c4,g4]!7 a3", AJ: "[bb3,f4]@2 [bb3,f4]!6", AK: "[bb3,f4]!7 [a3,d4]", AL: "[c4,g4]@2 [c4,g4]!6",
  AM: "[c4,g4]!7 [a3,d4]", AN: "[d4,a4]@2 d4 ~ a3@2 [bb3,f4]@2 [bb3,f4]@2 [c4,f4]@2 [bb3,f4]@2 [a3,d4]@2",
  AO: "[c4,g4]@2 [c4,g4] [c4,g4]@2 [d4,g4] [c4,g4] [a3,d4]", // C5 G5 C5 D5
  AP: "[d4,a4]@2 a3 ~ a3@2 [bb3,f4]@2 [bb3,f4]@2 [c4,f4]@2 [bb3,f4]@2 [a3,d4]@2", // D5 Bb5 F5 Bb5 D5
  AQ: "[g3,d4]@2 a3 ~ a3@2 [c4,g4]@4 [d4,g4]@2 [d4,g4]@2 a3@2", AR: "[g3,d4]!7 [a3,d4]", AS: "[c4,g4]!5 ~@3",
})).s("gm_overdriven_guitar").gain(0.07).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@24 A B A C A B A D E F G H I J K L M N O@4 A B A C A B A P A B A C A B A C E F G Q R S T U M V W@4 X Y Z AA AB AC
  AD@2 AE AF A B A C A B A C A B A C A B A C ~@8 A B A C A B A C AG AH AI U AJ AK AL AM AN AO AP@4 A B A AQ A B A AQ A B
  A AQ A B A AQ A B A AQ A B A AQ A B A AQ A B A AQ A B A AQ A B A AQ A B A AR
>`.pickRestart({
  A: "[a4,d5,f5] ~@5 [f4,bb4,d5]@4 [f4,bb4,d5]@2 [f4,bb4,d5]@2 ~@2", // Dm Bb
  B: "~@2 [bb4,f5] ~@5 [c4,g4,c5]@4 [c4,g4,c5,e5] ~@3", C: "~@2 [g4,c5] ~@5 [a4,d5]@4 [g4,c5,e5]@4",
  D: "~@2 [g4,c5] ~@5 [g4,c5]@3 e4!2 ~ c4!2", E: "[f3,c4,f4,a4]@10 ~@4 [a4,c5,f5,a5]!2",
  F: "[a4,c5,f5,a5]@8 [a4,c5,f5] ~@3 [g4,c5,e5] ~@3", G: "[bb4,d5,f5]", H: "~@3 [bb4,d5,f5]!2 bb4 c5 ~",
  I: "[f4,a4,c5]@3 ~", J: "[f4,a4,c5,f5]@4 ~@2 a4@3 ~@3 [g4,c5,e5]@2 ~@2", K: "[f4,bb4,d5,f5]@6 ~ [f4,bb4,c5,f5]",
  L: "[f4,bb4,c5,f5]@3 ~", M: "~ e5 a5 e5@5, db5", N: "~ f5 bb5 f5@5, d5",
  O: "[[g3,d4,g4,d5,g5]@14 [d4,g4,d5,g5] [d4,g4,c5,f5]@15 ~@2]/4", // G5 Dm7
  P: "~@2 [g4,c5] ~@5 [e4,g4,c5,f5]@4 [e4,g4,c5,e5] ~ a3@2", // C5 C
  Q: "~@5 f5 [e5,g5] ~, ~ f5@2 f5@2 ~@3, ~ bb5@2 ~, ~@2 d6 ~", R: "[f4,c5]@14 [f4,c5,f5,a5]!2",
  S: "[f4,c5,f5,a5]@8 [a4,c5,f5] ~@3 [g4,c5,e5,g5] ~@3", T: "[f4,bb4,d5,f5]",
  U: "~@6 f5 ~, ~ f5@2 f5@3 ~@2, ~@2 bb5@3 bb5@2 ~, ~@4 d6@3 ~", V: "~ f5 bb5 f5@3 ~@2, d5@3 ~",
  W: "[[g3,d4,g4,d5,g5]@28 [g3,d4]@2 [d4,g4,c5,f5]@26 [f4,bb4] ~@3 [d4,g4] ~@3]/4", // G5 Dm7 Bb5 G5
  X: "[a3,e4]@4 [a4,db5,e5] ~@5 [a4,db5,e5] ~@5", Y: "[a3,e4]@4 ~@6 [a4,db5,e5] ~@5",
  Z: "[f3,c4] [f4,a4,c5]@3 ~@2 [f4,bb4,c5]!2", AA: "~@2 [a4,c5,f5,a5] [a4,c5,f5,a5]@2 [a4,c5,f5,a5] ~ [a4,c5,f5,a5]",
  AB: "[c4,g4,c5,e5]@8 ~@2 [g4,c5] ~@5", AC: "[c4,g4]@4 [g4,c5] ~@5 [c5,f5] ~@5",
  AD: "[~@2 [d5,f5] ~@4 bb4@3 f5 d5@2 f5 d5 ~, ~ bb4@3 bb4@3 ~@9, ~@3 [c5,f5]@3 [c5,f5]@4 ~@6]/2", AE: "[c4,g4]",
  AF: "[e4,a4] [g4,c5]@2 [a4,d5]", AG: "[f3,c4,f4,a4,c5,f5]@14 [f3,c4,f4,a4,c5,f5]!2",
  AH: "[f3,c4,f4,a4,c5,f5]@8 [a4,c5,f5] ~@3 [g4,c5,e5]@2 ~@2", AI: "[f4,bb4,d5]",
  AJ: "[a4,c5,f5,a5]@14 [a4,c5,f5,a5]!2", AK: "[a4,c5,f5,a5]@8 [a4,c5,f5,a5] ~@3 [g4,c5,e5] ~@3", AL: "[f4,bb4,d5]@3 ~",
  AM: "~@6 bb5 f5, ~ f5@2 f5@4 ~, ~ bb5@2 ~, ~@4 d6@3 ~", AN: "~ e5 a5 ~@3 db5 ~, db5@3 ~, ~@3 e5@5",
  AO: "~ f5 bb5 d6@3 ~@2, d5@3 ~", AP: "[[g3,d4,g4,d5,g5]@14 [g3,d4] [d4,g4,c5,f5]@15 [g4,c5] ~]/4",
  AQ: "~@2 [g4,c5] ~@5 [f4,a4,d5]@4 [e4,g4,c5]@2 d4@2", AR: "~@2 [g4,c5] ~@5 [f4,a4,d5]@4 ~@4",
})).s("gm_overdriven_guitar").gain(0.2).pan(0.6)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@24 A B A C A B A C D ~@2 E F ~ G H ~@5 I A B A C A B A C A B A C A B A C D ~@8 J ~@4 K L M N O P ~ Q ~@2 A B A C A B
  A C A B A C A B A C R ~@7 A B A C A B A C ~@6 S ~@6 T A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C
  A B A C A B A C A B A C
>`.pickRestart({
  A: "~@4 [a4,d5,f5] ~@9 [f4,bb4,d5] ~", B: "[g4,bb4,d5] ~@5 [f4,bb4,d5] ~@9", C: "[f4,bb4] ~@3 [g4,c5] ~ [g4,c5] ~@9",
  D: "~@10 [f3,c4] ~ [a4,c5,f5,a5] ~@3", E: "[bb4,d5,f5] ~@3 [bb4,d5,f5] ~@11", F: "~@12 [f4,a4,c5] ~@3",
  G: "~@12 [f4,bb4,d5,f5] ~@3", H: "~@12 [f4,bb4,c5,f5] ~@3", I: "~@12 [d4,g4,c5,f5] ~@3", J: "~@12 f5 ~@3",
  K: "~@8 [a4,db5,e5] ~@3 a3 ~ a3 ~", L: "~@4 [a4,db5,e5] ~@3 [a4,db5,e5] ~@3 [a4,db5,e5] ~@3", M: "~@8 [f4,a4,c5] ~@7",
  N: "~@12 [a4,c5,f5,a5] ~@3", O: "~@8 [c4,g4] ~@3 [g4,c5] ~ [g4,c5] ~", P: "~@8 [g4,c5] ~@7", Q: "~@14 a3 ~",
  R: "[d4,a4] ~@15", S: "~@12 [f4,bb4,d5] ~@3", T: "~@14 [g4,c5] ~",
})).s("gm_overdriven_guitar").gain(0.1).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean = note("<~@93 A B@2 C D@3 E F ~@74>".pickRestart({
  A: "~@4 [e4,g4,c5]@2 ~ f5", B: "[a5@2 ~ a5@3 ~ a5@3 ~@2 bb5 a5 bb5 a5]/2", C: "a5@4 ~@2 a5@6 d6 ~@3",
  D: "[d6@6 c6@6 ~@2 a5 c6@2 ~@5 a5@2 bb5@6 a5@6 ~@2 d6@2 c6@4 a5@2 c6@2]/3", E: "d6 ~@5 a5@2 bb5@4 d6@2 g5@2",
  F: "bb5@2 d6 b5@5",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean_2 = note("<~@75 A B C D E F G H I J K L M@2 N O@2 P Q R@2 S T U V W X Y ~@73>".pickRestart({
  A: "~@3 f4@3 [d4,g4] a4", B: "[e4,a4]@7 [e4,a4]", C: "[g4,c5]@2 ~ e4@3 ~@2", D: "[f4,c5,f5]@5 d5!3",
  E: "~ f5 [c5,f5] d5 ~ f5@2 [c5,f5], c5@2 ~@2 c5@3 ~", F: "c5@6 [c5,e5] ~", G: "[a4,d5] g4 [a4,d5] [g4,c5]@5",
  H: "~@2 [d5,f5] [c5,f5]@3 [bb4,f5] c5", I: "c5 f5 ~@6", J: "c5@2 c5 ~@2 bb4 ~ [g4,c5], g4@5 ~@3, ~@3 c5@3 ~@2",
  K: "a4@2 c5@2 c5@2 a4 c5", L: "d5@4 ~@4 d5@4 d5 ~ d5 f5, ~@3 d5 ~@4, ~@7 f5@5 ~@4",
  M: "[d5@3 f5 e5 d5 c5 g4@2 d5@2 e5@3 f5 d5]/2", N: "f5 e5@2 e5 ~ a4 d5 a4",
  O: "[g5 f5 e5 d5@4 e5@4 f5 g5 f5 e5 a4]/2", P: "d5@2 d5 f5@2 ~ f5 e5", Q: "g5@2 e5@2 g5@2 c5@2 e5@4 e5 ~ a4@2",
  R: "[d5@4 ~@2 e5@6 ~@2 e5@6 [d5,f5] ~ f5@2 e5@2 ~@4 d5@2, ~@13 d5@2 ~, ~@7 e5]/2", S: "d5@6 e5@6 a5 ~@3",
  T: "a5@2 g5@4 g5@2 g5@4 f5@2 a5 ~", U: "a5@2 ~@4 f5@2 d5@4 d4 ~ f5@2", V: "d5@3 f5 g5 f5 g5 f5",
  W: "a5 ~@2 f5 d5@2 f5 d5", X: "f5@2 a5 g5@5", Y: "f5 ~",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_3 = note("<~@75 A ~ B C D E F G H I ~@91>".pickRestart({
  A: "g4@4 [f4,bb4,d5,g5] ~ bb4@6 ~@2 e4@2", B: "~@2 [e4,a4] a4@3 ~@2", C: "~@5 f5!3", D: "f5 ~@2 f5!2 ~@3",
  E: "[g4,e5]@6 ~ g4", F: "~ c5 ~@6", G: "~@7 f5", H: "f5@2 ~@4 d5@6 [d5,f5] ~ [d5,f5] ~, ~ d5@2 ~@5, ~ f5@2 ~",
  I: "~@6 [a4,c5] ~", // Am
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.3)

// bass · fretless bass
const bass = note(`<
  ~@23 A B C B D B C B D E@2 F@2 E@2 F@2 G H I@4 B C B D B C B D B C B D B C B D E@2 F@2 E@2 F@2 G H I@4 J K L M N@2 O P
  Q R B C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B D E@2 F@2 E@2 F@2 G H I@4 B C B D B C B D B C B D B
  C B D B C B D B C B D B C B D B C B D B C B D B C B D B C B S
>`.pickRestart({
  A: "~@5 d2 c2@2", B: "d2@2 a1 bb1@2 c2 bb1 a1", C: "g1@2 bb1 c2@2 d2 c2@2", D: "c2@3 c2@2 d2 c2@2", E: "f2@3 f2 f2@4",
  F: "bb1@3 bb1 bb1@4", G: "a1 db2 e2 a1", H: "bb1 d2 f2 bb1", I: "[g1@15 g1@17]/4", J: "a2@3 a2 a2@2 a2@2",
  K: "a2@3 a2!3 a2@2", L: "f2@3 f2 f2@2 f2@2", M: "f2@3 f2!3 f2@2", N: "c2@3 c2 c2@4", O: "bb2@3 bb2!5",
  P: "bb2@3 bb2 bb2@2 bb2@2", Q: "c3!4", R: "c3@3 c3!5", S: "c2@3 c2@2 ~@3",
})).s("gm_fretless_bass").gain(0.13)

stack(
  piano, electric_guitar_muted, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_soft, electric_guitar_clean,
  electric_guitar_clean_2, electric_guitar_clean_3, bass
)

More by Dire Straits