Strudelify

Si o no (Please Don't Go)

Fiorello

KeyB♭ majorTempo121 bpm
0:00/0:00
// Si o no (Please Don't Go) — Fiorello
// 121 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 9 "ELEC ORGAN" Elec Org 2 -> percussive organ
// note: duplicate parts dropped: ch 9 "ELEC ORGAN" percussive organ (copy of ch 2 "BASSO" electric bass finger)
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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 · percussive organ · "ORGANO"
const percussive_organ = note(`<
  ~@16 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 C D E F C D E F A B@3 A B@3 C D E F C D E F A B@3 A B@3 A B@3 A B@3 C D E F C
  D E F C D E F C D E F ~
>`.pickRestart({
  A: "~@2 [f4,bb4,eb5]@3 [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,d5]@2", // Ebsus2 Bb Ebsus2 Bb
  B: "[~@2 [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [ab4,c5]@4 [ab4,c5,eb5]@2 ~ [ab4,c5,d5]@2 ~ [ab4,c5,eb5]@2 ~ [ab4,c5,d5]@2 ~ [g4,bb4]@4 [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [f4,bb4]@2]/3", // Ebsus2 Bb Ebsus2 Bb Ab Dm7b5 Ab Dm7b5 …
  C: "~@2 [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]@2 ~ [f4,bb4,d5]@2", // Ebsus2 Bb Ebsus2 Bb
  D: "~@2 [ab4,bb4,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [ab4,bb4,eb5]@2 ~ [ab4,bb4,d5]@2 ~ [ab4,bb4,d5]@2", // Absus2 Bb7 Absus2 Bb7
  E: "~@2 [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,d5]@2", // Eb Gm Eb Gm
  F: "~@2 [g4,bb4,eb5]@2 ~ [g4,bb4,d5]@2 ~ [g4,bb4,eb5]@3 [g4,bb4,d5]@2 ~ [g4,bb4,d5]@2", // Eb Gm Eb Gm
})).s("gm_percussive_organ").gain(0.17).pan(0.4)

// bass · electric bass finger · "BASSO"
const bass = note(`<
  ~@23 A B C D E B C D E B C D E B C D E B D F G B D F G B C D E B C D E B D F G B D F G B C D E B C D E ~@3 A B C D E B
  D F G B D F G B D F G B D F G ~
>`.pickRestart({
  A: "~@9 eb1 f1 bb1 eb1 f1 g1 bb1", B: "bb1!3 ~ bb1 ~ bb1!2 ~ bb1!2 ~ bb1 ~ bb1!2",
  C: "g1!3 ~ g1 ~ g1!2 ~ g1!2 ~ g1 ~ g1!2", D: "ab1!3 ~ ab1 ~ ab1!2 ~ ab1!2 ~ ab1 ~ ab1!2",
  E: "eb1!3 ~ eb1 ~ eb1!2 ~ eb1 f1 bb1 eb1 f1 g1 bb1", F: "eb1!3 ~ eb1 ~ eb1!2 ~ eb1!2 ~ eb1 ~ eb1!2",
  G: "eb1!3 ~ eb1 ~ eb1!2 ~ eb1!2 ~ eb1 f1 g1 bb1",
})).s("gm_electric_bass_finger").gain(0.29).pan(0.6)

// other · synth brass 1 · "SYNTH BRAS"
const synth_brass_1 = note("<A ~ B@2 C ~ D@2 A ~ B@2 E ~ D@2 ~@81>".pickRestart({
  A: "bb5 ~@2 bb5 ~@2 bb5 ~@2 bb5 ~@2 bb5 ~@3", B: "[~@6 bb6 ~@2 bb6 ~@2 bb6 ~@2 bb6@2 ~ bb6 ~@2 bb6 ~@10]/2",
  C: "~@2 bb5 ~@2 bb5 ~@2 bb5 ~@2 bb5 ~@4", D: "[~@6 bb6 ~@2 bb6 ~@2 bb6 ~@2 bb6@2 ~ bb6 ~@13]/2",
  E: "~@2 bb5 ~@2 bb5 ~@2 bb5 ~@2 bb5 ~@2 bb5 ~",
})).s("gm_synth_brass_1").gain(0.15).pan(0.7)

// other · synth brass 1 · "SYNTH BRAS" · soft notes
const synth_brass_1_soft = note("<A ~@2 B C D ~ E A ~@2 B ~ D ~ F ~@81>".pickRestart({
  A: "~@15 bb5", B: "~@8 bb6 ~@2 bb6@2 ~@3", C: "~@14 bb5 ~", D: "~ bb5 ~@14", E: "~@5 bb6 ~@2 bb6@2 ~@6",
  F: "~@5 bb6 ~@2 bb6 ~@7",
})).s("gm_synth_brass_1").gain(0.05).pan(0.7)

// other · alto sax · "SAX"
const alto_sax = note("<~@64 A B A B A B A B ~@25>".pickRestart({
  A: "~ bb3 ~@2 f3 ~@3 f3 ~@2 f3 ~@2 f3 ~", B: "~@2 bb3 ~ f3!2 ~@2 f3 ~@2 f3 ~ f3!2 ~",
})).s("gm_alto_sax").gain(0.5).pan(0.4)

// chords · pad warm · "TAPPETO"
const pad_warm = note("<A@20 ~@77>".pickRestart({
  A: "[bb2@15 g2@16 [ab2,c4,eb4]@16 [c3,bb3,eb4,f4]@17, [f3,bb3,d4,f4]@31 g3@32 ~]/4", // Ab Cm7 Bb
})).s("gm_pad_warm").gain(0.14)

// other · string ensemble 1 · "ARCHI"
const string_ensemble_1 = note(`<
  ~@28 A@2 B@2 ~@8 C D E@2 C D E@2 ~@8 C D E@2 C D E@2 F@2 G H I A J@2 ~@8 C D E@2 C D E@2 C D E@2 C D E@2 ~
>`.pickRestart({
  A: "f5@3 d5 eb5@2 f5@2", B: "[eb5@6 d5@2 eb5@3 d5@3 bb4@17 ~]/2", C: "[f4,f5] [d4,d5] [f4,f5] [d5,d6]",
  D: "[c5,c6]@2 [eb4,eb5] [c5,c6]", // C Eb C
  E: "[[bb4,bb5]@22 [eb4,eb5] [f4,f5] [g4,g5] ~ [f4,f5] ~ [eb4,eb5] ~ g4@2, ~@30 g5 ~]/2", F: "[f5,f6]/2",
  G: "[eb5,eb6]", H: "[bb4,bb5]", I: "f5@5 d5@3 eb5@4 f5@4", J: "[eb5@6 d5@2 eb5@3 d5@3 bb4@16 ~@2]/2",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.4)

// chords · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@24 A@2 B@2 C@2 D@4 E@4 F G@2 H@4 I@3 A@2 J@4 K@3 L@4 M@5 N@4 O@4 P@4 Q@3 R@3 S R@3 S L@4 R@3 T
>`.pickRestart({
  A: "[~@16 g3@15 ~, [bb3,d4,f4]@31 ~]/2", B: "[[ab3,c4]@14 ~@2 g3@15 ~, eb4@31 ~]/2",
  C: "[~@16 g3@15 ~, [d4,f4]@31 ~]/2", D: "[[ab3,c4]@14 ~@2 g3@15 ~ d4@31 ~, eb4@31 ~@33, ~@16 bb3@47 ~]/4",
  E: "[c4@15 ~ g3@15 ~@17 g3@15 ~, eb4@31 ~ f4@31 ~, ~@16 bb3@47 ~]/4", F: "[ab3,c4]@15 ~",
  G: "[g3@15 ~ [d4,f4]@15 ~, bb3@31 ~]/2", H: "[[ab3,c4]@15 ~@33 [d4,f4]@15 ~, eb4@47 ~@17, ~@16 bb3@47 ~]/4",
  I: "[[ab3,c4]@15 ~ bb3@31 ~, eb4@47 ~]/3", J: "[[ab3,c4]@15 ~ g3@15 ~@17 g3@15 ~, eb4@32 d4@31 ~, ~@16 bb3@47 ~]/4",
  K: "[[ab3,c4]@14 ~@2 g3@15 ~ [d4,f4]@15 ~, eb4@31 ~@17, ~@16 bb3@31 ~]/3", // Ab Dm
  L: "[[ab3,c4]@15 ~ g3@31 ~ [d4,f4]@15 ~, eb4@47 ~@17, ~@16 bb3@47 ~]/4", // Ab Dm
  M: "[[ab3,c4]@14 ~@2 g3@31 ~@17 g3@15 ~, eb4@47 ~ [d4,f4]@30 ~@2, ~@16 bb3@63 ~]/5", // Ab Dm
  N: "[~@16 g3@15 ~@17 g3@15 ~, eb4@31 ~ [d4,f4]@31 ~, ~@16 bb3@47 ~]/4", // Dm
  O: "[[ab3,c4]@15 ~@33 g3@15 ~, eb4@30 ~@2 [d4,f4]@31 ~, ~@16 bb3@47 ~]/4", // Ab Dm
  P: "[[ab3,c4]@15 ~ g3@15 ~@17 g3@15 ~, eb4@31 ~ [d4,f4]@31 ~, ~@16 bb3@47 ~]/4", // Ab Dm
  Q: "[[ab3,c4]@14 ~@2 g3@15 ~ f4@15 ~, eb4@31 d4@15 ~@2, ~@16 bb3@31 ~]/3", // Ab
  R: "[[ab3,c4]@15 ~ [g3,bb3]@32, eb4@47 ~]/3", S: "[bb3,d4,f4]@15 ~", T: "[bb3,d4,f4]",
})).s("gm_pad_halo").gain(0.24).pan(0.4)

// chords · pad halo · "HALO PAD" · soft notes
const pad_halo_soft = note("<~@27 A@3 ~@2 B@2 C ~ D@2 E@2 ~@2 F@2 ~@2 F@2 ~@4 G@2 ~@12 H ~@4 I ~@25>".pickRestart({
  A: "[bb3@47 ~]/3", B: "[~@8 g3@7 ~, f4@15 ~]/2", C: "ab3@15 ~", D: "[d4@31 ~]/2", E: "[eb4@31 ~]/2", F: "[g3@31 ~]/2",
  G: "[f4@31 ~]/2", H: "[ab3,c4]@7 ~", I: "g3@7 ~",
})).s("gm_pad_halo").gain(0.12).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A@2 ~@4 A B A
  B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x ~@6 x!2 ~@5 x ~",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B D E A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@4 x ~@7 x ~@2 x", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!4", D: "~ x ~@2", E: "~@2 x!6 ~@2 x!6",
})).gain(0.57)

// drums · clap
const clap = s("cp").struct("<~@32 [~ x ~ x]!40 ~@4 [~ x ~ x]!20 ~>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@20 [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!76 ~>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@20 [~ x ~ x ~ x ~ x]!75 [~ x ~ x ~ x ~@2] ~>").gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [x!16]!39 [x!15 ~] [x!16]!40 ~>").gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@20 x ~@3 x ~@31 x ~@40>").gain(0.43)

stack(
  percussive_organ, bass, synth_brass_1, synth_brass_1_soft, alto_sax, pad_warm, string_ensemble_1, pad_halo,
  pad_halo_soft, kick, snare, clap, hihat, open_hat, tambourine, crash
)

More by Fiorello