Strudelify

Sheep May Safely Graze

Bach Johann Sebastian

KeyC majorTempo82 bpm
0:00/0:00
// Sheep May Safely Graze — Bach Johann Sebastian
// 82 bpm, 4/4, key C 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: duplicate parts dropped: ch 6 "STRINGS" string ensemble 1 (copy of ch 4 "A.PIANO 1" piano)
// note: Full arrangement: all 37 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(82/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@4 B C@2 D E@2 F@2 G H I J@6 K L@5 M@8 N@2>".pickRestart({
  A: "[c2@46 ~@15 c4@8 ~@3 c4@9 ~@3 c3@11 ~ c2@45 ~@15 b3@9 ~@3 b3@19 ~@5, c4@60 ~@23 c4@10 ~@2 c4@60 ~@37, ~@48 c2@35 ~@61 c2@48]/4",
  B: "c4@9 ~@2 c4@2 ~ d4@2 ~ e4@2 ~@5 c4@5 ~ e4@3 ~@3 d4@3 ~@3 g3@3 ~@3, c3@24 b2@23 ~",
  C: "[c4@10 ~ c4@2 ~@2 d4@2 ~ e4@2 ~@4 c4@5 ~ e4@2 ~@4 d4@6 g3@3 ~@14 e4@3 ~ f4@2 g4@3 ~@4 e4@6 c4@3 ~@3 d4@5 b3@3 ~@4, a2@24 g2@23 c4@11 ~@38, ~@2 f2 g2]/2",
  D: "[a2,c4]@9 ~@3 [g2,c4]@2 ~ d4@2 ~ [f2,e4]@2 ~@4 g2@6 g3@2 ~@4 g2@6 g3@2 ~@4, ~@24 c4@5 ~@7 f3@2 ~@10", // Am C5 Fmaj7
  E: "[[c3,g3]@24 c2@59 c3@12 ~]/2", F: "[b2@36 g2@11 c3@49]/2", G: "c2@33 ~@2 c2@13",
  H: "c3@23 ~ b2@11 ~ c3@12, d4@35 e4@12 ~", I: "[d3,b3]@23 ~@13 g3@10 ~@2, ~@23 a3@12 ~@13, ~ d2",
  J: "[g2@24 f2@23 ~ e2@23 ~@12 a3@11 ~@2 f2@23 ~@12 b3@12 ~@24 e4@12 d4@12 ~@24 a3@12 g3@8 ~@16 c4@2 ~ d4@2 ~ e4@2 ~@10 e4@2 ~@10 g3@3 ~@4, g3@45 ~@2 g3@23 ~ a#3@11 ~@13 a3@35 ~@13 c4@23 ~@25 b3@23 ~@25 c4@9 ~@15 c4@5 ~@7 d4@5 ~@8, ~@72 c2@24 ~@24 e2@24 d2@47 ~ g2@48 c3@23 ~ a2@11 ~ g2@12]/6",
  K: "g4@12 e4@11 ~@13 c4@10 ~@2, c3@24 d2@23 ~, a4 ~@22 d4@13 ~@12",
  L: "[c4@9 ~@2 c4@2 ~ d4@2 ~ e4@2 ~@10 e4@3 ~@3 d4@6 g3@5 ~@14 e4@11 [b2,d4]@12 ~ c3@11 ~ d2@23 ~@12 g4@12 [c2,e4]@12 [d2,d4]@11 ~ [e2,c4]@11 ~ [f2,d4]@12 ~@36 c4@11 ~@2, e2@23 c4@5 ~@19 g4@12 ~@24 c4@12 f4@34 ~@62 b3@33 ~@16, ~@24 a2@10 ~ g2@11 ~@2 c3@23 ~@48 g2@23 ~@50 g2@47 ~]/5", // Bm C D C Dm
  M: "[c3@11 g3@5 ~ e3@2 ~@4 g3@7 ~@5 g3@4 ~@2 e3@3 ~@3 g3@12 a3@9 ~@3 a3@12 c4@8 ~@4 f3@10 ~@2 f3@5 ~ d3@2 ~@4 f3@9 ~@3 f3@5 ~ d3@3 ~@3 f3@11 ~ b3@9 ~@3 b3@12 d4@7 ~@5 c4@8 ~@4 c4@2 ~ d4@2 ~ e4@2 ~@10 e4@2 ~@4 d4@5 ~ g3@3 ~@15 c4@3 d4@3 e4@2 ~@4 c4@6 e4@3 ~@4 d4@5 g3@3 ~@3 c4@9 ~@3 e4@3 f4@2 ~ g4@2 ~@4 e4@6 c4@3 ~@3 d4@4 ~@2 b3@3 ~@4 a2@9 ~@2 [g2,e4]@3 f4@2 ~ [f2,g4]@3 ~@4 e4@5 c4@3 ~@4 d4@6 ~ b3@3 ~@2, c4@7 ~@16 c2@22 ~@2 c2@46 ~@2 c2@22 ~@2 c2@21 ~@3 c2@48 c3@24 c4@5 ~@19 c4@9 ~@15 g2@24 f2@24 g2@11 ~ g2@11 ~@25 g2@10 ~@3 g2@12, ~@216 b2@23 ~ a2@24 ~@71 c4@10 ~@39]/8", // C Fsus2
  N: "[~@3 [c2,c4]@61 ~@32]/2", // C
})).s("gm_string_ensemble_1").gain(0.24)

// chords · piano · "A.PIANO 1"
const piano = note("<A B C D E F G H I J K L M N O P Q R S T U V W X Y Z T AA B C AB E AC AD AE AF@2>".pickRestart({
  A: "[c3,e3]@47 ~", B: "e3@6 f3@5 ~ f3@6 a3@6, c3", C: "[c3,d3]@47 ~", D: "d3@11 ~ d3@6 f3@6, c3@47 ~", E: "c3 b2, e3",
  F: "a2@23 ~ g2@23 ~, e3@47 ~", G: "[f2,e3]@24 g2@18 f3@5 ~", H: "a2@11 ~ g2@6 f2@6 g2@11 ~ [g2,f3]@11 ~, e3@35 ~@13",
  I: "[c3,e3]@23 ~ [c3,g3]@23 ~", J: "a3@24 b3@11 ~ [c3,g3,c4]@11 ~, [c3,f3]@35 ~@13", K: "[b2,g3]",
  L: "g3@2 f3 e3, c3", M: "a3@24 e3@23 ~, c3@47 ~", N: "[c3,f#3]@23 ~ b2@12 c3@12, ~ g3",
  O: "[d3,g3]@23 ~ [d3,f#3,c4]@23 ~", P: "g3 f3, b3", Q: "e3@23 ~ c3@24, c4", R: "f3 e3, c4@47 ~", S: "[d3,f3,c4]@47 ~",
  T: "[g3,d4,f4]@47 ~", U: "[c4,e4]@23 ~ [a3,c4]@11 ~ [g3,b3]@11 ~", V: "[c4,e4]@24 [d3,f3,b3]@23 ~",
  W: "[e3,g3,c4]@23 ~ [a3,c4]@11 ~ [g3,b3]@12", X: "[c4,e4]@23 ~ b3@12 c4@11 ~", Y: "[d3,a3,c4]@24 [g3,b3]@23 ~",
  Z: "[c3,g3]@10 ~@2 [d3,b3]@11 ~ [e3,c4]@11 ~ [f3,a3]@12", AA: "[c4,e4]@6 ~@6 [c3,e3]@11 ~",
  AB: "d3@22 ~ d3@13 f3@11 ~, c3@47 ~", AC: "a2@23 g2@24 ~, e3@47 ~", AD: "[f2,e3]@24 ~@12 f3@11 ~, ~@24 g2@23 ~",
  AE: "[a2,e3]@12 g2@6 f2@6 g2@12 ~ [g2,f3]@11", AF: "[~ [c3,e3]@20 ~@11]/2",
})).s("gm_piano").gain(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<A B@2 C@2 D@2 E F@2 G H I@3 J K@4 L@7 M@3 N@2 O P Q R@2>".pickRestart({
  A: "~ e3@44 ~@3", B: "[e3@11 f3@10 ~@3 f3@12 a3@8 ~@3 d3@23 ~@2 d3@22 ~@2]/2",
  C: "[d3@21 ~@2 d3@11 ~ f3@11 ~ e3@46 ~@3]/2", D: "[e3@46 ~ e3@38 ~@4 f3@3 ~@4]/2", E: "e3@35 ~ f3@11 ~",
  F: "[e3@22 ~ g3@24 ~ a3@24 b3@11 ~ g3@11 ~, ~@47 f3@36 c4@12 ~]/2", G: "g3@23 ~", H: "g3@23 f3@13 e3@12",
  I: "[a3@23 e3@24 f#3@24 ~ g3@22 ~ g3@24 ~ [f#3,c4]@24]/3", J: "[g3,b3]@23 ~",
  K: "[g3@48 a3@46 ~@2 c4@46 ~ [d4,f4]@49, c4@94 ~ f3@48 ~@49]/4", // Dm
  L: "[[c4,e4]@21 ~@2 [a3,c4]@12 ~ b3@9 ~@2 [c4,e4]@23 ~@2 f3@23 [g3,c4]@23 ~@2 [a3,c4]@11 [g3,b3]@11 ~ [c4,e4]@24 b3@11 ~ c4@10 ~@3 a3@23 [g3,b3]@23 ~ g3@12 b3@11 ~ c4@11 ~ a3@12 [d4,f4]@47 ~@2, ~@35 g3@11 ~@25 b3@23 ~@97 c4@23 ~@122]/7", // C Am C C5 Am G C G …
  M: "[[c4,e4]@8 ~@15 e3@20 ~@4 e3@12 f3@10 ~@2 f3@11 ~ a3@11 ~ d3@22 ~@2 d3@22 ~@3]/3", // C
  N: "[d3@21 ~@2 d3@12 f3@11 ~ e3@47 ~@2]/2", O: "e3@15 ~", P: "e3@13 ~@23 f3@11 ~",
  Q: "e3@8 ~@3 e3@3 f3@3 g3@2 ~@5 e3@5 g3@3 ~@4 f3@3 ~@4 d3@4 ~", R: "[~@2 e3@61 ~@33]/2",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.3)

// other · oboe
const oboe = note("<~@8 A B C@3 D E F ~@4 G H I@2 ~@3 J@5 K L M N@2>".pickRestart({
  A: "~@24 e5@11 ~ d5@11 ~", B: "d5@35 e5@12 ~",
  C: "[f5@22 ~ a5@12 g5@11 ~ e5@23 ~ d5@13 c5@9 ~@2 e5@11 ~ c5@7 ~@5 b4@12 a4@7 ~@6]/3", D: "d5@34 ~ e5@11 ~@2",
  E: "b4@23 ~ a4@12 g4@10 ~@2", F: "g4", G: "c5@9 ~@3 c5@3 d5@2 ~ e5@2 ~@4 c5@5 ~ e5 ~@5 d5@4 ~ g4@2 ~@5",
  H: "g5@12 e5@12 d5@11 ~ c5@10 ~@2",
  I: "[c5@10 ~@2 c5@2 ~ d5@2 ~ e5@2 ~@4 c5@5 e5@2 ~@5 d5@5 g4@2 ~@4 g5@12 ~ e5@12 d5@11 c5@11 ~@2]/2",
  J: "[c5@11 g4@5 ~ e4@2 ~@4 g4@8 ~@4 g4@5 ~ e4@2 ~@4 g4@11 ~ a4@6 ~@6 a4@12 ~ c5@4 ~@7 f4@8 ~@4 f4@5 ~ d4@2 ~@5 f4@7 ~@5 f4@5 d4@3 ~@3 f4@12 b4@7 ~@5 b4@11 ~ d5@5 ~@7 c5@8 ~@4 c5@3 d5@2 ~ e5@2 ~@4 c5@5 ~ e5@2 ~@4 d5@5 ~ g4@2 ~@5]/5",
  K: "c5@9 ~@2 c5@3 d5@3 ~ e5@2 ~@4 c5@5 e5@2 ~@5 d5@6 g4@2 ~@4",
  L: "c5@9 ~@2 e5@3 ~ f5@3 g5@2 ~@4 e5@5 ~ c5@2 ~@4 d5@5 ~ b4@2 ~@4",
  M: "c5@8 ~@4 c5@2 ~ d5@2 ~ e5@2 ~@4 c5@6 g4@2 ~@5 f4@6 ~ g4@3 ~", N: "[~ e4@20 ~@11]/2",
})).s("gm_oboe").gain(0.2).pan(0.6)

// other · flute
const flute = note("<~@16 A B C@2 ~@7 D E@5 F G H@2>".pickRestart({
  A: "g4@22 ~ a#4@12 a4@11 ~@2", B: "a4@35 b4@12 ~", C: "[c5@23 e5@12 d5@12 b4@23 ~ a4@12 g4@12 ~]/2",
  D: "~@12 g5@5 e5@2 ~@4 g5@8 ~@5 g5@5 e5@2 ~@5",
  E: "[g5@11 a5@6 ~@6 a5@11 ~ c6@5 ~@7 f5@8 ~@4 f5@6 d5@2 ~@4 f5@8 ~@5 f5@5 d5@3 ~@3 f5@12 b5@10 ~@2 b5@12 d6@7 ~@5 c6@9 ~@3 c6@3 d6@3 e6@2 ~@4 c6@5 ~ e6@2 ~@4 d6@5 ~ g5@3 ~@3 c6@10 ~@2 c6@2 ~ d6@2 ~ e6@2 ~@4 c6@6 e6@2 ~@4 d6@6 ~ g5@3 ~@3]/5",
  F: "c6@9 ~@3 e6@3 f6@2 ~ g6@2 ~@4 e6@5 ~ c6@3 ~@3 d6@5 ~ b5@3 ~@3",
  G: "c6@9 ~@2 e5@3 f5@3 g5@3 ~@4 e5@6 c5@2 ~@5 d5@6 ~ b4@3 ~", H: "[~ c5@15 ~@8]/2",
})).s("gm_flute").gain(0.2).pan(0.8)

stack(string_ensemble_1, piano, string_ensemble_1_2, oboe, flute)

More by Bach Johann Sebastian