Strudelify

Amore che prendi amore che dai

Nomadi

KeyD♭ majorTempo111 bpm
0:00/0:00
// Amore che prendi amore che dai — Nomadi
// 111 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 122 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(111/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(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G@2 A@2 B@2 C@2 D@2 B@2 A@2 B@2 C@2 D@2 A@2 B@2
  C@2 D@2 A@2 B@2 C@2 D@2 E F G@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 B H I@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2
  D@2 J@2 ~
>`.pickRestart({
  A: "db2!8", B: "gb1!8", C: "bb1!8", D: "ab1!8", E: "gb1", F: "gb2", G: "[gb2@10 ~ db2 gb2!4]/2", H: "gb1!7 gb2",
  I: "gb2!8", J: "db2/2",
})).s("gm_electric_bass_finger").gain(0.57)

// other · whistle
const whistle = note("<~@47 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 ~@51>".pickRestart({
  A: "[ab6 [ab6,bb6] bb6 [ab6,bb6] ab6 [ab6,bb6] ab6@20 gb6@3 f6@3, ~@6 bb6 ~@25]/2", B: "[db6@29 ~@3]/2",
  C: "[ab6 [ab6,bb6] bb6 [ab6,bb6] ab6 [ab6,bb6]!2 ab6@19 gb6@3 f6@3, ~@7 bb6 ~@24]/2", D: "[eb6@3 ab6@10 ~@3]/2",
})).s("gm_whistle").gain(0.22)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@4 F@2 G@2 H@2 I@2 J@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2
  C@2 D@2 E@4 F@2 G@2 H@2 I@2 A@2 B@2 C@2 D@2 F@2 G@2 H@2 I@2 J@4 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 K@2 ~
>`.pickRestart({
  A: "[db3,ab3]!8", B: "[db3,gb3]!8", C: "[bb2,f3]!8", D: "[ab2,eb3,ab3]!8",
  E: "[[db3,gb3]@30 [db3,gb3]!2 [db3,gb3] ~@17 [gb2,db3]@2 [gb2,db3]@2 [gb2,db3]@2 [gb2,db3]@2 [gb2,db3]@2 [gb2,db3]@2 [gb2,db3]@2, gb2@25 ~@7]/4", // Gb5
  F: "[ab4,db5]!8", G: "[gb4,db5]!8", H: "[db5,gb5]!3 [db5,f5]!5", I: "[ab4,db5] [ab4,c5]!7", J: "[db4,gb4]!8",
  K: "[ab3,db4]/2", // Db5
})).s("gm_distortion_guitar").gain(0.3).pan(0.7)

// other · piano
const piano = note("<~@41 A@6 ~@16 B@4 ~@2 C@2 ~@8 D@6 ~@10 E@8 ~@19>".pickRestart({
  A: "[f5@3 eb5@3 db5@5 ab4@7 f5@2 eb5@2 db5@12 c5@4 bb4 c5@7 db5@4 c5@4 bb4 c5@11 bb4@4 ab4@8 c5@4 bb4@4 ab4 bb4@7 ~@2]/6",
  B: "[~@3 ab4@3 gb4@2 ab4@6 bb4@4 ab4@3 gb4@3 ab4@6 db5@5 bb4@3 ab4@2 bb4@6 db5@4 bb4@2 ab4@2 bb4@6 ~@4]/4",
  C: "[ab4@19 bb4@3 c5@4 ~@6]/2",
  D: "[f5@3 eb5@3 db5@5 ab4@7 f5@2 eb5@2 db5@12 c5@4 bb4 c5@7 db5@4 c5@4 bb4 c5@3 eb5@4 db5@22 ~@12]/6",
  E: "[f5@3 eb5@3 db5@5 ab4@7 f5@2 eb5@2 db5@12 c5@4 bb4 c5@7 db5@4 c5@4 bb4 c5@11 bb4@4 ab4@8 c5@4 bb4@4 ab4 bb4@7 c5@4 bb4@4 ab4@8 c5@4 bb4@4 ab4 bb4@7 ~@2]/8",
})).s("gm_piano").gain(0.05)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@9 A B C D E F G H ~@8 A B C D E F G H ~@22 I J K L M N G H I J K L M N G H ~@51
>`.pickRestart({
  A: "~@4 ab3 ~@3", B: "ab3 ~@7 [ab3,db4]@4 ~@4", C: "~@2 gb2 ~@5 [gb3,db4]@2 ~@6", D: "[gb2,db3] ~@15",
  E: "~@2 f3 ~@5 [f3,bb3,db4]@2 ~@6", F: "[bb2,f3] ~@7 [f3,bb3,db4]@4 ~@2 f3 ~", G: "~@2 ab2 ~@5 [ab3,db4]@4 ~@4",
  H: "[ab2,eb3] ~ db4@2 ~@4 [ab3,db4]@4 ~@4", I: "~@4 [ab3,eb4] ~@3", J: "ab3 ~@7 [ab3,eb4]@4 ~@4",
  K: "~@2 gb2 ~@5 [gb3,eb4]@2 ~@6", L: "[gb2,db3] ~@7 eb4@4 ~@4", M: "~@2 f3 ~@5 [f3,bb3,eb4]@2 ~@6",
  N: "[bb2,f3] ~@7 [f3,bb3,eb4]@4 ~@2 f3 ~", // Bb5 Ebsus2
})).s("gm_overdriven_guitar").gain(0.36).pan(0.3)

// other · guitar harmonics
const guitar_harmonics = note(`<
  ~ A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 E@4 F@2 D@2 G@4 H@6 I@3 ~ A@2 B@2 C@2 D@2 ~@16 G@4 H@6 J@4 B@2 C@2 D@2 K@2 B@2
  K@2 I@3 ~@3 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@3
>`.pickRestart({
  A: "[db3@11 eb3@3 f3@2]/2", B: "bb2/2", C: "[db3@30 eb3 db3]/2", D: "c3/2", E: "[db3@62 eb3 [eb3,f3]]/4",
  F: "[db3@30 db3 [db3,eb3]]/2", G: "[gb3@63 ~]/4", H: "db3/6", I: "[c3@11 ~@5]/3", J: "[c3@16 db3@11 eb3@3 f3@2]/4",
  K: "db3/2",
})).s("gm_guitar_harmonics").gain(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@3 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 F@4 G H E@2 B@2 C@2 D@2 I@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2
  D@2 E@2 B@2 C@2 F@4 G H E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 I@4 E@2 B@2 C@2 D@2 E@2 B@2 C@2 J@4 ~
>`.pickRestart({
  A: "[~@8 [ab3,db4] [db3,ab3] [db3,f3,ab3] db3!2 [db3,f3,ab3]!2 db3 db3 [db3,f3,ab3] [db3,f3,ab3,db4] [db3,f3,ab3]@2 [db3,f3,ab3]!2 [db3,f3,ab3,db4], ~@15 [db3,f3]@3 db4@4 db4@8 db4@6 ~@2 db4@8 ~@2, ~@11 [f3,ab3]@2 ~@2 [f3,ab3]@2 ~@7]/3", // Db5 Db Fm
  B: "[[db3,bb3]!2 [db3,gb3,bb3,db4] [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4]!2 [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4]!2 [db3,gb3,bb3]!3 [db3,gb3,bb3,db4]!2, [gb3,db4]@2 ~@9 db4@3 ~@2]/2", // Gb Gb5
  C: "[[bb2,bb3]!2 [bb2,f3,bb3,db4] [bb2,f3,bb3,db4]@2 [bb2,f3,bb3,db4]!2 [bb2,f3,bb3,db4]@2 [bb2,f3,bb3,db4]!2 [bb2,f3,bb3,db4]@2 [bb2,f3,bb3,db4] [bb2,bb3,db4]!2, [f3,db4] ~@6 f3]/2", // Bb Bbm Db
  D: "[c4 [eb3,c4] [eb3,ab3,c4] [eb3,ab3,c4]@2 [eb3,ab3,c4]!2 [ab2,ab3,c4]@2 [ab3,c4] [eb3,ab3,c4] [ab2,ab3,c4]@2 [ab2,ab3,c4] [ab2,eb3,ab3,c4]!2, [ab2,ab3,eb4]@2 [ab2,eb4]@3 [ab2,eb4]@2 eb3@3 ~ [eb3,eb4]@3 ~@2, eb3 ~@13 eb4@8 ~@6 eb4@4, ~@9 ab2@2 ~@5]/2", // Cm Ab Ab5 Eb
  E: "[[db3,ab3,db4] [db3,ab3] [db3,f3,ab3] db3!2 [db3,f3,ab3]!2 db3 db3 [db3,f3,ab3] [db3,f3,ab3,db4] [db3,f3,ab3]@2 [db3,f3,ab3]!2 [db3,f3,ab3,db4], f3@2 ~ [f3,ab3]@2 ~@2 [f3,ab3]@2 ~@7, ~ db4@2 db4@4 db4@3 ~ db4@4 ~]/2", // Db5 Db Fm
  F: "[c4@2 [eb3,c4]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@4 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [ab2,ab3,c4]@4 [ab3,c4]@2 [eb3,ab3,c4]@2 [ab2,ab3,c4]@4 [ab2,ab3,c4]@2 [ab2,eb3,ab3,c4]@2 ~@2 [bb3,db4]@14 [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4]@14 [db3,gb3,bb3,db4,gb4]!2, [ab2,ab3,eb4]@4 [ab2,eb4]@6 [ab2,eb4]@4 eb3@6 ~@2 [eb3,eb4]@6 ~@3 [db3,gb3]@15 ~@18, eb3 ~@13 eb4@8 ~@6 eb4@4 gb4@30 ~@2, ~@9 ab2@2 ~@4 [ab2,eb3,ab3,c4] ~@16]/4", // Cm Ab Bbm Gb Ab5 Eb Gb5 Ab
  G: "[db3,gb3,bb3,db4]@7 [db3,gb3,bb3,db4], gb4", // Gb
  H: "[db3,gb3,bb3,gb4]@2 [db3,gb3,bb3,gb4]@2 [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4]@2 ~ bb3 [gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4]@2, db4@2 ~@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@9 db3@3 ~@4", // Gb
  I: "[[gb2,db3,bb3,db4] [gb2,db3,bb3] [gb2,db3,gb3,bb3] [gb2,db3]!2 [gb2,db3,gb3,bb3]!2 [gb2,db3] [gb2,db3] [gb2,db3,gb3,bb3] [gb2,db3,gb3,bb3,db4] [gb2,db3,gb3,bb3]@2 [gb2,db3,gb3,bb3]!2 [gb2,db3,gb3,bb3,db4], gb3@2 ~ [gb3,bb3]@2 ~@2 [gb3,bb3]@2 ~@7, ~ db4@2 db4@4 db4@3 ~ db4@4 ~]/2", // Gb Gb5 Gb Gb5 Gb
  J: "[c4@2 [eb3,c4]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@4 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [ab2,ab3,c4]@4 [ab3,c4]@2 [eb3,ab3,c4]@2 [ab2,ab3,c4]@4 [ab2,ab3,c4]@2 [ab2,eb3,ab3,c4]@2 ~ ab2 [db3,ab3,db4]@32, [ab2,ab3,eb4]@4 [ab2,eb4]@6 [ab2,eb4]@4 eb3@6 ~@2 [eb3,eb4]@6 ~@3 f3@33, eb3 ~@13 eb4@8 ~@6 eb4@4 ~@32, ~@9 ab2@2 ~@4 [ab2,eb3,ab3,c4] ~@16]/4", // Cm Ab Db5 Ab5 Eb Ab
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.2)

// chords · rock organ
const rock_organ = note(`<
  ~ A@6 B@2 ~@8 A@6 B@2 ~@12 C@6 D@2 ~@2 A@6 B@2 ~@20 C@6 D@2 A@6 B@2 C@6 D@2 ~@4 A@6 B@2 A@6 B@2 ~@3
>`.pickRestart({
  A: "[[f4,ab4] gb4 f4, db5, ~ bb4@2]/6", B: "[eb4,ab4,c5]/2", C: "[[f5,ab5] gb5 f5, db6, ~ bb5@2]/6",
  D: "[eb5,ab5,c6]/2", // Ab
})).s("gm_rock_organ").gain(0.36)

// other · distortion guitar
const distortion_guitar_2 = note(`<
  ~ A@2 B C D@2 E@2 ~@8 A@2 B C D@2 E@2 ~@22 A@2 B C D@2 E@2 ~@28 A@2 B F D@2 G@2 H ~@11 A@2 B F D@2 I@2 J@2 K F D@2 L@2
  ~@3
>`.pickRestart({
  A: "[db4@22 eb4@5 ~ eb4@4]/2", B: "bb3", C: "~@2 bb4@3 ab4@2 ~ gb4@3 f4@3 eb4@2", D: "[eb4@10 ~ db4 eb4@2 f4@2]/2",
  E: "[~@6 ab4@25 ~, eb4@31 ~]/2", F: "~@2 bb4@3 ab4@2 ~ gb4@3 f4@3 gb4 ~", G: "[~@6 ab4@8 bb4@8 c5@9 ~, eb4@15 ~]/2",
  H: "db5@9 ~@7", I: "[~@3 ab4@4 bb4@4 c5@3 db5 c5, eb4@15 ~]/2", J: "[ab3@22 db4@2 eb4@4 eb4@3 ~]/2",
  K: "eb4 db4@2 bb3@5", L: "[~@3 ab4@4 bb4@4 c5@5, eb4]/2",
})).s("gm_distortion_guitar").gain(0.45)

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

// drums · snare
const snare = s("sd").struct("<A B@15 C B@15 C B@13 C B@15 C B@11 D B@27 E B@15 F ~@3>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x!2 ~@2 x ~@4 x ~@2", E: "~@2 x ~@4 x!2 ~@3 x!2 ~@2",
  F: "~@3 x!2 ~@2 x ~@4 x!2 ~@2",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B A@7 B A@7 B A@7 B A@3 C A@17 B A@7 B A@7 D A@3 E A@15 B A@11 F A@7 B A@7 B ~@3
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "x!2 ~@4 x ~", D: "x!7 ~", E: "~@2 x!2", F: "x ~@2 x!5",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@7 B ~@7 C ~@7 B ~@7 D ~@3 E ~@3 C ~@3 F ~@9 B ~@7 D ~@11 G ~@3 C ~@3 F ~@7 B ~@3 C ~@3 F ~@11 B ~@7 B ~@3
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x", C: "~@5 x ~@2", D: "~@10 x!2 ~@4", E: "~@3 x!5", F: "~@7 x", G: "~@6 x ~@2 x ~@6",
})).gain(0.64)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~ A@8 ~@8 A@8 ~@11 B A@18 ~@20 A@44 C ~@2>".pickRestart({
  A: "x!16", B: "~@3 x!5", C: "x",
})).gain(0.24)

stack(
  bass, whistle, distortion_guitar, piano, overdriven_guitar, guitar_harmonics, acoustic_guitar_steel, rock_organ,
  distortion_guitar_2, kick, snare, low_tom, hihat, mid_tom, open_hat, crash, tambourine
)

More by Nomadi