Strudelify

Pull marine

Isabelle Adjani

KeyE minorTempo65 bpm
0:00/0:00
// Pull marine — Isabelle Adjani
// 65 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65/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 · epiano1 · "ElPiano1"
const epiano1 = note(`<
  A@3 B C@3 B C@3 B D E F G A@3 B H@3 B I E F G A@3 B A@3 B C@3 B A@3 B J E F G A@3 B C@3 B A@3 B A@3 B K@2
>`.pickRestart({
  A: "[~@5 f4@2 ~@6 f4@2 ~@6 a4@2 ~@6 a4@2 ~@8 f4@2 ~@4 g4@2 e2, [c2,c3]@12 e4@3 g4@4 f#4 g4@3 g4@4 f#4 g4@3 g4@3 ~ e4@6 g3@3 f4@3 ~, e4@2 c4@2 e4@3 e4@4 d4@5 ~@2 e4@5 ~@3 e4@5 ~@3 d4@8 d4@5 ~, ~ g3@6 ~@2 g3@7 [e1,e2]@15 ~ [a#1,a#2]@15 ~, ~@3 d4@4 ~@3 c4@6 ~ b3@8 b3@6 ~@2 g3@3 f4 g4@5 ~ e4@4 ~]/3", // C E A#
  B: "e4 ~@5 d4@2 c#4@8, [a1,a2], ~ d4@5 ~@10, ~ e4@7", // A
  C: "[~@5 f4@2 ~@6 f4@2 ~@6 a4@2 ~@6 a4@2 ~@8 f4@2 ~@4 g4@2 e2, [c2,c3]@12 e4@3 g4@4 f#4 g4@3 g4@4 f#4 g4@3 g4@3 ~ e4@6 g3@3 f4@3 ~, e4@3 d4 e4@3 e4@4 d4@5 ~@2 e4@5 ~@3 e4@5 ~@3 d4@8 d4@5 ~, ~ g3@6 ~@2 g3@7 [e1,e2]@15 ~ [a#1,a#2]@15 ~, ~@2 c4@5 ~@3 c4@6 ~ b3@8 b3@6 ~@2 g3@3 f4 g4@5 ~ e4@4 ~]/3", // C E A#
  D: "~@4 c5 ~@9 b4 a4, a2, c5@3 b4@2 d5@2 c5@3 a4 c5@5, ~ e4@8 e4@7, ~@2 a4@3 ~ a3@10",
  E: "~@3 f#4 g4 a4@2 ~@4 g4@3 f#4 e4, e2, b4@4 ~@3 g4@3 e4@4 ~@2, ~ b3@6 ~@2 b3@7, ~ e4 e3@6",
  F: "~@2 c5@2 ~ d5@2 ~@7 a#4 g#4, f2, g#4@4 f3@7 c5@5, ~ a#4@4 ~@2 c5@3 g#4@3 f3@3, ~@9 f4@7",
  G: "~@3 c5@5 ~@4 g4@4, g2@15 ~, g4!2 ~@2 [g3,b4]@4, ~ d4@15", // G
  H: "[e4 ~@4 f4@2 ~@6 f4@2 ~@6 a4@2 ~@6 a4@2 ~@8 f4@2 ~@4 g4@2 e2, [c2,c3]@12 e4@3 g4@4 f#4 g4@3 g4@4 f#4 g4@3 g4@3 ~ e4@6 g3@3 f4@3 ~, ~ g3@3 e4@3 e4@4 d4@5 ~@2 e4@5 ~@3 e4@5 ~@3 d4@8 d4@5 ~, ~@2 c4@5 ~@2 g3@7 [e1,e2]@15 ~ [a#1,a#2]@15 ~, ~@3 d4@4 ~@3 c4@6 ~ b3@8 b3@6 ~@2 g3@3 f4 g4@5 ~ e4@4 ~]/3", // C E A#
  I: "~@4 c5 ~@9 b4 a4, a2@7 ~@3 a4@4 ~@2, c5@3 b4@2 d5@2 c5@4 c5@5, ~ e4@8 e4@7, ~@2 a4@3 ~ a3@10",
  J: "~@4 c5 ~@9 b4 a4, [a2,c5]@5 ~ a3@10, ~ e4@8 e4@7, ~@2 a4@3 ~@5 a4@4 ~@2, ~@3 b4@2 d5@2 c5@4 c5@5", // Am
  K: "[~@5 f4@2 e4@21 ~@4, [c2,c3]@7 ~, e4@2 c4@2 e4@3 ~@25, ~ g3@6 ~@25, ~@3 d4@4 ~@25]/2", // C
})).s("gm_epiano1").gain(0.32).pan(0.3)

// bass · fretless bass · "Basse"
const bass = note(`<
  ~@8 A B C D E F G H I J K L M F N O E F G P I J K L M F N O I J K L M F N Q R S T U I J K V M F N Q I J K V I J K V W
  ~
>`.pickRestart({
  A: "c3", B: "e3@15 c3", C: "a#2@13 ~ a#2@2", D: "a1@7 e2", E: "a2@14 b2 c3", F: "e2@15 ~", G: "f2@7 f2", H: "g1@3 g2",
  I: "c2@12 ~ c2 ~ c2", J: "e2@7 e2", K: "a#2", L: "a2@7 a2", M: "[c2,g2]@7 c3", N: "a#2@13 ~ a#2 ~",
  O: "a2@13 e2 ~ e2", P: "g1@10 g2@2 ~ g2 a2 g2", Q: "a2@13 ~ e2@2", R: "a2@8 a3@6 a3 ~", S: "a3 g3 f#3 e3@5 e2@8",
  T: "f2@6 c3 ~ f3@7 ~, ~@8 e3 ~@7", U: "g3@6 g3 d3 g2@6 g3 d3", V: "a1@7 e2 a2 e2 a1@4 ~ b1", W: "c2",
})).s("gm_fretless_bass").gain(0.4)

// chords · acoustic guitar steel · "Steel Gtr"
const acoustic_guitar_steel = note(`<
  ~@4 A B C D A B C E F G H I A B C D A B C E F G H I A B C D A B C E A B C D A B C E F G H I A B C D A B C E A B C D A
  B C D J ~
>`.pickRestart({
  A: "g4 ~@2 d5@12 ~, ~ e4@14 ~, ~@2 g4@13 ~", B: "~ g4 ~ g4@13, e4, ~ d5@7", C: "~ g4 ~ g4@13, f4, ~ d5@7",
  D: "~@3 d5@2 a4 ~@7 a4@3, ~ e4@5 e4@3 c#5@7, ~@2 a4@3 ~@2 a4@3 a4@2 ~@4, ~@8 d5@2 ~ e4@5",
  E: "~@2 d5@3 ~ a4 d5 ~ a4@2 ~@2 a4@3, e4@4 ~ e4@5 ~ e4@5, ~ a4@4 ~@3 c#5@8",
  F: "~@3 c5@2 d5@2 c5@2 ~@5 b4@2, a3, c5@2 a4@7 ~ a4@6, ~ e4@6 ~@2 e4@7, ~@11 c5@5",
  G: "~@3 g4@2 a4@2 g4@9, g4 e4@7, ~ b3@15", H: "~@2 c5@3 d5@2 c5@9, g#4, ~ a#4@15",
  I: "~@3 c5@2 ~@2 c5 b4@8, g3@15 ~, ~ d4@4 d4@10 ~, ~@2 g4@3 ~ g4@10", J: "[e4,g4,d5]",
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.9)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@12 A B C D ~@4 E B F G A B C D ~@8 H@2 I@2 J K L M N O P D M Q L M R S T M U V W X Y Z W X AA ~
>`.pickRestart({
  A: "[a3,c4,e4]", B: "[g3,b3,e4]", C: "[g#3,c4,f4]", D: "c4 b3, [d4,g4]", E: "~@10 e2 ~@5, [e3,g3,c4]",
  F: "[a#3,d4,e4]", G: "d4 c#4, [a3,e4]", H: "[g4@15 e5]/2", I: "[d5@3 ~ d4@2 [c#4,a4]@2, ~@3 g4@3 ~@2]/2", J: "e5 c5",
  K: "g5 d5", L: "d5@3 g5", M: "e5", N: "c6@3 b5, [a3,c4,e4]", O: "[g3,b3,e4,e5]", P: "c5@7 d5, [g#3,c4,f4]",
  Q: "g5@3 e5", R: "g5@3 c5", S: "e5@3 b5", T: "g5@3 a5", U: "c6 b5", V: "e5@15 f5", W: "g5@3 d5", X: "d5 c#5",
  Y: "g4 c5", Z: "d5@14 e5 f5", AA: "[c4,e4,g4]",
})).s("gm_string_ensemble_1").gain(0.23)

// other · electric guitar jazz · "Hawaian Gtr"
const electric_guitar_jazz = note("<~@28 A@3 B C D E F ~@20 G H I J K L M N O ~>".pickRestart({
  A: "[c5@9 ~ c5 ~@2 c5@2 b4@2 g4@3 e4@7 ~@4 e5@5 ~ d5 d5@3 a#4@3 c#5 d5 g5 ~]/3", B: "~ a5@3 e5@8 a5@2 d5@2",
  C: "e5@2 a5 ~@2 e5@2 b4@5 c5@2 d5@2, ~@2 d5 ~@5", D: "e5@3 b4@2 ~@2 e4@5 g4 a4 ~ b4, ~@3 g4 ~@4",
  E: "~ a#4@2 ~ f5 d5 ~ a#5@2 ~ g5@3 ~ a5 a#5, ~@9 a5@2 ~@5", F: "~@2 d5@2 e5@7 ~@5, ~ a5@2 ~@13",
  G: "~@2 g5 d5@2 g5@2 d5@3 c6@6", H: "~@2 g5 d5@2 g5@2 b5@8 ~", I: "~@2 g5 a#4@2 g5@3 a#5@8",
  J: "~@4 g5@3 a4@3 d5 a5@4 ~", K: "c6@11 ~ c6@4", L: "b5@6 g5 e5@9", M: "~@7 f5 g5@6 f5 e5",
  N: "d5@8 ~@2 e5 a5@5, ~@4 c#5 ~@3, ~@9 a4@3 ~@4", O: "c6@11 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.32).pan(0)

// other · pad poly · "Polysynth"
const pad_poly = note(`<
  A B C D E B C F G H I F J K L M N O P F Q R S F T U V W G X Y F Z R AA AB G AC AD F AE AF S AG T U V W G AC AD F AE AF
  S AG G AC AD F G AC AD F AH ~
>`.pickRestart({
  A: "g3 e3", B: "b3@2 g3 e3", C: "d3@3 g3", D: "e3 d3 e3@10 ~@4", E: "g3@2 c3 c4", F: "e3 d3 e3@12 ~@2", G: "c3 g3",
  H: "e3@2 d4 b3", I: "a#3 g3", J: "c4@2 d4 e4", K: "b3 g3", L: "f3 g3 g#3 a#3", M: "c4@8 b3@7 ~", N: "c3@7 c4",
  O: "b3@2 g3@5 e4", P: "d4@4 g3@10 a3 g3", Q: "c3@2 d3 g3", R: "e3", S: "g3@14 a#3 a3", T: "c4", U: "b3", V: "g#3",
  W: "g3", X: "g3@2 a3 b3", Y: "e3@6 a3 g3", Z: "c3@4 d3@3 g3", AA: "g3@3 a3", AB: "a3@15 ~", AC: "e3@3 b3",
  AD: "e3@6 a#3 a3", AE: "g2@2 c3 g3", AF: "e3@15 f3", AG: "e3 d3 e3@13 ~", AH: "c3",
})).s("gm_pad_poly").gain(0.35).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@16 [x!2]!48 x ~>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~ x]!48 ~@2>").gain(0.64)

// drums · shaker
const shaker = s("sh").struct("<~@4 [~@5 x!3 ~ x!3 ~ x!3]!60 ~@2>").gain(0.32)

stack(epiano1, bass, acoustic_guitar_steel, string_ensemble_1, electric_guitar_jazz, pad_poly, kick, snare, shaker)