Strudelify

Green Green Grass of Home

Bobby Bare

KeyG majorTempo95 bpm
0:00/0:00
// Green Green Grass of Home — Bobby Bare
// 95 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 71 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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 · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G C E H I J K F L M A B C D E F G C E H I J K F L M A B C D K F L M N I E D E F G C E H I J K F L M A B
  C D K F L M N I O P@3
>`.pickRestart({
  A: "[g2,b3] [g3,b3,d4] g2 [g3,b3,d4]", B: "d3 [a3,d4,f#4] d3 [a3,d4,f#4]",
  C: "g2@3 [g3,b3,d4]@3 d3@3 ~@2 e3, ~@3 [g3,b3,d4]", D: "g2 [d2,f#3] [e2,g3] [f#2,a3]",
  E: "g2 [g3,b3,d4] d3 [g3,b3,d4]", F: "g2 [g3,b3,d4] [a2,c4] [b2,d4]", G: "[c3,e4] [g3,c4,e4] c3 [g3,c4,e4]",
  H: "g2 [g3,b3,d4] g2 [g3,b3,d4]", I: "d3 [a3,d4,f#4] a2 [a3,d4,f#4]", J: "d3 [a3,d4,f#4] [e2,g3] [f#2,a3]",
  K: "[g2,b3] [g3,b3,d4] d3 [g3,b3,d4]", L: "[c3,e4] [g3,c4,e4] g2 [g3,c4,e4]", M: "c3 [g3,c4,e4] [b2,d4] [a2,c4]",
  N: "[g2,b3]@3 [g3,b3,d4]@3 g2@3 [g3,b3,d4] [c3,c4] [c#3,c#4]", O: "c3 [g3,c4,e4] g2 [g3,c4,e4]",
  P: "[c3@6 [c3,e4]@6 [b2,d4]@7 [a2,c4]@7 [g2,b3,d4,g4]@46]/3", // C Bm Am G
})).s("gm_piano").gain(0.32)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A B C D C E F C@2 A G H C E I J A B C D C E F C@2 A G H C E I J A B C D C E I J A G C D C E F C@2 A G H C E I J A B
  C D C E I J A G I K@3
>`.pickRestart({
  A: "g1!2", B: "d2!2", C: "g1 d2", D: "g2@2 e1 f#1", E: "g1@2 a1 b1", F: "c2!2", G: "d2 a1", H: "d2@2 e1 f#1",
  I: "c2 g1", J: "c2@2 b1 a1", K: "[c2@12 b1@7 a1@7 g1@46]/3",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D C E F C@2 A G H C E I J A B C D C E F C@2 A G H C E I J A B C D C E I J A G C D C E F C@2 A G H C E I J A B
  C D C E I J A G I K@3
>`.pickRestart({
  A: "g2 [g3,b3,d4] g2 [g3,b3,d4]", B: "d3 [a3,d4,f#4] d3 [a3,d4,f#4]", C: "g2 [g3,b3,d4] d3 [g3,b3,d4]",
  D: "g2 [g3,b3,d4] e2 [a3,d4,f#4]", E: "g2 [g3,b3,d4] a2 [g3,b3,d4]", F: "c3 [g3,c4,e4] c3 [g3,c4,e4]",
  G: "d3 [a3,d4,f#4] a2 [a3,d4,f#4]", H: "d3 [a3,d4,f#4] e3 [a3,d4,f#4]", I: "c3 [g3,c4,e4] g2 [g3,c4,e4]",
  J: "c3 [g3,c4,e4] b2 [g3,c4,e4]", K: "[c3@6 [g3,c4,e4]@6 b2@7 [g3,c4,e4]@7 [g2,g3,b3,d4]@46]/3",
})).s("gm_acoustic_guitar_steel").gain(0.15)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A B C D@2 E ~@38 F G H I J K L M N O@3 P B C Q R S ~@9>".pickRestart({
  A: "~@18 d4 e4@4 ~, ~@3 g4", B: "[d4,g4]@8 [d4,g4]@4 [g4,b4]@8 a4 b4@2 ~, ~@5 d5",
  C: "[a4,d5]@4 [a4,d5]@2 [g4,d5]@3 [f#4,d5]@3", // D5 G5 D
  D: "[~@5 d4 d5 e5 g5@2 ~@11 [f#3,a3]@3, [g4,b4]@6 g5@2 d5@4 [a4,d5]@3 f#3@3 [e3,g3]@6, ~@5 [c5,g5]@7, ~@13 b4@11, ~@5 d3@3]/2", // F#m G D5 Em C5
  E: "[g3,b3]", F: "~@9 [g3,b3] [a3,c4] [a#3,c#4]", G: "[b3,d4]@3 [b3,d4]@2 [c4,e4]",
  H: "a3 b3@6 ~ g3 [c4,g4]@2 [d4,g4], d4@7 ~@5", I: "~ e4 ~@3 c4 ~ e4 [g4,c5]@2 d4 e4, [d4,g4] [g4,c5]@2 [d4,g4] ~ g4",
  J: "[d4,g4]@5 d4 [g4,d5]@2 d4 [a4,d5]@2 g4", K: "a4 b4@2 [b4,d5]@2 [b4,d5]@5 ~ [b4,d5], d5@3 ~@7 a4@2",
  L: "[c5,e5]@2 d4 a4 b4@2 [a4,d5]@3 [g4,d5]@2 d4, ~ d5 ~@2", // C D5 G5
  M: "[e4,a4] f#4 [a4,d5]@4 a4 b4 [f#4,a4]@2 [c#4,a4]@2, ~@6 d5@4 e4 ~", // A5 D5 F#m
  N: "e4 f#4@4 d4 [g4,d5]@3 ~ b4@2, [d4,a4]@11 ~@7 [a4,d5]@6", // G5 D5
  O: "[[d5,g5]@5 [d5,g5] [d5,g5]@5 b4 ~@6 d5@2 g4@6 [g4,c5]@2 [g4,c5]@2 c5@4 [g4,c5]@2, ~@11 g5@19 f#4@6, ~@24 e5@37 ~@11, ~@24 b4@6 [a4,d5] b4@9 d5@21 ~@11, ~@25 c5@11 a4@25 ~@11]/3", // G5 C5 D5
  P: "g4 a4@7 [g4,c5]@4 [f#4,c5]@5 ~ d4@2 e4@4, c5@4 ~@5 g4@3", Q: "~@5 d4 d5 e5 g5@2 [c5,g5]@2, [g4,b4]@3 g5 d5@2",
  R: "a4 ~@10 [f#4,f#5,f#6], d5@3 d3@4 [a3,a4,a5] [b3,b4,b5] [d4,d5,d6] [e4,e5,e6]@2, ~ b4@3 [e4,e5] [f#4,f#5] [g3,g4,g5]@6, ~@3 [d4,d5]@2 f#3@7, ~ e3@2", // F# A B D E F# G D
  S: "[g4,g5,g6]@3 ~", // G
})).s("gm_piano").gain(0.28)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@37 A B C@2 D E F@2 ~@16 A B C@2 D E G H@3>".pickRestart({
  A: "[g4,b4]@3 [a4,c5]", B: "[b4,d5]@2 [c5,e5] [d5,f#5]", C: "[[e5,g5]@6 [d5,f#5] [c5,e5]]/2",
  D: "[b4,d5]@9 [b4,d5] [c5,e5] [c#5,f5]", E: "[d5,f#5]", F: "[d5,g5]/2", G: "[c5,e5]", H: "[[e5,g5]@13 [g5,b5]@23]/3",
})).s("gm_string_ensemble_1").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!68 [~ x ~@10] ~>").gain(0.24)

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!32 ~@8 [~ x ~ x]!16 ~@10>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!4 ~@32 [~ x ~ x]!8 ~@16 [~ x ~ x]!7 [~@6 x ~@12 x ~@4] ~@2>").gain(0.24)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@5 A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B ~@8 A@16 ~@10
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!4", C: "x ~ x!2 ~ x!5 ~ x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@37 x ~@23 x ~@5 x!2 [~ x ~@10] ~>").gain(0.16)

// drums · ride
const ride = s("rd").struct("<~ A@3 B ~@32 A@8 ~@16 C@7 D E ~>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!4", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x", C: "x!12",
  D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x", E: "~ x ~@10",
})).gain(0.16)

stack(piano, bass, acoustic_guitar_steel, piano_2, string_ensemble_1, kick, rim, snare, pedal_hat, crash, ride)

More by Bobby Bare