Strudelify

Conversazione

Mina

KeyF♯ minorTempo153 bpm
0:00/0:00
// Conversazione — Mina
// 153 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(153/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 A B A B A B C D E F A B A B A B A B C D E F G H G I G H G I J K A B A B A B A B C D E F A B A B A B A B C D E
  F G H G I G H G I J K A B A B A B A B C D E F C D E F L@2
>`.pickRestart({
  A: "e2@4 ~@2 e2 ~ e2@4 ~@2 e2 ~", B: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~", C: "d2@4 ~@2 a1 ~ a1@4 ~@2 a1 ~",
  D: "d2@4 ~@2 d2 ~ a1@4 ~@2 a1 ~", E: "d2@4 ~@2 d2 ~ a1@4 ~@2 a1@2", F: "d2@4 ~@2 d2 ~ a1@3 ~ a1@2 ~@2",
  G: "f#1@4 ~@2 f#1 ~ f#1@8", H: "b1@4 ~@2 b1 ~ b1@7 ~", I: "b1@4 ~@2 b1 ~ b1@6 ~@2", J: "e2 ~@7",
  K: "~@10 a1 ~ a1@3 ~", L: "d2/2",
})).s("gm_acoustic_bass").gain(0.56)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@16 A@8 B@2 ~@2 C D C D C D C D E ~@13 A@8 B@2 ~@2 C D C D C D C D E ~ A@8 F@6 ~@2 B@2
>`.pickRestart({
  A: "[[b4,d5]@8 ~ g4@7 [b4,d5]@8 [g4,c#5]@8, f#5@63 ~, a5 a5, ~ c#5 ~@2]/4", B: "[f#4,b4,c#5,e5]/2", C: "[a4,e5]",
  D: "[a4,d#5]", E: "[e3,g4,b4,d5,f#5] ~@3", F: "[[f#4,b4,c#5,e5]@95 ~]/6",
})).s("gm_string_ensemble_2").gain(0.29)

// other · flute
const flute = note("<~@28 A B C D A B C E F ~ G@2 H I J K H I L@2 M@2 ~@12 A B C D A B C E F ~@19>".pickRestart({
  A: "~@6 g#4@2 [f#4,f#5]@5 ~ [c#5,c#6] ~, ~@6 g#5 ~@9", B: "~@2 [g#4,g#5] ~@3 f#5@2 [c#4,c#5]@8, ~@6 f#4 ~@9",
  C: "~@6 [g#4,g#5] ~ [f#4,f#5]@5 ~ [c#5,c#6] ~", D: "~ g#5 ~ f#5 [c#4,c#5]@3 ~, ~@2 g#4 ~@3 f#4 ~@9",
  E: "~@2 [g#4,g#5] ~@3 [f#4,f#5] ~ [c#4,c#5]@3 ~ d#5@2 ~@2, ~@12 d#4 ~@3", F: "e4 ~@7, e5 ~@15",
  G: "[[b4,d5]@6 [a4,c#5] ~ g4@8 [c#5,f#5]@16, ~@7 [g#4,c5]@2 ~@23, ~ b4@3]/2", // Bm A F#5 G#
  H: "~@2 [b4,e5] ~@3 [b4,e5] ~ [b4,d5]@4 b4@3 ~", I: "[g4,b4,c#5,f#5]@7 ~",
  J: "~@4 [b4,d5]@6 [a4,c#5] [g#4,c5] [g4,b4]@4", K: "[c#5,f#5]", L: "[[f#4,a4]@24 ~@2 [f#4,a4] ~@5]/2",
  M: "[~ f#4@28 ~@3, a4@29 ~@3]/2",
})).s("gm_flute").gain(0.4).pan(0.7)

// chords · trombone
const trombone = note(`<
  ~@12 A B C D ~@10 E@2 F G H G F G H G ~@10 A B C D ~@10 E@2 F G H G F G H G ~@16 E@2 I@2
>`.pickRestart({
  A: "[a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~ [a3,c#4,f#4] ~ [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~", // F#m
  B: "~@2 [a3,c#4,f#4] ~@5 [a3,c#4,f#4]@3 ~ [a3,c#4,f#4] ~@3", // F#m
  C: "[a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~", // F#m
  D: "~@2 [a3,c#4,f#4] ~@3 [a3,f#4] ~ [a3,c#4,f#4]@2 ~@2 [a3,c#4,f#4] ~@3", E: "[[d3,a3,c#4,f#4]@15 ~]/2",
  F: "[c#4,e4] ~@5 [c#4,e4] ~ [c#4,e4] ~ [c#4,e4] ~@5", G: "[b3,d#4] ~@5 [b3,d#4] ~ [b3,d#4]@3 ~@5",
  H: "[c#4,e4] ~@5 [c#4,e4] ~ [c#4,e4]@2 ~@6", I: "[d3,f#3,c#4]/2",
})).s("gm_trombone").gain(0.56).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C D A B C D A B C D E F G H A B C D A B C D E F G H I J K L I J K L M ~ A B C D A B C D E F G H A B C D A B C D E
  F G H I J K L I J K L M ~ A B C D A B C D E F G H E F G H N@2
>`.pickRestart({
  A: "[e2,g3,b3,d4,f#4] ~@5 [e2,b3,d4,f#4] ~ [d4,f#4] ~ [b3,d4,f#4] ~@3 [a2,g3,b3,c#4,f#4] ~, ~@3 g3@3 ~@2, ~@2 e2 ~, ~@4 b3 ~@3", // Em7 Bm D Bm F#m
  B: "~@6 [a2,g3,b3,c#4] ~@3 [a2,g3,b3,c#4,f#4]@5 ~", // A7 F#m
  C: "[e2,g3,b3,d4] ~@5 [e2,g3,b3,d4,f#4] ~ [e2,g3,b3,d4,f#4] ~ [e2,g3,b3,d4,f#4] ~@3 [a2,g3,b3,c#4,f#4] ~", // Em7 F#m
  D: "~@6 [a2,g3,b3,c#4,f#4] ~@3 [a2,g3,b3,c#4,f#4]@5 ~", E: "[c#4,f#4] ~@3 [c#4,f#4]@2 ~@4 [a3,c#4,f#4] ~@5",
  F: "[a3,c#4,f#4] ~@5 [a3,c#4,f#4]@5 ~ [a3,c#4,f#4] ~@3", G: "[a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@5",
  H: "[a3,c#4,f#4]@4 ~@2 [a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~@3", // F#m
  I: "[f#2,a3,c#4,e4,g#4] ~@5 [f#2,c#4,e4,g#4] ~ [e4,g#4] ~ [c#4,e4,g#4] ~@3 [b2,a3,c#4,d#4,g#4] ~, ~@3 a3@3 ~@2, ~@2 f#2 ~, ~@4 c#4 ~@3", // F#m7 C#m E C#m G#m
  J: "~@6 [b2,a3,c#4,d#4] ~@3 [b2,a3,c#4,d#4,g#4]@5 ~", // B7 G#m
  K: "[f#2,a3,c#4,e4] ~@5 [f#2,a3,c#4,e4,g#4] ~ [f#2,a3,c#4,e4,g#4] ~ [f#2,a3,c#4,e4,g#4] ~@3 [b2,a3,c#4,d#4,g#4] ~", // F#m7 G#m
  L: "~@6 [b2,a3,c#4,d#4,g#4] ~@3 [b2,a3,c#4,d#4,g#4]@5 ~", M: "[e2,g3,b3,e4] ~@7", N: "[d3,a3,c#4,e4,f#4]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@4 A@32 B ~ A@32 B ~ A@16 B ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct(`<
  ~ A ~ B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D ~@2 C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D ~@2 C D C D C D C D C D C D C D C D ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@2 x ~@2 x ~@2", D: "x ~@2 x ~@2 x ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<A B A C D@32 E ~ D@32 E ~ D@16 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x", D: "x!8", E: "x",
})).gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@88 x ~>").gain(0.56)

stack(bass, string_ensemble_2, flute, trombone, acoustic_guitar_nylon, kick, rim, hihat, ride_bell)

More by Mina