Strudelify

Cosa penserai di me

Daniele

KeyB♭ majorTempo88 bpm
0:00/0:00
// Cosa penserai di me — Daniele
// 88 bpm, 4/4, key A# 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: duplicate parts dropped: ch 16 piano (copy of ch 5 voice oohs)
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · fretless bass
const bass = note(`<
  A B A B A B A B A C A B A B A D A B A B A E F@2 G H I F@2 G H I J A B K L K M K L K L K N F@2 G H I F@2 G H I J A B A
  B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "bb1@2 ~ f1@4 ~", B: "bb1@4 ~@2 f1@9 ~", C: "bb1@2 ~ f1@4 bb1", D: "bb1@4 ~@2 f1@8 g1 f1",
  E: "bb1@4 ~@2 f1@8 f1 g1", F: "[f1@6 f2@4 f2@3 ~ f1@8 f2@9 ~]/2", G: "bb1@2 ~ bb1@3 d2 bb1",
  H: "eb2@5 ~ ab1@7 ~ c2 db2", I: "d2@5 ~ g1@9 ~", J: "c2 ~ f1!2", K: "c2@2 ~ g1@4 ~", L: "c2@4 ~@2 g1@9 ~",
  M: "c2@4 ~@2 g1@8 a1 g1", N: "c2@4 ~@2 g1@8 g1 a1",
})).s("gm_fretless_bass").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@10 A@4 ~@4 A@4 ~@19 B@4 ~@19 A@4 ~@10>".pickRestart({
  A: "[f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~ [eb5,g5,bb5] ~", // F Eb
  B: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~ [f5,a5,c6] ~", // G F
})).s("gm_string_ensemble_1").gain(0.12).pan(0.4)

// chords · percussive organ
const percussive_organ = note("<~@2 A@4 ~@62 A@8 ~@2>".pickRestart({
  A: "[f5@3 g5@5 f5@3 g5@5 f5@3 g5@5 [d5,f5]@3 [eb5,g5]@5, bb4, d5 d5 d5 ~, ~@6 eb5 ~@15 eb5 ~@15 eb5 ~@25]/4", // Dm Eb
})).s("gm_percussive_organ").gain(0.1).pan(0.7)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@2 A B A C ~@12 D@3 ~@12 A B E F ~@4 G@3 ~@24 A B A C A B A C ~@2>".pickRestart({
  A: "d4@2 f4@2 d4 ~ c4@6 ~@2 bb3 c4", B: "d4@2 f4@2 d4 ~ c4@4 bb3 ~ g3@2 bb3 ~", C: "d4@2 f4@2 g4 ~ bb4@4 c5 ~@5",
  D: "~@2 d4 c4@2 bb3 ~@2", E: "e4@2 g4@2 e4 ~ d4@6 ~@2 c4 d4", F: "e4@2 g4@2 a4 ~ c5@4 d5 ~@5",
  G: "~@2 e4 d4@2 c4 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.28).pan(0.6)

// chords · synth brass 2
const synth_brass_2 = note("<~@22 A@2 B C D A@2 B C D E ~@12 A@2 B C D A@2 B C D E ~@22>".pickRestart({
  A: "[[bb3,eb4,g4]@6 [c4,f4,a4]@4 [eb4,g4,bb4]@3 ~ [c4,f4,a4]@8 g4@4 f4@6, ~@11 [bb3,eb4]@5]/2", // Eb F Eb F Eb5
  B: "[d4,f4] ~@2 [ab3,d4,f4]@2 ~@3, bb3 ~@15", C: "[bb3,d4,eb4,g4]@3 ~@3 [ab3,c4,gb4]@4 ~@6",
  D: "[a3,c4,d4,f4]@2 ~@4 [g3,bb3,d4,f4]@3 ~@7", E: "[bb3,eb4,g4]@3 ~@5 [a3,c4,f4]@3 ~@5",
})).s("gm_synth_brass_2").gain(0.09).pan(0.4)

// other · melodic tom
const melodic_tom = note("<~@23 A ~@2 B ~ A ~@17 A ~@2 B ~ A ~@26>".pickRestart({
  A: "~@6 ab2 ~", B: "~@12 db4 ~ gb3 bb2",
})).s("gm_melodic_tom").gain(0.58).pan(0.3)

// chords · epiano1
const epiano1 = note(`<
  A B A B C B D B C B A B C B D B C B D B C B E@2 F G H E@2 I G J@2 C B K L M L M L K L K L E@2 N G H E@2 N G J@2 C B C
  B C B D B A B C B O B A B A B O B P@2
>`.pickRestart({
  A: "d4@2 f4@2 d4@2 c4@7 eb4@3, [f3,a3]@5 ~ eb3@10", B: "[f3,a3,d4]@6 [g3,bb3,eb4,g4]@9 ~",
  C: "d4@2 f4@2 d4@2 c4@7 eb4@3, a3@5 ~ eb3@10", D: "d4@2 f4@2 d4@2 c4@7 eb4@3, [f3,a3]@5 ~@11",
  E: "[[f3,bb3,eb4,g4]@6 [f3,c4,f4,a4]@4 [f3,eb4,g4,bb4]@4 [f3,c4,f4,a4]@5 ~@9 f6@4, ~@14 gb4 ~@4 f3@4 bb4 c5 f5 bb5 c6@5, ~@5 bb3@3, ~@21 c4@11, ~@11 f4@5]/2", // Eb F Eb F
  F: "[bb2,f3,c4,f4]@3 ab3@2 ~@2 f4, ~@3 [bb2,f3]@5, ~@3 f4@4 ~, ~@3 d4@3 d4@2, ~@5 ab3@3", // Bbsus2 Bb5
  G: "[eb3,bb3,d4,f4,g4]@3 ab3@4 ab3, ~@3 [ab2,eb3,c4,eb4]@5", // Ebmaj7 Ab
  H: "a3@2 a3 ~@4 f4, [d3,c4,d4,f4]@3 [g2,d3,d4]@5, ~@3 f4@4 ~, ~@3 bb3@3 bb3@2, ~@5 g3@3", // Dm7 G5
  I: "[bb2,f3,c4,d4,f4]@3 ab3@2 ~@2 f4, ~@3 [bb2,f3]@5, ~@3 f4@4 ~, ~@3 d4@3 d4@2, ~@5 ab3@3", // Bb Bb5
  J: "[a3@2 a3 ~@5 [c3,bb3,eb4]@2 ~@2 c4@2 ~ f4, [d3,c4,d4,f4]@3 [g2,d3,d4]@7 ~@2 [f2,f3]@4, ~@3 f4@4 f4@3 ~@2 f4@3 ~, ~@3 bb3@3 bb3@2 ~@6 c4@2, ~@5 g3@5 ~@6]/2", // Cm7 Dm7 G5 F
  K: "e4@2 g4@2 e4@2 d4@7 f4@3, [g3,b3]@5 ~ f3@10", L: "[g3,b3,e4]@6 [a3,c4,f4,a4]@9 ~",
  M: "e4@2 g4@2 e4@2 d4@7 f4@3, [g3,b3]@5 ~@11", // G
  N: "[bb2,f3,a3,c4,f4]@3 ab3@2 ~@2 f4, ~@3 [bb2,f3]@5, ~@3 f4@4 ~, ~@3 d4@3 d4@2, ~@5 ab3@3", // F Bb5
  O: "d4@2 f4@2 d4@2 c4@7 eb4@3, a3@5 ~@11", P: "[f4@9 ~@2 d5@17 ~@4, [bb2,f3,a3,c4,d4]@27 ~@5, ~@9 f4@18 ~@5]/2",
})).s("gm_epiano1").gain(0.35)

// chords · epiano1 · soft notes
const epiano1_soft = note(`<
  A ~ A ~ B ~ C ~ B ~ A ~ B ~ C ~ B ~ C ~ B ~@3 D ~@4 E ~@2 F B ~ G ~ H ~ H ~ G ~ G ~@3 I ~@4 I ~@2 F B ~ B ~ B ~ C ~ A
  ~ B ~ J ~ A ~ A ~ J ~ K@2
>`.pickRestart({
  A: "~@3 g3@5", B: "f3@5 ~ g3@10", C: "~@3 [eb3,g3]@5", D: "[a3,d4]@3 ~@5", E: "a3@3 ~@5", F: "g4 ~ a3@2",
  G: "~@3 a3@5", H: "~@3 [f3,a3]@5", I: "d4@3 ~@5", J: "f3@5 ~ [eb3,g3]@10", K: "[~@9 a4@19 ~@4]/2",
})).s("gm_epiano1").gain(0.2)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@2 A B A C ~@12 D@3 ~@12 A B E F ~@4 G@3 ~@24 A B A C A B A C ~@2>".pickRestart({
  A: "d5@2 f5@2 d5 ~ c5@6 ~@2 bb4 c5", B: "d5@2 f5@2 d5 ~ c5@4 bb4 ~ g4@2 bb4 ~", C: "d5@2 f5@2 g5 ~ bb5@4 c6 ~@5",
  D: "~@2 d5 c5@2 bb4 ~@2", E: "e5@2 g5@2 e5 ~ d5@6 ~@2 c5 d5", F: "e5@2 g5@2 a5 ~ c6@4 d6 ~@5",
  G: "~@2 e5 d5@2 c5 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.45)

// other · electric guitar muted
const electric_guitar_muted = note("<~@14 A@4 ~@19 B@4 ~@37>".pickRestart({
  A: "[f3!2 g3 ~ bb3!2 g3 ~ bb3!2 g3 ~ bb3!2 c4 f3@2 f3 g3 ~ bb3!2 g3 ~ bb3!2 g3 bb3 ~ bb3@2 ~]/2",
  B: "[g3!2 a3 ~ c4!2 a3 ~ c4!2 a3 ~ c4!2 d4 g3@2 g3 a3 ~ c4!2 a3 ~ c4!2 a3 c4 ~ c4@2 ~]/2",
})).s("gm_electric_guitar_muted").gain(0.22).pan(0.7)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@33 A B ~@21 A B A B ~@18>".pickRestart({
  A: "~@12 bb4 bb3 f5 f4", B: "c6 c5 f5 f4 ~@4 bb4 bb3 f5 f4 c6 c5 f5 f4",
})).s("gm_lead_2_sawtooth").gain(0.22).pan(0.4)

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

// drums · rim
const rim = s("rim").struct("<A@22 ~@2 B@3 ~@2 B@4 A@12 ~@2 B@3 ~@2 B@4 A@20 ~@2>".pickRestart({
  A: "~ x", B: "~ x!3",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!22 ~@11 [~ x ~ x]!4 [~@3 x]!8 ~@11 [~ x ~ x]!20 ~@2>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@24 A@3 ~@2 A@4 ~@4 B@8 ~@2 A@3 ~@2 A@4 ~@22>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@26 [~@14 x!2] ~@22 [~@14 x!2] ~@28>").gain(0.56)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@21 B A B A@4 B A@15 B A B A@4 B A@24 ~@2>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~@3 x!2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@21 A ~ A ~@4 A ~@15 A ~ A ~@4 A ~@26>".pickRestart({
  A: "~@3 x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 [~@13 x ~@2] ~@22 [~@13 x ~@2] ~@28>").gain(0.56)

// drums · splash
const splash = s("cr").struct(`<
  ~@5 A ~@12 B ~@3 C ~ B ~@2 C ~ B ~@6 A ~@4 B ~@3 C ~ B ~@2 C ~ B ~@18 A ~@3 A ~@2
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x ~@2 x ~ x ~ x",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct("<~@22 A ~ B@3 A ~ B@4 ~@12 A ~ B@3 A ~ B@4 ~@22>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x ~@3 x ~@2",
})).gain(1.05)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@22 A B C@3 A B C@4 ~@12 A B C@3 A B C@4 ~@22>".pickRestart({
  A: "~ x!2 ~@3 x ~", B: "~ x ~@3 x ~@2", C: "~ x",
})).gain(1.05)

// drums · congas
const congas = s("conga:33").struct("<~@23 A B@3 ~ A B@4 ~@13 A B@3 ~ A B@4 ~@22>".pickRestart({
  A: "~@3 x ~@2 x!2", B: "~@6 x!2",
})).gain(1.28)

// drums · ht
const ht = s("ht").struct("<~@37 [~ x ~@2]!8 ~@33>").gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<[~ x ~@3 x ~@2]!76 ~@2>").gain(0.32)

stack(
  bass, string_ensemble_1, percussive_organ, acoustic_guitar_nylon, synth_brass_2, melodic_tom, epiano1, epiano1_soft,
  acoustic_guitar_steel, electric_guitar_muted, lead_2_sawtooth, kick, rim, clap, snare, low_tom, pedal_hat, open_hat,
  mid_tom, splash, bongos, bongos_2, congas, ht, shaker
)

More by Daniele