Strudelify

Decenni

Amedeo Minghi

KeyF♯ minorTempo110 bpm
0:00/0:00
// Decenni — Amedeo Minghi
// 110 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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(`<
  ~@24 A B C D E F G@2 E H I J K L I J K M N@2 A B C D E F G@2 E H I J K L I J K M N@2 O@2 ~@6 N@2 I J K L I J K M N@2 A
  B C D E F G@2 E H A B C D E F G@2 E H O@2 ~@8 P@3
>`.pickRestart({
  A: "f#1@2 ~ f#1 ~ f#1 ~ f#1", B: "f#1@2 ~ f#1 ~ f#1 ~ g#1", C: "a1@2 ~ a1 ~ a1 e1 f#1", D: "a1@2 ~ a1 ~ a1 ~ a1",
  E: "e1@2 ~ e1 ~ e1 ~ e1", F: "e1@2 ~ e1 ~ f#1 g#1 a1", G: "[b1@4 ~@2 b1 ~ b1@4 ~@2 b1@4 b1@2 ~@2 b1 ~ b1@5 ~ b1@2]/2",
  H: "e1@2 e1!6", I: "d2@5 d2@2 d2", J: "d2@4 c#2@3 c#2", K: "b1@5 b1@3", L: "b1@5 b1@2 b1", M: "a1@5 a1@2 a1",
  N: "e1!8", O: "[f#1@31 ~]/2", P: "[~@7 f#1@39 ~@2]/3",
})).s("gm_electric_bass_finger").gain(0.64)

// other · french horn
const french_horn = note("<~@14 A@2 B C D E F G H@2 ~@40 I@2 J@2 D K F G L M ~@30 I@2 J@2 D K F G L N@4>".pickRestart({
  A: "[f#3@31 ~]/2", B: "a3 b3", C: "c#4", D: "g#3 a3", E: "b3@7 c#4", F: "d4 c#4", G: "b3", H: "g#3/2", I: "f#3/2",
  J: "[e4@3 c#4]/2", K: "b3@3 c#4", L: "c#4 b3", M: "e3", N: "[e3@20 ~@4 f#3@39 ~]/4",
})).s("gm_french_horn").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@6 B@2 C@2 D@2 C@2 E@2 B@2 C@2 D@2 C@2 F@2 B@2 C@2 G@2 H I J@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 S T J@2 K@2 L@2 U@2
  V@2 W@6 X@2 Y@2 J@2 K@2 L@2 U@2 V@2 O@2 P@2 Q@2 R@2 S T O@2 P@2 Q@2 R@2 S T W@6 X@2 Z@5
>`.pickRestart({
  A: "[f#2,a3,c#4,f#4]/6", B: "[a2,a3,c#4,e4]/2", C: "[e2,b3,e4,g#4]/2", D: "[b2,d4,f#4,b4]/2", E: "[f#2,a3,c#4,e4]/2",
  F: "[f#2,a3,c#4,f#4]/2", G: "[d5 c#5 d5@2, [b2,f#4,b4]]/2", H: "c#6 b5, [e2,e4,g#4]", I: "[e2,e4,g#4,e5]",
  J: "[[d3,d4,f#4,f#5]@3 [c#3,c#4,e4,a5], a3]/2", K: "[[d4,b5]@2 [c#4,c#6]@2 d6 c#6 b5 a5, [b2,b3,f#4], ~ d4]/2",
  L: "[[d3,d4,f#4]@3 [c#3,c#4,e4], [a3,f#5]]/2", M: "[[b2,b5] [a2,a5], [b3,d4,f#4]]/2",
  N: "[g#5@2 f#6 e6, [e2,g#3,e4,b4]]/2", O: "[f#2,a3,c#4,f#4,c#6]/2", P: "[a3 b3 [a3,c#4]@2, [a2,e4], c#4 ~]/2",
  Q: "[[g#3,b3]@8 a3@8 b3@15 ~, [e2,e4,g#4]]/2", R: "[d4@8 c#4@8 b3@15 ~, [b2,f#4,b4]]/2",
  S: "[c#4,c#6] [b3,b5], [e2,e4,g#4]", T: "e5 e6, [e2,e4,g#4]", U: "[b2 a2, [b3,d4,f#4]]/2",
  V: "[b4@4 e5@2 f#5 g#5, [e2,g#3,e4]]/2", // E
  W: "[[f#2,a3,c#4,f#4]@8 ~@3 b5 c#6@2 ~@4 e6@2 b5@3 c#6, a5@11 ~@3 f#6@4 ~@6, ~ [a2,a3,c#4,e4] [e2,b3,e4,g#4]]/6", // F#m A E
  X: "[[d4,d6] [c#4,c#6] [b3,f#5]@2, [b2,f#4,b4]]/2", Y: "[[c#4,c#6] [b3,b5] [e4,g#4,e5]@2, e2, [e4,g#4] ~]/2",
  Z: "[[c#4,c#6]@8 [b3,b5]@8 [e4,g#4,e5]@23 [f#2,a3,c#4,f#4,a5]@38 ~@3, e2@39 ~@41, [e4,g#4] ~@4]/5", // C# B E F#m E
})).s("gm_string_ensemble_1").gain(0.39)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@2 B@2 A@2 C@2 D@2 E@2 D@2 A@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 I@2 K L M N O P J K I Q G@2 H@2 I@2 J@2 I@2 K L M N O
  P J K I Q R@2 ~@6 I Q K L M N O P J K I Q G@2 H@2 I@2 J@2 I@2 G@2 H@2 I@2 J@2 I@2 R@2 ~@11
>`.pickRestart({
  A: "[~@15 f#3, [f#2,c#3]@3 [f#2,c#3]@3 [f#2,c#3]@2 [f#2,c#3]@3 [f#2,c#3]@3 [f#2,c#3,a3]@2, ~ f#3@3 f#3@3 f#3@2 f#3@3 f#3@3 ~, ~@2 c#4@3 c#4@5 c#4@3 c#4@3]/2", // F#5 F#m
  B: "[~@15 f#3, [f#2,c#3]@3 [f#2,c#3]@3 [f#2,c#3,a3]@2 [f#2,c#3]@3 [f#2,c#3]@3 [f#2,c#3,a3]@2, ~ f#3@3 f#3@3 f#3@2 f#3@3 f#3@3 ~, ~@2 c#4@3 c#4@5 c#4@3 c#4@3]/2", // F#5 F#m F#5 F#m
  C: "[~@15 a3, [a2,e3]@3 [a2,e3]@3 [a2,e3]@2 [a2,e3]@3 [a2,e3]@3 [a2,e3]@2, ~ a3@3 a3@3 a3@2 a3@3 a3@3 ~, ~@2 c#4@3 c#4@5 c#4@3 c#4@3]/2", // A5
  D: "[~@15 e3, [e2,b2]@3 [e2,b2]@3 [e2,b2]@2 [e2,b2]@3 [e2,b2]@3 [e2,b2]@2, ~ e3@3 e3@3 e3@2 e3@3 e3@3 ~, ~@2 b3@3 [f#3,b3]@5 b3@3 [f#3,b3]@3]/2", // E5 B5
  E: "[~@15 b3, [b2,f#3]@3 [b2,f#3]@3 [b2,f#3]@2 [b2,f#3]@3 [b2,f#3]@3 [b2,f#3]@2, ~ b3@3 b3@3 b3@2 b3@3 b3@3 ~, ~@4 d4@6 d4@10 d4@6 d4@5 ~]/2", // B5
  F: "[~@12 [e2,b2]@2 [g#3,b3,e4]!2 [g#3,b3,e4]@4 [e2,b2,e3,g#3,b3,e4]@6 [e2,e3,g#3,b3,e4]@2 [e2,e3,g#3,b3,e4]@4, [e2,b2]@3 [e2,b2]@3 ~ [e2,b2,e3]@3 ~@6, ~ e3@3 e3@3 ~@9, ~@2 b3@3 [f#3,b3]@2 ~@9]/2", // E5 E E5 B5
  G: "[a3,c#4]!3 [a3,c#4]@2 [a3,c#4]!3, f#4 f#4@2 f#4", H: "[a3,c#4]!3 [a3,c#4]@2 [a3,c#4]!3, e4 e4@2 e4",
  I: "[g#3,b3]!3 [g#3,b3]@2 [g#3,b3]!3, e4 e4@2 e4", J: "[b3,d4]!3 [b3,d4]@2 [b3,d4]!3, f#4 f#4@2 f#4",
  K: "[a3,d4]!3 [a3,d4]@2 [a3,d4]!3, f#4 f#4@2 f#4", L: "[a3,d4]!3 d4 c#4 [a3,c#4]!3, f#4!2 e4!2, ~@3 a3@2 ~@3",
  M: "[b3,d4]!3 d4 ~ b3 [b3,c#4]!2, f#4 f#4@2 f#4, ~@3 b3@2 ~@3, ~@2 c#4 ~", // Bm Bsus2
  N: "a3!3 ~@2 a3 [a3,b3,f#4]@2, [d4,f#4] f#4@2 ~, ~ c#4 b3 ~, ~@3 a3@2 ~@3", // B7 D
  O: "[a3,d4]!3 d4!2 [a3,d4]!3, f#4!4, ~@3 a3@2 ~@3", // D5
  P: "[a3,d4]!3 d4 ~ a3 [a3,c#4]!2, f#4 f#4@2 f#4, ~@3 a3@2 ~@3, ~@2 c#4 ~", Q: "[g#3,b3]!8, e4!4",
  R: "[[a3,c#4,f#4]@31 ~]/2", // F#m
})).s("gm_acoustic_guitar_steel").gain(0.16).pan(0.4)

// chords · piano
const piano = note(`<
  ~@4 A@2 B@2 C@2 D@2 E@2 A@2 B@2 C@2 D@2 F G H I J@2 K@2 L@2 M@2 N@2 O@2 N@2 P Q R@2 H I J@2 K@2 L@2 M@2 N@2 O@2 N@2 P
  Q R@2 ~@10 N@2 O@2 N@2 P Q R@2 H I J@2 K@2 L@2 M@2 H I J@2 K@2 L@2 M@2 ~@13
>`.pickRestart({
  A: "[c#5@8 b4@6 a4@7 ~ g#4@6 f#4@4, f#3@31 ~]/2", B: "[a4@6 b4 c#5@9, a3]/2",
  C: "[~@12 g#4 a4 b4 c#5, e3@31 ~, ~@3 b3@13, ~@3 e4@5]/2",
  D: "[d4@2 ~@2 b3@2 d4@2 c#4@4 ~@2 b3@7 ~ b3@10, d5@3 ~@5, ~ f#3@5 ~ f#3@9]/2",
  E: "[~@5 a3@3 g#3@3 f#3@3 e3@2, e2, b3@5 ~@11, ~ b2@15, ~@4 e3@17 ~@11]/2",
  F: "~@5 a3@3, e2, b3@5 ~@3, ~ b2@7, ~ e3@3", G: "[e3,g#3,b3]@4 [e3,g#3,b3]@3 ~@9", H: "[f#2,a3,c#4]@15 ~",
  I: "[f#2,a3]@6 [f#2,a3]@9 ~, c#4@15 ~", // F#m
  J: "[a3@3 [a3,a4] [b3,b4]@3 [b3,b4] c#4@3 ~@2 [a3,b4]@3, a2, c#4@8 [a3,c#5]@5 ~@3, ~@11 c#4@5]/2", // A B Asus2 A
  K: "[[b3,g#4]@8 ~@10 e3 ~ e3@2 f#3@2 g#3@2 a3@2 [b3,b4]@2 [c#4,c#5]@2, e2@21 ~ e2@10, g#3@5 b3@2 g#3@4 ~@5, ~ a4 b4 ~, ~@12 e3@5 ~@15]/2", // E B C#
  L: "[[d4,d5]@8 ~@8 d4@7 ~ f#4@8, [f#4,b4] ~, b2@3 f#3@5, ~@8 [c#4,c#5]@8 [b3,d5]@15 ~, ~@14 b2@17 ~]/2", // D B5 C# Bm
  M: "[~@5 e3@2 e4@3 e4 f#4 g#4 a4 b4 c#5, [e2,g#3]@31 ~, ~@6 b3@13 ~@13]/2", // E
  N: "[[a3,d4]@4 ~@4 f#3@2 f#3@2 ~@2 f#3 ~ [f#3,d4]@3 ~@3 d2@2 [c#3,a3,c#4,e4]@8, [d2,f#3]@6 d2@5 ~ d2@8 [f#3,d4]@4 ~@8, ~@4 [a3,d4]@6 [a3,d4]@5 ~ a3@8 ~@8]/2", // D5 D A D D5
  O: "[a3@4 c#4 ~ c#4 f#4 d4@2 c#4@2 ~@2 a3@2, [b1,f#4]@13 ~ b1@10 b3@4 ~@4, d4@7 ~@3 a3@6 f#4@16, ~@8 a3@5 b1@3]/2", // B5
  P: "[b3,d4,f#4]@4 b3@2 ~@8 b3 ~, b2@6 b2@4 [d4,f#4]@5 ~, ~ [d4,f#4] b3 b2", // Bm D
  Q: "[a2,d4]@2 ~@2 b3!2 ~ b3, b3@6 a2@5 ~ a2@4, f#4@3 ~ [d4,f#4]@5 ~ [d4,f#4]@6", // D5 D
  R: "[[g#3,b3,e4]@3 ~@7 [g#3,b3,e4]@2 ~@2 [g#3,b3,e4]@2 ~@4 e2 ~ [g#3,b3,e4] ~ [e2,e3,g#3,b3] ~ [e2,e3,g#3,b3] ~ [e2,e3,g#3] ~ [e2,e3]@2, e2@4 [g#3,b3,e4]@4 e3@4 ~@4 e3@5 ~ [e2,e3]@2 ~@4 b3@2 [g#3,b3] ~, ~@6 e2@5 ~ e2@6 [g#3,b3,e4]@4 ~@2 e4@2 f#4@2 e4@4]/2", // E G#m E
})).s("gm_piano").gain(0.56).pan(0.6)

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

// drums · snare
const snare = s("sd").struct("<~@24 A@9 B A@9 C A@9 B A@9 C ~@8 A C A@9 C A@9 B A@9 B ~@9 D ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~ x ~@2 x ~@2 x", D: "~@5 x ~@2",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@33 A ~@9 B ~@9 A ~@9 B ~@9 B ~@9 B ~@9 A ~@9 A ~@9 C ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~@7 x ~@8",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A ~@9 B ~@8 C D ~@9 B ~@8 C D ~@8 C D ~@8 C D ~@9 B ~@9 B ~@9 E F ~@2
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~@3 x!3", C: "~@7 x", D: "x!8", E: "~@6 x!2", F: "~ x ~@6",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@24 A B@8 C A B@3 A B@3 A ~ A B@8 C A B@3 A B@3 A ~@11 A B@3 A B@3 A ~ A B@8 C A B@8 C ~@13
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!3 ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 A ~@19 A ~@9 A ~@9 A ~@33>".pickRestart({
  A: "x!8",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@33 A ~@9 B ~@9 A ~@9 B ~@8 B@2 ~@9 B ~@9 A ~@9 A ~@13>".pickRestart({
  A: "~@3 x ~ x!3", B: "x!8",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~@9 A ~@3 A ~@3 A ~ A ~@9 A ~@3 A ~@3 A ~ A ~@9 A ~@3 A ~@3 A ~ A ~@9 A ~@9 A ~@9 B ~@2
>`.pickRestart({
  A: "x", B: "~@7 x ~@8",
})).gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@112 [~@15 x] [x!2 ~@3 x ~@10] ~@3>").gain(0.56)

stack(
  bass, french_horn, string_ensemble_1, acoustic_guitar_steel, piano, kick, snare, snare_soft, low_tom, hihat, mid_tom,
  open_hat, crash, ride
)

More by Amedeo Minghi