Strudelify
Grazie mille cover art

Grazie mille

Grazie mille

883

KeyE♭ majorTempo106 bpm
0:00/0:00
// Grazie mille — 883
// 106 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 · electric bass finger
const bass = note(`<
  ~@2 A B A C D E F G D E F H I J K L M N O P Q R S T U V W X D E F G D E F Y Z J K AA AB N O P Q R S T U V W X Q R S T
  U V W AC A B A AD A AE A AF Z J K AA AB N O P Q R S T U V W X Q R S T U V W AG U V W AG U V W AG AH@4
>`.pickRestart({
  A: "bb1@3 c2", B: "ab1", C: "~@4 ab2@7 ~ eb2@2 db2 bb1, ab1 ~", D: "bb1!6 c2!2", E: "ab1!2 ab2 ab1 ab1@3 ab1",
  F: "bb1!2 f2 bb1!3 c2 bb1", G: "ab1!2 ab2 ab1@2 ab1!3", H: "ab1@2 ab1@2 ab1@2 ab1@2 eb2@2 ab1@2 eb2 c2 bb1 ab1",
  I: "eb1 ~ eb1@2 eb2@2 eb2@2 bb1@2 bb1@2 bb1@2 bb1@2", J: "ab1@2 ab1@2 ab2@2 ab1@4 ab1@2 ab1@2 ab1 bb1",
  K: "eb2!2 eb1!2 bb1!4", L: "ab1@2 ab1@2 ab1@2 ab1@4 ab1 bb1 ab1!3 bb1", M: "eb2@2 eb2@2 bb1!4",
  N: "c2@2 c2@2 c2@2 c2@2 ab1@2 ab1@2 ab1 ~ ab1 ~", O: "bb1!2 bb1@2 bb1!2 bb2 bb1",
  P: "ab1@2 ab1@2 ab1@2 ab1@2 ab2@2 ab1@2 ab2!4", Q: "eb1!8", R: "bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 f2 bb2",
  S: "c2!2 c3 c2@2 c2!3", T: "ab1@2 ab1@2 eb2@2 ab1@2 ab1@2 ab1@2 ab1@2 ab1 bb1", U: "eb2!3 bb1 eb1!4",
  V: "bb1!2 bb2 bb1!3 bb2 bb1", W: "c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 c2@2 bb1 c2",
  X: "ab1@2 ab1@2 ab2@2 ab1@2 ab1@2 ab1@2 ab1@2 g1 ab1", Y: "ab1@2 ab1@2 ab1@2 ab1@2 eb2@2 ab1@2 c2 eb2!2 c2",
  Z: "eb1!2 eb2!2 bb1!4", AA: "ab1@2 ab1@2 ab1@2 ab1@4 ab1 bb1 ab1!3 f1", AB: "eb1 eb2 eb1!2 bb1!4",
  AC: "ab1@2 ab1@2 ab2@2 ab1 ~@3 ab1@2 ~ bb1@2 ~", AD: "ab1@7 ab1", AE: "ab1@13 ~ ab1@2", AF: "ab1@3 ~",
  AG: "ab1@2 ab1@2 ab2@2 ab1@2 ab1@2 ab1@2 ab1@2 ab1 bb1", AH: "eb1/4",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@62 A B C D A B C D E B F D E G C D H I J D H I J D H I J D H I J D H I J D H I J K@4 ~
>`.pickRestart({
  A: "[bb3,d4,f4]!5 ~ [bb3,d4,f4]!6 ~ bb3 [bb3,d4,f4] ~, ~@6 [bb3,d4,f4] ~", // Bb
  B: "[ab3,c4,eb4] ~ [ab3,c4,eb4]!3 ~ [ab3,c4,eb4]!2 ~ [ab3,c4,eb4]!2 ~ [ab3,c4,eb4]!4", // Ab
  C: "[bb3,d4,f4]@2 ~ [bb3,d4,f4]!5 ~ [bb3,d4,f4]!6 ~", // Bb
  D: "[ab3,c4,eb4]@2 ~ [ab3,c4,eb4]!5 ~ [ab3,c4,eb4]!5 [ab3,c4,eb4]@2", // Ab
  E: "[bb3,eb4,g4]!5 ~ [bb3,eb4,g4]!2 [bb3,d4,f4]!4 ~ bb3 [bb3,d4,f4] ~, ~@6 [bb3,d4,f4] ~", // Eb Bb
  F: "[bb3,eb4,g4]@2 ~ [bb3,eb4,g4]!5 ~ [bb3,d4,f4]!6 ~", // Eb Bb
  G: "[g3,c4,eb4] ~ [g3,c4,eb4]!3 ~ [g3,c4,eb4]!2 ~ [ab3,c4,eb4]!2 ~ [ab3,c4,eb4]!4", // Cm Ab
  H: "[bb3,eb4,g4]!5 ~ [bb3,eb4,g4]!6 ~ bb3 [bb3,eb4,g4] ~, ~@6 [bb3,eb4,g4] ~", // Eb
  I: "[bb3,d4,f4] ~ [bb3,d4,f4]!3 ~ [bb3,d4,f4]!2 ~ [bb3,d4,f4]!2 ~ [bb3,d4,f4]!4", // Bb
  J: "[c4,eb4,g4]@2 ~ [c4,eb4,g4]!5 ~ [c4,eb4,g4]!6 ~", // Cm
  K: "[[ab3,c4,eb4]@2 ~ [ab3,c4,eb4]!5 ~ [ab3,c4,eb4]!6 ~ eb4@45 ~@3, ~@15 eb3@45 ~@4, ~@15 bb3@41 ~@8, ~@16 g4@43 ~@5]/4", // Ab
})).s("gm_acoustic_guitar_steel").gain(0.46).pan(0.3)

// other · pad sweep
const pad_sweep = note(`<
  A@2 B C B C ~@8 D E D F D G H I J K L F M@2 N O P ~@7 D E D F D G Q R J K L F M@2 N S J K L F J K N O T U T U T U T V
  D E D F D G Q R J K L F M@2 N S J K L F J K W O J K X O J K X O Y@3 ~
>`.pickRestart({
  A: "[~@3 [f4,bb4]@5, bb1]/2", B: "bb2@3 c3", C: "ab2", D: "bb4 eb4", E: "ab3@3 bb3", F: "ab3", G: "c5 ab4",
  H: "[f4,bb4]", I: "[eb4,ab4]", J: "eb4", K: "d4", L: "[c4,eb4]", M: "[eb4 d4, bb3]/2", N: "c3", O: "[eb3,ab3]@7 ~",
  P: "bb4 ~", Q: "f4", R: "eb4@3 ~", S: "[eb3,ab3]", T: "bb1", U: "ab1", V: "ab1@15 ~", W: "c3, c4@7 ~", X: "[c3,c4]",
  Y: "[eb3@7 ~]/3",
})).s("gm_pad_sweep").gain(0.31).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@22 A B C D A E F ~@17 A B C D A G H I J K L M N O P Q ~@8 R S R T ~@4 A B C D A G H I J K L M N O ~@14
>`.pickRestart({
  A: "g5@3 ab5", B: "f5@3 ab5", C: "g5@3 bb5", D: "ab5@3 f5", E: "f5@3 [ab4,g5]", F: "[g4,eb5]", G: "f5@3 eb5",
  H: "eb6@2 d6@4 bb5@4 f5@3 eb5@3", I: "[eb5,c6]@2 [d5,bb5]@3 [c5,ab5]@4 ~ [eb4,c5]@3 [ab4,eb5]@3",
  J: "[bb4,g5]@3 [c5,ab5]", K: "[ab4,f5]@3 [eb5,ab5]", L: "[c5,g5]@3 [d5,bb5]",
  M: "[c5,ab5] [d5,bb5]@2 [eb5,c6]@3 [c6,ab6]@2", N: "[bb5,g6]@5 [bb5,eb6]@10 ~", O: "[f4,f6]@15 ~",
  P: "[eb4,eb6]@2 [d4,d6]@3 [bb3,bb5]@4 [f3,f5]@4 [eb3,eb5]@2 ~", Q: "[d3,d5]@3 [bb2,bb4]@3 [f2,f4]@2 ~@8", R: "g4 f4",
  S: "c4", T: "ab4@3 c5",
})).s("gm_string_ensemble_2").gain(0.56).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@43 A B C@8 ~@8 D E@8 ~@5 F@2 G@8 ~@7 H I@7 J@3 K@3>".pickRestart({
  A: "~@6 bb4 ~ eb5 ~ f5 ~ d5 ~ eb5@2", B: "~ d5 ~ bb4 f4@2 eb4@2",
  C: "[[c5,c6]@2 [bb4,bb5]@3 ~ [ab4,ab5]@2 [eb4,eb5]@3 ~ [f4,f5] [eb4,eb5] [f4,f5]@114]/8", // C Bb Ab Eb F Eb F
  D: "~@10 [ab3,ab4]@2 ~ [g3,g4]@2 ~", E: "[f4, f3 ~@63]/8",
  F: "[~@6 bb4 ~ eb5 ~@3 d5 ~ eb5@3 ~ d5@2 ~@2 bb4@2 ~@4 eb4@4, ~@5 f5@11, ~@3 f4]/2",
  G: "[[c5,c6]@2 [bb4,bb5]@3 ~ [ab4,ab5]@3 [eb4,eb5]@3 ~ [eb4,eb5] [f4,f5]@114, ~@6 [f4,f5] ~@57]/8", // C Bb Ab Eb F
  H: "~@14 [ab4,ab5] [bb4,bb5]", // Ab Bb
  I: "[[c5,c6] ~ [bb4,bb5] ~ [c5,c6] ~ [bb4,bb5] ~ [eb5,eb6] ~@4 [eb4,eb5] ~@2 [eb5,eb6] ~ [eb5,eb6] [d5,d6] ~ [d5,d6] [bb4,bb5] ~ [bb4,bb5] [f4,f5]@2 ~ [eb4,eb5] ~ [eb4,eb5] [c4,c5] [d4,d5]@6 [eb4,eb5]@6 ~@4 [eb5,eb6] ~ [eb5,eb6] [d5,d6] ~ [d5,d6] [bb4,bb5] ~ [bb4,bb5] [f4,f5]@2 ~ [eb4,eb5] ~ [eb4,eb5] [d4,d5] [c4,c5]@6 [eb4,eb5]@6 ~@4 [eb5,eb6] ~ [eb5,eb6] [d5,d6] ~ [d5,d6] [bb4,bb5] ~ [bb4,bb5] [f4,f5]@2 ~ [eb4,eb5] ~ [eb4,eb5] [c4,c5] [d4,d5]@6 [eb4,eb5]@6 [f4,f5]@4, ~@12 [f4,f5]@2 [f4,f5]@11 ~@2 [f4,f5]@17 [f4,f5]@13 ~@2 [f4,f5]@17 [f4,f5]@13 ~@2 [f4,f5]@17 ~@4]/7", // C Bb C Bb Eb D Bb F …
  J: "[[eb5,eb6] ~ [eb5,eb6] [d5,d6] ~ [d5,d6] [bb4,bb5] ~ [bb4,bb5] [f4,f5]@2 ~ [eb4,eb5] ~ [eb4,eb5] [d4,d5] [c4,c5]@6 [eb4,eb5]@6 ~@6 eb4 ~@2 d4 eb4!2 eb5 ~@2 d5 eb5!2 eb6 f6, ~@11 [f4,f5]@17 f5@15 ~@5, ~@28 f4@9 ~@11]/3", // Eb D Bb F Eb D C Eb …
  K: "[f6 d6 eb6@44 ~@2]/3",
})).s("gm_string_ensemble_1").gain(0.63).pan(0.6)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@14 A@6 B C ~@6 D E ~@8 A@5 ~@9 D E ~@4 F@12 A@8 ~@6 D E ~@4 F@4 G F@3 G F@5 ~@2
>`.pickRestart({
  A: "bb4!5 eb4 ~ bb4 ~ bb4!4 eb4 ~@2", B: "bb4!5 eb4 ~ bb4!6 eb4 ~@2", C: "bb4!5 eb4 ~ bb4!2 ~ bb4 ~ bb4!4",
  D: "eb5 ~ eb5 ~ eb5!6 ~ eb5 ~ eb5!3", E: "c6 ~ bb5 ~ c6 ~ bb5 ~ c6 ~ bb5 ~ c6 ~ bb5 ~",
  F: "bb4 ~ bb4 ~ bb4 ~ bb4!4 ~ bb4 ~ bb4!3", G: "~@2 bb4 ~ bb4 ~ bb4!4 ~ bb4 ~ bb4!3",
})).s("gm_synth_brass_1").gain(0.4).pan(1)

// other · melodic tom
const melodic_tom = note(`<
  ~@2 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 A B A B A B A B A B A B A B A B A
  B A B C D@3 E D F G 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 ~@4
>`.pickRestart({
  A: "~@5 db6 ~@7 db6 ~@2", B: "~@5 db6 ~@7 db6 ~ db6", C: "~@4 eb6@2 ~@7 eb6 ~@2", D: "~@4 eb6 ~@8 eb6 ~@2",
  E: "~@4 eb6 ~@4 eb6 ~@6", F: "~@4 eb6 ~@5 eb6 ~@5", G: "~@4 eb6 ~@10 eb6",
})).s("gm_melodic_tom").gain(0.43).pan(0.3)

// other · xylophone
const xylophone = note(`<
  ~@2 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B ~ D ~ D ~ D ~ D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B E ~@3
>`.pickRestart({
  A: "~@2 c4 ~@5 ab4!2 ~ ab4 ~@4", B: "~@3 c4 ~@3 ab4 ~@3 ab4 ~@2 c4 ~", C: "~@2 c4 ~@5 ab4!2 ~ ab4 ~@2 c4 ~",
  D: "~@11 bb3!5", E: "eb3 ~@15",
})).s("gm_xylophone").gain(0.42).pan(0.7)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~@6 A B A B A B A B C D E F E G H D I J K B I J L D M B A B A B A B N O P Q P R S T I J K B I J L D I J K B I J L U V
  W X W Y Z AA W AB AC AD AE AF R S T I J K B I J L D I J K B I J L U AG J L U AH J L U ~@4
>`.pickRestart({
  A: "bb1@3 c2", B: "ab1", C: "eb2 bb1, bb4", D: "[ab1,ab4]", E: "[eb2,bb4] [bb1,f4]", F: "[ab1,eb4]",
  G: "[c2,g4] [ab1,ab4]", H: "f4@2 eb4 d4, bb1", I: "eb2", J: "bb1", K: "c2", L: "[c2,g4]",
  M: "~ bb4@9 ~@2 c2@4, bb1@3 ~", N: "bb4", O: "ab4@15 ~", P: "bb4 f4", Q: "eb4@15 ~", R: "eb4@2 g4@2 ab4@2 f4 eb4",
  S: "f4@2 f4 d4", T: "c4 eb4", U: "ab1, ab4@7 ~", V: "~@12 g3@3 ~", W: "eb3@5 ~@11", X: "f3@5 ~@7 g3@3 ~",
  Y: "f3@4 ~@8 g3@3 ~", Z: "eb3@3 ~@5", AA: "f3@5 ~@7 g3@4", AB: "[g4,bb4] [d4,f4]", AC: "[eb4,ab4]",
  AD: "[eb4,g4] [d4,f4]", AE: "[eb4,ab4]@15 ~", AF: "~ g4 f4@2, bb4 ~", AG: "[eb2,g4]", AH: "g4",
})).s("gm_synth_strings_1").gain(0.37).pan(0.6)

// other · rock organ
const rock_organ = note(`<
  ~@2 A B A C ~ D ~ E ~ D ~ E ~@17 D ~ E ~ D ~ E ~@2 F G ~ H I J ~@16 K@2 L@2 K@3 L ~@36
>`.pickRestart({
  A: "bb5@3 c6", B: "ab5", C: "ab5@13 g5 [d5,e5,f5] ~", D: "ab3", E: "ab3@7 eb4",
  F: "~@2 bb5 ~@3 bb5 ~ d6 bb5 ~ eb6 ~@2 f6 ~", G: "~@2 bb5 ~ c6 ~ bb5 ~ d6 ~ bb5 ~ eb6 ~ bb5 ~",
  H: "~@6 bb5 ~ eb6 ~ f6 ~ d6 ~ eb6 ~", I: "~ d6 ~ bb5 f5@2 eb5@2", J: "c6@2 bb5@2 ~@2 ab5@2 eb5@3 ~ f5 eb5 f5 ~",
  K: "eb6@5 ~@11", L: "eb6@3 ~@5",
})).s("gm_rock_organ").gain(0.46)

// other · rock organ · soft notes
const rock_organ_soft = note("<~@5 A B ~ C ~@3 C ~@19 C ~@3 C ~@69>".pickRestart({
  A: "~@14 c5 b4", B: "bb3", C: "bb3@7 eb4",
})).s("gm_rock_organ").gain(0.26)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@2 A B A B A B A B A B A B C B C B C D E B F G H B F E H B A B A B A B A B C B C B C D E B F G H B F E H B F G H B F
  E I J A B A B A B A B C B C B C D E B F G H B F E H B F G H B F E I K F E I K F E I K L@4
>`.pickRestart({
  A: "[bb2,f3,bb3]@3 [c3,g3,c4]", B: "[ab2,eb3,ab3]", C: "[eb3,bb3,eb4] [bb2,f3,bb3]", D: "[c3,g3,c4] [ab2,eb3,ab3]",
  E: "[bb2,f3,bb3]", F: "[eb3,bb3,eb4]", G: "[bb2,f3,bb3]@3 [bb2,f3,bb3]", H: "[c3,g3,c4]", I: "[c3,g3]@13 eb3@3, c4",
  J: "d3@2 bb2@4 f2@3 ~ [eb3,ab3]@2 ~ [bb2,eb3]@2 ~", K: "d3@2 bb2@4 f2@3 ~ [eb3,ab3]@6",
  L: "[[eb2,eb3,bb3,eb4]@63 ~]/4", // Eb5
})).s("gm_distortion_guitar").gain(0.33).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A C A B A D A B A C A B A D A B A C A B A E A B A C A B A D A B A C A B A D A B A F A B A E A B A F A
  B A C A B A F A B A C A B A C A B A D A B A F A B A E A B A F A B A G A B A G A B A G H ~@3
>`.pickRestart({
  A: "x ~@2 x ~@6 x ~@5", B: "x ~@2 x ~@6 x ~@2 x ~@2", C: "x ~@2 x ~@4 x ~ x ~@2 x ~@2",
  D: "x ~@2 x ~@4 x ~ x ~@2 x ~ x", E: "x ~@2 x ~@4 x ~@2 x ~@4", F: "x ~@2 x ~@4 x ~ x!2 ~ x ~ x",
  G: "x ~@2 x ~@4 x ~ x ~ x ~@3", H: "x",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A@7 B A@3 ~ A@3 B A@3 ~ A@3 B A@3 ~ A@3 B A@3 ~ A@3 B A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 B A@3 ~ A@3 ~
  A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@5
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@11 x ~@3 x",
})).gain(0.4)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A B C D A B A E A B A E A B A E A B A E A B A E A B A F A B A E A B A E A B A E A B A E A B A E A B A F A B A E A
  B A G A B A E A B A G A B A E A B A E A B A E A B A F A B A E A B A D A B A D A B A D ~@4
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@6 x!3 ~@6 x", C: "~ x", D: "~ x ~ x ~@4", E: "~@2 x ~@3 x!2 ~@7 x", F: "~@2 x ~@3 x!2 ~@8",
  G: "~ x ~@6",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~@7 B ~@7 B ~@15 B ~@7 B ~@23 C ~@7 B ~@28>".pickRestart({
  A: "~@15 x", B: "~@14 x!2", C: "~@13 x!3",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@2 C A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@2 D A B@3 A B@2 D A B@3
  A B@3 A B@3 A B@3 A B@3 A B@2 D A B@2 D A B@2 D ~@4
>`.pickRestart({
  A: "~ x!15", B: "x!16", C: "x!9 ~@7", D: "x!10 ~ x!2 ~ x!2",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
// … 32 more lines

More by 883