Strudelify

Una Notte Speciale

Alice

KeyC majorTempo130 bpm
0:00/0:00
// Una Notte Speciale — Alice
// 130 bpm, 4/4, key C major. 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: duplicate parts dropped: ch 13 "SYNBRASS 2" synth brass 2 (copy of ch 9 "SAW WAVE" lead 2 sawtooth)
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@7 A B C D E F G H I J K L M N O P I J K Q M R S T I J K U M V O W I J K X Y Z AA P I J K L AB AC AD AE AF@2 AG@2
  AH@2 A B C D E F G H I J K L M N O P I J K Q M R S T I J K U M V O W I J K X Y Z AA P I J K L AB AC AD AE I J K X Y Z
  AA P I J K L AB AC AD AE I J K X Y Z AI
>`.pickRestart({
  A: "c2@4 ~@4 g1@4 ~@2 c2 ~", B: "c2@3 ~@3 e2@3 ~ c2@2 ~@2 g1 ~", C: "d2@6 ~@2 a1@4 ~@2 d2 ~",
  D: "d2@5 ~ f2@3 ~ d2@3 ~ a1@2", E: "f2@4 ~@2 c2 ~ c2@4 ~@2 f2 ~", F: "f2@4 ~@2 c2 ~ c2@4 f2@3 ~",
  G: "c2@4 ~@2 g1 ~ g1@4 ~@2 g1 ~", H: "g2@2 c3@2 ~@2 e3@3 ~ c3@3 ~@3", I: "c2@3 ~ g1@3 ~",
  J: "c2@5 ~ e1@2 ~@2 f1@3 ~ g1@2", K: "d2@3 ~ a1@3 ~", L: "d2@5 ~ f2@2 a2@2 c3@3 ~@3", M: "f2@6 ~@2 c2@4 ~@2 c2 ~",
  N: "f2@5 ~ c2 ~ e2@2 f2@4 g1 ~", O: "c2@7 ~ g1@5 ~@3", P: "e3@2 d3@3 ~ c3@2 ~@2 a2@6", Q: "d2@5 ~ a1@2 d2@2 f2@5 ~",
  R: "f2@5 ~ a1@2 ~@2 a#1@3 ~ b1@2", S: "c2@7 ~ g1@7 ~", T: "e3 c3@3 e3 c3@3", U: "d2@3 f2@2 d2@2 a1",
  V: "e2@2 f2@4 c2 ~ e2@2 f2@4 g1 ~", W: "e3 c3@2 ~ a2 c3@3", X: "d2@5 ~ f2@2 a2@2 c3@5 ~", Y: "f3@3 d3 c3@3 a2",
  Z: "g2@5 ~ a2@2 g2@6 g1@2", AA: "c2@7 ~ g1@6 ~@2", AB: "f3 d3", AC: "g3@2 d3@4 ~@2 g3 ~ d3@6", AD: "c2@6 ~@2 g1@7 ~",
  AE: "c2@3 ~ a2 g2@3", AF: "c2/2", AG: "[d2@15 d3@17]/2", AH: "[f3@3 a3]/2", AI: "c2@7 ~@9",
})).s("gm_fretless_bass").gain(0.39)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@15 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@2 ~@16 D@2 E@2 F@2 ~@8 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@2 ~@16 D@2 E@2
  G H D@4 E@2 G H D@4 E@2 G H I
>`.pickRestart({
  A: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,d4]@3 ~ [g3,c4,d4]@3 ~ [g3,c4,d4] ~", // C Gsus4
  B: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,e4]@3 ~ [a3,d4,e4]@3 ~ [a3,d4,e4] ~", // Dm Asus4
  C: "[c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,g4]@3 ~ [c4,f4,g4]@3 ~ [c4,f4,g4] ~", D: "[g3,c4,e4]/2",
  E: "[a3,d4,f4]/2", F: "[a3,c4,f4]/2", G: "[a3,c4,f4]", H: "[b3,d4,g4]", I: "[g3,c4,e4]@3 ~",
})).s("gm_synth_strings_1").gain(0.22).pan(0.4)

// chords · orchestral harp · "HARP"
const orchestral_harp = note("<~@31 A@2 B@2 C D A@2 ~@46 A@2 B@2 C D A@2 ~@39>".pickRestart({
  A: "[c5,e5] ~@3 [c5,e5] ~ [c5,d5] ~@3 [c5,d5] ~@3 [c5,d5] ~", // C Csus2
  B: "[d5,f5] ~@3 [d5,f5] ~ [d5,e5] ~@3 [d5,e5] ~@3 [d5,e5] ~", // Dm Dsus2
  C: "[f5,a5] ~@3 [f5,a5] ~ [f5,g5] ~@3 [f5,g5] ~@3 [f5,g5] ~", // F Fsus2
  D: "[f5,a5] ~ f5 ~ [f5,a5] ~ [f5,g5] ~@3 [f5,g5] ~@3 [f5,g5] ~", // F Fsus2
})).s("gm_orchestral_harp").gain(0.18).pan(0.9)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A B@2 C@2 D@2 E@2 F@2 D@2 E G ~@24 E@2 F@2 D H E@4 F@2 D H E@2 ~@6 E@2 F@2 D@2 E G ~@24 E@2 F@2 D H E@4 F@2 D H E@4
  F@2 D H E@4 F@2 D H E@4 F@2 D H I
>`.pickRestart({
  A: "~@6 c3 e3", B: "[g3@2 c4@2 e4@2 g3@2 ~ c4@2 e4@2 c3@2 e3@2 g3@2 c4@2 ~ e4@2 g3@2 c4@2 e4@2 d3@2]/2",
  C: "[f3@2 ~ a3@2 d4@2 f4@2 a3@2 d4@2 f4@2 d3@2 f3@2 ~ a3@2 d4@2 f4@2 a3@2 d4@2 f4@2]/2", D: "f3 a3 c4 f4 a4 c4 f4 a4",
  E: "c3 e3 g3 c4 e4 g3 c4 e4", F: "d3 f3 a3 d4 f4 a3 d4 f4", G: "c3 e3 g3 c4 e4 d4 c4 ~", H: "d3 g3 b3 d4 g4 b3 d4 g4",
  I: "c3 e3 g3 c4 e4 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.18).pan(0.1)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<A B C D E F@2 G@2 H@2 F@2 G I ~@46 G@2 H@2 F@2 G I ~@63>".pickRestart({
  A: "~@12 c3 e3 g3 c4", B: "e4 g3 c4 e4 c3 e3 g3 c4 ~ e4 g3 c4 e4 c3 e3 g3",
  C: "c4 e4 g3 c4 e4 ~ c3 e3 g3 c4 e4 g3 c4 e4 d3 f3", D: "a3 d4 ~ f4 a3 d4 f4 d3 f3 a3 d4 f4 a3 d4 f4 d3",
  E: "f3 a3 d4 ~ f4 a3 d4 f4 d3 f3 a3 d4 f4 a3 d4 f4", F: "f3 a3 c4 f4 a4 c4 f4 a4 f3 a3 c4 f4 a4 c4 f4 a4",
  G: "c3 e3 g3 c4 e4 g3 c4 e4 c3 e3 g3 c4 e4 g3 c4 e4", H: "d3 f3 a3 d4 f4 a3 d4 f4 d3 f3 a3 d4 f4 a3 d4 f4",
  I: "c3 e3 g3 c4 e4 g3 c4 e4 c3 e3 g3 c4 e4 d4 c4 ~",
})).s("gm_synth_brass_2").gain(0.26).pan(0.1)

// other · harpsichord · "HARPSICHRD"
const harpsichord = note("<~@61 A@2 B@2 C@2 A D@2 ~@62>".pickRestart({
  A: "c5 e5 g5 c6 e6 g5 c6 e6 c5 e5 g5 c6 e6 g5 c6 e6", B: "d5 f5 a5 d6 f6 a5 d6 f6 d5 f5 a5 d6 f6 a5 d6 f6",
  C: "f5 a5 c6 f6 a6 c6 f6 a6 f5 a5 c6 f6 a6 c6 f6 a6", D: "[c5 e5 g5 c6 e6 g5 c6 e6 c5 e5 g5 c6 e6 d6 c6@5 ~@13]/2",
})).s("gm_harpsichord").gain(0.22).pan(0.9)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note("<A B C D E F@2 G@2 H@2 F@2 G I@2 ~@116>".pickRestart({
  A: "~@12 c5 e5 g5 c6", B: "e6 g5 c6 e6 c5 e5 g5 c6 ~ e6 g5 c6 e6 c5 e5 g5",
  C: "c6 e6 g5 c6 e6 ~ c5 e5 g5 c6 e6 g5 c6 e6 d5 f5", D: "a5 d6 ~ f6 a5 d6 f6 d5 f5 a5 d6 f6 a5 d6 f6 d5",
  E: "f5 a5 d6 ~ f6 a5 d6 f6 d5 f5 a5 d6 f6 a5 d6 f6", F: "f5 a5 c6 f6 a6 c6 f6 a6 f5 a5 c6 f6 a6 c6 f6 a6",
  G: "c5 e5 g5 c6 e6 g5 c6 e6 c5 e5 g5 c6 e6 g5 c6 e6", H: "d5 f5 a5 d6 f6 a5 d6 f6 d5 f5 a5 d6 f6 a5 d6 f6",
  I: "[c5 e5 g5 c6 e6 g5 c6 e6 c5 e5 g5 c6 e6 d6 c6@5 ~@13]/2",
})).s("gm_lead_2_sawtooth").gain(0.29)

// drums · kick
const kick = s("bd").struct("<~@7 A@47 B C ~@5 A@15 D A@7 D A@7 B A@15 B A@15 B A@6 C>".pickRestart({
  A: "x ~@3 x ~@2 x", B: "x ~@2 x!2 ~@3", C: "x", D: "x ~@2 x!2 ~@2 x",
})).gain(0.62)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A B C B C B C B A B C B C B C D C B C B C B C E C B C B C B C F ~@22 A B C B C B C B A B C B C B C G C B C B C B C
  H C B C B C B C I ~@39
>`.pickRestart({
  A: "~ x!7", B: "x!5 ~ x!2", C: "x!8", D: "x!5 ~ x ~", E: "x ~ x!5 ~", F: "x!7 ~", G: "x!4 ~@2 x ~",
  H: "x ~@2 x ~@2 x!2", I: "x!6 ~@2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@54 A ~@5 B ~@47 A ~@15 A ~@7>".pickRestart({
  A: "~@3 x", B: "~@3 x!2 ~@3",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C ~ A ~ A ~ A ~ D ~@23 A ~ A ~ A ~ A ~ A ~ A ~ A ~ E ~ A ~ A ~ A ~ F ~
  A ~ A ~ A ~ G ~@39
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~ x ~@5 x", D: "~@7 x", E: "~@4 x ~@2 x", F: "~ x ~@2 x ~@3", G: "~@3 x",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@54 A ~@5 A ~@47 A ~@15 A ~@7>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@7 A ~@30 B A ~@7 A ~@5 A ~@7 A ~@30 B A ~@14 B A ~@14>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct("<~@39 A@7 B C A@6 D ~@38 A@7 B C A@6 D A@7 B C A@6 D A@6 E>".pickRestart({
  A: "x!8", B: "x!6 ~ x", C: "~ x!7", D: "x!5 ~@3", E: "x!3 ~@5",
})).gain(0.35)

stack(
  bass, synth_strings_1, orchestral_harp, lead_2_sawtooth, synth_brass_2, harpsichord, lead_2_sawtooth_2, kick, snare,
  hihat, low_tom, open_hat, mid_tom, crash, ride
)

More by Alice