Strudelify

Celtic Tunes

Gelnn

KeyC majorTempo86 bpm
0:00/0:00
// Celtic Tunes — Gelnn
// 86 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1418766; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · piano
const piano = note("<~@16 A@8 B@16 C D E F C D E F C D E F C D E F G H I J G H I K L>".pickRestart({
  A: "[~@5 [a4,a5] [c5,c6] [a4,a5]@2 ~@4 [a4,a5] [c5,c6] [g4,g5]@2 ~@4 [g4,g5] [c5,c6] [g4,g5]@2 [g4,d5] [g4,b4] [g4,d5] [g3,g4,d5,g5]@4]/4", // A C A C G C G G5 …
  B: "[~@5 [a4,a5] [c5,c6] [a4,a5]@2 ~@4 [a4,a5] [c5,c6] [g4,g5]@2 ~@4 [g4,g5] [c5,c6] [g4,g5]@2 [g4,d5] [g4,b4] [g4,d5] [g4,d5,g5]@4]/4", // A C A C G C G G5 …
  C: "a3 c4 e4@2 a3 c4 e4@2 a3 c4 e4@2 a3 c4 e4@2, a2@15 ~",
  D: "a3 c4 f4@2 a3 c4 f4@2 a3 c4 f4@2 a3 c4 f4@2, [f2,f3]@15 ~", // F
  E: "g3 c4 e4@2 g3 c4 e4@2 g3 c4 e4@2 g3 c4 e4@2, c3@15 ~", F: "g3 b3 d4@2 g3 b3 d4@2 g3 b3 d4@2 g3 b3 d4@2, g2@15 ~",
  G: "a3 e3 a3 c4 e4 d4 a3@2, a2 ~", H: "g3 e3 g3 c4 e4 d4 g3@2, c3 ~", I: "g3 e3 g3 b3 e4 d4 g3@2, e2 ~",
  J: "f3 d3 f3 a3 d4 a3 f3@2, d2 ~", K: "f3 d3 f3 a3 d4 a3 f3 g3, d2 ~", L: "~ e5@7, [a3,e4], ~ [a4,c5]@15",
})).s("gm_piano").gain(0.3)

// chords · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A B C D A B C D A B C D A B C D E F G H E F G H E F G H E F G H E F G H E F G H I J K L I J K L ~@17
>`.pickRestart({
  A: "a4 e4 a4 c5 e5 d5 a4@2, a3 ~", B: "g4 e4 g4 c5 e5 d5 g4@2, c4 ~", C: "g4 e4 g4 b4 e5 d5 g4@2, e3 ~",
  D: "f4 d4 f4 a4 d5 a4 f4@2, d3 ~", E: "a4@2 e4 a4 c5 a4 e4 a4 a4@2 e4 a4 c5 a4 e4 a4, a3!4",
  F: "f4@2 c4 f4 a4 f4 c4 f4 f4@2 c4 f4 a4 f4 c4 f4, f3!4", G: "g4@2 e4 g4 c5 g4 e4 g4 g4@2 e4 g4 c5 g4 e4 g4, c4!4",
  H: "g4@2 d4 g4 b4 g4 d4 g4 g4@2 d4 g4 b4 g4 d4 g4, g3!4", I: "~ a5@7, [a3,e4,a4], ~ [c5,e5]@15",
  J: "~ f5@7, [f3,c4,f4], ~ [a4,c5]@15", K: "~ c6@7, [c4,g4,c5], ~ [e5,g5]@15",
  L: "~@2 g5@6 [g3,g#3,a3] [a#3,b3,c4] [c#4,d4,d#4,e4,f4] [f#4,g4,g#4,a4] [a#4,b4,c5] [c#5,d5,d#5,e5,f5] g5@2, [g3,d4,g4] ~, ~ [b4,d5]@7 ~@6 f#5 ~", // G5 Bm
})).s("gm_orchestral_harp").gain(0.3)

// other · violin
const violin = note(`<
  ~@7 A B@2 C D B@2 C D ~@8 E@2 F@2 G@2 H@2 E@2 F@2 G@2 I J K L M N O P Q@2 R S T@2 U V W X B@2 C D ~@5
>`.pickRestart({
  A: "e5@3 d5@3 ~ d5", B: "[e5@3 c5@2 a4@2 c5@6 ~ c5 d5]/2", C: "e5 b4", D: "d5 a4",
  E: "[c5@2 e5@2 a5@3 e5@2 f5@2 e5 c5@3 ~]/2", F: "[c5@2 e5@2 c5@3 d5@5 ~@2 b4@2]/2",
  G: "[c5@3 ~ e5@5 c5@3 f5@2 e5@2]/2", H: "[c5@3 ~ e5 f5@2 e5@2 d5@3 e5@2 d5@2]/2", I: "c5@3 ~ e5 f5@2 e5",
  J: "e5 d5@3 e5@2 d5@2", K: "a4 b4", L: "c5 d5", M: "e5@3 f5", N: "g5", O: "c5@3 d5", P: "f5@3 d5@3 c5 b4",
  Q: "[c5@3 d5 c5@2 a4 b4@7 ~@2]/2", R: "e5@3 d5", S: "c5@3 f5@3 e5 d5", T: "[e5@3 d5 e5@2 f5 g5@9]/2", U: "c6 a5",
  V: "g5 f5", W: "g5@3 a5", X: "b5",
})).s("gm_violin").gain(0.3).pan(0.2)

// other · violin · soft notes
const violin_soft = note("<~@60 [e5 a5] [g5@8 e5@4 e5 g5 ~ e5] [b5 e5 g5 e5] [f5@6 d5@2 a5@2 f5@2 f5 d5 ~ f5] ~>")
  .s("gm_violin").gain(0.2).pan(0.2)

// other · cello · "Violoncello"
const cello = note("<~@24 A B C D A B C D A B C D A B C D E F G H E F G H I J K L M N O@2 ~@4 P@2 Q R ~>".pickRestart({
  A: "a3 e3", B: "f3 a3", C: "c4 g3", D: "g3 b3", E: "a2 c3 e3@2 a2 c3 e3@2 a2 c3 e3@2 a2 c3 e3@2",
  F: "a2 c3 f3@2 a2 c3 f3@2 a2 c3 f3@2 a2 c3 f3@2", G: "g2 c3 e3@2 g2 c3 e3@2 g2 c3 e3@2 g2 c3 e3@2",
  H: "g2 b2 d3@2 g2 b2 d3@2 g2 b2 d3@2 g2 b2 d3@2", I: "a2 b2", J: "c3 d3", K: "e3@3 f3", L: "g3", M: "c3@3 d3",
  N: "f3@3 d3@3 c3 b2", O: "[c3@3 d3 c3@2 a2 b2@7 ~@2]/2", P: "[e3@3 c3@2 a2@2 c3@6 ~ c3 d3]/2", Q: "e3 b2", R: "d3 a2",
})).s("gm_cello").gain(0.4).pan(0.7)

// other · cello · "Violoncello" · soft notes
const cello_soft = note("<~@12 A B C D ~@40 E F G H ~@5>".pickRestart({
  A: "a3 e3", B: "g3 e3", C: "e3 g3", D: "d3@2 f3 a3", E: "[a2,e3]", F: "[c3,e3]", G: "[b2,e3]", H: "[a2,d3]",
})).s("gm_cello").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.3).pan(0.4)

stack(piano, orchestral_harp, violin, violin_soft, cello, cello_soft, kick)