Strudelify

Un nuovo amico

Cocciante

KeyD♭ majorTempo147 bpm
0:00/0:00
// Un nuovo amico — Cocciante
// 147 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(147/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 · epiano2
const epiano2 = note("<~@87 A@2 B@2 ~@3 C@3 ~@25 D@2 E@2 F@3 ~>".pickRestart({
  A: "[~@8 a5@4 [a4,d5,gb5]@19 ~, [a4,db5,e5]@13 ~@19]/2", B: "[b2@11 ~@5]/2",
  C: "[~@24 a5@4 [a4,d5,gb5]@15 ~@5, ~@15 a4@13 ~@20, ~@16 [db5,e5]@13 ~@19]/3", D: "[[b2,a3,d4,gb4]@31 ~]/2",
  E: "[a2,g3,b3,e4]/2", F: "[db4@6 a4 ~@5 [d3,a3,d4,gb4]@36, [d3,a3,e4] ~@5]/3",
})).s("gm_epiano2").gain(0.16)

// bass · fretless bass
const bass = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 F@2 C@2 G@2 H I J K L M N O P Q J R S L T@2 P Q U K L V W X Y Z U R AA M W X P Q U R S AB AC
  AD AE AF AG AH@2 AF AG AI@2 AJ AK AL AM AN AO AP@2 AQ AR AS AT AU AV AW AX AY AZ AS AT AU BA AW BB BC BD BE BF BG BH W
  BI BJ BK BL BM@2 BK BL BN@2 BO BP BQ AV BR BS BT@2 ~@8
>`.pickRestart({
  A: "[bb1@15 ~]/2", B: "[eb1@15 ~]/2", C: "ab1/2", D: "[db2@15 ~]/2", E: "[bb1@31 ~]/2", F: "eb1/2",
  G: "[db2@29 ~@3]/2", H: "bb1@3 ~", I: "bb1", J: "eb1@3 ~", K: "eb1", L: "ab1@13 ~@3", M: "ab1@15 ~", N: "db2@3 ~",
  O: "db2@15 ~", P: "bb1@12 ~@2 bb1 ~", Q: "bb1@15 ~", R: "eb1@15 ~", S: "ab1@12 ~@2 ab1 ~", T: "[gb1@31 ~]/2",
  U: "eb1@12 ~@2 eb1 ~", V: "ab1", W: "db2@12 ~@2 db2 ~", X: "db2@7 ~", Y: "bb1@13 ~ bb1 ~", Z: "bb1@7 ~",
  AA: "ab1@13 ~ ab1 ~", AB: "ab1@7 ~", AC: "c2@13 ~@3, d2 ~@15", AD: "f1@13 ~ f1 ~", AE: "f2@15 ~", AF: "db2@13 ~@3",
  AG: "db2 ~@3 db2@11 ~", AH: "[gb1@5 ~ ab1@7 bb1 ~ bb1]/2", AI: "[gb1@12 f1@15 ~ f1 ~@3]/2", AJ: "bb1@13 ~ f1@2",
  AK: "bb1 f1 bb1@5 ~", AL: "ab1@7 f1", AM: "ab1 ~@3 ab1@11 ~", AN: "gb1@13 ~ gb1 ~", AO: "gb1 ~@3 gb1@10 ~@2",
  AP: "[gb1@13 ~@3]/2", AQ: "b1 ~@3 b1@8 ~@2 b1 ~", AR: "b1 ~@3 b1@11 ~", AS: "e2 ~@3 e2@9 ~ e2 ~", AT: "e2 ~@3 e2@12",
  AU: "a1 ~@3 a1@9 ~ a1 ~", AV: "a1 ~@3 a1@11 ~", AW: "d2 ~@3 d2@8 ~@2 d2 ~", AX: "d2 ~@3 d2@12",
  AY: "b1 ~@3 b1@9 ~ b1 ~", AZ: "b1 ~@3 b1@12", BA: "a1 ~@3 a1@12", BB: "d2 ~@3 d2@10 ~@2", BC: "b1@12 ~@2 b1 ~",
  BD: "b1", BE: "e2@12 ~@2 e2 ~", BF: "e2@7 ~", BG: "a2@12 ~@2 a2 ~", BH: "a2@13 ~@3", BI: "gb2@13 ~ gb2 ~",
  BJ: "gb1@15 ~", BK: "d2@13 ~@3", BL: "d2 ~@3 d2@11 ~", BM: "[g1@5 ~ a1@7 b1 ~ b1]/2",
  BN: "[g1@12 gb1@15 ~ gb1 ~@3]/2", BO: "b1@13 ~ gb1@2", BP: "b1 gb1 b1@5 ~", BQ: "a1@7 gb1", BR: "g1@13 ~ g1 ~",
  BS: "g1 ~@3 g1@10 ~@2", BT: "[g1@13 ~@3]/2",
})).s("gm_fretless_bass").gain(0.25)

// bass · fretless bass · soft notes
const bass_soft = note("<~@24 A ~ B ~ C ~ D ~@3 B ~@9 C ~@20 D ~@2 E D ~@36 F ~@2 G F ~@19>".pickRestart({
  A: "~@14 bb1 ~", B: "~@14 eb1 ~", C: "~@14 ab1 ~", D: "~@14 db2 ~", E: "~@6 db2 ~", F: "~@14 d2 ~", G: "~@6 d2 ~",
})).s("gm_fretless_bass").gain(0.15)

// chords · pad warm
const pad_warm = note(`<
  ~@40 A@2 B@2 C@4 A@2 B@2 D@2 E@2 A@2 B@2 F@2 G H@2 I@2 J@2 I@2 K@2 A@2 I@2 L@3 ~ M@2 N@2 O@2 P@6 Q@4 M@2 R@2 S@2 T@3
  U@2 V@2 U@2 W@2 M@2 U@2 X@3 ~@9
>`.pickRestart({
  A: "[bb3,db4,f4]/2", B: "[bb3,db4,gb4]/2", C: "[db4@14 c4@17 db4@16 c4@17, [ab3,gb4]@31 [ab3,f4]@32 ~]/4",
  D: "[db4 c4, [ab3,gb4]]/2", E: "[db4 c4, [ab3,f4]]/2", F: "[db4@16 c4@15 ~, [ab3,gb4]@31 ~]/2", G: "[bb3,eb4,gb4]",
  H: "[bb3 a3, [c4,f4]@31 ~]/2", I: "[ab3,db4,f4]/2", J: "[[gb3,bb3,db4]@11 ~ [ab3,c4,eb4]@20]/2",
  K: "[[gb3,bb3,db4]@3 [a3,c4,eb4]@5]/2", L: "[[gb3,bb3,f4]@3 ~]/3", M: "[b3,d4,gb4]/2", N: "[g3,b3,e4]/2",
  O: "[b3@11 db4@21, [a3,e4]]/2", P: "[[db4,e4]@11 [d4,gb4]@20 [b3,d4,gb4]@32 [g3,b3,e4]@32 ~, a3 ~@2]/6",
  Q: "[b3@11 db4@20 [db4,e4]@12 ~ d4@20, [a3,e4]@31 a3@32 ~, ~@43 gb4@21]/4", R: "[[g3,b3,e4]@31 ~]/2",
  S: "[b3 db4, [a3,e4]]/2", T: "[[b3,e4,g4]@15 b3@16 ~ bb3@15 ~, ~@15 [db4,gb4]@32 ~]/3", U: "[a3,d4,gb4]/2",
  V: "[[g3,b3,d4]@11 ~ [a3,db4,e4]@20]/2", W: "[[g3,b3,d4]@3 [bb3,db4,e4]@5]/2", X: "[[g3,b3,gb4]@3 ~]/3",
})).s("gm_pad_warm").gain(0.2)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@6 B@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 C@2 D@2 G@4 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 H I@2
  ~@32 J K L M N O P Q R ~@8 S T U@3 V@3 W@2 X ~ Y@4
>`.pickRestart({
  A: "[~@6 bb3@2 ~@29 db4@2 ~@3 eb3@2 ~@2 eb3@2, bb2@26 eb4@2 bb3@8 bb3@4 bb3@2 eb4@14 eb3@2 bb3@12 bb3@9 ~ c4@16, ~@2 f3@14 ~@4 f3@4 f3@7 ~ eb2@32 ab2@26 ab2@6, ~@4 bb3@6 eb4@6 f4@15 ~@7 db4@8 eb3@2 [f4,ab4]@16 ~@4 ab3@4 ~@24, ~@6 db4@10 db4@6 db4@9 ~@3 eb3@10 bb3@8 eb3@2 db4@10 ~@2 eb3@12 eb3@6 ~@4 eb3@4 ~@4]/6", // Fm
  B: "[~@6 eb3 ~@6 eb4@3, db2, ~ db3@5 ~ db3 ab3@2 db3 ab3@5, ~@4 eb3@4 ~@2 db4@5 ~ c4@16, ~@6 ab3@9 ~ eb4@10 ~@6]/2",
  C: "[~@7 f3, bb2@13 db4@3, ~ f3@5 bb3 f3 f4@8, ~@2 bb3@3 eb4@11, ~@3 db4@7 f3 bb3@5]/2",
  D: "[~@13 db4@3, eb2@3 eb3, ~ eb3@5 bb3 eb3 f4@8, ~@2 bb3@3 eb4@11, ~@3 db4@7 eb3 bb3@5]/2",
  E: "[~@28 eb3@3 ~, ab2@26 c4@5 ~, ~@4 ab3@4 ab3@4 ab3@2 eb3@2 c4@4 eb3@2 ab3@9 ~, ~@6 bb3@25 ~, ~@10 db4@21 ~]/2",
  F: "[~@28 db3@2 db2 ~, db2@26 c4@5 ~, ~@2 db3@10 f3@8 db3@4 f3@7 ~, ~@4 f3@4 f3@2 db4@21 ~, ~@6 ab3@8 db3@2 c4@6 ab3@9 ~]/2",
  G: "[~@14 eb3 ~ [gb2,f4]@16, ab2@13 c4@2 gb3@16 ~, ~@4 ab3@4 ab3@4 ab3@2 eb3@2 c4@4 eb3@2 ab3@9 ~@33, ~@6 bb3@25 [bb3,db4]@32 ~, ~@10 db4@21 ~@33]/4", // Gbmaj7 Bbm
  H: "~@3 eb3, c3, ~@2 eb3@2 ~ bb3@3, ~@3 gb3@5",
  I: "[~@26 eb4@5 ~, f2@20 eb3@2 c4@9 ~, ~@4 eb3@4 ~@2 bb3@21 ~, ~@6 f3@25 ~, ~@12 eb3@4 f4@15 ~]/2",
  J: "~@3 b3, b2, ~@2 b3@2 ~ d4@3, ~@3 gb4@5", K: "~@12 b3@2 e3 ~, b2@15 ~, ~ b3!2 ~, ~@6 gb4@9 ~, ~@10 d4@5 ~",
  L: "~@10 d4@4 e3 ~, b2@15 ~, ~@2 g3@13 ~, ~ b3 ~@2, ~@6 g4@9 ~",
  M: "~@12 b3@2 e3 ~, b2@15 ~, ~@2 g3@13 ~, ~@4 b3@4 ~@2 d4@5 ~, ~@6 g4@9 ~",
  N: "~@7 e3, a2, ~ e3@4 db4@3, ~ a3 a3@2, ~@3 a4@5", O: "~@10 e4@4 e4 ~, a2@15 ~, ~@2 e3@13 ~, ~ a3 ~@2, ~@6 a4@9 ~",
  P: "~@3 b3, db3, ~ b3!2 ~, ~@3 g4@5, ~@5 e4@3", Q: "~@5 db4@3, gb2, ~@2 db4@3 ~@3, ~@3 gb4@5",
  R: "~@5 db4@2 ~, gb2@7 ~, ~@3 gb4@4 ~", S: "[gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5] ~@3",
  T: "[gb4,d5,gb5] ~@3 d5 ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3", // D
  U: "[gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3", // D
  V: "[[gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@4 gb5@28 ~@3, ~@5 gb4@10 ~, ~@16 d5@29 ~@3]/3", // D
  W: "[[a3,d4,gb4]@15 ~, b2]/2", X: "[a2,g3,b3,e4]@15 ~", Y: "[[d3,a3,db4,e4]@6 a4 ~@5 [d3,a3,d4,gb4]@41 ~@11]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.7)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@4 A B C D ~@54 E@2 F ~@32 G H I J ~ K ~ L M ~@8 N O ~@14>".pickRestart({
  A: "~@8 ab3@4 ab3@3 ~", B: "~@3 ab3@5", C: "~@8 eb3@4 db3@3 ~", D: "~ [db3,eb3]", E: "~@2 eb3 ~", F: "~@8 eb3@7 ~",
  G: "~@4 b3@2 ~ gb3, ~ gb3@6 ~", H: "~@2 gb3@13 ~", I: "~@8 b3@4 b3@3 ~", J: "~@2 b3 ~", K: "~@8 a3@4 a3@3 ~",
  L: "~@4 b3@2 ~ db3, ~@3 b3", M: "~@2 bb3@2 bb3@2 bb3 ~, ~ db3@6 ~", N: "~@12 gb5 ~@3", O: "~@4 [gb4,gb5] ~@11",
})).s("gm_acoustic_guitar_nylon").gain(0.1).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@38 A@2 ~@90>".pickRestart({
  A: "[~@6 db4 ~ [f4,bb4]@4 [db4,f4]@17 ~@3]/2", // Bb5 Db
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.7)

// other · distortion guitar
const distortion_guitar = note("<~@66 A B@2 C A D@2 ~ E F@2 G@4 ~@26 H I@2 J H K@2 ~ L M@2 N@4 ~@8>".pickRestart({
  A: "f3@4 ab3 ~@3 f3@4 eb3@4", B: "[gb2@12 ab2@7 ~ ab2 ~ ab2 ~ ab2 ~ bb2@2 db3@2 bb2@2]/2", C: "db3@13 ~ db3 ~",
  D: "[gb2@11 ~ f2@19 ~]/2", E: "~@4 f4@11 ~", F: "[eb4@2 db4 ~ bb3 ~ eb4@6 db4@13 ~ f4@6]/2",
  G: "[eb4@2 db4@2 bb3 ~ eb4@4 f4@2 db4@48 ~@4]/4", H: "gb3@4 a3 ~@3 gb3@4 e3@4",
  I: "[g2@12 a2@7 ~ a2 ~ a2 ~ a2 ~ b2@2 d3@2 b2@2]/2", J: "d3@13 ~ d3 ~", K: "[g2@11 ~ gb2@19 ~]/2", L: "~@4 gb4@11 ~",
  M: "[e4@2 d4 ~ b3 ~ e4@6 d4@13 ~ gb4@6]/2", N: "[e4@2 d4@2 b3 ~ e4@4 gb4@2 d4@48 ~@4]/4",
})).s("gm_distortion_guitar").gain(0.15).pan(0.7)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@33 A@2 ~@8 B@2 C D E@2 ~@49 F@2 G@2 ~@28>".pickRestart({
  A: "[~@4 f4 ~@3 f4@14 ~@10]/2", B: "[~@3 f4@3 gb4@9 ~]/2", C: "ab4@15 ~", D: "~@8 f4@2 ab4@2 eb4@2 db4 ~",
  E: "[c4@3 bb3 c4 db4 [c4,eb4]@10]/2", F: "[~@4 gb4@8 d4@2 ~ g3@16 ~]/2", G: "[~@4 gb4@2 ~@2 gb4@4 e4@19 ~]/2",
})).s("gm_electric_guitar_jazz").gain(0.2).pan(0.1)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@44 A@4 ~@5 B@2 C D E F G H@3 I@2 J@4 K@2 L@2 M@7 ~@5 N@2 ~@6 O P ~@8 Q R@2 S@4 T@2 U@2 V@7 ~@9
>`.pickRestart({
  A: "[~@13 [ab3,c4]@47 ~@4]/4", B: "[c5,eb5]/2", C: "[db5,f5] ab5", D: "db6 eb6", E: "c6 bb5 f5@2",
  F: "ab5@3 gb5@3 db5@2", G: "f5@3 eb5@3 bb4@2", H: "[db5@6 c5@5 ab4@10 bb4@6 c5 ~@2 [gb4,bb4]@6 [f4,a4]@3 ~@9]/3",
  I: "[~@16 a3@15 ~, [bb3,c4,f4]@31 ~]/2", J: "[[ab3,db4]@8 [gb3,bb3,db4]@3 [ab3,c4,eb4]@5, f4@5 ~@3]/4",
  K: "[[ab3,db4,f4]@31 ~]/2", L: "[[gb3,bb3,db4,f4]@11 ~ [f3,a3,c4,eb4]@19 ~]/2",
  M: "[~@16 ab3@15 ~ [gb3,bb3]@17 ~@7, [db4,f4]@7 ~]/7", N: "[~@15 [a3,db4,e4]@14 ~@3, ~@8 [g3,b3,d4]@9 ~@15]/2",
  O: "[g3,b3,d4]", P: "[a3,db4,e4]", Q: "[g4,b4,e5]@7 ~", R: "[~@12 [bb4,db5,gb5]@19 ~]/2",
  S: "[[a3,d4]@8 [g3,b3,d4]@3 [a3,db4,e4]@5, gb4@5 ~@3]/4", T: "[a3@31 ~]/2",
  U: "[[g3,b3,d4,gb4]@11 ~ [gb3,bb3,db4,e4]@19 ~]/2", V: "[~@16 a3@15 ~ [g3,b3]@17 ~@7, [d4,gb4]@7 ~]/7",
})).s("gm_string_ensemble_2").gain(0.16)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@44 A@4 ~@4 B ~@20 C@2 ~@28 D@2 ~@9 E@2 ~@14>".pickRestart({
  A: "[~@13 eb4@47 ~@4]/4", B: "[bb4,db5]", C: "bb3/2", D: "[~@15 [bb4,db5,gb5]@13 ~@4]/2", E: "b3/2",
})).s("gm_string_ensemble_2").gain(0.08)

// chords · string ensemble 2 · Db D
const string_ensemble_2_2 = note(`<
  ~@73
  [[f4,db5,f5] ~@3 [f4,db5,f5] ~@3 [f4,db5,f5] ~@3 [f4,db5,f5] ~@3]!6
  [[f4,db5,f5] ~@15]
  ~@34
  [[gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3 [gb4,d5,gb5] ~@3]!6
  [[gb4,d5,gb5] ~@15]
  ~@9
>`).s("gm_string_ensemble_2").gain(0.28)

// other · viola
const viola = note("<~@81 A@2 B@2 ~@4 C@2 D@2 ~@37>".pickRestart({
  A: "[~@4 [d4,d5] ~@3 [b3,b4]@2 a3@2 [b3,b4]@8 [a3,a4] ~@3 [gb3,gb4] ~@3 e4@2 [d3,d4]@2, ~@10 a4 ~@17 e3 ~@3]/2", // D B A Gb D
  B: "[[e3,e4]@2 [d3,d4] ~ [b2,b3] ~@7 [b2,b3]@11 ~@9]/2", // E D B
  C: "[~@4 [d4,d5]@2 [e4,e5]@2 b4@2 [a3,a4]@2 [b3,b4]@8 [a3,a4] ~@3 [gb3,gb4] ~@3 [e3,e4]@2 [d3,d4]@2, ~@8 b3 ~@23]/2", // D E A B A Gb E D
  D: "[[e3,e4] ~@3 [d3,d4] ~ [b2,b3] ~@5 [b2,b3]@12 ~@8]/2", // E D B
})).s("gm_viola").gain(0.16)

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

// drums · snare
const snare = s("sd").struct("<~@40 A@32 B A@6 ~@2 A@14 C D A@8 E A@7 B A@6 ~@10>".pickRestart({
  A: "~ x", B: "~@4 x ~ x!2", C: "~@4 x ~@2 x", D: "x ~@2 x!2 ~@3", E: "~@8 x ~ x!3 ~ x ~",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~ x] ~@40 [~@3 x!2 ~ x ~] ~@49>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@40 A@5 B A@9 B A@8 B A@2 ~ C A@2 ~ C A D A@3 B ~@27 A@2 ~ C A@2 ~ C A D A@3 B ~@10
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "~ x", D: "x!2 ~@2",
})).gain(0.18)

// drums · mid tom
const mid_tom = s("mt").struct("<~@78 [~@5 x!2 ~] [~@7 x] [x ~@2 x!2 ~ x ~] ~@38 [~@5 x!2 ~] ~@10>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@45 A ~@9 A ~@8 A ~@3 B ~@3 B ~ A ~@3 A ~@17 B ~@12 B ~@3 B ~ A ~@3 A ~@10
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@79 [~@7 x] x ~@49>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@40 A ~@15 A ~@5 A@2 ~ A ~ B ~ A ~ B ~ A ~@5 A ~ A ~@13 C ~ A ~@6 A ~ A ~ B ~ A ~ B ~@7 A ~@9
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "~@3 x",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@81 [x!4]!15 ~ [x!4]!8 x ~@24>").gain(0.18)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@8 A@30 ~@2 A@39 ~@2 B@16 ~@9 A@14 ~@10>".pickRestart({
// … 24 more lines

More by Cocciante