Strudelify

Soli

Battisti

KeyC majorTempo78 bpm
0:00/0:00
// Soli — Battisti
// 78 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Orch." alto sax (copy of ch 5 "Orch." string ensemble 1); ch 7 "Orch." xylophone (copy of ch 5 "Orch." string ensemble 1)
// note: Full arrangement: all 84 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.

// chords · acoustic guitar steel · "Chit."
const acoustic_guitar_steel = note(`<
  A@2 B@2 C@2 D@2 C@2 D@2 E@2 C@2 D E C@2 F@2 G@2 F@2 G@2 H@2 F@2 G H F I J K L M K N O P F@2 G@2 F@2 G@2 H@2 F@2 G H F
  I L@2 K@2 L@2 K@2 Q@2 L@2 K R L@2 K R L@2 K S ~@2
>`.pickRestart({
  A: "[b4 g4 e4 b3 e4 g4 e4 g4 b4 g4 e4 b3 e4 g4 e4 g4, b5 g5@3]/2",
  B: "[a4 e4 c4 a3 c4 e4 c4 e4 a4 e4 c4 a3 c4 e4 c4 e4, b5 a5@3]/2", C: "b4 g4 e4 b3 e4 g4 e4 g4",
  D: "a4 e4 c4 a3 c4 e4 c4 e4", E: "g#4 d#4 c4 g#3 c4 d#4 c4 d#4",
  F: "[e4,g4,b4] c4 [e4,g4,b4] c4 [e4,g4,b4] c4 [e4,g4,b4] c4", G: "[e4,a4] c4 [e4,a4] c4 [e4,a4] c4 [e4,a4] c4",
  H: "[d#4,f4,g#4] c4 [d#4,f4,g#4] c4 [d#4,f4,g#4] c4 [d#4,f4,g#4] c4", // Fm7
  I: "[e4,g4,b4] c4 [e4,g4,b4] c4 [c4,e4,g4,b4]@4", J: "[c4,e4,g4,a4]!8", K: "[c4,e4,a4]!8", L: "[c4,e4,g4,b4]!8",
  M: "[a#3,d4,g4]!4 [a#3,c4,e4,g4]!4", N: "[c4,d#4,g#4]!4 [d4,f4,g#4]!4", O: "[a#3,d4,g4]!8",
  P: "[c4,f4,a4]!4 [b3,f4,g4]!4", Q: "[g#3,c4,d#4]!8", R: "[g#3,c4,e4]!8", S: "[g#3,c4,e4]!4 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.11)

// chords · acoustic guitar steel · "Chit." · soft notes · G#aug Cmaj7
const acoustic_guitar_steel_2 = note("<~@81 [~@4 [g#3,c4,e4]!4] [[c4,e4,g4,b4]!8]!2>")
  .s("gm_acoustic_guitar_steel").gain(0.03)

// bass · electric bass finger · "Basso"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@4 A@2 B@2 A@4 B@2 A@2 B@4 A@2 B@2 A@2 C D E F D G H I A@2 B@2 A@2 B@4 A@2 B@2 A@2 E@2 D@2 E@2
  D@2 J@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2
>`.pickRestart({
  A: "c2/2", B: "f2/2", C: "a1", D: "f2", E: "c2", F: "g2 c2", G: "f2 a#1", H: "d#2", I: "d2 g2", J: "g#2",
})).s("gm_electric_bass_finger").gain(0.13)

// other · string ensemble 1 · "Orch."
const string_ensemble_1 = note("<~@60 A B C@4 D E F@4 G H I@2 G H I@2 G J ~@2>".pickRestart({
  A: "g4", B: "g4@6 a4 b4 a4 g4 a4 g4 a4 g4 a4 g4",
  C: "[a4@2 c5@22 a4@2 b4@2 g4@2 a4 g4@3 e4@2 d4@2 e4 d4@3 b3@2 g3@2 a3 g3@13 a3@2 g3@2]/4", D: "a3@3 b3@2 c4@11",
  E: "~@7 c4", F: "[d#4@20 c4 d4@2 c4 d#4@2 c4 d4@3 c4 e4@25 e4 f4 e4 f4 e4 f4 e4 f4]/4", G: "e4 c4 a3@14",
  H: "g#3@2 c4 d4", I: "[e4@24 e4 f4 e4 f4 e4 f4 e4 f4]/2", J: "g#3 ~",
})).s("gm_string_ensemble_1").gain(0.64)

// other · string ensemble 1 · "Orch." · soft notes
const string_ensemble_1_soft = note("<~@81 A B@2>".pickRestart({
  A: "~@2 c4 d4", B: "[e4@24 e4 f4 e4 f4 e4 f4 e4 f4]/2",
})).s("gm_string_ensemble_1").gain(0.08)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@81 [~@7 x!2 ~ x ~ x ~ x ~] [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!2>").gain(0.15)

// drums · snare
const snare = s("sd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@8 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@21 D ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@10 x ~ x!4", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@81 [~@3 x] [~ x ~ x]!2>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@8 D ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C@21 E ~@2
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~ x", C: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", D: "x ~@12 x!2 ~", E: "x!4 ~@4",
})).gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@81 [~@7 x!2 ~ x ~ x ~ x ~] [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!2>").gain(0.15)

// drums · china
const china = s("cr").struct("<~@44 x ~@39>").gain(0.4)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, string_ensemble_1, string_ensemble_1_soft, kick, kick_soft,
  snare, snare_soft, mid_tom, mid_tom_soft, china
)

More by Battisti