Strudelify

Osez Josephine

alain Bashung

KeyD majorTempo120 bpm
0:00/0:00
// Osez Josephine — Alain Bashung
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 24, guitar program 27.
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.

// other · pan flute
const pan_flute = note(`<
  ~@4 A B ~@2 C D ~@3 E ~ F G H I J ~ K L M N@2 ~@3 O P@2 Q R S@2 ~ T U V W C X Y ~ Z@2 AA AB AC@2 AD AE AF ~ AG AH ~ T
  U V W C X AI@2 ~ AJ@2 ~ AK@3 ~@2 AL AM@3 AN AO AP@2 ~@6
>`.pickRestart({
  A: "~@13 a5@2 ~", B: "a5 ~ a5@2 a5 a5@2 a5 ~@8", C: "~@7 f#5", D: "f#5@2 f#5@2 f#5 f#5@2 f#5!2 ~@7",
  E: "a5@2 f#5 ~ f#5 ~ f#5 ~ f#5!2 ~ f#5 ~@4", F: "g5@2 ~ g5@3 g5@3 ~@7", G: "~@13 d5@3", H: "d5@2 d5@3 d5@4 ~@7",
  I: "~@10 d5@3 d5@2 ~", J: "d5@2 d5@3 ~@11", K: "a5@2 a5 ~ a5 a5@2 a5@2 ~@7", L: "~@7 a5",
  M: "f5@2 f5 ~ f5 ~ f5!2 f5@2 ~@6", N: "[~@6 d5@2 d5@2 d5 ~ d5!2 ~ d5@4 ~@13]/2", O: "~@2 c#6 ~ c#6 a5@2 c#6@3 ~@6",
  P: "[~@6 a5 ~ a5 a5@2 a5 ~ a5 a5@5 ~@13]/2", Q: "b5 ~ g5 ~ g5 ~ g5@4 ~@6", R: "~@8 c#6@2 ~ b5@2 a5@2 ~",
  S: "[c#6@4 ~@2 g5 ~ g5!2 ~ g5 ~ g5 g5@6 ~@12]/2", T: "a5@3 ~ a5 ~ a5@3 ~ a5@2 g5@2 e5@2", U: "f#5 ~@3",
  V: "f#5@2 ~ f#5@3 f#5@4 f#5@2 ~ d5@2 ~, ~@6 e5 ~", W: "d5 ~@3", X: "f#5 ~ f#5 ~ f#5 ~ f#5 e5 d5@2 ~@6",
  Y: "~@6 f#5@3 ~ f#5 ~ e5 [c5,d5] d5@2", Z: "[~@14 a5@4 a5@5 ~@7 f#5 ~]/2", AA: "f#5!2 ~@12 a5@2",
  AB: "~@2 a5@11 f#5 ~@2", AC: "[f#5 ~@10 a5 e5@2 d5 g5@4 ~@13]/2", AD: "~@10 a5 ~ a5 ~ a5@2",
  AE: "d6@2 a5 ~ a5 ~ a5 ~ a5 [g5,a5] ~ a5@3 a5 ~", AF: "a5 ~ a5@2 a5 ~ a5 ~ a5 a5@2 f#5@4 ~",
  AG: "~@10 g5@2 ~ d5 c5@2, ~@10 f5 ~@5", AH: "~ d5@5 ~@10", AI: "[~@10 d5 ~ d5!2 ~ d5@5 ~@12]/2",
  AJ: "[a5@3 a5@5 ~@7 d6@4 a5@6 ~@7]/2", AK: "[~@14 a5@4 a5@5 ~@7 a5@4 g#5@5 ~@9]/3",
  AL: "a5@2 ~ a5@2 ~ a5@3 ~ a5@2 g5@2 e5@2", AM: "[f#5@6 ~@8 f#5@4 f#5@3 f#5@3 ~ f#5@2 e5@2 d5@2 d5@7 ~@10]/3",
  AN: "~@13 g5@2 ~", AO: "g5@3 f#5@2 f#5 ~ e5 ~ e5@2 d5@5", AP: "[~@14 f#5@6 f#5 ~ e5@2 e5@2 d5@6]/2",
})).s("gm_pan_flute").gain(0.8)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@14 A@3 ~ B@2 ~@11 C ~@3 C ~@39 D@2 ~@12>".pickRestart({
  A: "[~@5 [g3,b3]@11, ~@7 g2@17]/3", B: "[~@15 b3@6 ~@11]/2", C: "~@6 a4 ~@9",
  D: "[~@3 [a4,c#5]@6 ~@7, a3@9 ~@7, ~ e4@8 ~@7, ~@2 g4@7 ~@7]/2", // A
})).s("gm_acoustic_guitar_nylon").gain(0.24)

// bass · electric bass finger
const bass = note(`<
  ~ A B A B A B A B A B A B A C D E A F D E A F D E A F D E G H D I G H D I J K L M N A C D E A B A C D E A B A C D E J
  K L M N K L M N K L M N K L M N O@3 ~@11
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 d2@3 ~ c2@2 d2@2 ~@2", B: "d2 ~@2 d2 ~@2 d2@2 ~@2 a1@2 c2@2 c#2 ~",
  C: "d2 ~@2 d2 ~@2 d2@2 ~@2 a1@2 c2@2 d2 ~", D: "g1 ~@2 g1 ~@2 g1@3 ~ f1@2 g1@2 ~@2",
  E: "g1 ~@2 g1 ~@2 g1@2 ~@2 a1@2 c2@2 c#2 ~", F: "d2 ~@2 d2 ~@2 d2@2 ~@2 d1@2 f1@2 f#1 ~",
  G: "a1 ~@2 a1 ~@2 a1@3 ~ g1@2 a1@2 ~@2", H: "a1 ~@2 a1 ~@2 a1@2 ~@2 a1@2 a1@2 g#1 ~",
  I: "g1 ~@2 g1 ~@2 g1@2 ~@2 g1@2 g1@2 g#1 ~", J: "a1@3 a1!2 ~ a1@3 a1!2 ~ c2@2 c#2@2",
  K: "d2@3 d2!2 ~ d2@2 ~ d2 c2@2 d2@3 ~", L: "d2@2 ~ d2!2 ~ d2@2 ~ d2 a1@2 c2 ~ d2@2",
  M: "g1@3 g1!2 ~ g1@2 ~ g1 f1@2 g1@2 ~@2", N: "g1@2 ~ g1!2 ~ g1@2 ~ a1 a1@2 c2@2 c#2@2", O: "[a1@11 ~]/3",
})).s("gm_electric_bass_finger").gain(0.8)

// other · overdriven guitar
const overdriven_guitar = note(`<
  A@4 ~@31 B@2 ~@13 C@2 D E F@2 C@2 G F@2 C@2 H@2 C@2 I@2 C@2 I@2 C@2 J@3 ~@11
>`.pickRestart({
  A: "[~@5 [d3,a3,d4,a4,d5]@16 ~ [d3,a3,d4,a4,d5]@10]/4", B: "[~@5 [d4,a4,d5]@13 ~@14]/2",
  C: "g2!2 g3 g2!2 f3 ~@2 g3 ~ f3 ~ g3 f3 d3 c3", D: "c#3@3 ~ d3@3 ~ d3@4 d3@4", E: "c#3 d3@2 ~ d3@4 d3@4 d3@4",
  F: "d3!10 ~@2 d3 ~@2 d3", G: "a2!10 ~@2 a2 ~@2 a2", H: "a3!10 ~@2 a3 ~@2 a3", I: "~ [d3,a3,d4]@6 ~",
  J: "[a2,e3,a3]/3", // A5
})).s("gm_overdriven_guitar").gain(0.8)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@54
  [~@10 d3!2 ~ d3!2 ~]!2
  ~@2
  [~@10 a2!2 ~ a2!2 ~]
  [~@10 d3!2 ~ d3!2 ~]!2
  ~@2
  [~@10 a3!2 ~ a3!2 ~]!2
  ~@24
>`).s("gm_overdriven_guitar").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@15 A@2 B@2 A@2 C@8 D@4 E@4 F G@8 H@6 I@6 F J@8 K@8 L M@8 N@4 ~>".pickRestart({
  A: "[g2,g3]/2", B: "[[d3,d4]@7 [f#2,f#3]]/2", C: "[[d3,f#4,a4] [g2,g4,b4] [d3,f#4,a4] [g2,g4,b4], d4@63 ~]/8",
  D: "[[a2,a4] [g2,d4,g4,b4], [e4,c#5]@31 ~@33]/4", E: "[[a2,a4,c#5] [g2,d4,g4,b4], e4@31 ~@33]/4", F: "[a2,c#4,e4,a4]",
  G: "[[d3,a3,f#4]@16 [g2,b3,g4]@16 [d3,f#4]@16 g4@11 a4@3 g4@2, d4, ~@64 a3@31 ~ [g2,b3]@32]/8", // D G D G
  H: "[f#4@27 g4@3 f#4@2 [g2,g4]@16, d4, [d3,a3]@32 b3@15 ~]/6", // G D5
  I: "[f#4@27 g4@3 f#4@2 [g2,b3,g4]@16, d3@65 ~@31, a3@21 ~@11]/6", // G
  J: "[[d3,a3,f#4]@16 [g2,b3,g4]@16 [d3,f#4]@16 g4@11 a4@3 g4@2, d4@127 ~, ~@64 a3@31 ~ [g2,b3]@32]/8", // D G D G
  K: "[~@2 e4 ~ [g2,g4,b4]@4 ~@2 e4 ~ [g2,g4,b4]@4, [d3,f#4,a4]@32 ~@32 [d3,f#4,a4]@33 ~@31, d4@23 ~ d4@56 ~@8 d4@40]/8", // G D
  L: "a4 g4, [a2,c#4,e4]", M: "[f#4@3 e4 [g2,g3,b3]@4 f#4@3 e4 [g2,g3,b3]@4, d4, [d3,a3]@33 ~@31 [d3,a3]@33 ~@31]/8",
  N: "[d3,f#3,a3]/4", // D
})).s("gm_string_ensemble_1").gain(0.04)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@4 A ~@32 B C D E F C D E F G ~@11 B C D E F C H E F C H E F C H E F ~@14
>`.pickRestart({
  A: "[a3,a4] ~@2 [a3,a4] ~@2 [a3,a4] ~@3 [a3,a4] ~@5", B: "[c#3,a3,e4] ~@5 [c#3,a3,e4] ~@5 [c#3,a3,e4] ~@3",
  C: "[d3,a3,f#4] ~@5 [d3,a3,f#4] ~@5 [d3,a3,f#4] ~@3", D: "[f#3,d4,a4] ~@5 [f#3,d4,a4] ~@5 [f#3,d4,a4] ~@3",
  E: "[g3,d4,b4] ~@5 [g3,d4,b4] ~@5 [g3,d4,b4] ~@3", F: "[d3,b3,g4] ~@5 [d3,b3,g4] ~@5 [d3,b3,g4] ~@3",
  G: "[d3,a3,f#4] ~@15", H: "[f#3,e4,a4] ~@5 [f#3,d4,a4] ~@5 [f#3,d4,a4] ~@3",
})).s("gm_string_ensemble_1").gain(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@14 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 B@2 C@2 B@2 C A@2 B@2 A@2 B@2 A@4 B@2 A@4 B@2 C A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  ~@14
>`.pickRestart({
  A: "[d3,f#3,a3,d4] [a2,d4] [d3,f#3,a3,d4] [d3,f#3] ~ f#3 [d3,f#3,a3,d4] [d3,f#3]!2 [d3,f#3,a3] [d3,f#3,a3,d4] d4 f#3 [d3,d4] [d3,f#3,a3,d4] [d3,d4], ~@2 [a2,d3,f#3,a3] ~@5", // D D5 D
  B: "[g3,b3,d4,g4] [d3,d4,g4] [g3,b3,d4,g4] [g3,b3,d4] ~ [b3,d4] [g3,b3,d4,g4] [g3,b3,d4]!3 [g3,b3,d4,g4] [d4,g4] [b3,d4] [g3,d4,g4] [g3,b3,d4,g4] [g3,d4,g4], ~@2 [d3,g3,b3,d4] ~@5", // G G5 G Bm G G5 Bm G5 …
  C: "[a3,c#4,e4,a4] [e3,a4] [a3,c#4,e4,a4] [a3,c#4] ~ c#4 [a3,c#4,e4,a4] [a3,c#4]!2 [a3,c#4,e4] [a3,c#4,e4,a4] ~ c#4 [a3,a4] [a3,c#4,e4,a4] [a3,a4], ~@2 [e3,a3,c#4,e4] ~@5", // A A5 A
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A@14 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 B@2 C@2 B@2 C A@2 B@2 A@2 B@2 A@4 B@2 A@4 B@2 C A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  ~@14
>`.pickRestart({
  A: "a2 a3 ~ [a2,a3,d4] ~ [a3,d4] ~ [a2,a3,d4] [a2,a3] d4 ~ [d3,f#3,a3] [a2,d3,a3] [f#3,a3] ~ [f#3,a3]", // D5 A D D5 F#m
  B: "d3 ~@2 [d3,g4] ~ g4 ~ [d3,g4] d3 g4 ~ [g3,b3] [d3,g3] b3 ~ b3", // G5 G G5
  C: "e3 e4 ~ [e3,e4,a4] ~ [e4,a4] ~ [e3,e4,a4] [e3,e4] a4 ~ [a3,c#4,e4,a4] [e3,a3,e4] [c#4,e4] ~ [c#4,e4]", // A5 E A A5 C#m
})).s("gm_acoustic_guitar_steel").gain(0.16)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!74 ~@14>").gain(0.8)

// drums · rim
const rim = s("rim").struct("<~ [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]!74 ~@14>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~ [~ x ~ x ~ x ~ x]!74 ~@14>").gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!4 ~ x!11]!73 [x!4 ~ x!10 ~] ~@14>").gain(0.64)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~ [~ x ~@2]!74 ~@14>").gain(0.4)

stack(
  pan_flute, acoustic_guitar_nylon, bass, overdriven_guitar, overdriven_guitar_soft, string_ensemble_1,
  string_ensemble_1_2, acoustic_guitar_steel, acoustic_guitar_steel_2, kick, rim, hihat, tambourine, tambourine_soft
)

More by alain Bashung