Strudelify

'Impossible Jazz' Remastered

Gerard Farré

KeyD minorTempo120 bpm
0:00/0:00
// 'Impossible Jazz' Remastered — Gerard Farré
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5910632; license: https://creativecommons.org/publicdomain/zero/1.0/
// 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 · piano
const piano = note(`<
  A B C D E F G H@2 I J K L M N O P@2 Q R S T U V W X Y Z AA Z AA AB AC@2 AD AE AF P@2 Q R S T U V W X Y Z AA Z AA AB
  AC@2 AD AE AG AH AI AJ@2 Z AK AL AM
>`.pickRestart({
  A: "~ [a3,c4] ~ [g3,b3] ~ [f3,a3] ~ [e3,ab3]", // Am G F E
  B: "e5 g5 a5 eb5 d5 c5 a4 g4 a4 c5 d5 eb5 e5@2 [e3,ab3,e5,e6]@2, ~ [a3,c4] ~ [g3,b3] ~ [f3,a3] ~@2", // E Am G F
  C: "[a5,a6]@2 eb5 d5 c5 a4 c5 d5 eb5 c5 a4 e4 g4 a4 c5 d5, ~ [a3,c4] ~ [g3,b3] ~ [f3,a3] ~ [e3,ab3]", // A Am G F E
  D: "c5 a4 e4 g4 a4 c5 a4 c5 d5 eb5 d5 eb5 d5 c5 eb5 e5, ~ [a3,c4] ~ [g3,b3] ~ [f3,a3] ~ [e3,ab3]", // Am G F E
  E: "~@2 [a3,c4]@2 b5 [c6,d6] eb6 d6 c6 a5 e5 g5 a5@2 [gb3,bb3,bb5]@2, a5@2 ~ [g3,b3] ~ [f3,a3] ~@2", // Am Csus2 Gb G F
  F: "~ [b3,d4] ~ [a3,db4] ~ [g3,b3] ~ [gb3,bb3], b5 ~@3", G: "~ [b3,d4] ~ [a3,db4] ~ [g3,b3] ~ [gb3,bb3]",
  H: "[~@2 [b3,d4]@2 ~@2 [a3,db4]@2 d5 e5 f5 e5 d5 b4 gb4 a4@2 b4 [d4,e4] d4 f4 e4 d4 b3 d4 gb4 b4 d5 gb5@2 [gb3,bb3,gb5]@2, b4@2 b4@2 ~ [g3,b3] ~ [gb3,bb3] ~ b3 ~ [a3,db4] ~ [g3,b3] ~@2]/2", // Bm A Dsus2 Gb G Gb A G
  I: "~@2 [b3,d4]@2 e5 d5 b4 d5 f5 gb5 a5 b5 ~@2 [gb3,bb3]@2, gb5@2 ~ [a3,db4] ~ [g3,b3] b5@2", // Bm Gb A G
  J: "~ [b3,b5]@7, [b2,b4], ~ [d3,gb3,d5,gb5]@15", // B D
  K: "b4 f4 [d4,e4] d4 e4 f4 gb4 a4 ~@2 [g3,b3]@2 ~ gb4 a4 b4, ~@2 b3@2 ~@2 [a3,db4]@2 b4@5 ~ [gb3,bb3]@2", // Dsus2 G A Gb
  L: "d5@2 e5 f5 e5 d5 b4 a4 b4 f4 e4 d4@2 f4 e4 d4, ~ [b3,d4] ~ [a3,db4] ~ [g3,b3] ~ [gb3,bb3]", // Bm A G Gb
  M: "b3 ~ d4@2 ~@2 [a3,db4]@2 gb4 a4 b4 d5 e5 f5 gb5 ab5, ~ b3@3 ~ [g3,b3] ~ [a3,db4]", // A G A
  N: "a5@2 ~ d5 [d3,f3,a3,d5,f5,a5,d6]@4, ~ [a3,d6] ~@2, ~@5 [d3,f3,f5,a5]@3 ~@8", // Dm D5 Dm
  O: "~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4]", // Dm C Bb A
  P: "[d4@2 [d4,f4]@2 ~@2 [c4,e4]@2 f4 g4 ab4 g4 f4 d4 ~ c4@2 d4 g3 f3 ab3 g3 f3 d3 f3 a3 ~ f4 a4@2 [a3,db4,a4]@2, ~@2 d4@2 ~ [bb3,d4] ~ [a3,db4] ~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~@2]/2", // Dm C A Bb A Dm C Bb
  Q: "~@2 [d4,f4]@2 g4 f4 d4 f4 ab4 a4 c5 d5 ~@2 [a3,db4]@2, a4@2 ~ [c4,e4] ~ [bb3,d4] f5@2", // Dm A C Bb
  R: "~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4], d5 c5 ab4 g4", // Dm C Bb A
  S: "d6 c6 ab5 g5 d6 c6 ab5 g5 d6 c6 ab5 g5 d6 c6 ab5 g5, ~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4]", // Dm C Bb A
  T: "f5 d5 c5 d5@3 [c4,e4,d5]@2 a5 d5 c5 d5@3 [a3,db4,d5]@2, ~ [d4,f4] ~@3 [bb3,d4] ~@2", // C Dmaj7 Dm Bb
  U: "d6 d5 c5 d5@3 [c4,e4,d5]@2 f5 a4 ab4 a4 ab4 a4 c5 d5, ~ [d4,f4] ~@3 [bb3,d4] ~ [a3,db4]", // C Dm Bb A
  V: "~@2 [d4,f4] ~@3 [c4,e4]@2 ~@2 bb3@2 ~@2 [a3,db4]@2, d6@3 d4@7 d4@6, ~ [f5,a5]@15, ~ [a4,d5]@7, ~@3 f4@13", // Dm C A F D5
  W: "d4 a4 d5 f5 ~@2 [c4,e4]@2 g5 f5 g5 ab5 g5 f5 d5 a4, ~ [d4,f4] a5@2 ~ [bb3,d4] ~ [a3,db4]", // C Dm Bb A
  X: "f5@2 [d4,f4,f5]@2 ~@2 [c4,e4]@2 ~@3 f4 a4 d5 f5 a5, ~@2 f5@3 [bb3,d4] ~ a3", // Dm C Bb
  Y: "[d3,d6] ~@2 [c4,e4] ~ [bb3,d4] ~ [a3,db4], ~ [d4,f4]@3 ~@4", // D C Bb A Dm
  Z: "d5 a3 d5 a3 c5 g3 c5 g3 bb4 f3 bb4 f3 a4 e3 a4 e3, ~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4]", // Dm C Bb A
  AA: "~ [a4,d5] ~ [g4,c5] ~ [f4,bb4] ~ [e4,a4]", // D5 C5 Bb5 A5
  AB: "d6 [a3,a5] [d4,d6] a5 c6 [g3,g5] [c4,c6] g5 bb5 [f3,f5] [bb3,bb5] f5 a5 [e3,e5] [a3,a5] e5", // A D G C F Bb E A
  AC: "[~ a3 d4@2 ~ g3 c4 ~ f4 [f3,g4] [bb3,ab4] g4 f4 [e3,d4] a3 c4@2 [a3,d4] [g3,d4] f3 ab3 g3 [f3,c4] d3 f3 [f3,a3] [bb3,d4] f4 ~ e3 a4@2, d5@2 ~@12 a4 ~, d4@2 ~@2 d4@4 ~@22 a3 ~]/2", // Fsus2 Bb7 E7 D5 G5 F5 F Bb
  AD: "~ a3 d4 ~ g4 [g3,f4] [c4,d4] f4 ab4 [f3,a4] [bb3,c5] d5 ~ e3 a3 ~, a4 ~@2 f5", // G7 Csus2 F Bbsus2
  AE: "a7 [f7,g7] [d7,e7] [bb6,c7] [g6,a6] [e6,f6] [c6,d6] [a5,bb5] [f5,g5] [d5,e5] [bb4,c5] [g4,a4] [e4,f4] [c4,d4] bb3 [f3,g3], ~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4]", // Fsus2 Dsus2 Bbsus2 Gsus2 Fmaj7 Csus2 Bbmaj7 Fsus2 …
  AF: "e3 ~ [d4,f4]@2 ~@2 [c4,e4]@2 ~@2 [bb3,d4]@2 ~@2 [a3,db4]@2", // Dm C Bb A
  AG: "e3 ~ [d4,f4]@2 ~@2 [c4,e4]@2 ~@2 [bb3,d4]@2 ~@2 [a3,db4,d4]@2", // Dm C Bb Dmaj7
  AH: "a5 g5 f5 d5 f5 [g5,ab5] g5 f5 d5 a4 c5 d5 d4 a4 d5 f5, ~ [d4,f4] ~ [c4,e4] ~ [bb3,d4] ~ [a3,db4]", // Abmaj7 Dm C Bb A
  AI: "ab5 ~ [d4,f4]@2 ~@2 [c4,e4]@2 ~@2 [bb3,d4]@2 ~@2 [a3,db4]@2, ~ a5@3 ~@12", // Dm C Bb A
  AJ: "[d3 f3 g3 ab3 a3 d4 f4 g4 ab4 g4 f4 d4 a3 c4 d4 f4@3 [d5,f5]@2 ~@2 [c5,e5]@2 ~@2 [bb4,d5]@2 ~@2 [a4,db5]@2, ~ [d5,f5] ~ [c5,e5] ~ [bb4,d5] ~ [a4,db5] ~ d4@3 ~@4]/2", // Dm C Bb A Dm C Bb A
  AK: "d7 [a3,d7] [d4,f4,d7] d7 c7 [g3,c7] [c4,e4,c7] c7 bb6 [f3,bb6] [bb3,d4,bb6] bb6 a6 [e3,a6] [a3,db4,a6] a6", // D5 Dm C5 C Bb5 Bb A5 A
  AL: "[d3,f3,a3,d4,d5,f5,a5,d6]@2 ~@2 [d4,d6] [a3,a5] [f3,f5] [d3,d5] [a2,a4] [f2,f4] [d2,d4] [a1,a3] [bb1,c2,bb3,c4] [d2,e2,f2,g2,d4,e4,f4,g4] [a2,b2,db3,d3,a4,b4,db5,d5] [e3,f3,g3,a3,e5,f5,g5,a5]", // Dm D A F D A F D …
  AM: "[f3,a3,d4,f5,a5,d6] ~ [db3,e3,a5,c6,db6,e6,a6] ~ [f3,a3,d4,d5,f5,a5,d6] [d2,d4]@3, [b3,db4,b5,db6] ~@15", // Dm A Dm D Bsus2
})).s("gm_piano").gain(0.35)

// bass · electric bass pick · "Bass Guitar"
const bass = note("<A@5 B@9 C@17 D@5 C@16 D@5 C@7 E@2>".pickRestart({
  A: "a1 g1 f1 e1", B: "b1 a1 g1 gb1", C: "d2 c2 bb1 a1", D: "d2!2 c2!2 bb1!2 a1!2", E: "[d2 ~ d2@8 a2 ~ d2 d2@3]/2",
})).s("gm_electric_bass_pick").gain(0.34).pan(0.6)

// drums · kick
const kick = s("bd").struct("<A@28 ~ A ~@2 A@17 ~ A ~@2 A@11 B C>".pickRestart({
  A: "x!4", B: "x", C: "x!3 ~",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~ A@3 B C A@9 B C A@11 D A D E C A@3 B C A@11 D A D E C A@3 ~ A@6 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@3 x!2", C: "x!2 ~ x ~ x ~ x", D: "x!4", E: "x ~@3 x ~@3 x ~@3 x ~ x!2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@64 x ~>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<A@4 B A@10 B A@12 ~ A ~@2 A@4 B A@12 ~ A ~@2 A@11 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@64 [~@12 x!4] x>").gain(0.32)

// drums · ride
const ride = s("rd").struct("<~@28 A ~ A B C ~@16 A ~ A B C ~@12>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x",
})).gain(0.32)

stack(piano, bass, kick, snare, low_tom, hihat, crash, ride)