Strudelify

Aria

Yanni

KeyC majorTempo117 bpm
0:00/0:00
// Aria — Yanni
// 117 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 15 "Miscellaneous" french horn (copy of ch 14 "Trumpet" trumpet)
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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.

// other · whistle · "Second Soprano"
const whistle = note(`<
  ~@9 A B C D ~@4 A B C D E@2 F@2 G H I J K L M@4 ~@10 N O N P A B C D N Q N Q A B C D E@2 F@2 G H I J K L R@3 ~@38
>`.pickRestart({
  A: "c5@3 d5 c5@3 d5", B: "e5@3 f5@3 e5@2 d5@3 c5@3 b4@2", C: "a4@3 b4 a4@3 b4", D: "g4@7 ~",
  E: "[d5@23 ~ b4@3 ~ b4@2 e5@2]/2", F: "[d5@7 e5]/2", G: "f5", H: "a5@6 f5@6 c5@3 ~", I: "c5@15 ~", J: "e5@2 a5 e5",
  K: "g5@5 a5@2 e5", L: "g5 f5 a4@2", M: "f5/4", N: "~@4 c5@2 b4 a4", O: "b4 a4@6 ~", P: "b4@2 a4@7 ~@7",
  Q: "b4 a4@5 ~@2", R: "[f5@11 ~]/3",
})).s("gm_whistle").gain(0.26).pan(0.3)

// other · whistle · "Second Soprano" · soft notes
const whistle_soft = note("<~ A@3 B ~ C ~@105>".pickRestart({
  A: "[d7@3 g7@6 ~@8 d7@6 ~@6 g7@8 f#7@4 g7@6 ~, ~@7 g7@5 ~@12]/3", B: "d7@2 a7@3 ~@3", C: "~@3 a7@6 ~@7",
})).s("gm_whistle").gain(0.13).pan(0.3)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@8 B C D E A@4 B C D F G@2 H@2 I@2 J K L M N O P@2 Q@2 R@2 S@2 T U T V A@4 B C D E A@4 B C D F G@2 H@2 I@2 J K L M
  N O P@2 Q@2 R@2 S@2 R@2 S@2 W X Y Z W X Y Z AA AB ~@2 AA AB ~@4 W X Y Z W X Y Z AC
>`.pickRestart({
  A: "[[c5,e5]@3 [b4,d5]]/2", B: "[c5,e5]", C: "[b4,d5]", D: "[a4,c5]", E: "[g4,b4]", F: "[e4,b4]",
  G: "[[g4,d5]@3 [e4,b4]]/2", H: "[g4,d5]/2", I: "[a4,c5,f5]/2", J: "[g#4,c5,f5]", K: "[g4,c5,e5]",
  L: "~@2 a3 ~ a3 ~ b3 ~ b3 ~ c#4@2 ~@4", M: "~@2 d4 ~ d4 ~ e4@2 ~@8", N: "~@6 c4 ~ c4 ~ d4 ~@3 c4 ~",
  O: "c4 ~ d4@2 ~@4 [c5,e5] [c#5,f5] [d5,f#5] [d#5,g5] [e5,g#5] [f5,a5] [f#5,a#5] [g5,b5]", P: "[[a5,c6]@3 [g5,b5]]/2",
  Q: "[f5,a5]/2", R: "[[a4,c5]@3 [g4,b4]]/2", S: "[f4,a4]/2",
  T: "[e5,g5]!3 [f5,a5] [e5,g5] [d5,f5] [c5,e5] [b4,d5] [a4,c5]@2 ~@2 [a4,c5] [b4,d5] [c5,e5]@2", // Em F Em Dm C Bm Am Bm …
  U: "~@2 [b4,d5] [c5,e5] [e5,g5]@2 ~@6 [e5,g5] [c5,e5] [b4,d5] [c5,e5]", // Bm C Em C Bm C
  V: "~@2 [b4,d5] [c5,e5] [e5,g5]@2 ~@6 g5 a5 c6 a5", // Bm C Em
  W: "[e5,g5]!2 [c5,e5]!2 [b4,d5]!2 [c5,e5]!2 [e5,g5]!2 [c5,e5]!2 [b4,d5]!2 [c5,e5]!2", // Em C Bm C Em C Bm C
  X: "c3 d3 e3 ~ c3 d3 e3 ~ g3 a3 c4 ~ g3 a3 c4 ~",
  Y: "[c5,e5]!2 [b4,d5]!2 [c5,e5]!2 [e5,g5]!2 [c5,e5]!2 [b4,d5]!2 [c5,e5]!2 [e5,g5]!2", // C Bm C Em C Bm C Em
  Z: "e4 d4 c4 ~ g3 a3 g3 ~ e4 d4 c4 ~ g3 a3 g3 ~", AA: "c3 e3@2 ~@3 g3 c4@2 ~@2 c4 d4 e4@2 ~, ~ d3 ~@5 a3 ~@8",
  AB: "~@2 g4 c5@2 ~@11, ~@3 a4 ~@12", AC: "[g3,d4]!3 [c4,e4] ~@2 [g3,d4]!3 [c4,e4] ~@6",
})).s("gm_string_ensemble_1").gain(0.4)

// bass · fretless bass
const bass = note(`<
  A B C B D B C B D B E F G B C B D B E F G H G H G I@3 B F J H@2 I@8 B D B D B C B D B E F G B C B D B E F G H G H G
  I@3 B F J H@2 I@12 B D B D B D B D B@11 D B D B D B D K
>`.pickRestart({
  A: "~@3 g2", B: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", C: "c2 ~ c2 ~ c2 ~ c2 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  D: "c2 ~ c2 ~ c2 ~ c2 ~ g2 ~ g2 ~ g2 ~ g2 ~", E: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  F: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", G: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  H: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", I: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  J: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", K: "g1!3 c2 ~@2 g1!3 c2 ~@6",
})).s("gm_fretless_bass").gain(0.44)

// other · cello
const cello = note(`<
  ~ A@2 B@2 A@2 B@2 C D E F A@2 B@2 C D E F G F G F H@2 I C E J K@2 H@8 L@4 A@2 B@2 C D E F A@2 B@2 C D E F G F G F H@2
  I C E J K@2 H@12 L@26 ~
>`.pickRestart({
  A: "[c3@3 b2]/2", B: "[c3@3 g3]/2", C: "c3", D: "b2", E: "a2", F: "e3", G: "g3", H: "f3/2", I: "f3", J: "d3",
  K: "g3/2", L: "c3/2",
})).s("gm_cello").gain(0.17).pan(0.6)

// other · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note(`<
  ~@5 A@2 B@2 C D C E A@2 B@2 C D C E F@4 G@2 H C ~@16 A@2 B@2 C D C E A@2 B@2 C D C E F@4 G@2 H C ~@43
>`.pickRestart({
  A: "[e4@3 d4]/2", B: "[e4@3 f4]/2", C: "e4", D: "g4 f4", E: "d4", F: "[g4@3 e4]/2", G: "a4/2", H: "f4",
})).s("gm_string_ensemble_2").gain(0.35).pan(0.6)

// other · trombone
const trombone = note(`<
  ~@27 A B ~@2 C D ~@8 E F E G ~@22 A B ~@2 C D ~@12 H ~ I ~ H ~ I ~@3 J ~@3 J ~@3 H ~ I ~ H ~ I ~ K
>`.pickRestart({
  A: "~@2 c5 g#4", B: "g4@3 ~", C: "~@14 f4 ~", D: "f4@2 g4@2 ~@2 f4 ~ f4 ~ g4@2 ~@4",
  E: "g4!3 a4 g4 f4 e4 d4 c4@2 ~@2 c4 d4 e4@2", F: "~@2 d4 e4 g4@2 ~@6 g4 e4 d4 e4", G: "~@2 d4 e4 g4@2 ~@10",
  H: "g4!2 e4!2 d4!2 e4!2 g4!2 e4!2 d4!2 e4!2", I: "e4!2 d4!2 e4!2 g4!2 e4!2 d4!2 e4!2 g4!2",
  J: "~@4 g4!2 e4 ~ g4!2 e4 ~ g4!2 e4 ~", K: "g3!3 c4 ~@2 g3!3 c4 ~@6",
})).s("gm_trombone").gain(0.27)

// chords · trumpet
const trumpet = note("<~@41 A B A C ~@40 D ~ E ~ D ~ E ~@11 D ~ E ~ D ~ E ~ F>".pickRestart({
  A: "[e4,g4]!3 [f4,a4] [e4,g4] [d4,f4] [c4,e4] [b3,d4] [a3,c4]@2 ~@2 [a3,c4] [b3,d4] [c4,e4]@2", // Em F Em Dm C Bm Am Bm …
  B: "~@2 [b3,d4] [c4,e4] [e4,g4]@2 ~@6 [e4,g4] [c4,e4] [b3,d4] [c4,e4]", C: "~@2 [b3,d4] [c4,e4] [e4,g4]@2 ~@10",
  D: "[e4,g4]!2 [c4,e4]!2 [b3,d4]!2 [c4,e4]!2 [e4,g4]!2 [c4,e4]!2 [b3,d4]!2 [c4,e4]!2", // Em C Bm C Em C Bm C
  E: "[c4,e4]!2 [b3,d4]!2 [c4,e4]!2 [e4,g4]!2 [c4,e4]!2 [b3,d4]!2 [c4,e4]!2 [e4,g4]!2", F: "g4!3 c5 ~@2 g4!3 c5 ~@6",
})).s("gm_trumpet").gain(0.27)

// other · flute · "Miscellaneous"
const flute = note("<~@53 A B A B ~@20 C D ~@2 C D ~@29>".pickRestart({
  A: "~@4 c5@2 b4 a4", B: "b4 a4@5 ~@2", C: "[c6,d6] c6 ~@2 [c6,d6] c6 ~@2 [c6,d6] c6 ~@2 [c6,d6] c6 ~@2",
  D: "[c6,d6] c6 ~@2 [c6,d6] c6 ~@10", // Csus2
})).s("gm_flute").gain(0.1).pan(0.3)

// drums · kick
const kick = s("bd").struct("<[~@5 x ~@2] [x!4]!110 [x ~@2 x ~@4]>").gain(0.61)

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

// drums · hihat
const hihat = s("hh").struct("<~ [x!16]!110 ~>").gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@7 A ~@7 A ~@3 A ~@2 A ~@4 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@2 A ~@4 A ~@11 A ~@3 A ~@3 A ~@9 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.61)

// drums · bongos
const bongos = s("bongo:18").struct("<~ [x!3 ~ x!3 ~]!110 ~>").gain(1.29)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x ~ x ~@5 x ~ x ~@4]!110 ~>").gain(1.56)

// drums · congas
const congas_2 = s("conga:33").struct("<~ [~@6 x!2 ~@6 x!2]!110 ~>").gain(1.56)

stack(
  whistle, whistle_soft, string_ensemble_1, bass, cello, string_ensemble_2, trombone, trumpet, flute, kick, snare,
  hihat, crash, bongos, congas, congas_2
)

More by Yanni