Strudelify
KeyD majorTempo128 bpm
0:00/0:00
// Morning Sky — George Baker Selection
// 128 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@2 B@2 C@2 B@2 D@2 E@4 F@2 G@2 E@4 H@4 I@2 J@6 K L M@4 N@6 O@4 P@8 K Q R@6 K Q S@6 K T U@7 Q V@4 W@6 X@4 Y@4 K Z@4
>`.pickRestart({
  A: "[[b3,d4,g4]@15 ~]/2", B: "[[a4,d5], f#4@15 ~]/2", C: "[[d4,b4]@31 ~, g4@29 ~@3]/2", D: "[[d4,g4,b4]@9 ~@7]/2",
  E: "[a4@32 [g4,b4]@31 ~, d5@31 ~, f#4@15 ~@17]/4", F: "[[f#4,a4,d5]@31 ~]/2", G: "[[d4,g4,b4]@31 ~]/2",
  H: "[[f#4,a4]@32 [g4,b4]@31 ~, d5@63 ~]/4", I: "[[d4,b4,d5]@16 [e4,c5,e5]@15 ~, g4@15 ~]/2",
  J: "[a4@64 [g4,b4]@31 ~, [d4,d5]@95 ~, f#4@31 ~@17]/6", K: "[d4,g4,b4,d5]", L: "[c4,e4,g4,c5,e5]",
  M: "[~ d4@62 ~, [f#4,a4,d5]@63 ~]/4", N: "[[d4,b4] a4 [d4,g4,b4], g4@30 ~@2 d5@63 ~, ~@16 f#4@15 ~@17]/6",
  O: "[[d4,f#4,a4]@16 [d4,g4,b4]@11 ~@5, d5@47 ~@17]/4", // D G
  P: "[a4@16 b4@16 a4@16 [d4,g4,b4]@15 ~, d5@63 ~, f#4@15 ~ g4@15 ~ f#4@15 ~@17]/8", Q: "[e4,g4,c5,e5]@15 ~",
  R: "[[d4,f#4,a4]@62 ~@2 [d4,g4,b4]@31 ~, d5@95 ~]/6", S: "[[d4,f#4,a4]@63 ~ [d4,g4,b4]@31 ~, d5@95 ~]/6",
  T: "~ c4@14 ~, [g4,c5,e5]@15 ~", U: "[[d4,f#4,a4]@63 ~ [d4,b4]@48, d5, ~@32 g4@23 ~]/7", V: "[[d4,f#4,a4,d5]@63 ~]/4",
  W: "[[d4,d5]@48 [e4,e5]@16 [d4,d5]@31 ~, [g4,b4]@47 ~]/6", // D E D G
  X: "[[d4,d5]@16 [e4,e5]@16 [d4,g4,d5]@31 ~, b4@63 ~, g4@31 ~@33]/4", // D E G5
  Y: "[[d4,d5]@16 e5@16 [d4,d5]@31 ~, [g4,b4]@63 ~, ~@8 e4@7 ~@17]/4", // D G
  Z: "[[e4,e5]@16 d4@32 g5@9 ~@7, [g4,b4]@57 ~@7, ~@16 d5@41 ~@7]/4", // E G
})).s("gm_string_ensemble_1").gain(0.17)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D A E F G H I C J A K G@2 E L C J A@2 G D M N O P Q R S T U V W P F S X T A Y X Z A AA C AB E I C J A K G@2 AC
  AD O P AE R C AF U AG W P F C AH T A AI O P Q R C AF U V W P F C AH T AJ AK A AJ AL AM AN AO AP AQ A AR AS AT AJ AU AV
  AW AX
>`.pickRestart({
  A: "g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~", B: "g2@3 ~ d2@2 ~@2 g2@3 ~ d2@2 ~@2", C: "d2@3 ~ a1@3 ~ d2@3 ~ a1@3 ~",
  D: "d2@2 ~@2 a1@3 ~ d2@2 ~@2 a1@2 d2@2", E: "g2@3 ~ d2@3 ~ g2@3 ~ d2@2 ~@2", F: "d2@3 ~ a1@3 ~ d2@2 ~@2 a1@3 ~",
  G: "d2@2 ~@2 a1@3 ~ d2@2 ~@2 a1@3 ~", H: "g2@3 ~ d2@3 ~ g2@4 d2@2 g2@2", I: "g1@3 ~@13",
  J: "d2@3 ~ a1@3 ~ d2@3 ~ a1@2 d2@2", K: "g2@2 ~@2 d2@2 ~@2 g2@3 ~ d2@2 ~@2", L: "g2@2 ~@2 d2@3 ~ g2@3 ~ f#2@2 e2@2",
  M: "g2@3 ~ d2@4 b1@3 ~ d2@4", N: "a2 ~ g2@2 f#2@2 e2 ~ d2@2 c2@2 b1@2 a1 ~", O: "g2@3 ~ f#2@3 ~ e2@3 ~ d2@4",
  P: "c2@4 b1@3 ~ a1@3 ~ g1@3 ~", Q: "d2@3 ~ a1@2 ~@2 d2@3 ~ a1@2 ~@2", R: "d2@2 ~@2 a1@3 ~ d2@3 ~ a1@2 ~@2",
  S: "d2@2 ~@2 a1@3 ~ d2@3 ~ a1@3 ~", T: "d2@3 ~ e2@3 ~ f#2@3 ~ d2@3 ~", U: "g2@4 f#2@3 ~ e2@3 ~ d2@3 ~",
  V: "g2@4 d2@3 ~ g2 ~ d2 ~ e2 ~ f#2 ~", W: "g2@3 ~ f#2@3 ~ e2@3 ~ d2@3 ~", X: "d2@3 ~ a1@3 ~ d2@2 ~@2 a1@2 ~@2",
  Y: "g2@3 ~ d2@3 ~ g2@3 ~ f#2@2 e2 ~", Z: "d2@3 ~ a1@3 ~ d2@3 ~ e2 ~ f#2 ~", AA: "g2@2 ~@2 d2@4 g2@3 ~ f#2 ~ e2 ~",
  AB: "d2@3 ~ a1@3 ~ d2@4 e2@2 f#2 ~", AC: "g2@3 ~ d2@3 ~ b1@3 ~ d2@4", AD: "a2 ~ g2 ~ f#2 ~ e2 ~ d2 ~ c2@2 b1@2 a1 ~",
  AE: "d2@3 ~ a1@2 ~@2 d2@2 ~@2 a1@2 ~@2", AF: "d2@2 ~@2 e2@3 ~ f#2@3 ~ d2@3 ~",
  AG: "g2@3 ~ d2@3 ~ g2 ~ d2 ~ e2 ~ f#2 ~", AH: "d2@2 ~@2 a1@3 ~ d2@2 ~@2 a1@2 ~@2", AI: "g2@2 d2@2 g2 d2 e2 f#2",
  AJ: "g2@3 ~ d2@3 ~ g2@2 ~@2 d2@3 ~", AK: "g2@2 d2@2 g2 f#2 e2 d2", AL: "g2@2 ~@2 d2@3 ~ g2@3 ~ d2@2 ~@2",
  AM: "g2 ~ d2@2 g2 d2 e2 f#2", AN: "g2@3 ~ d2@3 ~ g2@2 ~@2 d2@2 ~@2", AO: "g2@3 ~ d2@2 ~@2 g2@2 ~@2 d2@2 ~@2",
  AP: "g2@3 ~ d2@2 ~@2 g2@3 ~ d2@3 ~", AQ: "g2@3 ~ d2@4 g2@2 d2@2 e2@2 f#2 ~", AR: "g2@2 ~@2 d2@3 ~ g2@2 ~@2 d2@3 ~",
  AS: "g2@2 ~@2 d2@2 ~@2 g2@3 ~ d2@3 ~", AT: "g2@2 ~@2 d2@3 ~ g2@2 d2@2 e2@2 f#2 ~",
  AU: "g2@2 ~@2 d2@2 ~@2 g2@2 ~@2 d2@3 ~", AV: "g2 ~ d2 ~ g2 ~ d2@2", AW: "a2 ~ g2@2 f#2 ~ e2 ~ d2@2 c2@2 b1 ~ a1@2",
  AX: "g1@5 ~@11",
})).s("gm_electric_bass_finger").gain(0.24)

// chords · accordion
const accordion = note("<~ A B C D A E F G ~@32 A H@2 I A E C ~@59>".pickRestart({
  A: "~ d5 e5 f#5 g5 a5 b5 c6", B: "[f#5,d6]", C: "~@2 [c5,a5]@4 [d5,b5]@2 [e5,c6] ~ [e5,c6]@2 [d5,b5]@2 [c5,a5]@2",
  D: "b5", E: "f#5", F: "~ [c5,a5]@2 [d5,b5] [e5,c6]@2 [d5,b5] [c5,a5]", G: "b4@15 ~",
  H: "[[f#5,d6]@9 ~@2 [d5,b5] c6 [e5,c6] [d5,b5] [c5,a5], ~@24 e5 ~@7]/2", I: "d5",
})).s("gm_accordion").gain(0.31)

// chords · accordion · soft notes
const accordion_soft = note("<~@4 A ~ B@2 C ~@34 D E ~ B@2 F ~@58>".pickRestart({
  A: "d5", B: "[d6@9 ~@7]/2", C: "g5@15 ~", D: "~ [c5,a5]@2 ~@5", E: "b5@15 ~", F: "[b4,g5]",
})).s("gm_accordion").gain(0.16)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@25 A@4 ~@4 B@4 ~@21 C@3 ~@4 B@4 ~@5 D@3 ~@4 B@4 ~@20 E@2>".pickRestart({
  A: "[~@16 [b3,d4,b4,d5]@3 ~@12 g4 [e4,c5,e5]@3 ~@13 [d4,d5]@3 ~@13, ~@15 g3@4 ~@12 [g3,c4]@4 ~@11 f#3@5 ~@13, ~@15 g4@2 ~@30 [a3,f#4,a4]@3 ~@14]/4", // Bm C D C5 D
  B: "[~@17 d5@3 ~@12 [e4,e5]@4 ~@12 [d4,a4,d5]@5 ~@11, ~@15 g3@4 ~@11 g3@5 ~@11 f#3@6 ~@12, ~@15 g4@2 ~@14 g4@2 ~@14 f#4@2 ~@15, ~@16 [b3,d4,b4]@3 ~@12 [c4,c5]@5 ~@11 a3@6 ~@11]/4", // E D5 Bm C
  C: "[[d4,d5]@3 ~@12 g4 [e4,c5,e5]@3 ~@13 [d4,d5]@3 ~@13, ~@15 [g3,c4]@4 ~@11 f#3@4 ~@14, ~@31 [a3,f#4,a4]@3 ~@14]/3", // D C D C5 D
  D: "[[d4,d5]@3 ~@12 g4 [e4,c5,e5]@3 ~@13 [d4,d5]@3 ~@13, ~@15 [g3,c4]@4 ~@11 f#3@5 ~@13, ~@31 [a3,f#4,a4]@3 ~@14]/3", // D C D C5 D
  E: "[~@4 [g4,g5] ~@3, ~@14 g3@5 ~@13, ~@15 [d4,b4,d5]@5 ~@12]/2", // G
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J G K L M N G O P Q K P R G K S T R U V G V W F T X Y K Z W Z AA T AB N AC F G V X AD G K L M N G O
  P R U V G V W F T X Y K Z W Z AA T R U V G V W F T X Y G Z W Z AA T AE X AF T AE X@2 AG T@2 R AE X@2 P A AH
>`.pickRestart({
  A: "~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  B: "~@2 [g3,d4,f4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~", // G7 G
  C: "~@2 [d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~", // D
  D: "~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~", // D
  E: "~@2 [g3,d4,b4,d5,g5]@2 ~@2 [g3,d4,b4,g5] ~@3 [g3,d4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~", // G
  F: "~@2 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~", // G
  G: "~@2 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~", // D
  H: "~@2 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~", // D
  I: "~@2 [g3,d4,b4,g5]@2 ~@2 [g3,d4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  J: "[g3,d4,b4,g5]@5 ~@11, g4@3 ~@13, d#5 ~@15", // G
  K: "~@2 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~", // D
  L: "~@2 [g3,d4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  M: "~@2 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,d#5,g5] ~", // G
  N: "~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~", // D
  O: "~@2 [g3,d4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~", // G
  P: "~@2 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  Q: "d4 ~ [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~", // D
  R: "~@2 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~", // G
  S: "~@2 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  T: "~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~", // G
  U: "~@2 [c4,e4,g4,c5,e5]@2 ~@2 [c4,e4,g4,c5,e5] ~@3 [c4,e4,g4,c5,e5]@3 ~ [c4,e4,g4,c5,e5] ~", // C
  V: "~@2 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~", // D
  W: "~@2 [a3,d4,a4,d5,f#5]@3 ~ [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~", // D
  X: "~@2 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~", // G
  Y: "~@2 [c4,g4,c5,e5]@2 ~@2 [c4,g4,c5,e5] ~@3 [c4,g4,c5,e5]@3 ~ [c4,g4,c5,e5] ~", // C
  Z: "~@2 [a3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~", // D
  AA: "~@2 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~, ~@2 c5 ~@13", // G
  AB: "~@2 [a3,b3,d4,a4,d5,f#5]@2 ~@2 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5] ~@3 [a3,d4,a4,d5,f#5]@2", // Bm7 D
  AC: "~@2 [g3,d4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~", // G
  AD: "[g3,d4,b4,g5]@3 ~@5, g4 ~@3", // G
  AE: "~@2 [g3,d4,g4,b4,g5]@3 ~ [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~", // G
  AF: "~@2 [g3,d4,g4,b4,g5]@2 ~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2", // G
  AG: "~@2 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5] ~@3 [g3,d4,g4,b4,g5]@2", // G
  AH: "[g3,d4,g4,b4,g5]@13 ~@3", // G
})).s("gm_acoustic_guitar_steel").gain(0.28)

// drums · kick
const kick = s("bd").struct("<[x!4]!9 x [x!4]!39 x [x!4]!56 x>").gain(0.47)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!9 ~ [~ x ~ x]!39 ~ [~ x ~ x]!56 ~>").gain(0.39)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@7 B ~@7 C ~@6 A ~@8 C ~@7 C ~@7 A ~@7 D ~@7 B ~@15 B ~>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@14 x!2", D: "~@12 x!3 ~",
})).gain(0.47)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!9 x [x!8]!39 x [x!8]!56 x>").gain(0.39)

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

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@7 B ~@7 C ~@6 D ~@8 E ~@7 F ~@7 C ~@7 G ~@7 C ~@15 A ~>".pickRestart({
  A: "~@2 x!3 ~ x ~ x ~@7", B: "~@3 x!2 ~@3", C: "~ x ~ x!2 ~@3", D: "~@5 x ~@2", E: "~@4 x!2 ~@2",
  F: "~@2 x ~@3 x!3 ~@7", G: "x!5 ~ x ~@9",
})).gain(0.54)

// drums · crash
const crash = s("cr").struct("<A ~@8 A@2 ~@15 A ~@7 A ~@7 A ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A>".pickRestart({
  A: "x",
})).gain(0.47)

// drums · shaker
const shaker = s("sh").struct("<A@9 ~ A@15 B A@7 C A@15 ~ A@15 C A@15 C A@8 D@2 C A D@2 C A E A@7 F>".pickRestart({
  A: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", B: "~@2 x!2 ~@2 x ~ x ~ x ~@3 x ~", C: "~@2 x!2 ~@2 x ~@3 x ~@3 x ~",
  D: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", E: "~@2 x!2 ~@2 x ~@3 x ~@3 x!2", F: "x",
})).gain(0.31)

stack(
  string_ensemble_1, bass, accordion, accordion_soft, acoustic_guitar_nylon, acoustic_guitar_steel, kick, snare,
  low_tom, hihat, mid_tom, high_tom, crash, shaker
)

More by George Baker Selection