Strudelify

tyui2

Ryacoli

KeyA minorTempo100 bpm
0:00/0:00
// tyui2 — Ryacoli
// 100 bpm, 2/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5942057; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/2)

// 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 · pad warm · "Bowed Synthesiser"
const pad_warm = note("<~@72 A B C D ~@14 E@6 ~@10 F@2 ~@15 G@2 H@2 I@2 J K L@2 ~>".pickRestart({
  A: "[a#2,f3,d4] [a2,e3,c4]", B: "[d3,a3,f4] [f2,c3,a3,d#4]", C: "[a#0,a#1]@2 ~ [a3,e4,c5]", D: "[d4,f4,a4,d5] ~@3",
  E: "[~ [a1,e2,a#2]@2 ~]/2", F: "[a1 a1, a0]/2", G: "[g2 g2, g1]/2", H: "[f1,c2,a2,f3]/2", I: "[g1,g2]",
  J: "~ [g2,d3,a#3]", K: "[g2,d3,a#3] ~", L: "[[a1,a2]@13 [a1,a2]@13 ~ [g1,g2]@3 ~@2]/2",
})).s("gm_pad_warm").gain(0.4)

// other · pad bowed · "Bowed Synthesiser"
const pad_bowed = note("<A@2 ~@15 B@2 ~@115>".pickRestart({
  A: "[a1 a1, a0]/2", B: "[g2 g2, g1]/2",
})).s("gm_pad_bowed").gain(0.3)

// bass · synth bass 1 · "Bass Synthesiser"
const bass = note(`<
  A@2 B C D E F G H ~ I J ~@3 K L M@2 ~@4 N ~ O P Q R S T ~ U V ~@4 W X Y@3 Z@2 AA AB AC AD AE ~@4 AF AG AH AI AJ AK AL
  AM ~@7 AN ~@2 AO ~@3 AP AQ AP AR ~@5 AS ~@18 AT AU A@2 B C D E F G H ~ I J ~@3 K L M@2 AV AW AX@2 AY AZ BA@2 BB
>`.pickRestart({
  A: "[a1,a2,a3,c#4,a4,c#5]!2 [a1,a2,b3,d4,b4,d5] [a1,a2]!5, ~@3 [a3,c#4,a4,c#5]@5", // A Bm7 A
  B: "c#4 ~ d4 ~ f#4 ~ a4 ~ b3 ~ d4 ~ f#4 ~ a4 ~, f#5 c#6@2 f#5", C: "[b3,b4]@2 [a3,a4] [g3,g4] d2 a2 d3 a3",
  D: "[b3,b4]@2 [a3,a4] [g3,g4] b2 f#3 b3 f#4", E: "d4 ~ e4 ~ g4 ~ b4 ~ c#4 ~ e4 ~ g4 ~ b4 ~, e5 b5@2 e5",
  F: "a5 f5 d5 c5 d5@2 e5@2", G: "f5@3 e5@2 d5@3 c5@4 d5@4", H: "e5@3 d5@2 c5@3 g4@4 a4@4", I: "~@2 f5@3 f5@3",
  J: "a#4 g4 d4 g4 a#4 g4 d4 g4", K: "a6 f#6 ~ d6!2 a5 ~ d5!2 c5 ~ a4!2 f#4 ~ d4", L: "d4 c4 a3!2 f#3 d3!2 c3",
  M: "[g2,g3,g4,b4,g5,b5]!2 [g2,g3,a4,c5,a5,c6] [g2,g3]!5, ~@3 [g4,b4,g5,b5]@5", N: "a3@3 g3@2 f#3@3 e3@4 f#3@4",
  O: "[g#4,g#5]@2 [f#4,f#5] [e4,e5] b2 f#3 b3 f#4", P: "[g#4,g#5]@2 [f#4,f#5] [e4,e5] g#3 d#4 g#4 d#5",
  Q: "b4 ~ c#5 ~ e5 ~ g#5 ~ a#4 ~ c#5 ~ e5 ~ g#5 ~, c#6 g#6@2 c#6", R: "f#6 d6 b5 a5 b5@2 c#6@2",
  S: "d6@3 c#6@2 b5@3 a5@4 b5@4", T: "c#6@3 b5@2 a5@3 e5@4 f#5@4", U: "~@2 d6@3 d6@3", V: "g5 e5 b4 e5 g5 e5 b4 e5",
  W: "a5 g5 ~ e5!2 c5 ~ a4!2 g4 ~ e4!2 c4 ~ a3", X: "a3 g3 e3!2 c3 a2!2 e2",
  Y: "[a1!6 [a1,a#3,d#4] a1 a1!6 [a1,a#3,d#4] a1 a1!8, ~@4 [a3,e4]@2 ~ [a3,e4]@5 [a3,e4]@2 ~ [a3,e4]@5 ~@4]/3", // D# A5
  Z: "g1!8", AA: "g1!4 a0!4", AB: "a0 c1 [e1,g1] g1 e1 g1 [a1,c2] c2", AC: "a1 c2 [e2,g2] g2 e2 g2 [a2,c3] c3",
  AD: "a2 c3 e3 g3 e3 g3 a3 c4", AE: "a3 c4 e4 g4 e4 g4 a4 c5", AF: "d5@2 e5@3 d5 c5 b4", AG: "d5@2 c5 a#4 a4@2 g4@2",
  AH: "d5@2 c5 d5 c5@3 d5", AI: "a#4 c5 d5@3 c5 a#4 a4", AJ: "a#2 c3 d3 g2 [a2,c#3]@2 e3@2", AK: "g3 a3 a#3 g3 a3 ~@3",
  AL: "~@5 c3 a#2 a2", AM: "g2 a#2 d3 e2 a1 c6 a#5 a5", AN: "~@4 [c5,c6]@3 [d5,d6] [d#5,d#6]@3 ~@5",
  AO: "a#3@4 a3@3 a#3 c4@3 ~@5", AP: "~@4 d4@3 ~@5 d4@3 ~", AQ: "~@4 c4@3 ~@5 a3@3 ~", AR: "~@4 g3@3 ~@5 a3@3 ~",
  AS: "d4 ~@3 c4 ~@2 d4 d#4 ~@3 d4 ~@2 d#4", AT: "~@2 [a0,g3] [a0,e3] c2!2 a#1 a1",
  AU: "[a0,a3]!2 [a0,g3] [a0,e3] c2!2 a#1 a1", AV: "[f2,f3]!8",
  AW: "[f2,d3,f3,d4] [f2,f3,f4] [f2,f3,a3,a4] [f2,f3,c4,c5] [f2,f3,a3,a4] [f2,f3,c4,c5] [f2,f3,d4,d5] [f2,f3,f4,f5]", // Dm F F5 F F5 Dm F
  AX: "[g2,g3,g4,b4,g5,b5]!2 [g2,g3,a4,c5,a5,c6] [g2,g3,g4,b4,g5,b5] [f2,f3,a3,a4] [f2,f3,c4,c5] [f2,f3,d4,d5] [f2,f3,f4,f5]", // G Am7 G F F5 Dm F
  AY: "~@4 [g1,g2]!4", AZ: "[g1,g2]!4 ~@4",
  BA: "[[a2,a3,a4,c#5,a5,c#6]@2 [a2,a3] [a2,a3,b4,d5,b5,d6]@2 [a2,a3,a4,c#5,a5,c#6]@2 [g2,g3] [g2,g3,d4,d5]@2 [g2,g3,e4,e5]@2 ~ [a2,a3,a4,c#5,a5,c#6]@2 [a2,a3,a4,c#5,a5,c#6]@2 [a2,a3] [a2,a3,a4,c#5,a5,c#6]@2 [g2,g3,b3,b4]@2 [g2,g3] [g2,g3,e4,e5]@2 [g2,g3,g4,g5]@2 [g2,g3,g4,b4,g5,b5]@3 ~@2, ~@2 [a4,c#5,a5,c#6]@2 ~@3 [b3,b4]@2 ~@3 [g2,g3,g4,g5]@2 ~@3 [b4,d5,b5,d6]@2 ~@3 [d4,d5]@2 ~@8]/2", // A Bm7 A G G5 C A G …
  BB: "~ [a#1,a#2,a#3] ~ [f#1,f#2,f#3] [d#1,d#2,d#3] ~ [e1,e2,e3] [a0,a1,a2]@3 ~@6", // A# F# D# E A
})).s("gm_synth_bass_1").gain(0.3)

// bass · synth bass 1 · "Bass Synthesiser" · soft notes
const bass_soft = note("<~@50 A B A C ~@22 D E F G H I ~@3 J K L M N ~@5 O@2 P Q R S T ~@2 U ~@29>".pickRestart({
  A: "d4!2 c4!2 a3!2 c4!2 a3!2 f3!2 d3!2 f3!2", B: "c3!2 d#3!2 g3!2 c4!2 a#3!2 g3!2 a3!2 a2!2",
  C: "c4!2 d#4!2 g4!2 d#4!2 g3!2 a#3!2 c#3!2 a2!2",
  D: "[f4,a4] f4 [e5,e6]@2 [f4,a4] [f4,d5,d6] [c5,c6] [b4,b5], [d5,d6] ~@3", // F E F Dm C B D
  E: "[d#4,g4] d#4 [c5,c6] [a#4,a#5] [c#4,e4] c#4 [g4,g5]@2, [d5,d6] ~ [a4,a5] ~", // D# C A# C#m G D A
  F: "[f4,a4] f4 [c5,c6] [d5,d6] [f4,a4] f4 ~ [d5,d6], [d5,d6]@2 ~@2 [c5,c6]@3 ~", // F C D F D C
  G: "[a#3,d4,a#4,a#5] [a#3,c5,c6] [d5,d6]@2 [b3,e4] [c#4,c5,c6] [a#4,a#5] [a4,a5]", H: "g5 a5 a#5 g5 a5 c6 a#5 a5",
  I: "g4 a4 a#4 g4 a4 c5 a#4 a4", J: "~ a3 ~ f3 ~ a3 ~@3 a#3 ~ g3 ~ a#3 ~@2", K: "[d2,d4] ~ g2 ~", L: "c2 ~",
  M: "f2 ~ a#2 ~", N: "d#2 ~", O: "[~@4 a2!2 g2 ~ a0!8, ~@7 e2@3 ~@6]/2", P: "a0!4 [a0,a2]!2 [a0,g2] [a0,e2]",
  Q: "a0!8", R: "[a0,a2]!2 [a0,g2] [a0,e2] a0!4", S: "a1!4 c2!2 a#1 a1", T: "[a0,a3]!2 [a0,g3] [a0,e3] c2!2 a#1 a1",
  U: "[a0,a3]!2 ~@6", // A
})).s("gm_synth_bass_1").gain(0.2)

stack(pad_warm, pad_bowed, bass, bass_soft)