Strudelify

Gaspard de la Nuit Complete Jazz Piano Trio Arrangement

Maurice Ravel

KeyD♭ majorTempo118 bpm
0:00/0:00
// Gaspard de la Nuit Complete Jazz Piano Trio Arrangement — Maurice Ravel
// 117.5 bpm, 5/8, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (5/8 at bar 1, 4/4 at bar 47, 3/4 at bar 56, 2/4 at bar 66, ...) are rendered on a constant 5/8 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5900298; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117.5/2.5)

// 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(`<
  ~@4 A B@3 A B@3 C D E F G@2 H I J K L@3 M N@2 O M N@2 O P@2 Q R@2 S T U S V@2 W@3 X@4 Y@4 Z@6 AA@6 AB@2 AC@2 AD@4 ~
>`.pickRestart({
  A: "[eb3,ab3,db4,f4,bb4,eb5]@15 ~", // Bbm7
  B: "[[b2,eb3,a3,db4,gb4,b4]@24 ~@2 [gb3,a3,eb4,ab4]@6 [eb3,a3,db4,gb4,b4]@9 ~ [db3,f3,b3,eb4,ab4,db5]@6, ~@26 b2@15 ~@7]/3", // B7 Ebdim Ebm7b5 Db7
  C: "[eb3,ab3,db4,f4,bb4,eb5]@9 ~ [db3,f3,b3,eb4,ab4,db5]@6", // Bbm7 Db7
  D: "[gb3,bb3,db4,f4,bb4,eb5,ab5]@9 ~ [f3,ab3,c4,eb4,gb4,c5,f5]@6", E: "[db3,f3,bb3,eb4,ab4,c5]@15 ~",
  F: "bb4@9 ~ ab4@6, [db3,ab3,b3,f4]@15 ~", G: "[[bb2,f3,ab3,c4,d4,g4,c5]@12 ~ [bb2,db3,gb3,ab3,db4,f4]@3]/2",
  H: "[db3,ab3,c4,f4,bb4]@9 ~ [b2,gb3,a3,eb4,ab4]@6", I: "[bb2,f3,ab3,c4,d4,g4,c5]@15 ~",
  J: "[ab2,db3,f3,gb3,bb3,eb4]@15 ~", K: "[bb2,db3,gb3,ab3,db4,f4]@9 ~ [a2,e3,b3,db4,eb4,ab4]@6",
  L: "[[ab2,eb3,bb3,gb4,c5,f5]@20 ~ [g2,d3,a3,g4,d5,f5]@3]/3", M: "[gb2,db3,ab3,gb4,c5,f5]@15 ~",
  N: "[[eb3,gb3,a3,b3,eb4,ab4,db5]@12 ~ [ab2,db3,f3,b3,f4,bb4]@3]/2", // Ebm7b5 Db7
  O: "[ab2,eb3,gb3,eb4,ab4,db5]@9 ~ [g2,d3,b3,f4,ab4,b4,eb5]@6", // Absus4 G7
  P: "[~@13 gb4@3, [gb2,db3,ab3]@16 [bb4,eb5,gb5]@3 db6 bb5 ab5 [eb5,gb5] db5 bb4 ab4@7, ab5@5 f4@11, db6@9 gb4@7 [ab2,eb3,bb3]@16, eb5@6 bb4 ab4@4 eb4@21]/2", // Gbsus2 Ebm Absus2
  Q: "~@11 g5@2 ~ g5@2, [g2,d3,b3,f5,a5]@10 db6@3 db5@3, [a4,db5]@5 a4@11, ~ g4@7, ~@2 b4@3 db5@2 [b4,eb5]@9", // G7 A B
  R: "[~@7 db5@2 ~@17 [b2,a3,db4,db5,ab5,db6]@6, [ab2,db3,f3,eb6], b3@13 f5@19, f5@2 f5 db5@3 [f4,f5]@3 f5 db5 f5 db5@2 [b3,eb4,f4,bb4]@18, ~ b5@3 f5 b5@27]/2", // Db7 Db F Bmaj7
  S: "[bb2,f3,ab3,eb4,ab5,db6,gb6]@9 ~ [a2,eb3,g3,c4,g5,db6,f6]@6", // Bbm7 Am7b5
  T: "~@7 db5@2 ~@4 f5@3, [ab2,db3,f3,b3,eb6], f5@2 f5@2 f5@2 f5@2 ~ f5@2 f5@2 ~@3, ~ b5@4 b5@11, ~@3 db5@4 ~@3 db5@2 db5@4", // Db7
  U: "[b2,a3,db4,db5,ab5,db6]@9 ~ [ab2,db3,f3,b3,f5,b5,eb6]@6", V: "[~ [b3,ab5,db6]@29 ~@2, [gb2,db3,a4,eb5]@15 ~]/2",
  W: "[[db4,db5,gb5,b5]@11 ~ [b3,db4,gb4]@11 [gb2,db3,b3,a4,eb5,ab5,db6]@24 ~, [b2,gb3,a3]@7 ~@9]/3", // Gbsus4 Bsus2 Abm7 B7
  X: "[ab2 ~@13 ab4@2 ~@21 [f7,ab7]@2 ~@19 a7@2 ~@3 a7, db2@17 db4@6 ab5 a5@3 db6 eb6@7 db7@13 ab7 a7 [b4,a6,eb7,ab7] [eb5,a7] gb5 [a5,ab7] a7 ab7 a7 ab7@2 ~ ab7 a7 ab7@2, bb5@4 [f3,ab3] a3 [f3,ab3] a3 db3 ab3 db4 eb4 [f4,ab4] a4 f4@2 a4@2 ab4@7 db5@6 ab6 a6 db6@31, eb6@2 db3 eb3@16 db5 eb5@6 ab5@8 ab6@30, [eb3,f5] ab2@20 [f5,ab5] a5 f5@6 [f6,ab6] a6 f6@5 eb7@3 a7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 f7@16]/4", // Fm Abm Ebdim Amaj7 Fm Ebsus2 Fm
  Y: "[~ a7@2 ~ a7 ab2 ~@56 a7@2, ab7@2 ~ ab7@2 db2@17 db4@6 ab5 a5@3 db6 eb6@8 db7 eb7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 [f7,ab7] a7 [b4,a6,eb7,ab7] [eb5,a7] [gb5,ab7] [a5,a7] ab7 a7 ab7@2 ~, ~@5 bb5@4 [f3,ab3] a3 [f3,ab3] a3 db3 ab3 db4@2 eb4 [f4,ab4] a4 [f4,ab4] a4@2 ab4@7 db5@6 ab6 a6 db6@26, ~@5 eb6@2 db3 eb3@16 db5 eb5@6 ab5@8 ab6@25, ~@5 [eb3,f5] ab2@20 [f5,ab5] a5 f5@6 [f6,ab6] a6 f6@28]/4", // Fm Abm Ebdim Gbsus2 A Fm Ebsus2 Fm
  Z: "[~@7 a7 ~@48 gb4@2 ~@8 eb4@2 ~ eb4@2 ~@2 db4@2 ~@2 bb3@2 ~@11 gb2 ~@3 d3@2, ab7@2 ab7@2 ab7@2 ab7@2 e2@5 bb3@4 b3@5 db5@5 e5 gb5 ab5@5 b5 e6 gb6 ab6 bb6 db7 eb7 eb6 bb6 d7 a7 g7@2 f7@12 ~@3 ab3@2 b3@7 [db4,eb5,ab5] eb4@3 [bb3,bb4,eb5,ab5] db4@3 ab3 bb3@2 ab3 gb3 eb3@2 db3 bb2@2 ab2@2 [eb2,d5,g5,b5]@5, ~ a7@2 a7@2 a7@2 ~ eb5@4 ab3@4 e3@5 bb4@5 b4@22 eb7 bb6 gb6 eb6 bb5 gb5 eb5 bb4@3 [e2,e5,bb5,eb6]@7 db4@3 e4@24 ~@4, ~@8 [bb4,db5]@2 e3 gb3@4 eb4@5 ab4@5 e4@7 eb6 e5@25 ~ b2@12 db6@21 ~@4, ~@9 b2@5 db4@4 e4 gb4@5 eb5@6 bb5 db6@27 ~@3 e3@31 ~ bb2@3]/6", // Dbsus2 Ebsus4 G Eb Bbm
  AA: "[~@2 bb2@2 ~@5 d3@2 bb2 ~ [b2,gb3,bb5,eb6]@59 ~ [f3,bb3,b3,eb4,bb4,eb5,g5,bb5]@23, g3@13 ~@83, ~ d3@6 d3 a3@4 ~@84, ~@4 [f2,f5,bb5,d6]@8 [e2,f5]@59 ~@25, ~@5 bb2@6 ~@85]/6", // Bmaj7 Eb Bb Fmaj7
  AB: "[~@2 [e3,ab3,bb3,eb4,a4,db5,f5,a5]@2 ~ [e3,ab3,bb3,eb4,c5,f5,ab5,c6] ~@4 [f3,bb3,b3,eb4,bb4,eb5,g5,bb5]@21 ~]/2", // Amaj7 Fm7 Eb
  AC: "[~ [bb4,bb5] [e3,ab3,bb3,eb4,a4,db5,f5,a5]@2 ~ [e3,ab3,bb3,eb4,db5,f5,a5,db6] ~@3 [f3,bb3,b3,eb4,bb4,eb5,g5,bb5]@23]/2", // Bb Amaj7 Eb
  AD: "[~@2 [e3,ab3,bb3,eb4,a4,db5,f5,bb5] ~@2 [e3,ab3,bb3,eb4,f5,a5,db6,f6]@2 ~@12 eb4@2 ~@10 eb3 ~ [db3,gb3,g3,b3,gb4,b4,eb5,gb5]@23 ~@2 [c3,e3,gb3,b3,f4,a4,db5,f5] ~@2 [c3,e3,gb3,b3,ab4,db5,e5,ab5]@2 ~, ~@9 [b1,ab5,db6,f6]@13 eb4 db4@2 [b3,b4,f5,bb5] bb3 ab3@2 gb3 f3@3 ~@31, ~@10 gb2@23 ~@31, ~@11 db3@6 bb3 db4@3 f4@12 ~@31, ~@13 eb3 gb3 ab3@2 [gb5,b5,eb6]@16 ~@31]/4", // Amaj7 B Fmaj7 Dbm7 Db7 Bb B
})).s("gm_piano").gain(0.17)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B@3 C D E F G@2 H I J K@2 L M N O P Q R S T ~ U V W X Y Z AA AB AC AD AE AF AG AH ~ AI@3 AJ@4 AK@7 AL ~@2 AM@8
  AN@4 AO AP ~
>`.pickRestart({
  A: "~@3 db2@13", B: "[~@6 gb2 eb2 ~ b1 a1@4 b1@8 b1@5 ab1@11 db2@6 ~@2 ab1@2, ~@45 b1@2 ~]/3",
  C: "db2 eb2 db2@7 ~ c3@6", D: "b2@5 a2@5 ~ gb2@5", E: "db2@8 b1@5 gb2@3", F: "ab2@2 f2@2 db2@2 b2 c3",
  G: "[~@3 db3@6 ~@3 eb3@2 db3@8 f3@5 ~ gb3@2 f3@2]/2", H: "eb3@5 db3@5 ~ bb2@5", I: "ab2@5 f2@5 ~ db2@5",
  J: "bb1@2 bb1@2 ~ bb1@2 bb1@2 bb1@2 bb1@2 ~ bb1@2", K: "[bb1@2 bb1@2 ~ bb1@2 bb2@6 gb2@6 f2@6 ~ gb2@2 db2@2 a1@2]/2",
  L: "bb1@6 f2@5 ~ ab2@4", M: "~@2 gb3@2 ~ f3@2 eb3@2 ~ c3@3 g2@3", N: "gb2",
  O: "~@3 c2@2 ~ gb1@2 ~@3 bb2@2 ~ eb3@2, ~@2 f2@2 ~ ab1@2 ~@3 gb2@2 ~ c3@2 ~", P: "f3@2 db3@2 bb2 ~ gb2 f2",
  Q: "eb2@3 bb1@5 ab1@8", R: "~@3 gb1@13", S: "~@5 f2@3", T: "db2 bb1 gb1 ~ db2@4",
  U: "~@3 ab2@2 f2@2 db2@2 ~ c2@4 gb1@2", V: "b1@6 f2@3 ~ db2@2 b1@2 a1@2", W: "~@3 b2@2 a2@3 db3@3 f3@2 eb3@3",
  X: "b2 ab2 g2 f2", Y: "db2 gb1@7", Z: "~@5 ab1@5 ~ b1@2 eb2@3", AA: "d2@5 g1@3", AB: "db2@5 ab2@3",
  AC: "~@3 db2@3 ab2@3 ~ b2@2 a2@2 gb2@2", AD: "f2@5 bb1@5 ~@2 a1@4", AE: "db2@10 ab1@3 ~@3",
  AF: "b1@2 ~ a2@3 ~@2 b2@2 ~ gb2@3 eb2@2, ~ gb2 ~@3 ab2 ~@2", AG: "~@13 e1@3", AH: "b1", AI: "[~@12 b1@11 gb1@25]/3",
  AJ: "[eb3@25 b2@19 ab2@6 b2@7 db3@7]/4", AK: "[eb3@30 b2@19 ~ ab2@5 b2@6 db3@6 ~ eb3@15 db3@6 ab2@16 bb2@7]/7",
  AL: "~ b2@4 ~@3",
  AM: "[~@12 bb3@17 ab3@21 eb3@22 ~ ab2@4 db2@5 f2@3 g2@3 ~ ab2@4 db2@5 gb2@2 ~ bb2@2 ~@2 ab2@4 db2@5 f2@3 g2@3 ~ ab2@4 db2@3]/8",
  AN: "[~@2 gb2@2 ~ bb2@2 ~@2 ab2@4 db2@5 f2@3 g2@3 ~ ab2@4 db2@5 gb2@2 ~ bb2@2 ~@5 ab2@3 gb2@3 eb2@3 b1@6 gb1@5]/4",
  AO: "~ e2@4 a1@5 db2@3 eb2@3", AP: "~ e2@4 a1@5 d2@2 ~ gb2@2 ~",
})).s("gm_acoustic_bass").gain(0.17)

// drums · kick
const kick = s("bd").struct("<~@31 A ~ B ~@10 C ~@5 D E ~@3 F ~@15 G ~@4>".pickRestart({
  A: "~@5 x ~@10", B: "~@10 x ~@2 x ~@2", C: "~@3 x", D: "~@2 x ~@4 x ~@4 x ~@2 x", E: "~ x ~@6", F: "x ~ x ~@2 x ~@10",
  G: "~@9 x ~@6",
})).gain(0.08)

// drums · rim
const rim = s("rim").struct("<A ~@3 B ~@2 C ~@21 B ~@2 B D E F C F G F@2 H ~@34>".pickRestart({
  A: "x", B: "~@5 x ~@10", C: "~@5 x ~@2", D: "~@5 x ~@5 x ~@4", E: "x ~@12 x ~@2", F: "~@13 x ~@2",
  G: "~@5 x ~@7 x ~@2", H: "~@6 x ~@6 x ~@2",
})).gain(0.08)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@2 D B@19 E F G H I J K L M N O P Q@3 R S T ~@3 U ~ V ~@2 W ~ X Y U ~ Z AA AB ~@3 AC AD@5 AE AF AG AD ~
>`.pickRestart({
  A: "~@2 x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~", B: "x ~ x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~", C: "x ~ x!2 ~@2 x ~ x ~ x!2 ~ x!2 ~",
  D: "x ~ x!2 ~ x!2 ~ x ~@2 x ~ x!2 ~", E: "x ~ x ~@2 x!2 ~ x ~ x!2 ~ x!2 ~", F: "~@2 x!2 ~ x!2 ~ x ~ x ~@2 x!2 ~",
  G: "~@2 x!2 ~@2 x ~ x ~@2 x ~ x!2 ~", H: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@2 x ~", I: "~@2 x!2 ~@2 x ~ x ~@2 x ~@2 x ~",
  J: "x ~ x ~@3 x ~ x ~@2 x ~ x!2 ~", K: "~@2 x!2 ~@4 x ~@5 x ~", L: "~@2 x!2 ~ x!2 ~ x ~ x!2 ~@2 x ~",
  M: "x ~ x!2 ~ x ~@2 x ~ x!2 ~@2 x ~", N: "~@2 x ~@2 x!2 ~@4 x ~ x!2 ~", O: "x ~ x ~@2 x!2 ~ x ~ x ~@3 x ~",
  P: "~@2 x!2 ~@2 x ~ x ~@5 x ~", Q: "~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~", R: "~@2 x!7 ~ x!3 ~ x ~", S: "~ x ~@2 x ~@11",
  T: "x", U: "~@11 x!3 ~@2", V: "~@2 x ~@2 x!4 ~@7", W: "~@2 x!4 ~@10", X: "~@7 x", Y: "~@2 x ~ x ~ x!2 ~@3 x ~@4",
  Z: "~@15 x", AA: "x!3 ~@13", AB: "~@12 x!3 ~", AC: "~@7 x!4 ~ x!2 ~ x", AD: "~ x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~ x",
  AE: "~ x!2 ~ x!2 ~ x ~@7 x", AF: "x!2 ~@13 x", AG: "x!3 ~ x!2 ~ x ~ x!2 ~ x!2 ~ x",
})).gain(0.04)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@5 B@2 ~@8 C ~ D E F G ~@4 H ~@18>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~@11 x ~@4", C: "x", D: "~@7 x ~@2 x ~@5", E: "~@15 x", F: "~@2 x ~@2 x ~@10",
  G: "~@5 x ~@2", H: "~@5 x ~@10",
})).gain(0.08)

// drums · hihat
const hihat = s("hh").struct("<~@27 A ~@4 A ~@2 B ~@3 C B ~@35>".pickRestart({
  A: "~@3 x ~@12", B: "~@3 x ~@4", C: "~@3 x ~ x ~@2",
})).gain(0.05)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 A ~@7 B ~ C D ~ E ~@18>".pickRestart({
  A: "~@3 x", B: "~ x", C: "~@7 x ~ x ~ x ~@4", D: "~@2 x ~@2 x ~@10", E: "~@7 x ~@8",
})).gain(0.08)

// drums · open hat
const open_hat = s("oh").struct("<~@28 x [~@5 x ~@2] ~@8 [x ~@4 x ~@2] ~@37>").gain(0.08)

// drums · high tom
const high_tom = s("ht").struct("<~@52 [~@3 x ~@4] ~@2 x ~@16 [~@7 x ~ x ~@6] ~@3>").gain(0.08)

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

// drums · ride
const ride = s("rd").struct("<~@28 A ~ B C ~ D ~@2 E ~@10 F G H I J C ~ K L M B N ~ O ~@2 P ~@7 Q ~@4>".pickRestart({
  A: "~@11 x ~@4", B: "~@13 x ~@2", C: "x", D: "~@3 x ~@4", E: "x ~@2 x ~@4 x ~@7", F: "~@4 x!4", G: "~ x ~ x ~@12",
  H: "~ x ~@14", I: "~@3 x", J: "~@13 x ~ x", K: "~ x!2 ~@5", L: "x ~ x ~@2 x ~@10", M: "~@11 x ~@2 x ~",
  N: "~@4 x ~@2 x ~@2 x ~@5", O: "~@3 x ~@12", P: "~ x", Q: "~@9 x ~@6",
})).gain(0.08)

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

More by Maurice Ravel