Strudelify

Petite Fleur

Vaughn

KeyG♯ minorTempo103 bpm
0:00/0:00
// Petite Fleur — Vaughn
// 103 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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.

// bass · acoustic bass
const bass = note(`<
  ~@4 A B C D E F G H A@2 I@2 J@2 I@2 K@2 D@2 L@2 M N O C P E F D Q R S T U V@2 W X N O C P E F D Y A B C D E F G Z AA
  AB T AC AD V AE AF B@2 C D E AG ~@3
>`.pickRestart({
  A: "d#2@11 ~ a#2@11 ~", B: "d#2@11 ~ a#1@11 ~", C: "g#2@11 ~ d#2@11 ~", D: "g#2@11 ~ g#2@11 ~",
  E: "a#2@11 ~ a#2@11 ~", F: "d#2@11 ~ d#2@11 ~", G: "g#2@11 ~ g#2@6 d#2@6", H: "g#2 ~@7", I: "b2@11 ~ b2@11 ~",
  J: "f#2@11 ~ f#2@11 ~", K: "d#3@11 ~ d#3@11 ~", L: "a#1@11 ~ a#1@11 ~", M: "d#2 ~@7",
  N: "d#2@9 ~ g2@2 a#2@5 ~ g2@5 ~", O: "d#2@11 ~ a#2@5 ~ g2@5 ~", P: "g#2@11 ~ g#2@5 ~ g#2@5 ~",
  Q: "g#2@11 ~ g#2@5 ~ d#2@5 ~", R: "g#2@5 ~ g#2@5 ~ d#2@5 ~ c2@5 ~", S: "g#1@5 ~ c2@5 ~ d#2@5 ~ c2@5 ~",
  T: "c#2@5 ~ c#2@5 ~ g#2@5 ~ g#2@5 ~", U: "c#2@5 ~ g#2@5 ~ e2@5 ~ c#2@5 ~", V: "f#2@5 ~ f#2@5 ~ f#2@5 ~ f#2@5 ~",
  W: "b2@5 ~ b2@5 ~ b2@5 ~ b2@3 ~ b2@2", X: "a#2 ~@11", Y: "g#2 ~@3", Z: "g#2@11 ~ g#2@5 ~ g#2@3 ~ d#2@2",
  AA: "g#2@5 ~ d#2@5 ~ c2@5 ~ g#1@5 ~", AB: "c2@5 ~ d#2@5 ~ g#2@5 ~ d#2@5 ~", AC: "c#2@5 ~ g#2@5 ~ e2@5 ~ g#2@5 ~",
  AD: "f#2@5 ~ f#2@5 ~ c#2@5 ~ c#2@5 ~", AE: "b1@5 ~ b1@5 ~ b1@5 ~ b1@5 ~", AF: "d#2 ~@11", AG: "d#2@11 ~ d#2@12",
})).s("gm_acoustic_bass").gain(0.44)

// chords · banjo
const banjo = note(`<
  A@3 B C@2 D E F G H I C@2 J K L@2 M N C@2 D E O P Q C@2 D E F G R S T@2 U@2 V@2 W X Y@2 Z@2 AA AB AC AD AE@2 AF AG AH
  AI AJ@2 T@2 U@2 V@2 W X Y@2 Z@2 AA AK@2 AL@2
>`.pickRestart({
  A: "[~@24 [g#3,b3,d#4,g#4]@23 ~ [g#3,a#3,d4,a#4]@24, ~@23 d#3@24 d3@24 ~]/3", B: "[d#3,a#3,d#4,g4,a#4] ~@23",
  C: "[d#3,g3,d#4,a#4]@5 ~ [d#3,g3,d#4,a#4] ~@5 [d#3,g3,d#4,a#4]@5 ~ [d#3,g3,d#4,a#4] ~@5", // D#
  D: "[d#3,g#3,d#4,b4]@5 ~ [d#3,g#3,d#4,b4] ~@5 [d#3,g#3,d#4,b4]@4 ~@2 [d#3,g#3,d#4,b4] ~@5", // G#m
  E: "[d#3,g#3,d#4,b4]@4 ~@2 [d#3,g#3,d#4,b4] ~@5 [d#3,g#3,d#4,b4]@3 ~@3 [d#3,g#3,d#4,b4] ~@5", // G#m
  F: "[g#3,d4,f4,a#4]@5 ~ [g#3,d4,f4,a#4] ~@5 [g#3,d4,f4,a#4]@5 ~ [g#3,d4,f4,a#4] ~@5", // A#7
  G: "[d#3,g3,c#4,a#4]@4 ~@2 [d#3,g3,c#4,a#4] ~@5 [d#3,g3,c#4,a#4]@4 ~@2 [d#3,g3,c#4,a#4] ~@5", // D#7
  H: "[d#3,b3,d#4,g#4]@5 ~ [d#3,b3,d#4,g#4] ~@5 [d#3,b3,d#4,g#4]@4 ~@2 [d#3,b3,d#4,g#4] ~@5", // G#m
  I: "[d#3,b3,d#4,g#4] ~@23", J: "[f#3,b3,d#4,b4]@5 ~ [f#3,b3,d#4,b4] ~@5 [f#3,b3,d#4,b4]@4 ~@2 [f#3,b3,d#4,b4] ~@5",
  K: "[f#3,b3,d#4,b4]@4 ~@2 [f#3,b3,d#4,b4] ~@5 [f#3,b3,d#4,b4]@3 ~@3 [f#3,b3,d#4,b4] ~@5", // B
  L: "[f#3,e4,a#4,c#5]@5 ~ [f#3,e4,a#4,c#5] ~@5 [f#3,e4,a#4,c#5]@5 ~ [f#3,e4,a#4,c#5] ~@5", // F#7
  M: "[f#3,b3,f#4,d#5]@5 ~ [f#3,b3,f#4,d#5] ~@5 [f#3,b3,f#4,d#5]@4 ~@2 [f#3,b3,f#4,d#5] ~@5", // B
  N: "[f#3,b3,f#4,d#5]@4 ~@2 [f#3,b3,f#4,d#5] ~@5 [f#3,b3,f#4,d#5]@3 ~@3 [f#3,b3,f#4,d#5] ~@5", // B
  O: "[f3,a#3,d4,g#4]@4 ~@2 [f3,a#3,d4,g#4] ~@5 [f3,a#3,d4,g#4]@4 ~@2 [f3,a#3,d4,g#4] ~@5", // A#7
  P: "[f3,a#3,d4,g#4]@5 ~ [f3,a#3,d4,g#4] ~@5 [f3,a#3,d4,g#4]@4 ~@2 [f3,a#3,d4,g#4] ~@5", Q: "[d#3,c#4,g4,a#4] ~@23",
  R: "[d#3,b3,d#4,g#4]@5 ~ [d#3,b3,d#4,g#4] ~@5 [g#3,c#4,e4,g#4]@4 ~@2 [g#3,c#4,e4,g#4] ~@5", // G#m C#m
  S: "[d#3,g#3,b3,g#4]@5 ~ [d#3,g#3,b3,g#4] ~@5 [d#3,g#3,b3,g#4] ~@5 [d#3,g#3,b3,g#4] ~@5", // G#m
  T: "[g#3,c4,d#4,g#4] ~@5 [g#3,c4,d#4,g#4] ~@5 [g#3,c4,d#4,g#4] ~@5 [g#3,c4,d#4,g#4] ~@5", // G#
  U: "[g#3,c#4,e4,g#4] ~@5 [g#3,c#4,e4,g#4] ~@5 [g#3,c#4,e4,g#4] ~@5 [g#3,c#4,e4,g#4] ~@5", // C#m
  V: "[f#3,c#4,e4,a#4] ~@5 [f#3,c#4,e4,a#4] ~@5 [f#3,c#4,e4,a#4] ~@5 [f#3,c#4,e4,a#4] ~@5", // F#7
  W: "[f#3,b3,d#4,b4] ~@5 [f#3,b3,d#4,b4] ~@5 [f#3,b3,d#4,b4] ~@5 [f#3,b3,d#4,b4] ~@5", X: "[d#3,g3,c#4,a#4] ~@23",
  Y: "[d#3,g3,d#4,a#4]@4 [d#3,g3,d#4,a#4] ~@5 [d#3,g3,d#4,a#4] ~ [d#3,g3,d#4,a#4] ~@5 [d#3,g3,d#4,a#4] ~@5", // D#
  Z: "[d#3,g#3,d#4,b4]@4 [d#3,g#3,d#4,b4] ~@5 [d#3,g#3,d#4,b4] ~ [d#3,g#3,d#4,b4] ~@5 [d#3,g#3,d#4,b4] ~@5", // G#m
  AA: "[g#3,d4,f4,a#4]@4 [g#3,d4,f4,a#4] ~@5 [g#3,d4,f4,a#4] ~ [g#3,d4,f4,a#4] ~@5 [g#3,d4,f4,a#4] ~@5", // A#7
  AB: "[d#3,g3,c#4,a#4]@4 [d#3,g3,c#4,a#4] ~@5 [d#3,g3,c#4,a#4] ~ [d#3,g3,c#4,a#4] ~@5 [d#3,g3,c#4,a#4] ~@5", // D#7
  AC: "[g#3,b3,d#4,g#4]@5 ~ [g#3,b3,d#4,g#4] ~@5 [g#3,c#4,e4,g#4]@4 ~@2 [g#3,c#4,e4,g#4] ~@5", // G#m C#m
  AD: "[g#3,b3,d#4,g#4] ~@11 e4@3 ~ e4@5 ~ e4@2", AE: "[~ d#4@8 ~ d#4@17 ~ g4@4 g#4@4 a#4@4 e5@4 ~ d#5@3]/2",
  AF: "~ b4@9 b4@14", AG: "~ g#4 a#4 b4 a#4 g#4", AH: "a#4@8 ~ a#4@3 a#4@12",
  AI: "~@4 c#5@5 ~ c#5@2 ~ b4@2 ~ b4@2 ~ a#4@3 a#4@2", AJ: "[~ g#4@10 ~ g#4@24 ~@12]/2",
  AK: "[[d#3,g3,c#4,a#4]@4 [d#3,g3,c#4,a#4] ~@5 [d#3,g3,c#4,a#4] ~ [d#3,g3,c#4,a#4] ~@13 a#4@12 ~@10, ~@18 a#2@7 g4@13 ~@10, ~@21 d#3@17 ~@10, ~@22 a#3@15 ~@11, ~@12 d#4@7 ~@5]/2", // D#7
  AL: "[~@17 d#3@4 ~@3, ~@9 g#2@7 g#3@7 g#4@8 ~@17, ~@13 d#3@8 d#4@5 d#4@8 ~@14, ~@9 b3@4 ~@2 b3@4 ~@5]/2",
})).s("gm_banjo").gain(0.27)

// chords · banjo · soft notes
const banjo_soft = note("<~@35 A B C ~ D E F ~@17 A B C ~ D E F ~@10>".pickRestart({
  A: "~@22 [g#3,c4,d#4,g#4] ~", B: "~@16 [g#3,c4,d#4,g#4] ~@5 [g#3,c4,d#4,g#4] ~", C: "~@22 [g#3,c#4,e4,g#4] ~",
  D: "~@10 [f#3,c#4,e4,a#4] ~@11 [f#3,c#4,e4,a#4] ~", E: "~@4 [f#3,c#4,e4,a#4] ~@17 [f#3,c#4,e4,a#4] ~",
  F: "~@10 [f#3,b3,d#4,b4] ~@11 [f#3,b3,d#4,b4] ~", // B
})).s("gm_banjo").gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C D A B C E A B C D A B C D A B C D B C E A B C D A B C F G H G@3 H G E A B C D A B C E A B C D A B C F G H
  G@3 H G E A B C D A B ~@3
>`.pickRestart({
  A: "x ~ x!2 ~@2 x ~@2 x ~@2", B: "x ~ x!2 ~@2 x ~ x!2 ~@2", C: "x ~ x!2 ~@2 x ~@2 x ~ x",
  D: "x ~@2 x ~@2 x ~ x!2 ~@2", E: "x", F: "x!3 ~", G: "x ~@3 x ~ x ~ x!3 ~ x ~@5 x ~ x ~ x ~",
  H: "x ~@3 x ~ x ~ x!3 ~ x ~@3 x ~ x ~ x ~ x ~",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A@7 ~ A@14 ~ A@7 B ~@8 A@7 ~@17 A@6 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.12)

// drums · clap
const clap = s("cp").struct("<~@34 [~@8 x!2 ~ x] ~@23 [~@8 x!2 ~ x] ~@17>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@34 [~@11 x] ~@23 [~@11 x] ~@17>").gain(0.42)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 A@7 B A@14 B A@7 C A@7 B A@7 B A@7 C A@7 B A@6 ~@3>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~ x!3",
})).gain(0.48)

stack(bass, banjo, banjo_soft, snare, snare_soft, clap, low_tom, pedal_hat)

More by Vaughn