Strudelify

Sapore di sale

Paoli

KeyC majorTempo120 bpm
0:00/0:00
// Sapore di sale — Paoli
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · piano · "BASSO"
const piano = note("<A@3 B@3 C@6 D@3 E@3 F@8 G@3 H I ~@61>".pickRestart({
  A: "[~@12 e4 [b3,d#4] [c4,e4]@8 b4@2 [c4,e4] [b3,d#4] [c4,e4]@8 [c4,g4]@2 ~ [c#4,e4] [d4,f4]@6 [c#4,e4]@2 [a3,d4,f4,a4]@2, ~@4 c5@3 ~@9, ~@12 c4@2 ~@8 b3 ~ [a3,a4]@10 ~@2 [d4,f4]@2 ~@10]/3", // B C B C C5 C#m Dm C#m …
  B: "[[g3,d4]@6 g3 ~ a3 ~ b3 ~@2 [b4,d#5] ~@8 [b3,b4,d5]@2 e5 [b4,d#5] ~@8 [c4,g4,b4]@2 d5 [c#5,e5] ~@4 e5@2 [c#5,e5]@2 [a3,d5,f5]@2, [b3,b4]@11 ~ c4@10 ~@2 [a3,a4]@10 ~@2 d4@10 ~@2, ~@3 g4@3 c6@3 b5@3 a5@3 g5@3 f5 [d5,f5]@3 ~@2, ~@12 [c5,e5]@2 [c5,e5]@9 ~ c5@2 [c5,e5]@9 ~ [f4,a4]@6 [a4,c5]@6]/3", // G5 B Bm B Cmaj7 C#m Dm B …
  C: "[[g4,d5]@12 [e4,g4]@6 c5@6 e5@12 ~@6 c5@6 a4@12 ~@6 d5@6 f5@12 ~@10 g3 ~, g3@10 ~@2 c4@23 ~ a3@23 ~ d4@22 ~@2 g3@10 ~@2, [b4,g5]@2 ~@43 d5@3]/6", // G5 Em
  D: "[b4@6 g4@2 f#4@2 f4@2 e4@6 ~@4 e3 ~ [e3,e5]@12 ~@10 a3 ~, g3@11 ~ e3@9 ~@15 a3@9 ~@3, ~@3 b4 ~@3 c5]/3", // E
  E: "[[a3,a4]@12 ~@6 d5@6 f5@6 d5@6 [g3,b4]@9 ~ a4@2, ~@12 d4@11 ~ d4@10 ~@12 g3 ~]/3", // A G
  F: "[g4@11 ~@11 c4 ~ c4@9 ~ b3@2 ~@6 c5@6 ~@6 a3@4 c4 ~@11 d4 ~ d4@9 ~ a3@2 ~@6 d5@6 b4@6 [g3,g4]@2 [f#3,f#4]@2 f4@2 e4@6 b4@6 ~@6 e3@2, g3 ~@11 c4@10 ~@14 a3@17 ~@7 d4@10 ~@14 g3@18 ~@4 f3 ~ e3@17 ~@3, ~@9 c5@3 e5@6 ~@6 a4@6 ~@3 d5@3 f5@6 ~@18 e5@4]/8", // G F#
  G: "[~@2 g3 ~@7 c5@6 ~@8 a3@2 c4@2 ~@6 d5@6 f5@8, ~@4 a3@19 ~@5 d4@19 ~, ~@4 a4@3 ~@5]/3",
  H: "d4@2 d5@2 b4@9 ~ a4@2, ~@2 f4 ~ g4@12", I: "g4@3 g3@3 ~@2",
})).s("gm_piano").gain(0.27)

// chords · rock organ · "BASSO"
const rock_organ = note("<~@54 A@2 B@6 C@5 ~@25>".pickRestart({
  A: "[~@4 c4@2 c4@2 d4@2 c4@2 e4 d#4 [c5,e5,g5]@2 [c5,e5,g5]@2 [c5,e5,g5]@2 [c5,e5,g5]@2 [c5,e5,g5]@2 [c5,e5,g5]@2 [c5,e5,g5]@2 [c4,c5,e5,g5]@2 [c4,c5,e5,g5,b5]@2, ~@6 c6@9 ~, ~@12 c4@10 c4 ~ c4@4 ~@4, ~@6 [c5,e5,g5] e4@7 ~@2]/2", // C Cmaj7 C
  B: "[[d4,c5,e5,g5]@2 [b3,c4,c5,e5,g5]@2 ~ g#3 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [d4,a4,c5,e5]@2 [d4,a4,c5,e5]@2 [e4,a4,c5,e5]@2 [d4,a4,c5,e5]@2 f4 e4 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [f4,a4,d5,f5]@2 [e4,a4,d5,f5]@2 [a3,c4,a4,d5,f5]@2 d4 c#4 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [e4,g4,b4,d5,e5]@2 [e4,g4,b4,d5,f5]@2 [g3,e4,g4,b4,d5,g5]@2 [f#3,f4,g4,b4,d5,a5]@2 f3 f4 [g4,b4,e5]@2 [g4,b4,e5]@2 [g4,b4,e5]@2 [g4,b4,e5]@2 [g4,b4,e5]@2 [g4,b4,e5]@2 [g4,b4,e5]@2 [e4,g4,b4,e5]@2 [f4,g4,b4,e5]@2 [e3,g4,b4,e5]@2, ~@4 a5@18 g5@6 [a4,d5,f5]@2 f4@14 f4 ~ e5@6 [g4,b4,d5]@2 d4@12 d#4 ~@7 [e4,g4,b4,d5,a#5]@2 b5@20, ~@4 [a3,a4,c5,e5]@2 a3@14 c#4 ~ a3@4 c4 ~ d4@10 d4 ~ d4@9 ~@3 g3@18 ~@6 e3@17 ~@3, ~@76 f#4 ~@17 f#4 ~]/6", // C Cmaj7 Am Dm Dm7 G Em7 G7 …
  C: "[[f4,g4,b4,e5]@2 [e4,g4,b4,e5]@2 c4 b3 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [a4,c5,e5]@2 [f4,a4,c5,e5]@2 [a3,g4,a4,c5,e5]@2 ~ g4 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [d4,a4,b4,d5,f5]@2 [f4,c5] b4 [b4,d5,g5]@2 [a4,b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [b4,d5,g5]@2 [g3,b4,d5,g5]@2 ~@8, ~@2 g3 ~ a3@19 ~@5 g#4 ~@21 [a4,d5,f5]@2 g4@4 g4@18 ~@6, ~@2 c6@3 a5@3 b5@3 c6@3 d6@3 e6@3 f6@3 a6@3 g6@6 g6@6 ~@2, ~@4 [a4,c5,e5]@2 c4@16 ~@4 [c4,f4,a4,c5,e5]@2 d4@19 ~@5 c5 ~@27]/5", // Em Am Fmaj7 Am7 Dm Bm7b5 F5 G …
})).s("gm_rock_organ").gain(0.22)

// chords · electric bass finger · "BASSO"
const electric_bass_finger = note("<~@66 A@3 B@3 C@3 D@3 E ~@13>".pickRestart({
  A: "[~@6 [f4,a4,c5]@3 ~@2 f3 [d4,f4,a4]@3 ~@2 d3 [e4,g4,b4,e5]@3 ~@2 e3, ~ a5 f5 ~, ~@12 f3@9 ~ e3 ~ d3@10 d#3 ~ e3@9 ~ g3 ~, ~@9 c5@8 ~@7, ~@3 [f4,a4] ~ [d4,f4,a4] ~ [e4,g4,b4]]/3", // F Dm Em F Dm Em
  B: "[[e4,a4,c5]@3 ~@2 a3 [f4,a4,c5,f5]@3 a4@2 d3 [g4,b4,d5]@3 ~@2 [g3,d4] [e4,g4,c5]@3 ~@2 [g3,f4], a3@10 c4 ~ [d3,d4]@9 ~ a4 ~@7 [f4,g4,b4,d5]@6 c4@12, ~@3 [e4,a4,c5]@3 ~@3 [f4,c5]@3 g3@4 ~@2 c3@4 ~@2, ~@7 [e4,g4,c5]]/3", // Am F G G5 C G7 D G7 …
  C: "[[c4,e4,g4]@3 c4@2 [c3,c4,c5] [c4,f4,a4]@3 ~@2 f3 [d4,f4,a4]@3 ~@2 d3 [e4,g4,b4]@3 g4@2 [b3,g4], c3@8 ~@4 f3@8 ~@2 e4 ~@7 [d4,f4,a4]@6 ~@6 [e4,b4]@6, ~ [e4,g4] f5@2 d5@2 ~@2, ~@18 [c4,f4,a4]@6 d3@8 ~@4 e3@9 ~@3]/3", // C F Dm Em Dm E5 Em F
  D: "[[e4,a4,c5]@6 ~@4 a3@2 [f4,a4,c5,d5]@6 a4@4 a3@2 [f4,a4,c5,a5]@6 ~@4 d3@2 [g4,b4,d5]@6 ~@2 f3 ~ [d3,f#3]@2, a3@10 ~@2 d4@10 a4 ~@19 [g4,b4,d5]@6, ~ [e4,a4,c5] f5@2 ~@4, ~@3 d3@2 ~ d3@2 ~ g3@2 ~, ~@3 [f4,c5] ~ [f4,a4,c5,d6] [d4,b5]@2]/3", // Am Dm7 F G D G Am F5 …
  E: "[g3,g4,b4,d5]@9 ~@7", // G
})).s("gm_electric_bass_finger").gain(0.24)

// chords · acoustic bass · "TAPPETO INTROD."
const acoustic_bass = note("<A@3 B@3 C ~@85>".pickRestart({
  A: "[~ [c4,e4,g4] [a3,c4,e4] [f3,a3,c4,d4]]/3", // C Am Dm7
  B: "[~ f4 [g3,c4,e4]@2 [a3,c4,e4]@2 [f3,a3,c4,d4]@2, [g3,b3,d4] ~@3]/3", C: "[g3,b3,d4]@3 [d3,g3,b3]@3 ~@2",
})).s("gm_acoustic_bass").gain(0.3)

// chords · electric bass pick · "TAPPETO INTROD."
const electric_bass_pick = note("<~@6 A@8 B@6 C@6 D@7 E@6 F@5 C@6 G@6 C@6 D@7 H@6 F@5 C@6 I@6>".pickRestart({
  A: "[~@6 [c4,e4,g4]@12 [a3,c4,e4]@12 [f3,a3,c4,d4]@12 ~@9 f4@3 [g3,b3,e4]@10, ~@21 [g3,b3,d4]@6 ~@5]/8", // C Am Dm7 Em G
  B: "[~@2 [a3,c4,e4]@12 [f3,a3,c4,d4]@12 ~@6 f4@6 c4@9 b3, ~@13 [b3,g4]@6 ~@5, ~@26 d4@9 ~@3 [e4,g4]@10]/6", // Am Dm7 Em
  C: "[~ [a3,c4,e4]@6 [a3,c4,d4,f4]@6 ~@3 f4@3 [e3,b3,e4,g4]@5, ~@13 [g3,b3,d4]@6 ~@5]/6", // Am Dm7 Em G
  D: "[~@4 a4@3 [a3,c4,d4,f4]@6 b3@3 [f4,b4]@3 ~@3 d4@3 [b3,e4,g4]@3, ~ [a3,c4,e4]@6 ~@6 [d4,g4]@6 [c4,f4,a4]@6 ~@3]/7", // Dm7 Fdim Em Am G5 F
  E: "[[c4,e4,a4]@2 ~ c4 ~ f4 c4@2 c4@2 ~@2 d4@2 [b3,e4,g4]@2, ~ [d4,f4,a4] [b3,d4,g4] [e4,g4]@2 [c4,f4,a4]@2 ~]/6", // Am Em Dm G Em F
  F: "[[c4,e4,a4]@6 ~@6 c4@6 g4@6 [g3,f4]@6 c4@9 b3, ~@3 [d4,f4,a4]@6 [b3,d4]@6 [e4,g4]@5]/5", // Am G7 Dm Bm Em
  G: "[~@8 a4@6 ~@3 c4@3 ~@3 f4@3 [c4,c5]@6 c4@6 c4@9 b3, ~ [a3,c4,e4]@6 [a3,d4,f4]@3 [b3,d4,g4]@3 [e4,g4]@6 [e4,g4]@5]/6", // C Am Dm G Em
  H: "[[c4,e4,a4]@2 ~ c4 ~ f4 c4@2 c4@2 c4@2 d4@2 [b3,e4,g4]@2, ~ [d4,f4,a4] [b3,d4,g4] [e4,g4]@2 [f4,a4]@2 ~]/6", // Am Em Dm G Em F
  I: "[~@16 a4@12 ~@6 c4@6 ~@6 f4@6 [e4,g4]@12 [f4,g#4]@12 [e4,g4]@5 ~@15, ~@4 [a3,c4,e4]@24 [a3,d4,f4]@12 [b3,d4,g4]@12 [c4,c5]@29 ~@15]/6", // Em Fm Em Am Dm G C
})).s("gm_electric_bass_pick").gain(0.25)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@31 A B C A B C ~@6 A B C A B C A B C A B ~@13 A B C A B C ~@6 A B C A B C A B C A ~@3
>`.pickRestart({
  A: "~ x ~@5 x", B: "~@5 x ~@2", C: "~@3 x ~@4",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct("<~@6 A ~@11 B ~@11 C ~@5 D E F B E F B ~@23 C ~@5 G E F B E F ~@11 F H ~>".pickRestart({
  A: "x!3 ~@5", B: "~@3 x ~@4", C: "~@2 x!3 ~ x ~@9", D: "~@4 x ~ x ~ x!3 ~@5", E: "~ x ~@5 x", F: "~@5 x ~@2",
  G: "~@2 x!4 ~@2", H: "~@3 x!2 ~@3",
})).gain(0.49)

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

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@11 B ~@35 B ~@23 C ~@13>".pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2", C: "~@10 x!2 ~@4",
})).gain(0.55)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@32 A B ~ A ~@2 A B ~ A ~@2 A B ~ A B ~ A B ~ A C ~@13 A B ~ A B ~ A B ~ A ~@2 A B ~ A B ~ A B ~ A B ~
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "x",
})).gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A ~@11 B ~@11 C ~@11 D ~@11 E ~@11 F ~@11 B ~@13>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~@8 x!2 ~@6", C: "~ x", D: "~@10 x!2 ~@4", E: "~@2 x!4 ~@2", F: "~@8 x ~ x!2 ~@4",
})).gain(0.55)

// drums · crash
const crash = s("cr").struct("<A ~@5 A ~@11 A ~@11 A ~@5 A ~@5 A ~@11 A ~@11 A ~@11 A ~@11 A ~>".pickRestart({
  A: "~@3 x",
})).gain(0.38)

// drums · high tom
const high_tom = s("ht").struct("<A ~@29 B ~@11 C ~@11 D ~@23 E ~@11 F ~>".pickRestart({
  A: "~@3 x!3 ~@2", B: "~@10 x!2 ~@4", C: "~ x", D: "x!3 ~ x ~@11", E: "~@6 x!2 ~@8", F: "~@5 x ~@2",
})).gain(0.55)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A B ~ A C ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A ~@26 A B ~ A B ~ A B ~ A ~@26
>`.pickRestart({
  A: "x!2 ~@6", B: "~@4 x!2 ~@2", C: "~@5 x ~@2",
})).gain(0.38)

stack(
  piano, rock_organ, electric_bass_finger, acoustic_bass, electric_bass_pick, kick, rim, snare, hihat, low_tom,
  open_hat, mid_tom, crash, high_tom, ride, tambourine
)

More by Paoli