Strudelify

Am Strand von Griechenland

CORDALIS,COSTA

KeyF majorTempo128 bpm
0:00/0:00
// Am Strand von Griechenland — CORDALIS,COSTA
// 128 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 kalimba (copy of ch 11 clavinet)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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
const bass = note(`<
  ~@2 A B C D E F G H A B C D E F G H A@3 E@2 I J A@3 K L M N O@2 A B C D E F G H A B C D P Q G H A@3 E@2 I J A@3 K R M
  N O@2 A B C D E F G H A B C D P Q G H ~@4 S T U V W X Y Z S T U V AA AB Y Z S T U V W AC
>`.pickRestart({
  A: "f2@2 c2 d2 f2@2 c2 d2", B: "f2@2 c2 d2 f2@2 c2@2", C: "d2@2 a1 c2 d2@2 a1 c2", D: "d2@2 a1 c2 d2@2 a1@2",
  E: "g2@2 d2 f2 g2@2 d2 f2", F: "g2@4 d2 ~ f2@2 g2@4 d2@4", G: "eb2@4 bb1@2 c2@2 eb2@4 bb1 ~ eb2@2", H: "c2!4",
  I: "g2@4 d2 ~ f2@2 g2@4 d2@2 f2@2", J: "c3@4 g2@2 a2@2 c3@4 c2 ~ d2@2", K: "a2@2 e2 g2 a2@2 a2 f2",
  L: "d2@2 a1 c2 d2@2 c2@2", M: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", N: "f1 f2 f1 f2 f1 f2 f1 f2",
  O: "c2 c3 c2 c3 c2 c3 c2 c3", P: "g2@2 d2 g2 gb2@2 d2 gb2", Q: "f2@4 d2 ~ f2@2 f2@4 d2@4", R: "d2 ~ d2 c2",
  S: "g2@2 d2 e2 g2@2 d2 e2", T: "g2@2 d2 e2 g2@2 d2@2", U: "e2@2 b1 d2 e2@2 b1 d2", V: "e2@2 b1 d2 e2@2 b1@2",
  W: "a2@2 e2 g2 a2@2 e2 g2", X: "a2@4 e2 ~ g2@2 a2@4 e2@4", Y: "f2@4 c2@2 d2@2 f2@4 c2 ~ f2@2", Z: "d2!4",
  AA: "a2@2 e2 a2 ab2@2 e2 ab2", AB: "g2@4 e2 ~ g2@2 g2@4 e2@4", AC: "a2@4 e2 ~ g2@2 a2@4 ~@4",
})).s("gm_synth_bass_2").gain(0.52)

// other · trumpet
const trumpet = note(`<
  ~@9 A B C D E F G H@2 I@2 J@2 K@2 L@2 M@2 N@2 O P Q R B C D E F G S@2 B C D E F G T@2 U@2 V@2 K@2 W@2 M@2 N@2 O P Q R
  B C D E F G S@2 B C D E F G X@2 ~@3 Y Z AA AB AC AD AE AF@2 Z AA AB AC AD AE AF@2 Z AA AB AC AD AG
>`.pickRestart({
  A: "~@10 c5 ~ a4 ~ c5 ~", B: "d5@2 ~ c5@2 ~ a4@6 ~@2 f5 ~", C: "f5@2 e5 ~ e5@2 d5 ~ d5@2 c5@2 a4@2 c5@2",
  D: "d5@3 c5@3 a4@7 ~@3", E: "~@10 a4@2 g4@2 f4 ~", F: "bb4@2 ~ bb4@2 ~ bb4@5 ~@3 bb4@2",
  G: "bb4!2 ~ bb4@3 c5@2 bb4@2 a4@2 g4@2 f4@2", H: "[a4@4 g4 ~ bb4@5 ~ c5@8 ~@10 a4 ~]/2",
  I: "[a4@4 g4@2 a4@4 bb4@2 a4@2 g4@4 f4@5 ~@5 c4 ~ c4 ~]/2", J: "[c4@2 d4@6 e4@4 f4@2 g4@7 ~@7 bb4 ~ bb4 ~]/2",
  K: "[bb4@4 a4@2 c5@6 bb4@2 a4@4 g4@5 ~@5 a4@2 bb4@2]/2", L: "[c5@3 ~ c5@4 bb4@2 g4@4 a4@6 ~@10 a4 ~]/2",
  M: "[a4@4 g4@2 bb4@6 a4@2 g4@4 f4@6 ~@6 a4 ~]/2", N: "[a4@3 ~ a4@3 ~ b4@2 db5@3 ~ d5@6 ~@12]/2", O: "~@2 f5 d5 ~@4",
  P: "~@2 f5 c5 ~@4", Q: "c4 e4", R: "g4@8 c5@2 c5 ~ a4 ~ c5 ~", S: "[a4@4 g4 ~ bb4@5 ~ c5@8 ~@6 c5 ~ a4 ~ c5 ~]/2",
  T: "[a4@4 g4 ~ bb4@5 ~ c5@8 ~@8 a4 ~ a4 ~]/2", U: "[a4@4 g4@2 bb4@6 a4@2 g4@4 f4@5 ~@5 c4 ~ c4 ~]/2",
  V: "[c4@4 d4@4 e4@4 f4@2 g4@7 ~@7 bb4 ~ bb4 ~]/2", W: "[c5@3 ~ c5@4 bb4@4 g4@2 a4@6 ~@10 a4 ~]/2",
  X: "[a4@4 g4 ~ bb4@5 ~ c5@8 ~@12]/2", Y: "~@10 d5 ~ b4 ~ d5 ~", Z: "e5@2 ~ d5@2 ~ b4@6 ~@2 g5 ~",
  AA: "g5@2 gb5 ~ gb5@2 e5 ~ e5@2 d5@2 b4@2 d5@2", AB: "e5@3 d5@3 b4@7 ~@3", AC: "~@10 b4@2 a4@2 g4 ~",
  AD: "c5@2 ~ c5@2 ~ c5@5 ~@3 c5@2", AE: "c5!2 ~ c5@3 d5@2 c5@2 b4@2 a4@2 g4@2",
  AF: "[b4@4 a4 ~ c5@5 ~ d5@8 ~@6 d5 ~ b4 ~ d5 ~]/2", AG: "c5!2 ~ c5@3 d5@2 ~@8",
})).s("gm_trumpet").gain(0.46)

// chords · synth strings 1
const synth_strings_1 = note("<~@26 A@2 B C D E F G ~@24 A@2 B H D E F G ~@42>".pickRestart({
  A: "[f4,a4,c5]/2", B: "[e4,a4,db5]", C: "[a4,d5,f5]", D: "[d5,f5,bb5]", E: "[c5,f5,a5]", F: "[g4,c5,e5]",
  G: "c5 c6, [e5,g5]", H: "[a4,d5,f5] ~@3",
})).s("gm_synth_strings_1").gain(0.17)

// chords · pad new age
const pad_new_age = note(`<
  ~@18 A ~ B C ~@3 B ~@16 D@2 E ~ F G H I J ~ B C ~@3 B ~@16 D@2 E ~ F G H I ~@12 K@2 L ~ M N O P ~@6
>`.pickRestart({
  A: "[f5,a5]@3 ~@5", B: "[f5,a5]@5 ~@11", C: "[g5,bb5]@3 ~@5", D: "[[f5,f6]@5 [e5,e6] [d5,d6] [c5,c6]]/2",
  E: "[d5,d6]@13 ~@3", F: "[g5,bb5,d6,g6] [gb5,bb5,d6,gb6]", G: "[f5,bb5,d6,f6]@11 ~@5", H: "[g5,bb5,eb6,g6]",
  I: "[g5,c6,e6,g6]", J: "[f5,a5]@3 ~@13", K: "[[g5,g6]@5 [gb5,gb6] [e5,e6] [d5,d6]]/2", L: "[e5,e6]@13 ~@3",
  M: "[a5,c6,e6,a6] [ab5,c6,e6,ab6]", N: "[g5,c6,e6,g6]@11 ~@5", O: "[a5,c6,f6,a6]", P: "[a5,d6,gb6,a6]",
})).s("gm_pad_new_age").gain(0.25).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@2 A ~ B C D ~ E F A ~ B C D ~ E F ~@18 B C ~@2 E F ~@2 G H ~@22 B C ~@2 E F ~@2 G H ~@10 I J ~@2 K L ~@2 M N ~@4 O ~
  I J P ~
>`.pickRestart({
  A: "~@10 [f4,a4,c5]@3 ~@3", B: "~@10 [f4,a4,d5]@3 ~@3", C: "~@2 [f4,a4,d5] ~@2 [f4,a4,d5] ~@2 [f4,a4,d5] ~@7",
  D: "~@10 [bb4,d5,g5]@3 ~@3", E: "~@2 [g4,bb4,eb5]!2 ~@6 [eb4,g4,bb4]@3 ~@3", F: "~@2 [e4,g4,c5]@3 ~@11",
  G: "~@10 g5 f5 ~@4, ~@5 d5 ~@2", H: "~@2 [d5,g5] ~@2 [d5,g5] ~@2 [d5,g5]@3 f5 ~@4", I: "~@10 [g4,b4,e5]@3 ~@3",
  J: "~@2 [g4,b4,e5] ~@2 [g4,b4,e5] ~@2 [g4,b4,e5] ~@7", K: "~@2 [a4,c5,f5]!2 ~@6 [f4,a4,c5]@3 ~@3",
  L: "~@2 [gb4,a4,d5]@3 ~@11", M: "~@10 a5 g5 ~@4, ~@5 e5 ~@2", N: "~@2 [e5,a5] ~@2 [e5,a5] ~@2 [e5,a5]@3 g5 ~@4",
  O: "~@10 [g4,b4,d5]@3 ~@3", P: "~@10 [c5,e5,a5]@3 ~@3",
})).s("gm_synth_brass_1").gain(0.25).pan(0.3)

// other · orchestral harp
const orchestral_harp = note(`<
  ~ A B C D E F G F A B H D E I J K L ~@15 A B H D E I J K M B H D E I J K L ~@16 B C D E N J K L B C D E N J K L ~@4 O
  P Q R S T U V O P Q R S T U V O P Q R S W
>`.pickRestart({
  A: "~@12 a4 ~ c5 ~", B: "d5 ~@2 c5 ~@2 a4!8 f5 ~", C: "f5 e5 ~ e5@2 ~ d5 ~ d5 ~ c5 ~ a4 ~ c5 ~",
  D: "d5 ~@2 c5 ~@2 a4!8 ~@2", E: "~@10 a4 ~ g4 ~ f4 ~", F: "g4 ~@2 a4 ~@2 g4!8 ~@2", G: "~@6 g4 ~ a4 ~ g4 ~ g4 ~ f4 ~",
  H: "f5 ~ e5 ~ e5 ~ d5 ~ d5 ~ c5 ~ a4 ~ c5 ~", I: "bb4 ~@2 bb4 ~@2 bb4!8 ~@2",
  J: "bb4 ~ bb4 ~ bb4 ~ c5 ~ bb4 ~ a4 ~ g4 ~ f4 ~", K: "bb4 ~@5 bb4 ~@5 c5!4", L: "c5!4 ~@12", M: "c5!4 ~@8 a4 ~ c5 ~",
  N: "bb4 ~@2 a4 ~@2 bb4!8 ~@2", O: "e5 ~@2 d5 ~@2 b4!8 g5 ~", P: "g5 gb5 ~ gb5@2 ~ e5 ~ e5 ~ d5 ~ b4 ~ d5 ~",
  Q: "e5 ~@2 d5 ~@2 b4!8 ~@2", R: "~@10 b4 ~ a4 ~ g4 ~", S: "c5 ~@2 b4 ~@2 c5!8 ~@2",
  T: "c5 ~ c5 ~ c5 ~ d5 ~ c5 ~ b4 ~ a4 ~ g4 ~", U: "c5 ~@5 c5 ~@5 d5!4", V: "d5!4 ~@12",
  W: "c5 ~ c5 ~ c5 ~ d5 ~ c5 ~@7",
})).s("gm_orchestral_harp").gain(0.25).pan(0.6)

// chords · pad poly
const pad_poly = note(`<
  ~@2 A B C D E F G H A B C D E F G H ~@16 A B C D E F G H A B C D E F G H ~@16 A B C D E F G H A B C D E F G H ~@4 I J
  K L M N O P I J K L M N O P I J K L M Q
>`.pickRestart({
  A: "~@2 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~", // F
  B: "~@2 [f3,a3,c4]!2 ~@2 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~", // F
  C: "~@2 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3 [f3,a3,d4] ~", // Dm
  D: "~@2 [f3,a3,d4]!2 ~@2 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3 [f3,a3,d4] ~", // Dm
  E: "~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~", // Gm
  F: "~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~", // Gm
  G: "~@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~", // Eb
  H: "~@2 [e3,g3,c4]!2 ~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~", // C
  I: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~", // G
  J: "~@2 [g3,b3,d4]!2 ~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~", // G
  K: "~@2 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~", // Em
  L: "~@2 [g3,b3,e4]!2 ~@2 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~", // Em
  M: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~", // Am
  N: "~@2 [a3,c4,e4]!2 ~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~", // Am
  O: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  P: "~@2 [gb3,a3,d4]!2 ~@2 [gb3,a3,d4] ~@3 [gb3,a3,d4] ~@3 [gb3,a3,d4] ~", Q: "~@2 [a3,c4,e4]!2 ~@2 [a3,c4,e4] ~@9",
})).s("gm_pad_poly").gain(0.3).pan(0.7)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@82
  [~@2 c5!3 ~ c5 ~ c5 d5 c5 b4 c5 ~ a4 ~]
  [~@2 a4!3 ~ a4 ~ a4 bb4 a4 g4 a4 ~ c5 ~]
  [~@2 c5!3 ~ c5 ~ c5 d5 c5 b4 c5 ~ a4 ~]
  [~@2 a4!3 ~ a4 ~ b4 c5 b4 a4 b4 ~ d5 ~]
  ~@22
>`).s("gm_acoustic_guitar_steel").gain(0.4).pan(1)

// chords · clavinet
const clavinet = note("<~@18 A@3 B@3 C A@3 D E F A C@2 ~@16 A@3 B@3 C A@3 D G F A C@2 ~@42>".pickRestart({
  A: "[f5,a5]!16", B: "[g5,bb5]!16", C: "[g5,c6]!16", D: "[e5,a5]!16", E: "[d5,a5]!16", F: "[f5,bb5]!16",
  G: "[d5,a5]!4 ~@4 d5!4 [d5,a5]!4", // D5
})).s("gm_clavinet").gain(0.25).pan(0.7)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~@82
  [~@2 a4!3 ~ a4 ~ a4 bb4 a4 g4 a4 ~ f4 ~]
  [~@2 f4!3 ~ f4 ~ f4 g4 f4 e4 f4 ~ a4 ~]
  [~@2 a4!3 ~ a4 ~ a4 bb4 a4 g4 a4 ~ f4 ~]
  [~@2 f4!3 ~ f4 ~ g4 a4 g4 gb4 g4 ~ b4 ~]
  ~@22
>`).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.1)

// drums · kick
const kick = s("bd").struct("<[x!4]!61 [x ~ x!2] [x!4]!46>").gain(0.49)

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

// drums · clap
const clap = s("cp").struct("<[x ~ x ~@4 x!2 ~ x ~ x ~@3]!10 ~@72 [x!4]!4 ~@22>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<A B C@8 D C@7 D C@15 D C@15 D C@10 E C@4 D C@15 D C@3 D C@15 D C@5>".pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "x!2 ~ x ~ x ~@2", C: "x!3 ~ x ~ x ~ x ~ x ~ x ~@3", D: "~ x!2 ~ x ~ x ~ x ~ x ~ x ~@3",
  E: "x!3 ~@5 x!5 ~@3",
})).gain(0.28)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2
  [~@3 x ~ x ~ x ~ x ~ x ~ x ~@2]!59
  [~@3 x ~@9 x ~@2]
  [~@3 x ~ x ~ x ~ x ~ x ~ x ~@2]!45
  [~@3 x ~ x ~ x ~ x ~ x ~@4]
>`).gain(0.14)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x]!107 ~>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@7 A ~@15 A ~@15 A ~@15 A ~@15 A ~@3 A ~@15 A ~@5>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · cowbell
const cowbell = s("cb").struct("<[x!4]!61 [x ~@2 x] [x!4]!46>").gain(0.35)

// drums · ht
const ht = s("ht").struct("<~@9 A ~@7 B ~@23 B ~@7 B ~@23 B ~@7 B ~@3 B ~@7 B ~@7 B ~@6>".pickRestart({
  A: "~@8 x ~ x ~ x ~ x!2", B: "~@5 x!3",
})).gain(0.35)

// drums · lt
const lt = s("lt").struct(`<
  A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@5 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@3 x",
})).gain(0.56)

stack(
  bass, trumpet, synth_strings_1, pad_new_age, synth_brass_1, orchestral_harp, pad_poly, acoustic_guitar_steel,
  clavinet, acoustic_guitar_steel_2, kick, snare, clap, hihat, hihat_soft, open_hat, crash, cowbell, ht, lt
)

More by CORDALIS,COSTA