Strudelify

Muskrat Love

America

KeyE majorTempo105 bpm
0:00/0:00
// Muskrat Love — America
// 105 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  A B C@6 D@2 C@6 D@2 E F G@2 H@2 I J K@2 C@6 D@2 C@6 D@2 E F L M N M O J K@2 P@2 Q R S T U V W@4 X@3
>`.pickRestart({
  A: "a3@11 ~@5", B: "e4@10 ~ e4@4 ~",
  C: "[~@4 g#3@5 ~ g#3@3 ~ g#3@5 ~ g#3@5 ~ g#3@3 ~ g#3@5 ~ g#3@5 ~ g#3@3 ~ g#3@5 ~ g#3@5 ~ g#3@3 ~ g#3@5 ~ g#3@5 ~ g#3@3 ~ g#3@5 ~ g#3@5 ~ g#3@3 ~ g#3 ~]/6",
  D: "[~@4 e4@5 ~ e4@3 ~ e4@5 ~ e4@5 ~ e4@3 ~ e4 ~]/2", E: "~@4 g#3@5 ~ g#3@3 ~ g#3 ~", F: "e3@3 ~ d#4 ~ d#4@7 ~@3",
  G: "[c#5@3 ~ c#5@3 ~ b4@3 ~ b4 ~ c#5@7 ~@3 c#5@3 ~ a4@3 ~]/2",
  H: "[c#5@3 ~ c#5@3 ~ b4@4 ~@2 c#5@5 ~ c#5@3 ~ a4@3 ~ c#5@3 ~]/2", I: "c#5@3 ~ c#5@3 ~ b4@3 ~ b4 ~ c#5@2",
  J: "~@2 c#4 ~ c#5@9 ~@3", K: "[a4@2 ~ a4@9 ~@4]/2", L: "c#5@3 ~ b4@3 ~ b4@3 ~ b4 ~ c#5@2",
  M: "~@2 a4 ~ c#5@3 ~ a4@3 ~ c#5@3 ~", N: "c#5@3 ~ c#5@3 ~ b4@4 ~@2 c#5@2", O: "c#5@3 ~ c#5@3 ~ b4@3 ~ g#4 ~ c#5@2",
  P: "[~@10 b4@9 ~ b4 b4@2 b4!2 ~ b4@3 ~ g#4 ~]/2", Q: "b4@12 ~@2 g#4 ~", R: "b4@9 ~ b4@3 ~ b4 ~",
  S: "b4@3 ~ b4@5 ~ b4@3 ~ b4 ~", T: "b4@3 ~ b4@9 ~@3", U: "~@4 c#5 ~ c#5@3 ~ c#5@3 ~ c#5 ~",
  V: "c#5@3 ~ e5@5 ~ d#5@5 ~", W: "b4@3 ~ b4@5 ~ b4 ~@3 b4 ~", X: "[b4@35 ~@13]/3",
})).s("gm_acoustic_guitar_steel").gain(0.26).pan(0.9)

// chords · acoustic guitar nylon · "Nylon-stGt"
const acoustic_guitar_nylon = note(`<
  A B C@6 D@2 E@6 D@2 F G H@2 I@2 J K L@2 E@6 D@2 M@6 D@2 F G J N O P Q K L@2 R@2 S T U V W X Y@4 Z@3
>`.pickRestart({
  A: "[c#3,e3,f#3]", B: "[a3,c#4]@10 ~ [a3,c#4]@4 ~",
  C: "[~@4 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@2]/6", // B
  D: "[~@4 [f#3,a3,c#4]@5 ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4]@5 ~ [f#3,a3,c#4]@5 ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~]/2", // F#m
  E: "[~@4 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@5 ~ [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3] ~]/6", // B
  F: "~@4 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3] ~", G: "~@4 [g#3,b3] ~ [g#3,b3]@7 ~@3",
  H: "[[e4,a4]@3 ~ [e4,a4]@3 ~ [d#4,g#4]@3 ~ [d#4,g#4] ~ [f#4,a4]@7 ~@3 [f#4,a4]@3 ~ [c#4,f#4]@3 ~]/2", // A5 G#5 F#m F#5
  I: "[[e4,a4]@3 ~ [e4,a4]@3 ~ [d#4,g#4]@4 ~@2 [f#4,a4]@5 ~ [f#4,a4]@3 ~ [c#4,f#4]@3 ~ [f#4,a4]@3 ~]/2", // A5 G#5 F#m F#5 F#m
  J: "[e4,a4]@3 ~ [e4,a4]@3 ~ [d#4,g#4]@3 ~ [d#4,g#4] ~ [f#4,a4]@2", K: "~@4 [f#4,a4]@9 ~@3",
  L: "[[c#4,f#4]@2 ~ [c#4,f#4]@9 ~@4]/2", // F#5
  M: "[~@4 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@6 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@6 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@6 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@6 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3]@6 [b2,d#3]@5 ~ [b2,d#3]@3 ~ [b2,d#3] ~]/6", // B
  N: "~@4 [f#4,a4]@3 ~ [c#4,f#4]@3 ~ [f#4,a4]@3 ~", O: "[e4,a4]@3 ~ [e4,a4]@3 ~ [d#4,g#4]@4 ~@2 [f#4,a4]@2",
  P: "~@4 [f#4,a4]@3 ~@5 [f#4,a4]@3 ~", Q: "[e4,a4]@3 ~ [e4,a4]@3 ~ [d#4,g#4]@3 ~@3 [f#4,a4]@2",
  R: "[~@10 [d#4,g#4]@9 ~ [d#4,g#4] [d#4,g#4]@2 [d#4,g#4]!2 ~ [d#4,g#4]@3 ~ [b3,d#4] ~]/2", // G#5 B
  S: "[d#4,g#4]@12 ~@2 [b3,d#4] ~", T: "[d#4,g#4]@9 ~ [d#4,g#4]@3 ~ [d#4,g#4] ~",
  U: "[d#4,g#4]@3 ~ [d#4,g#4]@5 ~ [d#4,g#4]@3 ~ [d#4,g#4] ~", V: "[d#4,g#4]@3 ~ [d#4,g#4]@9 ~@3",
  W: "~@4 [e4,f#4,a4] ~ [e4,f#4,a4]@3 ~ [e4,f#4,a4] ~@3 [e4,f#4,a4] ~", X: "[e4,f#4,a4]@3 ~@13",
  Y: "[d#4,g#4]@3 ~ [d#4,g#4]@5 ~ [d#4,g#4] ~@3 [d#4,g#4] ~", Z: "[[b3,d#4,g#4]@35 ~@13]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.9)

// bass · synth bass 1 · "SynthBass1"
const bass = note(`<
  A B C D@5 E@2 F@3 G F H I J K L M N M N M O P@2 Q@2 R Q@2 S T U Q@2 V Q V W I X Q L M Y M Y M O P@2 Q Z Q@3 AA AB AC Q
  AD AE AF AG@3
>`.pickRestart({
  A: "~@6 b1 c#2 e2@5 ~@3", B: "~@6 b1 c#2 a2@2 ~ g#2@2 ~ f#2 ~", C: "e2@4 ~@2 b1 c#2 e2 e2@2 e2!2 c#2 b1 c#2",
  D: "e1@4 ~@2 b1 c#2 e2 e2@2 e2!2 c#2 b1 c#2", E: "f#1@4 ~@2 b1 c#2 e2 e2@2 f#2@2 e2 c#2 ~",
  F: "e1@5 ~ b1 c#2 e2 e2@2 e2@2 c#2 b1 c#2", G: "e1@5 ~ b1 c#2 e2 e2@2 e2!2 c#2 b1 c#2",
  H: "g#1@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2!2 ~", I: "f#1@4 ~@2 b1 c#2 e2 e2@2 f#2@2 e2 g#2 ~",
  J: "f#2@4 ~@2 b1 c#2 e2 e2@2 f#2@2 e2 f#2 ~", K: "f#2@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 c#2",
  L: "e1 ~ g#1 ~ b1 ~ e2@7 ~@3", M: "a2 ~ g#2 ~ f#2@3 ~ g#2 ~ f#2 ~ e2 ~ f#2@2",
  N: "~@2 c#2 ~ f#1@5 ~ c#2 ~ c#2 e2 f#2 ~", O: "~@2 c#2 ~ f#1@5 ~ c#2@5 ~", P: "[d2@3 ~ d2 ~ a2@18 ~@8]/2",
  Q: "e1@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 c#2", R: "e1@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 e2",
  S: "e1@4 ~@2 f#1 g#1@2 ~ b1 ~ c#2 ~ e2 ~", T: "f#2@4 ~@2 b1 c#2 e2 e2@2 f#2@2 e2 g#2 ~",
  U: "f#2@4 ~@2 b1 c#2 e2 e2@2 f#2!2 e2 c#2 e2", V: "e2@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 c#2",
  W: "e1@4 ~@2 e1 f#1 b1 e2@2 e2 f#2 e2 c#2 ~", X: "f#2@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 ~",
  Y: "~@2 c#2 ~ f#1@5 ~ c#2@3 e2 f#2 ~", Z: "e1@4 ~@2 f#1 ~ g#1 ~ b1 ~ c#2 b1 g#1 ~",
  AA: "e1@4 ~@2 b1 c#2@2 ~ e2 ~ f#2 e2 c#2 ~", AB: "f#1@4 ~@2 a1 c#2 e2 e2@2 f#2@2 e2 g#2 ~",
  AC: "f#2@4 ~@2 a2 ~ g#2 ~ f#2 ~ c#2 ~ a1 ~", AD: "e1@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1!2",
  AE: "e1@4 ~@2 b1 c#2 e2 e2@2 e2@2 c#2 b1 ~", AF: "e1@4 ~@2 b2 c#3 e3 e3@2 f#3@2 e3 g#3 ~", AG: "[e2@35 ~@13]/3",
})).s("gm_synth_bass_1").gain(0.17).pan(0.1)

// chords · percussive organ · "Organ 2"
const percussive_organ = note(`<
  A B C@6 D@2 E@6 D@2 F@2 G@6 H@2 I@2 J@4 D@2 E@6 D@2 F@2 G@6 H@2 I@2 K@4 L@2 K@4 M@3
>`.pickRestart({
  A: "[e4,f#4,a4,c#5]@11 ~@5", B: "[a3,c#4,e4]@11 ~@5", C: "[[d#4,e4,g#4,b4]@91 ~@5]/6",
  D: "[[f#4,a4,c#5,e5]@27 ~@5]/2", E: "[[e4,g#4,b4,d#5]@91 ~@5]/6", F: "[[e4,g#4,b4,d#5]@21 ~@11]/2",
  G: "[[a3,c#4,e4]@5 ~@3 [g#3,b3,d#4]@4 ~@2 [c#4,f#4,a4]@13 ~@5]/2", H: "[[d4,f#4,a4,c#5]@27 ~@5]/2",
  I: "[[e4,g#4,b4,d#5]@27 ~@5]/2", J: "[[e4,g#4,b4,d#5]@59 ~@5]/4", K: "[[e4,g#4,b4,d#5]@29 ~@3]/4",
  L: "[[f#4,a4,c#5,e5]@13 ~@3]/2", M: "[[e4,g#4,b4,d#5]@37 ~@11]/3",
})).s("gm_percussive_organ").gain(0.13).pan(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@17 B ~@8 A@17 B ~@8 A@12 ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!4 ~@4",
})).gain(0.17)

// drums · bongos
const bongos = s("bongo:18").struct("<~@2 A@17 B ~@8 C A@16 D ~@8 A@12 ~@3>".pickRestart({
  A: "x!3 ~ x!2 ~@2 x!3 ~ x!2 ~@2", B: "x!5 ~@11", C: "~@4 x!2 ~@2 x!3 ~ x!2 ~@2", D: "x!3 ~ x ~@11",
})).gain(0.44)

// drums · guiro
const guiro = s("guiro:0").struct("<~@19 x ~@25 x ~@20 x ~@2>").gain(3.53)

stack(acoustic_guitar_steel, acoustic_guitar_nylon, bass, percussive_organ, tambourine, bongos, guiro)

More by America