Strudelify

Applausi

Camaleonti

KeyE♭ minorTempo78 bpm
0:00/0:00
// Applausi — Camaleonti
// 78 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · synth bass 2 · "SynBass2"
const bass = note(`<
  ~@2 A@2 B C D E F G H I J K L M L M N@2 B C D E F O H I J K L M L M P@2 B C Q R S T U V W X ~ Y D Z F O H I J AA L M L
  M AB AC AD AE AD AE AD AE AD AE AD AF
>`.pickRestart({
  A: "[~@4 eb2@12 ab1@9 ~@3 db2 c2 db2@2, eb1@7 ~]/2", B: "eb1@2 eb1 ~ eb1@2 eb1@2 eb1@2 eb1 ~ eb1@2 eb1@2",
  C: "gb1@2 ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2", D: "eb2@7 ab1 eb2 ~ eb2@3 ab1 eb2@2",
  E: "bb1@6 ab1@2 gb1!2 ab1 gb1@2 gb1 ab1@2", F: "eb2@6 eb2 bb1 eb2@2 eb2@4 eb2@2",
  G: "bb2@3 bb2@3 ~ f2 bb2 ~ bb2@3 ~ bb2@2, ~@14 ab2 ~", H: "eb2@7 bb1 eb2 ~ eb2@3 bb1 eb2@2",
  I: "bb1@7 f1 bb1 ab1 bb1@3 ab1 bb1@2", J: "eb2@7 bb1 eb2 ~ eb2@5 ~", K: "bb1@7 f1 bb1 ~ bb1@3 f1 bb1 db2",
  L: "eb2@4 eb2@2 eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2", M: "db2@4 db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2@2", N: "[eb2@31 ~]/2",
  O: "bb2@3 ~ bb2@3 f2 bb2 ~ bb2@3 ab2 bb2@2", P: "[eb2@28 db2 c2 db2 ~]/2",
  Q: "eb2@2 ~@2 eb2@3 ~ eb2 ~ eb2 ~ eb2@2 eb2@2", R: "b1@4 b2@2 b1 ~ b1 ~ b1@2 b2@2 b1 ~",
  S: "bb1@4 bb2@2 bb1 ~ bb1@4 bb2@2 bb1@2", T: "eb2@2 bb1@2 eb2@2 f2@2 eb2 ~ eb2@6", U: "db2@5 ~ eb2 ~ eb2@4 ~@2 eb2@2",
  V: "gb2@5 ~ gb2 ~ gb2@6 eb2@2", W: "gb2 ~ gb2@2 bb2@2 gb2 ~ gb2@2 bb2@2 ab2 gb2 eb2 ~", X: "eb2@9 ~@7", Y: "~@3 ab1",
  Z: "bb2@6 ab2@2 gb2!2 ab2 gb2@2 gb2 ab2@2", AA: "db2@7 ab1 db2 ~ db2@3 ab1 db2 e2", AB: "eb2",
  AC: "ab1@12 ab2 ~ ab2@2", AD: "eb1@4 eb1@2 eb1@2 eb1@2 eb1 ~ eb1@2 eb1@2",
  AE: "ab1@4 ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@2", AF: "ab1@4 ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~@3",
})).s("gm_synth_bass_2").gain(0.4)

// chords · piano · "Piano 1"
const piano = note(`<
  ~@2 A B C D E F E F E F G H I J I J K ~ C D E F E F E F G H I J I J K ~@3 L M N O P Q R S@3 T U T U T U T V T V T V C
  W C W C W C W X W X W
>`.pickRestart({
  A: "[eb4,eb5] [db4,db5]", B: "[c4,c5]@8 [b3,b4]@7 ~", C: "~ db4, eb4", D: "c4@8 b3@7 ~, ab3@15 ~",
  E: "~@4 [gb4,bb4,eb5] ~ [gb4,bb4,eb5]@9 ~, [eb2,eb3]@7 ~", F: "~@4 [db4,f4,ab4,bb4] ~ [db4,f4,ab4,bb4]@9 ~, bb2@7 ~",
  G: "~@4 [gb4,bb4,eb5]@11 ~, [eb2,eb3]@7 ~", H: "~ [db4,f4,ab4,bb4]@3, bb2@7 ~", I: "bb3 [bb3,eb4,gb4]@3, eb3",
  J: "ab3 [ab3,db4,f4]@3, db3@15 ~", K: "eb4@7 ~ db4@8, eb3@15 ~, [g4,bb4]@5 ~@3",
  L: "[eb3,g4,bb4]@7 ~ [eb3,eb4,g4,bb4,eb5]@8", M: "b3 [eb4,gb4,b4]@2 [eb4,gb4,b4]",
  N: "bb3 [eb4,gb4,b4]@2 [d4,f4,bb4]", O: "[eb3,eb4] [eb4,gb4,bb4]@2 [eb4,gb4,bb4]",
  P: "[db3,db4] [db4,f4,ab4]@2 [db4,f4,ab4]", Q: "gb3 [gb4,bb4,db5]@2 [gb4,bb4,db5]",
  R: "bb3 [f4,ab4,d5]@2 [bb3,f4,ab4]", S: "[eb3,eb4,gb4,bb4,eb5]/3",
  T: "[eb4,gb4]@2 [eb4,gb4]@2 [eb4,gb4] [f4,ab4] [gb4,bb4] [bb4,eb5], bb3@15 ~", // Ebm Fm Gb Eb5
  U: "[db4,f4]@2 [db4,f4]@2 [db4,f4] [eb4,gb4] [f4,ab4] [ab4,db5], bb3@7 ~", // Db Ebm Fm Db5
  V: "[db4,f4]@2 [db4,f4]@2 [db4,f4] [eb4,gb4] [f4,ab4] [ab4,db5], ab3@7 ~", W: "c4@4 b3@3 ~, ab3@7 ~",
  X: "[eb2,g3,bb3] db4, eb4", // Eb
})).s("gm_piano").gain(0.43)

// chords · distortion guitar · "Dist.gt"
const distortion_guitar = note(`<
  ~@3 A B A C ~@12 A C A C ~ D E F G F E H I H I ~ A C A C ~@9 D E F G F E H I H I H I ~ A J K J L M@2 N@2 O@2
>`.pickRestart({
  A: "~@9 eb3 gb3 ab3 [g3,ab3] gb3 eb3 db3", B: "eb3@7 ~@9", C: "eb3@5 ~@11", D: "~@4 [eb3,bb3,eb4,gb4]@11 ~",
  E: "~@2 [f3,bb3,db4,f4]@13 ~", F: "~@2 [eb3,bb3,eb4,gb4]@11 ~@3", G: "[f3,bb3,db4,f4]@13 ~@3",
  H: "~ [eb3,bb3,eb4,gb4]", I: "~ [db3,ab3,db4,f4]", J: "eb3@5 ~@4 eb3 gb3 ab3 [a3,bb3] ab3 gb3@2",
  K: "ab3@5 ~@4 eb3 gb3 ab3 [g3,ab3] gb3 eb3 db3", L: "ab3@5 ~@11", M: "[ab4@8 ~ ab4 ~ ab4!3 ab4@13 ~ b3@2 ~@2]/2",
  N: "[db4@11 ~ bb3@11 ~ db4@3 bb3 gb3@3 ab3]/2", O: "[eb3@3 ~]/2",
})).s("gm_distortion_guitar").gain(0.49)

// chords · electric guitar clean · "Clean gt"
const electric_guitar_clean = note(`<
  ~@2 A B A B C D C D C D C D C E C F A B A B C D C D C D C D C E C E A B A B G H I J K L M N@3 C D C D C D C E C E C E
  A B A B A B A B A B A O
>`.pickRestart({
  A: "~@4 [g3,bb3,eb4]@4 ~@4 [g3,bb3,db4]@3 ~, eb2 ~", B: "~@4 [ab3,c4,eb4]@4 ~@4 [gb3,b3,eb4]@3 ~, ab2 ~",
  C: "~@4 [bb3,db4,eb4,gb4]@4 eb2 ~@3 [bb3,db4,eb4,gb4]@4, eb2@7 ~@3 eb2@6", // Ebm7
  D: "~@4 [ab3,bb3,db4,f4]@4 bb2 ~@3 [ab3,bb3,db4,f4]@3 ~, bb2@7 ~@3 bb2@5 ~", // Bbm7
  E: "~@4 [f3,ab3,db4,f4]@4 db3 ~@3 [f3,ab3,db4,f4]@3 ~, db3@7 ~@3 db3@5 ~", // Db
  F: "~@4 [f3,ab3,db4,f4]@4 db3 ~@3 [f3,ab3,db4,f4]@3 ~, db3@8 ~@2 db3@5 ~", // Db
  G: "[eb2,bb2,eb3,g3]@7 ~ [eb2,bb2,eb3,g3]@8", H: "b2 ~@3 [gb3,b3,eb4]@4 b2 ~@3 [gb3,b3,eb4]@4, ~@2 b2@5 ~@3 b2@4 ~@2",
  I: "bb2 ~@3 [gb3,b3,eb4]@4 bb2 ~ bb2@2 [f3,bb3,d4]@4, ~ bb2@2 ~@5", // B Bb
  J: "[eb2,eb3] ~@3 [gb3,bb3,eb4]@4 [eb2,eb3] ~@3 [gb3,bb3,eb4]@4, ~ [eb2,eb3]@2 ~@2 [eb2,eb3]@2 ~", // Eb Ebm Eb Ebm Eb
  K: "[db2,db3] ~ [db2,db3]@2 [f3,ab3,db4]@4 [db2,db3] ~ [db2,db3]@2 [f3,ab3,db4]@3 ~", // Db
  L: "[gb2,gb3] ~@3 [bb3,db4,gb4]@4 [gb2,gb3] ~ [gb2,gb3]@2 [bb3,db4,gb4]@3 [gb2,gb3], ~ [gb2,gb3]@2 ~@5", // Gb
  M: "bb2 ~ bb2@2 [ab3,bb3,d4,f4]@4 bb2 ~ bb2@2 [ab3,bb3,d4,f4]@2 bb2 ~", N: "[[eb2,eb3,gb3,bb3,eb4]@23 ~]/3",
  O: "~ [ab3,c4,eb4] ~@2, ab2 ~", // Ab
})).s("gm_electric_guitar_clean").gain(0.22)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@8 A B C B A D E F E F G@2 H@2 A I A B C B A D E F E F G@2 J@2 K L M N O P M Q@2 ~ A B C B A R E S T S T U G@2 H@6
  V@2 W@2
>`.pickRestart({
  A: "eb3", B: "bb3", C: "eb3@6 f3 gb3", D: "~@4 [bb4,db5] [c5,eb5] f5 bb5, bb3, ~@12 db5 ~@3", E: "[eb3,gb4,eb5]",
  F: "[db3,f4,db5]", G: "[eb4@8 db4@8 c4@7 ~ [b2,b3]@8, eb3@3 ~]/2",
  H: "[eb5@8 bb4@6 c5@2 ab4@6 eb4 f4 eb4@7 ~, eb3@31 ~, ~@16 ab3@15 ~]/2", I: "bb2@15 ~",
  J: "[eb5@8 bb4@6 c5@2 ab4@6 eb4 f4 eb4@4 eb4 f4 ab4 c5, eb3@31 ~, ~@16 ab3@15 ~]/2",
  K: "[g4,eb5]@2 ~@2 [bb4,eb5]@2 ~@2 g4@2 ~@2 g4 f4 eb4 ~", L: "b2", M: "bb2", N: "eb2", O: "db2", P: "gb2",
  Q: "[eb2@25 ~@7]/2", R: "~@4 [bb4,db5] eb5 f5 bb5, bb3, ~@10 c5 ~ db5 ~@3", S: "[f4,db5]", T: "[gb4,eb5]",
  U: "[f4,db5]@15 ~", V: "[eb5@8 bb4@6 c5@2 ab4@6 eb4 f4 eb4 ~@7, eb3@31 ~, ~@16 ab3@15 ~]/2",
  W: "[eb5@8 bb4@6 c5@2 [ab3,ab4]@6 eb4 f4 eb4@3 ~@5, eb3@23 ~@9]/2", // Ab
})).s("gm_string_ensemble_1").gain(0.35)

// other · tuba
const tuba = note("<~@48 A B C B D E F G H I H I J K J K J K J K J K J L>".pickRestart({
  A: "gb4", B: "bb4@7 ~", C: "gb4@15 ~", D: "eb5@15 ~", E: "f5@7 ~", F: "gb5@7 ~", G: "f5@15 ~",
  H: "gb5@3 ~ gb5@2 ~@2 gb5@2 ~@2 gb5@3 ~", I: "f5@3 ~ f5@3 ~ f5@3 ~ f5@2 ~@2", J: "eb4 db4", K: "c4@8 b3@7 ~",
  L: "c4@8 b3@5 ~@3",
})).s("gm_tuba").gain(0.31)

// other · viola
const viola = note("<~@18 A B ~@14 A B ~@24 A B ~@10>".pickRestart({
  A: "~@4 bb4@3 c5", B: "ab4@4 ~@2 eb4 f4 eb4@6 ~@2",
})).s("gm_viola").gain(0.16)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@14 A B A B ~ C ~@10 A B A B ~@20 A B A B A B ~@12>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@11 x!2 ~@3", C: "~@15 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@9 B ~@8 A@7 B ~@8 A ~@9 A@5 B ~@18>".pickRestart({
  A: "x!8", B: "x!5 ~@3",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@14 A B A C ~ D ~@10 A B A C ~ E ~ F@2 ~@15 A B A C A B ~ G ~@3 H ~ H ~@4
>`.pickRestart({
  A: "~ x", B: "~@8 x!2 ~@6", C: "~@8 x!2 ~@4 x ~", D: "~@13 x!2 ~", E: "~@15 x", F: "~@7 x", G: "~@14 x!2",
  H: "~@12 x!4",
})).gain(0.43)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@10 B C@2 D ~@2 B@2 ~@8 B C@2 D ~@2 B@2 ~ E@6 ~@9 B C@2 D B C ~@2 B@10
>`.pickRestart({
  A: "~@7 x", B: "x!8", C: "~ x!7", D: "~ x!6 ~", E: "~ x ~ x",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@14 A B A ~@2 C ~@10 A B A ~@2 A ~@2 D ~@15 A B A ~ A B ~ E ~@10>".pickRestart({
  A: "~@13 x!2 ~", B: "~@14 x!2", C: "~@2 x!2", D: "~ x", E: "~@13 x ~@2",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@4 A B C ~ C ~@5 C@5 ~ C ~ C ~ C ~@5 C@5 ~ C ~ C@2 ~@8 C ~@5 C@7 ~ D@10>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@2 x!2 ~@3", C: "x", D: "x!2",
})).gain(0.43)

// drums · ride
const ride = s("rd").struct("<~@6 A B ~@14 A B ~@11 C ~@3 D@6 E ~@14 B F D G D G D G D G D G>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~@12 x!3 ~", D: "x!8", E: "x", F: "x ~ x ~ x ~ x!2", G: "x!5 ~@3",
})).gain(0.57)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@60 [~@2 x ~@3 x!2 ~@2 x!2 ~ x!3] [~@2 x!2 ~@2 x!2 ~@2 x ~@2 x ~@2] ~@10>")
  .gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct("<~@35 [~@3 x] ~@24 [~ x ~ x]!2 ~@10>").gain(0.36)

stack(
  bass, piano, distortion_guitar, electric_guitar_clean, string_ensemble_1, tuba, viola, kick, snare, low_tom, hihat,
  mid_tom, open_hat, high_tom, crash, ride, ride_soft, tambourine
)

More by Camaleonti