Strudelify

Ein Schiff wird kommen

Melina Mercouri

KeyB♭ majorTempo117 bpm
0:00/0:00
// Ein Schiff wird kommen — Melina Mercouri
// 117 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. 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.

// bass · acoustic bass · "Remixed"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@3 C@2 A@2 C@2 A@2 C@2 A@2 C@2 A D A@2 E@4 A F A@2 E@4 A@4 B@2 A@2 B@2 A@3 C@2 A@2 C@2 A@2 C@2 A@2
  C@2 A D A@2 E@4 A F A@2 E@4 A@4 B@2 A@2 B@2 A@2 G@2
>`.pickRestart({
  A: "eb2@5 ~ bb1@5 ~", B: "f2@5 ~ d2@5 ~", C: "d2@5 ~ bb1@5 ~", D: "eb2@5 ~@7", E: "f2@5 ~ bb1@5 ~",
  F: "eb2@5 ~ eb2@3 bb1@3", G: "[eb2@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.46)

// chords · accordion · "Remixed"
const accordion = note(`<
  A@2 B C A@2 B C D@2 ~@3 E F G H I ~@3 E F G H I J K L M N O P Q J K L M N O P R@2 A@2 B C A@2 B C D@2 ~@3 E F G H I
  ~@3 E F G H I J K L M N O P Q J K L M N O P Q ~ A@2 B C A@2 B C D@2 ~@2
>`.pickRestart({
  A: "[bb5@36 ab5@3 bb5 ab5 ~ g5@3 ab5 g5 ~]/2", B: "f5", C: "bb5", D: "eb5/2", E: "eb5@12 d5@3 eb5 d5 ~ c5@3 d5 c5 ~",
  F: "bb4@23 ~", G: "d5@3 ~@3 d5@3 c5@3 d5@3 ~@3 d5@2 ~ c5@2 ~", H: "d5 ~ d5 c5 bb4 c5 ab4 bb4", I: "g4",
  J: "~ bb4 [a4,c5] [ab4,d5]", K: "[g4,bb4,eb5] [g4,bb4]",
  L: "[g4,bb4]@2 [g4,bb4,d5] [g4,bb4,eb5] [g4,bb4,f5]@2 [g4,bb4,eb5]@2", M: "[f4,bb4,d5]!2",
  N: "[f4,bb4,d5]@2 c5 d5 [f4,bb4,eb5]@2 [f4,bb4,d5]@2, ~ [f4,bb4] ~@2", O: "[f4,ab4,c5]!2",
  P: "[f4,ab4,c5]@2 [f4,ab4,bb4] [ab4,c5] [bb4,d5]@2 [f4,bb4]@2, ~@3 f4@3 ~@2", Q: "[eb4,g4]", R: "[[eb4,g4]@5 ~@3]/2",
})).s("gm_accordion").gain(0.29).pan(0.3)

// other · banjo · "Remixed"
const banjo = note("<~@26 A B@2 C@2 D@2 E A B@2 C@2 D@2 E ~@27 A B@2 C@2 D@2 E A B@2 C@2 D@2 E ~@13>".pickRestart({
  A: "~ bb4 c5 d5", B: "[eb5@12 eb5@15 eb5@3 d5@3 eb5@4 f5@5 eb5@6]/2",
  C: "[d5@11 ~ d5@15 d5@3 c5@3 d5@3 ~ eb5@5 d5@6]/2", D: "[c5@11 ~ c5@15 c5@3 bb4@3 c5@3 ~ d5@5 bb4@6]/2",
  E: "g4@5 ~@3",
})).s("gm_banjo").gain(0.46)

// chords · acoustic guitar nylon · "Remixed"
const acoustic_guitar_nylon = note(`<
  A@2 B C A@2 B C A@3 B C A@2 B C A@2 B C A@2 B C A ~ A@2 B C B C A D A@2 B C B C A@4 B C A@2 B C A@3 B C A@2 B C A@2 B
  C A@2 B C A ~ A@2 B C B C A D A@2 B C B C A@4 B C A@2 B C A@2 E@2
>`.pickRestart({
  A: "~@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~", B: "~@6 [f3,bb3,d4]@2 ~@10 [f3,bb3,d4]@3 ~@3",
  C: "~@3 [f3,bb3,d4] ~@5 [f3,bb3,d4] ~@2", D: "~@2 [g3,bb3,eb4] ~@3 [f3,bb3,d4] ~",
  E: "[~ eb4@33 ~@14, [g3,bb3]@11 ~@5]/2", // Gm
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.3)

// other · acoustic guitar steel · "Remixed"
const acoustic_guitar_steel = note(`<
  A B C D A B C D E F G H I J K H L M N H I J K H L M O P Q R S T U V W P Q X Y Z U V@2 A B C D A B C D E F G H I J K H
  L M N H I J K H L M O P Q R S T U V W P Q X Y Z U V@2 A B C D A B C D E F AA AB
>`.pickRestart({
  A: "g4@3 ~ bb4@2 a4@3 ~ bb4@2 a4@3 ~ bb4@2 c5@4 bb4@2", B: "ab4@3 bb4@2 ~ g4@3 bb4@2 ~ f4@3 bb4@2 ~ eb4@3 bb4@2 ~",
  C: "d4@3 bb4@2 ~ a4@3 bb4@2 ~ a4@3 bb4@2 ~ c5@3 bb4@3", D: "d5@3 d5 eb5@2 d5@3 c5@3 bb4@3 c5@3 ab4@3 bb4@2 ~",
  E: "g4@3 ab4 g4 ~ gb4@3 g4@3 ab4@3 g4@2 ~ gb4@3 g4@2 ~", F: "eb4@3 ab4 g4 ~ gb4@3 g4@2 ~ ab4@3 g4@2 ~ gb4@3 g4@2 ~",
  G: "eb4@2 ~ d4@3 g4@3 f4@3 g4@3 ab4@3 bb4@3 c5@3", H: "d5@2 d5 c5 d5@2 d5 c5", I: "d5@2 d5 c5 d5 eb5 c5 d5",
  J: "bb4!8", K: "bb4@2 ~ d4@3 g4@3 f4@3 g4@3 ab4@3 bb4@3 c5@3", L: "d5@2 d5 c5 bb4 c5 ab4 bb4",
  M: "g4!4 gb4 g4 ab4 gb4", N: "g4@2 ~ d4@3 g4@3 f4@3 g4@3 ab4@3 bb4@3 c5@3", O: "g4@2 ~@4 g4!6 a4!6 ab4!6", P: "g4!24",
  Q: "g4@3 ab4 g4 ~ bb4@3 c5@3 d5@6 c5@6", R: "bb4!24", S: "bb4@3 c5 bb4 ~ ab4@3 bb4@3 c5@6 bb4@6",
  T: "[a5,c6]!3 [ab5,b5]!3 [g5,bb5]!2 [gb5,a5]!2 [f5,ab5]!2 [e5,g5] [eb5,gb5] [d5,f5] [db5,e5] [c5,eb5] [b4,d5] [bb4,db5] [a4,c5] [ab4,b4] [g4,bb4] [gb4,a4] [f4,ab4]", // Am Abm Gm Gbm Fm Em Ebm Dm …
  U: "[f4,ab4]@3 bb4 ab4 ~ g4@3 ab4@3 bb4@6 g4@6", V: "eb4!8", W: "eb4@2 ~@4 g4!6 a4!6 ab4!6", X: "[f4,bb4]!24",
  Y: "[f4,bb4]@3 c5 bb4 ~ ab4@3 bb4@3 c5@6 bb4@6", // Bb5
  Z: "[a5,c6] [ab5,b5] [g5,bb5] [gb5,a5] [f5,ab5] [e5,g5] [eb5,gb5] [d5,f5] [db5,e5] [c5,eb5] [b4,d5] [f5,ab5] [e5,g5] [eb5,gb5] [d5,f5] [db5,e5] [c5,eb5] [b4,d5] [bb4,db5] [a4,c5] [ab4,b4] [g4,bb4] [gb4,a4] [f4,ab4]", // Am Abm Gm Gbm Fm Em Ebm Dm …
  AA: "~@16 eb5!8, b3 db4 eb4 f4 g4 a4 b4 db5 ~@4, ~ c4@2 d4@2 e4@2 gb4@2 ab4@2 bb4@2 c5@2 d5@2 ~@7", AB: "eb5!7 ~@17",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.8)

stack(bass, accordion, banjo, acoustic_guitar_nylon, acoustic_guitar_steel)