Strudelify
I treni di Tozeur cover art

Mondi Lontanissimi

I treni di Tozeur

Battiato

KeyE♭ majorTempo107 bpm
0:00/0:00
// I treni di Tozeur — Battiato
// 107 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 "tk5" choir aahs (copy of ch 16 "tk16" piano)
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(107/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 · synth bass 2 · "tk2"
const bass = note(`<
  ~ A@3 B C D E F C D E G@3 H I J K L H I J I J M N A@3 O P O Q O P O Q R@2 S T L U I S T L V L U W A@3 B C D E F C D E
  X A@3 B C D E F C D E G@3 H I S T Y@2 ~@2
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", B: "c2 ~ c2 ~ c2 ~ c2 ~ ab1 ~ ab2!2 ab1 ~ ab2!2",
  C: "eb1 ~ eb2!2 eb1 ~ eb2!2 bb1 ~ bb2!2 bb1 ~ bb2!2", D: "c2 g2 c3 g2 c2 g2 c3 g2 ab1 ~ ab2!2 ab1 ~ ab2!2",
  E: "eb1 ~ eb2!2 eb1 ~ eb2!2 bb1 ~ f2 bb2 bb1 ~ f2 bb2", F: "bb1 f2 bb2 f2 bb1 f2 bb2 f2 ab1 ~ ab2!2 ab1 ~ ab2!2",
  G: "[bb1 f2 bb2 f2 bb1 f2 bb2 f2 g1@15 ~ g1@15 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~]/3",
  H: "d2 ~ d2 ~ d2 ~ d2 ~ c2 ~ c2 ~ c2 ~ c2 ~", I: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  J: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ f2 ~ f2 ~ f2 ~ f2 ~", K: "g2 ~ g2 ~ g2 ~ g2 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  L: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", M: "g2 ~ g2 ~ g2 ~ g2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~",
  N: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ c2 ~ c2 ~ c2 ~ c2 ~", O: "ab1 ~ ab2!2 ab1 ~ ab2!2 eb1 ~ eb2!2 eb1 ~ eb2!2",
  P: "bb1 ~ bb2!2 bb1 ~ bb2!2 c2 g2 c3 g2 c2 g2 c3 g2", Q: "bb1 ~ f2 bb2 bb1 ~ f2 bb2 bb1 f2 bb2 f2 bb1 f2 bb2 f2",
  R: "g1@15 ~", S: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ d2 ~ d2 ~ d2 ~ d2 ~", T: "c2 ~ c2 ~ c2 ~ c2 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  U: "f2 ~ f2 ~ f2 ~ f2 ~ g2 ~ g2 ~ g2 ~ g2 ~", V: "f2 ~ f2 ~ f2 ~ f2 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  W: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", X: "bb1 f2 bb2 f2 bb1 f2 bb2 f2 c2 ~ c2 ~ c2 ~ c2 ~",
  Y: "[bb1 ~ bb1 ~ bb1 ~ bb1 ~ eb2@16 ~@8]/2",
})).s("gm_synth_bass_2").gain(0.57)

// chords · synth strings 1 · "tk3"
const synth_strings_1 = note(`<
  ~ A@5 B@4 C@3 ~ D@4 E@4 F@2 G H@5 I@8 ~@2 G J@4 G K@6 A@5 B@4 L@8 B@4 C@3 ~ M@3 G N@3 ~@2
>`.pickRestart({
  A: "[e4@2 f4@5 [ab3,c4] g3 [d3,f3], [g3,c4]@7 eb3@2 ~, ~@4 bb3]/5", // Ab Dm C5
  B: "[g3 ab3 g3 [d3,f3]@2 [ab3,c4] g3 [d3,f3], eb3@3 ~@2 eb3@2 ~, c4@2 bb3@3 ~ bb3@2]/4", // Dm Ab Dm
  C: "[g3 ab3 g3 [d3,f3]@2 ~, eb3 ~, c4@2 bb3@3 ~]/3", // Dm
  D: "[~ [g3,eb4] [f3,d4] [g3,c4] ~ d4 [g3,eb4] [d4,f4], ~ bb3@2 eb4@2 ~@3, ~ bb3, ~@2 f3 ~]/4", // Cm Dm C5 Cm Dm
  E: "[[g3,c4] ~ d4 [g3,eb4] [f3,d4] [g3,c4] [f3,bb3]@2, eb4@2 ~ bb3@2 eb4@3, ~ [f3,bb3]@2 ~@5]/4", // C5 Cm Dm C5 Bb5
  F: "[[g3,eb4] d4 [ab3,eb4]@2, bb3 ~, ~ f3@3]/2", G: "[g3,eb4] [f3,d4], bb3",
  H: "[[g3,c4] [f3,bb3]@2 e4@2 f4@5, eb4@3 [g3,c4]@7]/5", // C5 Bb5 C5
  I: "[[ab3,c4] g3 [d3,f3] g3 ab3 g3 [d3,f3]@2, eb3@2 ~ eb3@3 ~@2, ~ bb3@2 c4@2 bb3@3]/4", // Ab Dm
  J: "[[g3,c4] ~ d4 [g3,eb4] [d4,f4] [g3,c4] ~ d4, eb4@2 ~@3 eb4@2 ~, ~ bb3@4 ~@3, ~ f3@2 ~@3 [f3,bb3]@2]/4", // C5 Cm Dm C5 Bb5
  K: "[[g3,c4] [f3,bb3]@2 [g3,eb4] d4 [ab3,eb4]@2 [g3,eb4] [f3,d4] [g3,c4] [f3,bb3]@2, eb4@3 bb3@2 ~@2 bb3@2 eb4@3, ~@4 f3@3 ~@5]/6", // C5 Bb5 Cm Ab5 Cm Dm C5 Bb5
  L: "[g3 ab3 g3 [d3,f3]@2 e4@3 e4@5 [ab3,c4] g3 [d3,f3], eb3@3 ~@10 eb3@2 ~, c4@2 bb3@3 [g3,c4]@8 ~ bb3@2]/8", // Dm Ab Dm C5
  M: "[~ [g3,eb4] [f3,d4] [g3,c4] [ab3,c4]@2, ~ bb3@2 eb4@3]/3", N: "[[g3,c4] [f3,bb3]@2 [g3,bb3,eb4]@2 ~, eb4 ~]/3",
})).s("gm_synth_strings_1").gain(0.19)

// other · string ensemble 2 · "tk6"
const string_ensemble_2 = note(`<
  ~@3 A B C D E@2 C D F@2 ~ G H I J K L H M N O J K P ~@2 Q R S T U V W V X ~@2 J Y Z H M J K AA@3 H M ~@2 A AB AC AD
  AE@2 C D AF@3 ~ A AB AC AD AE@2 C D F@2 ~ G H I J K AG@2 ~@2
>`.pickRestart({
  A: "~@8 [g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4]", // G7 Asus2 Csus2 Fmaj7 A7 Cmaj7 Dsus2 Fsus2
  B: "~@8 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]", // Ab Bb C D
  C: "[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@3 [bb3,bb4]@2 [f4,f5]@3", // Eb Bb Eb F Bb F
  D: "[g4,g5]@2 [f4,f5] [eb4,eb5] [d4,d5]@2 [eb4,eb5]@2 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]", // G F Eb D Eb Ab Bb C …
  E: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]]/2", // Eb Bb Eb F Ab Bb C D
  F: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 ~@8]/2", G: "~@10 g3@2 bb3@2 eb4 ~",
  H: "~@2 f3@2 bb3@2 d4 ~@3 g3@2 c4@2 eb4@2", I: "c4", J: "~@2 g3@2 bb3@2 eb4 ~@3 f3@2 bb3@2 d4 ~",
  K: "~ g3 c4 eb4 eb4@2 d4@2", L: "eb4@4 f4@3 ~@3 g3@2 bb3@2 eb4 ~", M: "eb4@4 d4@4 eb4@4 f4@3 ~",
  N: "[g3,eb4] [d4,f4], bb3", O: "[bb3,eb4,ab4]", P: "eb4@4 f4@3 ~@9",
  Q: "[g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4] ~@8", R: "[c4,c5]@8 [bb3,bb4]@5 [eb4,eb5]@3",
  S: "[f4,f5]@3 [bb3,bb4]@2 [ab3,ab4]@3 [g3,g4]@8", T: "[ab3,c5]@4 [bb3,bb4]@3 [c4,c5]", U: "[bb3,bb4]",
  V: "[ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5] [eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3", // Ab Bb C D Eb Bb Eb
  W: "[f4,f5]@3 [bb3,bb4]@2 [f4,f5]@3 [g4,g5]@2 [f4,f5] [eb4,eb5] [d4,d5]@2 [eb4,eb5]@2", X: "[f4,f5]",
  Y: "~ g3 c4 eb4 eb4@4", Z: "d4@4 eb4@2 ~@4 g3@2 bb3@2 eb4 ~",
  AA: "[eb4@4 f4@3 ~ [g3,eb4]@8 [d4,f4]@8 [bb3,eb4,ab4]@16 ~@2 g3@2 bb3@2 eb4 ~, ~ bb3@2 ~@3]/3", AB: "~ [c4,c5]",
  AC: "[bb3,bb4]@5 [eb4,eb5]@3 [f4,f5]@3 [bb3,bb4]@2 [ab3,ab4]@3", AD: "[g3,g4] [ab3,c5]",
  AE: "[[bb3,bb4]@6 [c4,c5]@2 [bb3,bb4]@16 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]]/2", // Bb C Bb Ab Bb C D
  AF: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 [e5,g5]@16 ~@8]/3", AG: "[eb4 f4 [g3,bb3,eb4]@4 ~@2]/2",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.1)

// other · string ensemble 1 · "tk7"
const string_ensemble_1 = note(`<
  ~ A B@2 C D E F@2 D E G@2 ~ H I J K L M I N ~@2 K O P Q R S T U V W X Y X Z ~@2 K AA AB I AC K O AD ~ H I N AE@3 AF AG
  AH AI@2 D E AJ@5 AF AG AH AI@2 D E G@2 ~ H I J AK AL AM@2 ~@2
>`.pickRestart({
  A: "c5@2 b4 g4@5",
  B: "[e4@2 f4@2 g4@2 a4@2 g4@4 a4@2 f4@8 ~@2 [g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4]]/2", // G7 Asus2 Csus2 Fmaj7 A7 Cmaj7 Dsus2 Fsus2
  C: "[b3,a4] [c4,d4] [e4,f4] [g4,a4] [c4,b4] [d4,e4] [f4,g4] a4 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]", // B7 Csus2 Fmaj7 Gsus2 Cmaj7 Dsus2 Fsus2 Ab …
  D: "[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@3 [bb3,bb4]@2 [f4,f5]@3", // Eb Bb Eb F Bb F
  E: "[g4,g5]@2 [f4,f5] [eb4,eb5] [d4,d5]@2 [eb4,eb5]@2 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]", // G F Eb D Eb Ab Bb C …
  F: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]]/2", // Eb Bb Eb F Ab Bb C D
  G: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 ~@8]/2", H: "~@10 g4@2 bb4@2 eb5 ~",
  I: "~@2 f4@2 bb4@2 d5 ~@3 g4@2 c5@2 eb5@2", J: "c5", K: "~@2 g4@2 bb4@2 eb5 ~@3 f4@2 bb4@2 d5 ~",
  L: "~ g4 c5 eb5 eb5@2 d5@2", M: "eb5@4 f5@3 ~@3 g4@2 bb4@2 eb5 ~", N: "eb4@4 d4@4 eb4@4 f4@3 ~",
  O: "~ g4 c5 eb5 eb4@2 d4@2", P: "eb4@4 f4@3 ~ c5@4 b4@4", Q: "g4", R: "f4",
  S: "[g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4] [b3,a4] [c4,d4] [e4,f4] [g4,a4] [c4,b4] [d4,e4] [f4,g4] a4", // G7 Asus2 Csus2 Fmaj7 A7 Cmaj7 Dsus2 Fsus2 …
  T: "[c4,c5]@8 [bb3,bb4]@5 [eb4,eb5]@3", U: "[f4,f5]@3 [bb3,bb4]@2 [ab3,ab4]@3 [g3,g4]@8",
  V: "[ab3,c5]@4 [bb3,bb4]@3 [c4,c5]", W: "[bb3,bb4]",
  X: "[ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5] [eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3", // Ab Bb C D Eb Bb Eb
  Y: "[f4,f5]@3 [bb3,bb4]@2 [f4,f5]@3 [g4,g5]@2 [f4,f5] [eb4,eb5] [d4,d5]@2 [eb4,eb5]@2", Z: "[f4,f5]",
  AA: "~ g4 c5 eb5 eb5@4", AB: "d5@4 eb5@2 ~@4 g4@2 bb4@2 eb5 ~", AC: "eb5@4 d5@4 eb5@4 f5@3 ~", AD: "eb4@4 f4@3 ~@9",
  AE: "[c5@4 b4@4 g4@16 f4@16 [g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4]]/3", // G7 Asus2 Csus2 Fmaj7 A7 Cmaj7 Dsus2 Fsus2
  AF: "[b3,a4] [c4,d4] [e4,f4] [g4,a4] [c4,b4] [d4,e4] [f4,g4] a4 [c4,c5]@8", // B7 Csus2 Fmaj7 Gsus2 Cmaj7 Dsus2 Fsus2 C
  AG: "[bb3,bb4]@5 [eb4,eb5]@3 [f4,f5]@3 [bb3,bb4]@2 [ab3,ab4]@3", AH: "[g3,g4] [ab3,c5]",
  AI: "[[bb3,bb4]@6 [c4,c5]@2 [bb3,bb4]@16 [ab3,ab4]@4 [bb3,bb4] [c4,c5] ~ [d4,d5]]/2", // Bb C Bb Ab Bb C D
  AJ: "[[eb4,eb5]@3 [bb3,bb4]@2 [eb4,eb5]@3 [f4,f5]@16 e4@24 f4@24 [g3,f4] [a3,b3] [c4,d4] [e4,f4] [a3,g4] [b3,c4] [d4,e4] [f4,g4], ~@3 g4@6 ~]/5", // Eb Bb Eb F G7 Asus2 Csus2 Fmaj7 …
  AK: "[g3,eb4] [f3,d4], bb3", AL: "[g3,c4,eb4]@2 eb4 d4", AM: "[eb4 f4 [g3,bb3,eb4]@4 ~@2]/2",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.9)

// other · harpsichord · "tk8"
const harpsichord = note(`<
  ~@12 A B C ~@4 D E F ~@2 G H I@2 ~@10 J K ~@5 L M@2 ~ D N O P ~@22 A B C ~@2 L M@2 ~@3
>`.pickRestart({
  A: "~@4 [g3,b3,g4] [b3,b4] [d4,d5] [g4,g5], ~@2 d4 ~", B: "[f4,f5]@3 [e4,e5] [g3,g4] [b3,b4] [d4,d5] [g4,g5]",
  C: "[f4,f5] ~", D: "~@4 eb4 g3 bb3 eb4, ~@8 eb5 ~ g4 ~ bb4 ~ eb5 ~",
  E: "d4 f3 bb3 d4 eb4 g3 c4 eb4, d5 ~ f4 ~ bb4 ~ d5 ~ eb5 ~ g4 ~ c5 ~ eb5 ~", F: "[f3,bb3,eb4,f4,bb4,eb5]",
  G: "eb4 g3 bb3 eb4 d4 f3 bb3 d4, eb5 ~ g4 ~ bb4 ~ eb5 ~@3 f4 ~ bb4 ~ d5 ~",
  H: "eb4 g3 c4 eb4 ab3!2 c4 eb4, ~@2 g4 ~ c5 ~ eb5 ~@3 ab4 ~ c5 ~ eb5 ~",
  I: "[ab3!2 c4 eb4 [g3,c4,e4,g4,c5,e5]@8 ~@4, ~@2 ab4 ~ c5 ~ eb5 ~@25]/2", // C
  J: "[g3,b3,g4] [b3,b4] [d4,d5] [g4,g5] [f4,f5]@3 [e4,e5], d4 ~@3", K: "[g3,g4] [b3,b4] [d4,d5] [g4,g5] [f4,f5]@4",
  L: "eb4 g3 bb3 eb4 d4 f3 bb3 d4, eb5 ~ g4 ~ bb4 ~ eb5 ~ d5 ~ f4 ~ bb4 ~ d5 ~",
  M: "[eb4 g3 c4 eb4 [f3,bb3,eb4,f4,bb4,eb5]@8 ~@4, eb5 ~ g4 ~ c5 ~ eb5 ~@25]/2", // Ebsus2
  N: "d4 f3 bb3 d4 eb4 g3 c4 eb4, ~@2 f4 ~ bb4 ~ d5 ~@3 g4 ~ c5 ~ eb5 ~",
  O: "ab3!2 c4 eb4 ab3!2 c4 eb4, ~@2 ab4 ~ c5 ~ eb5 ~@3 ab4 ~ c5 ~ eb5 ~", P: "[g3,c4,e4,g4,c5,e5]",
})).s("gm_harpsichord").gain(0.51).pan(0.4)

// chords · piano · "tk16"
const piano = note("<~@8 A B C D@2 ~@46 A B C D@2 ~@7 E F G H@2 ~@10>".pickRestart({
  A: "~ ab4", B: "g4@8 bb4@3 ab4@3 g4@2", C: "eb4 ab4", D: "[g4@3 eb4 f4@6 ~@6]/2", E: "~ [ab4,c5,eb5]",
  F: "[g4,bb4,eb5]@8 [bb4,d5,f5]@3 [ab4,c5,eb5]@3 [g4,bb4,d5]@2", G: "[eb4,g4,c5,eb5]@3 ~ [ab4,c5,eb5]@4",
  H: "[[c5,eb5]@3 bb4@3 [eb4,c5]@2 [f4,bb4,d5]@12 ~@12, g4@3 ~@13]/2", // Cm Bb
})).s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!82 ~@3>").gain(0.63)

// drums · snare
const snare = s("sd").struct("<~ A@13 B A@24 C A@27 B A@9 B A@4 D ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@3 x!2 ~@7 x ~@3", C: "~@4 x ~@6 x!2 ~@3", D: "~ x ~@2",
})).gain(0.63)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!81 [x!5 ~@3] ~@3>").gain(0.51)

stack(bass, synth_strings_1, string_ensemble_2, string_ensemble_1, harpsichord, piano, kick, snare, hihat)

More by Battiato