Strudelify

the real folk blues

Yoko Kanno

KeyA majorTempo98 bpm
0:00/0:00
// the real folk blues — Yoko Kanno
// 97.5 bpm, 12/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/6358465; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97.5/6)

// 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 · epiano1 · "Piano"
const epiano1 = note("<A@2 B@2 C@2 B@2 C@2 D E F@2 D G H@2 I@4 J K L M@3 N O P Q R@2 C@2 B@2 C@2 S>".pickRestart({
  A: "[~@9 [f#3,a3,c#4,e4,f#4]@37 ~@2]/2", // F#m7
  B: "[[c#4,e4,f#4]@9 c#4@2 e4 f#4@2 f#4 e4@2 f#4@3 e4 ~@3 [e3,a3,c#4,e4]@23 ~, [f#3,a3]@23 ~@25, ~@21 a4@26 ~]/2", // F#7 A F#m
  C: "[[c#4,f#4,a4]@9 c#4@2 e4 f#4@2 f#4 e4@2 f#4@3 ~@4 [d3,a3,c#4,f#4,a4]@23 ~, [d#3,a3]@23 ~@25, ~@20 e4@27 ~]/2", // F#m Dmaj7 D#dim
  D: "b4@2 c#5@3 b4 c#5@3 b4@2 b4@3 ~@6 c#5@3 f#5, [a3,c#4,e4]@23 ~, f#4@14 f#4@9 ~", // A
  E: "e5@9 d5@2 d5@3 c#5@7 c#5@2 b4, [a3,c#4,f#4,a4]@23 ~", // F#m
  F: "[[f#4,a4]@2 ~ a4@2 ~ a4@2 b4 c#5@2 b4 b4@6 a4@3 b4@2 ~@13 [g#3,b3,e4]@11 ~, [f#3,a3,b3,d#4]@23 ~ [a3,c#4,e4]@11 ~@13, ~@2 f#4@3 f#4@18 a4@24 ~, ~@26 f#4@21 ~]/2", // F#m E B7 A
  G: "e5@9 f#5@2 c#5@9 ~ c#5@2 b4, [a3,c#4,f#4,a4]@23 ~", // F#m
  H: "[[f#4,a4]@2 ~ a4@2 ~ a4@2 c#5@3 b4@7 a4@3 b4@2 ~@13 [g#3,b3,e4]@11 ~, [f#3,a3,b3,d#4]@23 ~ [a3,c#4,e4]@11 ~@13, ~@2 f#4@3 f#4@18 a4@24 ~, ~@26 f#4@21 ~]/2", // F#m E B7 A
  I: "[~@3 f#4@3 f#4@2 f#4@3 ~@4 f#4@3 f#4@2 f#4@3 ~@6 f#4 f#4@2 f#4@3 ~@4 e5@3 c#5@3 b4@2 ~ [f3,g#3,c#4,f4]@23 ~@18 c#5 e5@2 f#5@4, [f#3,a3,d#4]@11 b4@4 ~@8 c#5@6 ~@6 f#5@4 ~@8 c#5@40 ~@9, ~@12 [e3,g#3,c#4]@11 ~ [f#3,a3,c#4]@11 ~ [f#3,a3,d4]@11 ~@25 [f3,g#3,b3,f4]@23 ~]/4", // C# D#dim C#m F#m D Fdim
  J: "a5@9 f#5@2 f#5@9 ~ a5@3, [f#3,b3,d#4]@23 ~", K: "g#5@9 f#5@2 g#5@12 ~, [g#3,b3,f4]@23 ~",
  L: "~@2 a5 f#5 e5 c#5 b4 a4, [a3,e4,f#4]@23 ~", // F#m7
  M: "[b4@5 a4 b4@2 c#5@3 ~@6 c#5 e5@2 f#5@3 ~@9 f#5@3 f#5@9 a5@3 ~@9 f#5@3 g#5@12 ~, [b3,e4]@23 ~ [a3,d#4,f#4]@23 ~ [g#3,b3,f4]@23 ~, f#4@11 f#4@12 a5@9 ~@15 g#5@9 ~@16]/3", // E5 D#dim Fdim
  N: "~@6 a5@2 f#5@3 e5@3 c#5@3 b4@3 a4@4, [a3,c#4,e4]@23 ~", // A
  O: "b4@5 a4 b4@2 c#5@3 ~@7 a4@2 b4@4, a3@23 ~, [d#4,f#4]@11 f#4@6 f#4@6 ~, ~@12 d4@11 ~", // D#m
  P: "c#5@3 e5@2 e5@3 c#5@15 ~, [g#3,b3,e4]@23 ~", // E
  Q: "[f#3,a3,d#4]@11 ~ f#5@3 c#5@3 b4@3 a4@2 b4, ~@12 [g#3,b3,f4]@11 ~", // D#dim Fdim
  R: "[[f#4,b4]@2 a4 ~@8 e4 f#4@2 ~ e4@2 ~@7 [e3,a3,c#4,e4]@23 ~, [f#3,a3]@23 ~@25, c#4@9 c#4@14 ~@25, ~@3 f#4@9 ~@2 f#4@3 f#4@6 ~@25, ~@20 a4@27 ~]/2", // B5 A F#m
  S: "[f#3,a3,c#4,e4,a4]@23 ~", // F#m7
})).s("gm_epiano1").gain(0.3)

// bass · electric bass pick · "Contrabaixo"
const bass = note(`<
  ~@2 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 AA AB AC AD AE AF G AG AH AI AJ AK A
>`.pickRestart({
  A: "f#1", B: "a1", C: "d#2", D: "d2@11 c#2 a2@2 f#2@3 d2@3 a1 b1@2 e1",
  E: "f#1@3 f#1@8 c#2 f#1@3 f#1@3 f#1@2 e1 f#1@2 g#1", F: "a1@3 a1@8 e1 a1@3 a1@8 e2",
  G: "d#2@3 d#2@8 a1 d#2@3 d#2@8 a1", H: "d2@5 a1 d2@3 a1@2 d2@3 e1 f#1@2 g#1 a1@2 g#1 f#1@2 e1",
  I: "f#1@3 f#1@8 c#2 f#1@3 f#1@6 f#1@2 g#1", J: "a1@3 a1@8 e1 a1@3 a1@5 a1@3 e1",
  K: "b1@3 b1@8 f#1 b1@3 b1@5 e1 a1@2 e1", L: "f#1@3 f#1@5 f#1 c#2@2 f#1 e1@3 e2@3 e2@2 c#2 b1@2 a1",
  M: "f#1@3 f#1@3 f#2@3 c#2@2 f#1 f#2@2 f#2 f#2@2 b1 c#2@2 e1 f#1@2 g#1", N: "a1@3 a1@8 e1 a1@3 a1@3 a1@2 a1@3 a1",
  O: "b1@3 b1@8 f#1 b1@2 f#1 a1@2 b1@3 f#1 a1@2 b1", P: "f#1@3 f#1@8 f#1 f#2@2 f#2@3 b1 c#2@2 e1 f#1@2 e1",
  Q: "b1@3 b2@3 e2@2 f#2 b1@3 c#2@3 c#2@2 g#2@3 b1 c#2@2 d2", R: "d#2@3 d#3@3 g#2@2 a#2 d#2@3 d2@3 a2@3 f#2@3 d2@3",
  S: "c#2@2 c#2 c#2@2 c#3@4 b2@2 g#2@3 a1 c#2@3 g#2@2 g#2 c#2@3",
  T: "~@2 c#3 f#3@3 f#3@2 c#3@3 g#2@3 c#2 c#2@2 g#2 g#2@2 c#2 c#2@2 c2",
  U: "b1@3 b1@3 d#2@3 b1@2 e2@3 b1 e2@3 f#2@2 a1 b1@2 c2",
  V: "c#2@3 c#2@3 c#3@3 f#2@2 g#2 a1@2 c#2 c#2@2 c#2 ~@2 e1 e1@2 f1",
  W: "f#1@3 f#1@3 c#2@2 f#1@3 f#2@3 e2 c#2@2 e1 f#1@3 c#2@3", X: "e2@5 b1@3 d2@3 e2@3 d2 b1@2 e1 f#1@2 a1 f#1@3",
  Y: "d#2@3 a1@3 d#2@5 a2@3 d2 d#2@2 d#2 a1@2 a1 d#2@3", Z: "f2@2 f2 f2@2 f3@4 f2@2 f2@3 f1 f1@2 f1 c#2@3 f1@3",
  AA: "e1@3 e1@3 e2@2 e1 g1@2 g#1 a1@2 a1 a1@2 a1 e2@2 e1 a1@2 e2",
  AB: "d#2@3 d#2@3 d#2@3 a2@2 a1 d2@3 d2@2 d2 d2@2 a2 d2@3",
  AC: "c#2@2 c#2@3 d2 e2@2 e2 e2@2 e2@3 a2@3 e2 c#2@3 c#3@2 a1",
  AD: "b1@3 b1@2 b1@3 b1 b1@2 b1 c#2@2 c#2 c#2@2 c#2 c#2@2 c#2 c#2@3", AE: "f#1@3 f#1@9 f#2@5 f#1 c#2@2 e1 f#1@2 g#1",
  AF: "a1@3 a1@15 e1@3 a1@2 e1", AG: "d2@2 d2@3 a2 d2@3 d3@5 b2 a2@2 a1 f#1@2 a1 d2@2 e1",
  AH: "f#1@3 f#1@5 c#2 f#1@2 f#1 f#2@2 f#2 f#2@2 b1 c#2@2 e2 c#2@2 e1", AI: "a1@3 a1@8 a2@3 f#2 e2@2 e1 c#2@2 e1 a1@3",
  AJ: "d#2@3 d#2@6 d#3@5 g#2 d#2@2 g#2@3 d#2 a1@3", AK: "d2@2 a1 b1@2 d2@4 d2@3 d3@2 f#2 a2@2 f#2 d2@2 e1 e1@3",
})).s("gm_electric_bass_pick").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 A@7 B A@7 B A@3 B A@3 C A@3 D E F A@3 G A@3 H I>".pickRestart({
  A: "x!2 ~@3 x ~@2", B: "x!2 ~@6", C: "x ~@2 x ~@11 x ~@4 x!2 ~@2", D: "x!2", E: "x ~ x ~@2 x ~@6 x ~@2 x ~ x ~@6",
  F: "~@3 x ~ x ~@3 x ~@14", G: "x!2 ~@4 x ~@5", H: "x!2 ~@10", I: "x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@2 A@4 B A@2 C B A@2 D B@2 A C B@2 ~@21>".pickRestart({
  A: "~@6 x ~@4 x ~@6 x ~@5", B: "~ x ~ x", C: "~ x ~@2", D: "~@6 x ~@4 x ~@6 x ~@4 x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@9 A ~@7 B ~@2 C D C@7 E F G C H C I C H C J ~>".pickRestart({
  A: "~@5 x", B: "~@12 x ~@4 x ~@6", C: "~@6 x ~@4 x ~@6 x ~@5", D: "~ x!2 ~", E: "~@6 x ~@4 x ~@2 x ~@3 x ~@5",
  F: "~@3 x ~@3 x ~ x!2 ~", G: "x!2 ~@2", H: "~@6 x ~@4 x ~@6 x ~@4 x", I: "~@6 x ~@4 x ~@3 x ~@8",
  J: "~@6 x ~@4 x ~@5 x ~@2 x ~@3",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@17 A ~@3 B ~@7 C ~ D ~@3 D ~@3 A ~>".pickRestart({
  A: "~@23 x", B: "~@20 x!2 ~ x", C: "~@7 x", D: "~@21 x ~ x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B C B A D C E F@3 G H I F J K L M N K F@3 O P M Q ~@11>".pickRestart({
  A: "~@6 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2", B: "x ~ x ~@3 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  C: "x ~ x ~@3 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2", D: "x ~ x!2 ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  E: "x!2 ~ x ~@8", F: "x!5 ~ x!2", G: "x!8", H: "x ~ x!6", I: "x ~ x!3 ~ x!2", J: "~@2 x!2 ~ x ~@2",
  K: "~@2 x!3 ~ x!2", L: "x ~ x!3 ~@3", M: "~@2 x!3 ~ x ~", N: "~ x!2 ~", O: "~@2 x!6", P: "x!2 ~ x!3 ~ x",
  Q: "~ x ~ x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@7 B ~@3 C ~@7 B ~ D ~@3 E ~@3 F ~>".pickRestart({
  A: "~@15 x ~ x!2 ~@5", B: "~@20 x!2 ~@2", C: "~@17 x!2 ~ x!2 ~ x", D: "~@15 x ~ x!2 ~ x ~@3", E: "~@18 x ~ x!2 ~ x",
  F: "~@14 x!2 ~@5 x ~ x",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A@2 B A@2 C B D C@3 ~ B A C E A@2 F G C@4 B H F I J K ~@4 B ~@4>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@6", C: "~@5 x ~@2", D: "~ x ~ x ~@3 x", E: "~ x ~@2 x ~@3", F: "~ x ~@3 x ~ x",
  G: "~@3 x ~ x ~@2", H: "~ x ~ x", I: "~ x ~ x ~ x ~@2", J: "~ x!7", K: "~ x ~ x ~@4",
})).gain(0.3)

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

// drums · crash
const crash = s("cr").struct("<~@2 A ~@3 A ~@10 A@2 B A C@2 ~@3 A ~ A D A E@2 ~ A F E ~ A@3>".pickRestart({
  A: "x", B: "~@3 x", C: "x!2 ~@6", D: "x!2", E: "x!2 ~@2", F: "x ~@10 x ~@12",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@32 A B C D E B C D ~>".pickRestart({
  A: "~@12 x ~@2 x ~ x!2 ~@2 x ~ x", B: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x",
  C: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", D: "~ x!3 ~@4", E: "~@9 x ~@2 x ~@2 x ~ x!2 ~@2 x ~ x",
})).gain(0.3)

stack(epiano1, bass, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride)

More by Yoko Kanno