Strudelify

Goodbye Earl

Dixie Chicks

KeyC majorTempo123 bpm
0:00/0:00
// Goodbye Earl — Dixie Chicks
// 123 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 synth bass 1 (copy of ch 16 accordion); ch 15 voice oohs (copy of ch 4 choir aahs); ch 9 overdriven guitar (copy of ch 11 electric guitar clean)
// note: Full arrangement: all 130 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 25.
setcpm(123/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(`<
  ~ A@2 B C D E F G D H D F D H I D@2 H D F D H I D@3 H D F D H I D@2 H D F D H I D@2 J K L M N K O P D E F H D E F H D
  E F H D E F H Q R S T U V W T X Y D H D F D H I D@2 J K L M N K O P D E F H ~ E F H D E F H D E F H D E F H D E F H D
  E F H D E F H Q R Z AA
>`.pickRestart({
  A: "c3!8", B: "g2!8", C: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", D: "c2!8", E: "f2!4 c2!4", F: "g1!8",
  G: "f1!5 ~@3", H: "f2!8", I: "c2!4 g1!4", J: "a1@6 a1 ~@9", K: "g1@5 ~ g1@2 ~@8", L: "f1@5 ~ f1 ~@9",
  M: "c2@4 d2 c2 b1@2", N: "a1@5 ~ a1 ~@9", O: "f1@5 ~ f1@2 ~@8", P: "g1 ~@15", Q: "c3@5 ~ c3@9 ~", R: "c3@3 c3@5",
  S: "c2@5 ~ c2@4 c2 ~ c2@3 ~", T: "f2@5 ~ f2@4 f2 ~ f2@3 ~", U: "c2@5 ~ c2@3 ~ c2 ~ c2@4",
  V: "g2@6 g2@3 ~ g2 ~ g2@3 ~", W: "c2@5 ~ c2@3 ~ c2 ~ c2@3 ~", X: "c2@8 g2@7 ~", Y: "c2@7 ~ c3@8",
  Z: "c3@5 ~ f2@5 ~ g2@3 ~", AA: "c3@5 ~@11",
})).s("gm_electric_bass_finger").gain(0.57)

// chords · synth strings 2
const synth_strings_2 = note(`<
  ~ A@2 B C D E F G ~@42 H@2 I J H@2 I J H@2 I J H@2 I J ~@27 H@2 I J ~ K I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J
  H@2 I J ~@4
>`.pickRestart({
  A: "[e4 f4, [c4,g4,c5]]/2", B: "[b3,d4,g4]", C: "[a3,c4,f4]", D: "[g3,c4,e4]", E: "[a3,c4,f4] [g3,c4,e4]",
  F: "[g3,b3,d4]", G: "[f3,a3,c4] ~", H: "[[g3,e4]@15 ~ [a3,f4]@8 [g3,e4]@8, c4@31 ~]/2", I: "[b3,d4,g4]@15 ~",
  J: "[a3,c4,f4]@15 ~", K: "[a3,f4] [g3,e4]",
})).s("gm_synth_strings_2").gain(0.31)

// chords · rock organ
const rock_organ = note(`<
  ~ A B@3 C D E F ~@16 G H I H J H I K L H I H J H I K L@2 M J I N O P Q R ~@16 S@2 ~@8 H I H J H I K L@2 M J I N O P Q
  R ~@32 S@2 T U
>`.pickRestart({
  A: "[c6,c7]", // C
  B: "[[c6,c7]@40 [a6,b6] [g5,a5,b5,c6,d6,e6,f6,g6] [f4,g4,a4,b4,c5,d5,e5,f5] [a3,b3,c4,d4,e4] [g3,f5,g5,a5,b5] [a4,b4,c5,d5,e5] [c4,d4,e4,f4,g4] ~]/3", // C Asus2 G7 Fmaj7 Am G7 Am C
  C: "[c6,c7]@15 ~", D: "[f6,f7]@8 [c6,c7]@7 ~", E: "[g5,g6]", F: "[f5,f6]@8 [a4,b4,c5,d5,e5] [c4,d4,e4,f4,g4] ~@6",
  G: "c6@10 b5 [d5,e5,f5,g5,a5] [b4,c5]@2 ~@2, ~@12 a4 ~@3", H: "c5", I: "f5", J: "g5", K: "c5 g4", L: "c5@15 ~",
  M: "a5", N: "c5@3 c6", O: "~@8 e5@7 ~, a5", P: "[d5,g5]", Q: "[c5,f5]", R: "[d5,g5] ~ [d5,g5] ~ [d5,g5] ~@11",
  S: "[g5,e6]@3 [a5,f6]@5, c6", T: "[g5,e6]@3 [a5,f6]@3 [g5,b5,d6]@2, c6@3 ~", U: "[g5,c6,e6] ~@7",
})).s("gm_rock_organ").gain(0.4).pan(0.6)

// chords · acoustic guitar nylon · "Jens Niehues"
const acoustic_guitar_nylon = note(`<
  ~ A B C D A E C F G H G I G H J G@2 H G I G H J G@3 H G I G H J G@2 H G I G H J G@2 K L M N K O P Q A E C R A E C R A
  E C R A E C R S@2 ~@8 G H G I G H J G@2 K L M N K O P Q A E C R T E C R A E C R A E C R A E C R A E C R A E C R A E C
  R S@2 U V
>`.pickRestart({
  A: "[e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]!3 ~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~", // C
  B: "[f3,g3,c4] ~ [f3,g3,c4] ~ [f3,g3,c4] ~ [f3,g3,c4]!3 ~ [f3,g3,c4] ~ [f3,g3,c4] ~ [f3,g3,c4] ~", // Fsus2
  C: "[g3,b3,d4] ~ [g3,b3,d4]@2 [g3,b3,d4] ~ [g3,b3,d4]!3 ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~", // G
  D: "[f3,a3,c4] ~ [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4]!3 ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  E: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]!2 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~", // F C
  F: "[f3,a3,c4] ~ [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4]!3 ~@7", G: "[g3,c4,e4,g4]!8", H: "[c4,f4,a4,c5]!8",
  I: "[d3,g3,b3,d4]!8", J: "[g3,c4,e4,g4]!4 [d3,g3,b3,d4]!4", K: "[a3,c4,e4]@11 ~ [a3,c4,e4]@3 ~",
  L: "[g3,b3,d4]@12 [g3,b3,d4]@3 ~", M: "[f3,a3,c4]@11 ~ [f3,a3,c4]@3 ~", N: "[e3,g3,c4]@11 ~ [e3,g3,c4]@3 ~",
  O: "[g3,b3,d4]@11 ~ [g3,b3,d4]@3 ~", P: "[f3,a3,c4]@13 ~ [f3,a3,c4] ~", Q: "[g3,b3,d4]@13 ~@3",
  R: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]!3 ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // F
  S: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]!2", // C F
  T: "[e3,g3,c4]!6 ~@10", // C
  U: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~", // C F G
  V: "[g3,c4,e4] ~@15", // C
})).s("gm_acoustic_guitar_nylon").gain(0.46).pan(0.2)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  ~ A B C D A E C F G H G I G H J G@2 H G I G H J G@3 H G I G H J G@2 H G I G H J G@2 K L M N K O P Q A E C R A E C R A
  E C R A E C R S@2 ~@8 G H G I G H J G@2 K L M N K O P Q A E C R T E C R A E C R A E C R A E C R A E C R A E C R A E C
  R S@2 U V
>`.pickRestart({
  A: "[e2,g2,c3] ~ [e2,g2,c3] ~ [e2,g2,c3] ~ [e2,g2,c3]!3 ~ [e2,g2,c3] ~ [e2,g2,c3] ~ [e2,g2,c3] ~", // C
  B: "[f2,g2,c3] ~ [f2,g2,c3] ~ [f2,g2,c3] ~ [f2,g2,c3]!3 ~ [f2,g2,c3] ~ [f2,g2,c3] ~ [f2,g2,c3] ~", // Fsus2
  C: "[g2,b2,d3] ~ [g2,b2,d3]@2 [g2,b2,d3] ~ [g2,b2,d3]!3 ~ [g2,b2,d3] ~ [g2,b2,d3] ~ [g2,b2,d3] ~", // G
  D: "[f2,a2,c3] ~ [f2,a2,c3]@2 [f2,a2,c3] ~ [f2,a2,c3]!3 ~ [f2,a2,c3] ~ [f2,a2,c3] ~ [f2,a2,c3] ~", // F
  E: "[a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3]!2 [g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~", // F C
  F: "[f2,a2,c3] ~ [f2,a2,c3]@2 [f2,a2,c3] ~ [f2,a2,c3]!3 ~@7", G: "[g2,c3,e3,g3]!8", H: "[c3,f3,a3,c4]!8",
  I: "[d2,g2,b2,d3]!8", J: "[g2,c3,e3,g3]!4 [d2,g2,b2,d3]!4", K: "[a2,c3,e3]@11 ~ [a2,c3,e3]@3 ~",
  L: "[g2,b2,d3]@12 [g2,b2,d3]@3 ~", M: "[f2,a2,c3]@11 ~ [f2,a2,c3]@3 ~", N: "[e2,g2,c3]@11 ~ [e2,g2,c3]@3 ~",
  O: "[g2,b2,d3]@11 ~ [g2,b2,d3]@3 ~", P: "[f2,a2,c3]@13 ~ [f2,a2,c3] ~", Q: "[g2,b2,d3]@13 ~@3",
  R: "[a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3]!3 ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~", // F
  S: "[g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [a2,c3,f3]!2", // C F
  T: "[e2,g2,c3]!6 ~@10", // C
  U: "[g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~ [g2,c3,e3] ~ [a2,c3,f3] ~ [a2,c3,f3] ~ [g2,b2,d3] ~ [g2,b2,d3] ~", // C F G
  V: "[g2,c3,e3] ~@15", // C
})).s("gm_acoustic_guitar_nylon").gain(0.31).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@5 A B C D ~@34 E F G H I J K L ~@35 E F G H I J K L ~@36>".pickRestart({
  A: "c3@3 ~ c3@3 ~ c3 ~ d3 ~ e3@3 ~", B: "f3@4 f3@3 ~ c3@4 c3@3 ~", C: "g2@4 g2@11 ~",
  D: "f2 ~ f2 ~ f2 ~ f2 ~ f2@2 ~@6", E: "~ [e3,a3]", F: "~ [d3,g3]", G: "~ [c3,f3]", H: "~ f3 e3 d3 e3 d3 c3 b2",
  I: "~@8 [e3,a3]@7 ~, a2@7 ~", J: "~@8 [d3,g3]@7 ~, g2@15 ~", K: "~@8 [c3,f3]@7 ~, f2@7 ~",
  L: "[d3,g3] ~ [d3,g3] ~ [d3,g3]@2 ~@10", // G5
})).s("gm_electric_guitar_clean").gain(0.54).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@12 A ~@7 A ~@8 A ~@7 A ~@42 A ~@45 B@2 C ~>".pickRestart({
  A: "~@2 c4 ~ c4 ~ c4 ~ c4 ~ c4@2 ~@4", B: "~@6 [a3,f4]@9 ~", C: "~@6 [a3,f4]@5 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note("<~@12 A ~@7 A ~@8 A ~@7 A ~@42 A ~@49>".pickRestart({
  A: "c4 ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.4)

// other · banjo
const banjo = note(`<
  ~@26 A B A C A B D A@2 B A C A B D A@2 ~@34 A B A C A B D A@2 ~@24 E F G H E F G H E F G H E F G H ~@4
>`.pickRestart({
  A: "c5@2 g4 e4 c5@2 ~ e4 c5@2 ~@2 c5@2 ~ e4, ~@3 g4 ~ g4 ~ g4, ~@11 e4@2 ~@3",
  B: "c5@2 a4 f4 c5@2 ~ f4 c5@2 ~@2 c5@2 ~ f4, ~@3 a4 ~ a4 ~ a4, ~@11 f4@2 ~@3",
  C: "b4@2 g4 d4 b4@2 ~ d4 b4@2 ~@2 b4@2 ~ d4, ~@3 g4 ~ g4 ~ g4, ~@11 d4@2 ~@3",
  D: "c5@2 g4 e4 c5@2 ~ e4 b4@2 ~@2 b4@2 ~ d4, ~@3 g4 ~ g4 ~ g4, ~@11 d4@2 ~@3",
  E: "c5@2 g4 e4 c5@2 e4 c5 ~ c5@2 g4 c5@2 g4 e4", F: "c5@2 a4 f4 c5@2 f4 c5 ~ c5@2 g4 c5@2 g4 e4",
  G: "b4@2 g4 d4 b4@2 g4 b4 ~ b4@2 g4 b4@2 g4 d4", H: "c5@2 a4 f4 c5@2 f4 c5 ~ c5@2 a4 c5@2 a4 f4",
})).s("gm_banjo").gain(0.42).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B ~@8 C@6 D E F C@3 D C@3 D C@3 G C@3 D C H I J K I L M ~ A C A@2 N G A@5 N A@4 O@2 P@7 Q C@3 G C@3 D C H I J K
  I L M R A C A@2 S G A@5 N A@5 C A@2 N G A@5 N A@4 O@3 B
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@2 x", E: "x ~@6 x", F: "x ~@4 x ~@2", G: "x ~@3 x ~@2 x",
  H: "x ~ x!2 ~@3 x", I: "x ~ x!2 ~ x ~ x", J: "x ~ x!2 ~@2 x!2", K: "x ~ x!2 ~ x ~@2", L: "x ~ x ~ x ~@5 x ~ x ~ x!2",
  M: "x!4 ~@2 x!2", N: "x ~@3 x!2 ~@2", O: "x ~@2 x ~@4", P: "x!3 ~", Q: "x ~ x ~ x ~@2 x", R: "~@11 x ~@2 x ~",
  S: "x ~@2 x",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@3 B ~@16 C ~@16 C ~@23 D ~ E ~@16 C ~@23 D ~@15 D ~ E ~@2>".pickRestart({
  A: "~@2 x!5 ~", B: "x!4 ~@4", C: "~@7 x", D: "~@3 x", E: "~@8 x ~ x ~@4 x",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@3 B ~@16 C ~@16 D ~@25 E ~@7 F ~@8 D ~@41 E D ~>".pickRestart({
  A: "~@2 x!5 ~", B: "x!5 ~@3", C: "~@3 x", D: "~@5 x ~ x", E: "~@9 x ~@4 x ~", F: "~@3 x ~ x ~ x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@3 B A@3 C ~@20 D ~@3 D ~@3 D ~@3 D B E A@6 B A@8 E A@3 E A@3 ~@13 D ~@3 D B E A@6 B A@4 D A@3 E A@3 E A@11 E A@3 E
  A@3 ~@4
>`.pickRestart({
  A: "x!4", B: "x", C: "x!3 ~", D: "~@7 x", E: "~ x!3",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@16 B ~@23 A ~ C ~@7 D ~@8 B ~@23 A ~@15 A ~ C E ~>".pickRestart({
  A: "~@3 x", B: "~@2 x ~@2 x ~@2", C: "~@14 x!2", D: "~@3 x ~ x ~@2", E: "~@5 x ~ x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~ B ~@28 B ~@8 B ~@7 B ~@7 B ~@3 B ~@3 B ~ B ~@7 B ~@8 B ~@7 B ~@4 B ~@2 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3 B ~ B@2
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@51 [~ x ~ x]!16 ~@27 [~ x ~ x]!4 ~ [~ x ~ x]!27 ~@4>").gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~@51 [x!4]!16 ~@27 [x!4]!4 ~ [x!4]!27 ~@4>").gain(0.36)

stack(
  bass, synth_strings_2, rock_organ, acoustic_guitar_nylon, acoustic_guitar_nylon_2, electric_guitar_clean,
  acoustic_guitar_steel, acoustic_guitar_steel_2, banjo, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, tambourine, cowbell
)

More by Dixie Chicks