Strudelify

Both Sides, Now

Joni Mitchell

KeyC majorTempo120 bpm
0:00/0:00
// Both Sides, Now — Joni Mitchell
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Adlib Guitar" named as a guitar, played on electric guitar clean (its muted trumpet patch is not one); ch 3 "Adlib Marimba" named as a mallet, played on marimba (its sitar patch is not one)
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · marimba · "Adlib Marimba"
const marimba = note(`<
  ~@4 A B C D E F@2 G H B C D E F@2 I J K@3 L M N O@2 P@2 A B C D E F@2 G H B C D E F@2 I J K@3 L M N O@2 P@2 ~@8
>`.pickRestart({
  A: "[e4,g4]!2 [c3,g3,d4,f4] [c3,g3,c4,e4], [c3,g3] ~", B: "[d4,f4] [e4,g4]@2 c4@4 d4, [c3,a3]@3 [c3,e3,g3]@5",
  C: "[c4,e4] [e4,g4] [c3,b3,e4,g4] [c3,g3,e4,b4], [c3,g3] ~", D: "b4 c5@2 [e4,c5]@4 c5, [c3,a3,f4]@3 [c3,g3]@5",
  E: "c5 e5 [c3,g3,d4,f4] [c3,g3,e4,g4], [c3,g3,e4] ~", // Csus4 C
  F: "[f4 e4 ~@2 f3@2 e3@2 ~ g4!3 f4@2 g4@2, [a3,c4], c3 ~ d3@2, ~@2 f4@7 ~@7]/2", // Am
  G: "[g3,b3]!4 [f3,a3]@2 ~ [e4,g4], d4@7 ~, ~@3 [g3,b3]", // G F Em G
  H: "[e4,g4]@3 [e4,g4] [c3,g3,d4,f4]@2 [c3,g3,c4,e4]@2, [c3,g3] ~", I: "[g3,b3]!4 [f3,a3]@2 [g3,b3]@2, d4",
  J: "~ e5!3 d5@3 e5, [c3,g3,e4]", K: "f5 e5@2 [e4,g4]@4 c5, [c3,a3,f4]@3 [c3,g3]@5",
  L: "g2@2 ~ [e4,c5] [d4,b4]@2 [f3,c4,a4]@2, [d4,b4]@3 ~@5, ~ g3@2 ~", // C G F G
  M: "[e3,g3,c4,g4]@3 [e3,g3,c4] [e3,g3,c4]@2 g4@2", N: "g4 f4!2 e4 e4@2 [f3,a3,c4]@2, [c3,a3]@3 ~",
  O: "[c3 g3 e3 g3 c3 a3 f3 a3 c3 g3 e3 g3 c3 ~ e4 d4, c4@7 ~, ~@13 [f3,a3]@3]/2", // F
  P: "[c3 g3 e3 g3 c3 a3 f3 a3 c3 g3 e3 g3 c3 a3 f3 a3, c4]/2",
})).s("gm_marimba").gain(0.2)

// chords · shanai · "Adlib SteelDrum"
const shanai = note("<A B A B ~@7 C ~@7 C ~@18 C ~@7 C ~@11 A B A B A B D ~>".pickRestart({
  A: "g4 e4 c4 g4 f4 c4 a3 f4, c3", B: "e4 c4 g3 e4 f4 c4 a3 f4, c3", C: "[g2,g3,b3]!4 [a2,f3,a3]@2 [g2,g3,b3]@2",
  D: "[g3,g4]", // G
})).s("gm_shanai").gain(0.2)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@4 A B A B A B A C A B A B A B A C A B A B A B A ~@4 A B A B A B A C A B A B A B A C A B A B A B A ~@12
>`.pickRestart({
  A: "x ~ x!3 ~ x!2", B: "x!3 ~ x ~ x!2", C: "x!4",
})).gain(0.82)

// drums · mt
const mt = s("mt").struct(`<
  ~@5 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~@6 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~@13
>`.pickRestart({
  A: "~ x!2 ~", B: "x!4",
})).gain(0.26)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@12
>`.pickRestart({
  A: "x!2",
})).gain(1.63)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct(`<
  [~ x ~ x ~ x ~ x]!4
  ~@23
  [~ x ~ x ~ x ~ x]!4
  ~@23
  [~ x ~ x ~ x ~ x]!10
  ~@2
>`).gain(1.63)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 A B A B A B A C A B A B A B A C A B A B A B A ~@4 A B A B A B A C A B A B A B A C A B A B A B A ~@12
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "x!3 ~ x ~ x!2", C: "x!4",
})).gain(0.26)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<[x!4]!4 ~@23 [x!4]!4 ~@23 [x!4]!12>").gain(0.33)

stack(marimba, shanai, congas, mt, agogo_bells, agogo_bells_2, shaker, whistle)

More by Joni Mitchell