Strudelify

Young At Heart

The Bluebells

KeyD majorTempo115 bpm
0:00/0:00
// Young At Heart — The Bluebells
// 115 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@4 A B C D@2 E C F G H I J G H I K L M N O L M N O A B C F G H I J G H I K L M N O L M N O A P Q R@2 P Q R@2 B C D@2
  E C F L M N O L M N O L M N O L M N O A P Q R@2 P Q R@2 P Q R@2 P Q S ~
>`.pickRestart({
  A: "~@2 [a3,e4]@2 ~@6 e4@3 ~@2 a3, d3@4 d3@3 a3@2 ~ a3@4 d4@2, ~@4 d4@2 d4@2 d3@7 ~, ~@5 e4@4 ~@4 e4@3", // A5
  B: "~@2 [a3,e4]@2 ~@11 e4, d3!4, ~@6 [a3,d4]@4 [a3,e4]@3 d4@3, ~@7 a3", // A5 D5 A5
  C: "~@2 b3@2 ~@11 e3, e3@7 e4@2 ~ [g3,g4]@4 g3@2, ~@2 [g3,g4]@3 b3@3 e3@4 e3@3 ~, ~@4 e4@2 [g3,g4]@3 b3@3 ~ b3@3", // G
  D: "[~@2 [c#4,g4]@2 ~@6 [c#4,g4]@2 ~@3 e4 a4@2 g3@2 ~@6 e4@3 ~@2 a3, e3@6 g3@2 e3@4 e3@3 ~ d3@4 d3@3 a3@2 ~ a3@4 d4@2, ~ a3@3 a3@3 ~@6 c#4@3 ~@2 [d4,g4,a4]@4 d4@2 d3@7 ~, ~@5 c#4@2 g4@3 ~@4 g3@4 ~@3 e4@4 ~@4 e4@3]/2", // C#dim Dsus4
  E: "~@10 [a3,e4]@3 d4 ~ e4, d3@4 d3@3 a3@2 ~@5 a3@2, ~@2 [a3,e4]@3 e4@3 d3@7 ~, ~@6 d4@3 ~@7", // A5
  F: "~@2 [c#4,g4]@2 ~@3 g4 f#4@2 [c#4,e4]@2 ~@3 e4, e3@6 g3@2 e3@4 [e3,g3]@3 ~, ~ a3@3 a3@3 ~@7 g3@2, ~@5 c#4@2 ~@6 c#4@3", // C#dim C#m Em
  G: "~@2 [f#4,a4] ~@3 d4!2 ~@2 [f#4,a4] ~@3 d4 c#4, d3@3 d3@4 ~ a3@4 d3@3 ~, ~ d4@3 ~ [f#4,a4]@2 ~@4 d4@2 [f#4,a4]@2 ~", // F#m
  H: "~@2 [f#4,a4] ~@3 c#4!2 ~@2 [f#4,a4] ~@3 d4 c#4, d3@3 d3@4 ~ d3@4 d3@3 ~, ~ c#4@3 ~ [f#4,a4]@2 ~@6 [f#4,a4]@2 ~", // F#m
  I: "~@2 [d4,g4] ~@3 b3!2 ~@2 [d4,g4] ~@3 b3 g3, d3@3 d3@4 ~ d3@4 d3@3 ~, ~ b3@3 ~ [d4,g4]@2 ~@6 [d4,g4]@2 ~", // G5
  J: "~@2 [c#4,g4] ~@3 g3!2 ~@2 [c#4,g4] ~@3 d4 e4, a2@3 a2@4 ~ a2@4 a2@3 ~, ~ g3@3 ~ [c#4,g4]@2 ~@6 [c#4,g4]@2 ~", // C#dim
  K: "~@2 [c#4,g4] ~@3 g3!2 ~@2 [c#4,g4] ~@3 g3 ~, a2@3 a2@4 ~ a2@4 a2@3 ~, ~ g3@3 ~ [c#4,g4]@2 ~@6 [e4,g4]@2 ~", // C#dim Em
  L: "~@2 b3@3 ~ a3@2 ~@6 [b3,e4]@2, d3@2 [d3,a3] d3, ~@2 e4@6 ~@2 e4@2 ~ a3@3, ~@5 d4@6 [a3,d4]@3 ~@2", // E5 D5
  M: "~@2 b3@3 ~@8 f#4 e4@2, b2@11 ~ b2@4, ~ e4@3 b3@4, ~@5 d4@6 d4@3 ~@2, ~@3 a3@2 e4@2 ~",
  N: "~@2 b3@3 ~@3 b3@2 e4 ~@2 d4 [b3,e4]@2, g2 ~, ~@2 e4@4 g3@5 ~ g3@4, ~@5 d4@5 ~ [b3,d4]@2 ~@3, ~@5 a3@2 ~ e3@8", // E5 Bm
  O: "~@8 b3@3 a3@2 c#4 ~ a3, a2, ~@2 e4@11 ~ e4@2, ~@5 c#4@8 ~@3, ~@3 a3@2 ~@3",
  P: "~@2 [a3,e4]@2 ~@11 e4, b2!4, ~@6 [a3,d4]@4 [a3,e4]@3 d4@3, ~@7 a3", // A5 D5 A5
  Q: "~@2 b3@2 ~@11 e3, g2@7 e4@2 ~ [d4,g4]@4 g3@2, ~@2 d4@3 b3@3 e3@4 e3@3 ~, ~@4 e4@2 [d4,g4]@3 b3@3 ~ b3@3", // G5
  R: "[~@2 [c#4,g4]@2 ~@6 [c#4,g4]@2 ~@3 e4 ~@2 [a3,e4]@2 ~@6 e4@3 ~@2 a3, e3@6 g3@2 e3@4 e3@3 ~ d3@4 d3@3 a3@2 ~ a3@4 d4@2, ~ a3@3 a3@3 ~@6 c#4@3 ~@4 d4@2 d4@2 d3@7 ~, ~@5 c#4@2 g4@3 ~@4 g3@4 ~@3 e4@4 ~@4 e4@3]/2", // C#dim A5
  S: "~ [c#4,g4] ~ g3 ~@4, e3@7 ~@9, ~ a3@3 a3@3 ~@9, ~@5 c#4@2 ~@9", // C#dim
})).s("gm_acoustic_guitar_steel").gain(0.43)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@4 A B ~@2 A@2 ~@2 C D E F C D E F ~ G ~ H ~ G ~ H A B ~@2 C D E F C D E F ~ G ~ H ~ G ~ H A B ~@2 A B ~@2 A B ~@2
  A@2 ~@3 G ~ H ~ G ~ H ~ G ~ H ~ G ~ H A B ~@2 A B ~@2 A B ~@2 A B ~@3
>`.pickRestart({
  A: "~@9 g3@4 ~@3", B: "~@5 g3 ~@3 g3@4 ~@3", C: "~@4 d4@2 ~@3 d4@2 ~@5", D: "~@4 c#4@2 ~@3 c#4@2 c#4@2 ~@3",
  E: "~@4 b3@2 ~@3 b3@2 b3@2 ~@3", F: "~@4 g3@2 ~@3 g3@2 g3@2 ~@3", G: "~@5 f#3@2 ~", H: "~@3 a3@3 ~@4 a3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.29)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@9 A B C D E B F D E B F D G H I E G J K D E B F D E B F D E B F L G H M E G N K E G J K E G J K D E B F D E B F E G
  O K E G O P E G O K E G O K E G Q R E G S T E U S V E G S W ~
>`.pickRestart({
  A: "~@7 f#2", B: "e2@2 ~@2 b1@2 ~@2 e2@2 ~@2 b1@2 c#2 ~", C: "a1@3 ~ b1@3 ~ c#2@3 ~ e2@3 ~", D: "d2 ~ a2 ~ d2 ~ a2 ~",
  E: "d2@2 ~@2 a2@2 ~@2 d2@2 ~@2 a2@2 f#2 ~", F: "a1@3 ~ b1@3 ~ c#2@3 ~ e2@2 f#2 ~",
  G: "b1@2 ~@2 f#2@2 ~@2 b1@2 ~@2 f#2@2 b1 ~", H: "g1@2 ~@2 d2@2 ~@2 e2@2 ~@2 g2@2 a2 ~",
  I: "a1@2 ~@2 e2@2 ~@2 f#2@3 ~ a2@2 b2 ~", J: "g1@2 ~@2 d2@2 ~@2 e2@2 f#2 ~ g2@2 e2 ~",
  K: "a1@3 ~ e2@3 ~ f#2@2 a2 ~ a2@2 f#2 ~", L: "d2@2 ~@2 a2@2 ~@2 d2@2 ~@2 a2@2 d2 ~",
  M: "a1@2 ~@2 e2@2 ~@2 f#2@2 a2 ~ a2@2 f#2 ~", N: "g1@2 ~@2 d2@2 ~@2 e2@2 g2 ~ g1@2 e2 ~",
  O: "g1@2 ~@2 d2@2 ~@2 e2@2 f#2 ~ g2!2 e2 ~", P: "a1@3 ~ e2@3 ~ f#2@2 a2 ~ a2@2 e2 ~",
  Q: "g1@2 ~@2 d2@2 ~@2 e2@2 f#2 ~ g2@2 a2 ~", R: "a2@2 ~@2 e2@3 ~ f#2@2 a2 ~ b2@2 c#3 ~",
  S: "g1@2 ~@2 d2@2 ~@2 e2@2 f#2 ~ a2@2 e2 ~", T: "a2@2 e2 ~ f#2@2 a2 ~ b2@2 d3 ~ b2@2 a2 ~",
  U: "b1@2 ~@2 f#2@2 ~@2 b1@2 ~@2 f#2@2 b2 ~", V: "a2@3 ~ e2@3 ~ f#2@2 a2 ~ a2@2 f#2 ~",
  W: "a2@3 ~ b1@3 ~ f#2@2 a2 ~ a2@2 f#2 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// other · harmonica
const harmonica = note("<~@20 A@3 B C D E F ~@12 A@3 B C D E F ~@28 D@2 G H ~@17>".pickRestart({
  A: "d5@5 e5@2 f#5", B: "e5@15 ~", C: "d5@10 e5@3 f#5@2 ~", D: "d5@10 e5@3 ~ f#5@2", E: "d5@10 c#5@3 d5@2 ~",
  F: "d#5 e5@14 ~", G: "d5@10 e5@3 ~ d5@2", H: "e5",
})).s("gm_harmonica").gain(0.36).pan(0.3)

// chords · fiddle
const fiddle = note(`<
  ~@4 A B C D A B E F ~@12 G H I J K@2 E F L M N O P Q@2 R S H T U S H T U V W X Y V W X Z@2 AA AB AC@2 AD@2 AE AF@3 AG
  ~@4 S H T U S H T U S H T U S H T U S H T U S H T AH ~
>`.pickRestart({
  A: "[d5,f#5]!2 [d5,f5]!2 [d5,f#5]!2 [d5,f5]!2 [d5,f#5] ~ [d5,f5] [f#4,d5] ~@2 [d5,f5] ~", // D Dm D Dm D Dm D Dm
  B: "[d5,f#5]!2 [d5,f5]!2 [d5,f#5]!2 [d5,f5]!2 [d5,f#5] ~ [d5,f5] [f#4,d5] ~@2 [d5,e5] ~", // D Dm D Dm D Dm D Dsus2
  C: "[b4,g5]!2 [a#4,f#5]!2 [b4,g5]!2 [a#4,f#5]!2 [b4,g5] ~ [a#4,f#5] [b4,g5] ~ [c5,g#5] ~@2", // Em D#m Em D#m Em D#m Em Fm
  D: "[c#5,a5]@13 ~ [c#5,e5] ~", // F#m C#m
  E: "[b4,g5]!2 [a#4,f#5]!2 [b4,g5]!2 [a#4,f#5]!2 [b4,g5] ~ [a#4,e5] [b4,g5] ~ [c5,g#5] ~@2", F: "[c#5,a5]",
  G: "d4 [d4,a4]!7 a4 [d4,a4]!7", H: "[d4,b4]!12 b4!2 [d4,b4]!2", I: "d4 [d4,b4]!7 b4 [d4,b4]!7",
  J: "e4 [e4,a4]!11 a4!2 [e4,a4]!2", K: "[d5,f#5]!2 [d5,f5]!2 [d5,f#5]!2 [d5,f5]!2 [d5,f#5] ~ [d5,f5] [f#4,d5] ~@4",
  L: "a3@7 b3", M: "a3@13 g3 a3@2", N: "b3@15 ~", O: "c#4@4 d4@4 e4@3 f#4 g4@3 ~", P: "f#4@7 g4",
  Q: "[f#4@13 g4@2 a4@2 b4@11 a4@2 b4@2]/2", R: "c#5", S: "[f#4,a4]!8 a4 [f#4,a4]!2 a4 ~ [f#4,a4] [f#4,b4]!2",
  T: "[g4,b4]!8 b4 [g4,b4]!2 b4 ~ [g4,b4]!3", U: "[a4,c#5]!8 c#5 [a4,c#5]!2 c#5 ~ [a4,c#5]!3",
  V: "f#4 [f#4,a4]!7 a4 [f#4,a4]!7", W: "[f#4,b4]!12 [f#4,a4]!2 [d4,a4]!2", X: "[e4,b4]!12 [d4,a4]!4",
  Y: "[e4,c#5] [d4,b4]!2 [d4,a4] [e4,b4]!4 [e4,c#5]!4 [e4,b4]!2 [d4,a4]!2", // C#m G D5 E5 C#m E5 D5
  Z: "[[e4,c#5]!9 d5 e5 [c#5,e5] f#5 a5 f#5 c6@8 f#5@2 ~ e5@2 f#5@2 e5@2, ~@15 e5 ~@16]/2", // C#m
  AA: "[b4,f#5] ~ a4!2 a4@2 e4@2 a3 b4 a4@6, ~@4 e4 ~@3", // B5
  AB: "[g3,e4] ~ [g3,d4] ~ [e4,b4]@2 [e4,b4]@2 [a4,e5]@2 [a4,e5]@2 b4@2 b4@2", // C G5 E5 A5
  AC: "[d5@3 ~ d5@3 ~ d5@3 ~ d5@3 d5@2 d5 f#5 a5 f#5 e5 f#5 a5 f#5 d5 f#5 f5 e5 [d4,a4] [d4,a4,b4] ~]/2", // D5 Bm7
  AD: "[b4,f5]!8", AE: "[c#5,g5]!4 [e5,a#5] b5 [g#5,d6] d5, ~@10 f5 ~@5",
  AF: "[f7@8 ~@8 f#6@16 f6@15 ~, ~@4 a6@19 ~]/3", AG: "[d6,b6]", AH: "[a4,c#5]!8 c#5 [a4,c#5]!2 c#5 ~ [a4,c#5]!2 ~",
})).s("gm_fiddle").gain(0.32)

// chords · fiddle · soft notes
const fiddle_soft = note(`<
  ~@24 A B C D ~@12 E B F G E B F G H ~@3 H ~@19 E B F G E B F G E B F G E B F G E B F G E B F G ~
>`.pickRestart({
  A: "a4 ~@7 d4 ~@7", B: "~@12 d4!2 ~@2", C: "b4 ~@7 d4 ~@7", D: "a4 ~@11 e4!2 ~@2", E: "~@8 f#4 ~@2 f#4 [f#4,a4] ~@3",
  F: "~@8 g4 ~@2 g4 [g4,b4] ~@3", G: "~@8 a4 ~@2 a4 [a4,c#5] ~@3", H: "a4 ~@7 f#4 ~@7",
})).s("gm_fiddle").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@4 [x!4]!42 [x!2]!2 [x!4]!48 ~>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@4 A@38 B C@20 D A@7 E C@23 F ~>".pickRestart({
  A: "x!16", B: "x!14 ~ x", C: "x!4 ~ x!7 ~ x!3", D: "x!4 ~ x!7 ~ x ~@2", E: "x!12 ~ x ~@2", F: "x!4 ~ x!7 ~ x!2 ~",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<~@42 [~@7 x] [~ x ~ x]!20 [~@4 x ~@7 x ~ x!2] ~@7 [~@12 x ~ x!2] [~ x ~ x]!24 ~>")
  .gain(0.64)

// drums · congas
const congas = s("conga:13").struct("<~@43 [~ x ~ x ~ x ~ x]!21 ~@7 [~@7 x] [~ x ~ x ~ x ~ x]!24 ~>").gain(1.02)

// drums · congas
const congas_2 = s("conga:18").struct("<~@43 [x!2]!21 ~@8 [x!2]!24 ~>").gain(1.02)

// drums · congas
const congas_3 = s("conga:33").struct("<~@43 [~@12 x ~@2 x]!21 ~@7 [~@12 x ~@2 x]!24 [~@3 x] ~>").gain(1.02)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 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 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 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 A B A B A B A C ~
>`.pickRestart({
  A: "x!16", B: "x!9 ~ x ~ x!4", C: "x!9 ~ x ~ x!3 ~",
})).gain(0.24)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@9 x ~ x ~@4",
})).gain(0.16)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, harmonica, fiddle, fiddle_soft, kick, snare, clap, congas,
  congas_2, congas_3, shaker, shaker_soft
)