Strudelify

Romaria

Renato Teixeira

KeyD majorTempo87 bpm
0:00/0:00
// Romaria — Renato Teixeira
// 87 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(87/3)

// 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(`<
  A B A B C B D E F G H I J K L M J H N@2 O P Q R S P T U O P V W X Y Z ~@2 C B D E F G H I J K L M J H N@2 O P Q R S P
  T U O P V W X Y Z ~@2 A B A B C B D E C B D E F G H I J K L M J H N@2 O P Q R S P T U O P V W X Y T U O P ~@5
>`.pickRestart({
  A: "[f#3,a3,d4]", B: "[g3,b3,d4,g4]@7 ~", C: "[f#3,d4,a4]", D: "[f#3,a3,d4]@7 ~", E: "~@7 [g3,b3,d4]@25",
  F: "[f#3,a3,d4]@20 ~@2 [f#3,a#3,c#4,f#4]@7 ~@3", G: "[a3,b3,d4,f#4]@7 ~", H: "[a#3,f#4,c#5]",
  I: "~ [a#3,c#4,f#4]@7 ~@3 [g#3,e4,b4]@7 ~@4 [f#3,a#3,c#4]@7 ~@3", J: "[a3,d4,f#4,b4]@7 ~", K: "[g#3,e4,b4]@7 ~",
  L: "[a3,d4,f#4,b4]", M: "[g#3,b3,e4]", N: "[[a3,d4,f#4,b4]@63 ~]/2",
  O: "~ [b3,d4,g4]@7 ~@3 [d4,f#4,a4,d5]@7 ~@4 [d4,e4,g4,b4]@7 ~@3", P: "[c#4,a4,e5]@7 ~",
  Q: "[d4,f#4,a4]@20 ~@2 [a#3,f#4,c#5]@7 ~@3", R: "[b3,d4,f#4,b4]@20 ~@2 [b3,d4,f#4,b4]@7 ~@3",
  S: "~ [b3,d4,g4]@7 ~@3 [d4,f#4,a4,d5]@7 ~@4 [d4,g4,b4,e5]@7 ~@3", T: "~@7 [d4,f#4,a4,d5]@14 ~ [d4,g4,b4,e5]@7 ~@3",
  U: "[d4,f#4,a4,d5]@7 ~", V: "[d4,f#4,a4,d5]@20 ~@2 [a#3,f#4,c#5]@7 ~@3", W: "[b3,d4,f#4]@20 ~@2 [b3,d4,f#4,b4]@7 ~@3",
  X: "~ [b3,g4,d5]@7 ~@3 [d4,f#4,a4,d5]@7 ~@4 [d4,g4,b4,e5]@7 ~@3", Y: "[c#4,a4,e5]", Z: "[d3,e4,g4,c5]",
})).s("gm_piano").gain(0.64).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@70 A B C D E F G H I ~@38>".pickRestart({
  A: "~@25 a4@3 b4@3 ~", B: "[b4,d5]@11 [a4,c#5]@16 ~ [g4,b4]@4", C: "[g4,b4]@10 ~ [f#4,a4]@16 ~ [d4,f#4]@4",
  D: "[f#4,a4]@9 ~@2 [e4,g4]@17 [c#4,e4]@4", E: "[e4,g4]@10 ~ [d4,f#4]@16 ~ [b3,d4]@4",
  F: "f#4@10 ~ e4@9 ~ [b3,d4]@9 ~@2, d4@9 ~@7", G: "[a3,d4]@9 ~@7", H: "[g4,b4]@9 ~@2 [a4,c#5]@9 ~ [b4,d5]@8 ~@3",
  I: "[d5,f#5]@11 ~@5", // D
})).s("gm_acoustic_guitar_steel").gain(0.45).pan(0.4)

// chords · flute
const flute = note("<~@28 A B@2 C ~@9 D E F G H I J K L M N@2 ~@8 A B@2 C ~@37 A B@2 C ~@4 A B ~@5>".pickRestart({
  A: "[g4,b4]", B: "[a4,c#5,e5]", C: "[b4,d5,f#5]", D: "d4@21 e4@10 ~", E: "f#4@21 b4@10 ~", F: "a#4@26 ~ f#4@5",
  G: "e4", H: "f#4", I: "g#4", J: "a4", K: "[e4,b4]", L: "[d4,f#4,b4]", M: "[a#4,c#5,e5]", N: "[b4,d5,f#5]/2",
})).s("gm_flute").gain(0.4).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A B C B A B C B ~@29 A B C B ~@29 A B C B A B C B A B C B ~@35>".pickRestart({
  A: "~@16 f#4 ~ g4@2 f#4@3 ~@5 a3@4, f#3, a3@7 ~, d4@23 d4@9",
  B: "[a3,b3]@7 ~@14 a3@6 ~ b3@3 ~, [d4,g4]@7 ~, g3@9 g3@5 ~@2, ~@7 b3@21 ~@4", // Asus2 G5
  C: "d4@5 ~@11 f#4 ~ g4@2 f#4@3 ~@5 a3@4, f#3, a3@7 ~, ~@5 d4@18 d4@9",
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  ~@8 A B C D E F B F G C H I J K A L J M N O J P A L J K ~ Q R ~@4 A B C D E F B F G C H I J K A L J M N O J P A L J K
  ~ Q R ~@12 A B C D E F B F G C H I J K A L J M N O J P A L J K N O J ~@6
>`.pickRestart({
  A: "[f#3,d4]@10 ~ [f#3,c#4]@5", B: "~@7 [d3,a3]@13 ~ [d3,a3]@5 ~@6", C: "~@7 [f#3,c#4]@13 ~ [f#3,c#4]@5 ~@6",
  D: "~ [f#3,c#4]@10 ~ e3@9 ~ [f#3,c#4]@10, ~@11 b3@9 ~@12", E: "~@7 [d3,a3]@5 ~@9 [d3,a3]@7 ~@4",
  F: "~@7 [e3,b3]@5 ~@9 [e3,b3]@7 ~@4", G: "~@7 [d3,a3]@5 ~@6 b2@3 [d3,a3]@5 ~@6",
  H: "~@7 [d3,a3]@4 ~@7 b2@2 ~ [d3,a3]@5 ~@6", I: "b2@11 ~@10 a3@7 ~@4, ~@11 d3@18 ~@3",
  J: "~ [g3,d4]@10 ~ f#3@9 ~ [d3,g3]@10, ~@11 d4@9 ~@12", K: "~@7 [c#3,a3]@13 ~ [c#3,a3]@5 ~@6",
  L: "[d3,b3]@10 ~ [d3,b3]@5", M: "~@7 [c#3,a3]@5 ~@6 a2@3 [c#3,a3]@5 ~@6", N: "[f#3,d4]@10 ~ [g3,d4]@5",
  O: "~@7 [f#3,d4]@5 ~@6 d3@3 [f#3,d4]@5 ~@6", P: "~@7 [c#3,a3]@5 ~@9 [c#3,a3]@7 ~@4", Q: "a4@29 ~@3",
  R: "a4@3 g4@2 d4@22 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.44).pan(0.3)

// bass · fretless bass
const bass = note(`<
  A B A B A B A B C D E F D G D G D E H@2 I J K L I J M A I J K L I J N O P A B A B C D E F D G D G D E H@2 I J K L I J
  M A I J K L I J N O P A B A B A B A B A B A B C D E F D G D G D E H@2 I J K L I J M A I J K L I J M A I Q@2 ~@4
>`.pickRestart({
  A: "d2@15 ~", B: "g2@15 ~", C: "d2@20 ~ c#2@9 ~@2", D: "b1@15 ~", E: "f#2@15 ~", F: "f#2@9 ~@2 g#2@9 ~ a#1@9 ~@2",
  G: "e2@15 ~", H: "[b1@31 ~]/2", I: "g2@9 ~@2 f#2@9 ~ e2@9 ~@2", J: "a1@15 ~", K: "d2@20 ~ f#2@9 ~@2",
  L: "b1@20 ~ a1@9 ~@2", M: "d2@20 ~ d2@9 ~@2", N: "c2@29 ~@3", O: "a3@29 ~@3", P: "a3@3 g3@2 d3@22 ~@5",
  Q: "[a2@45 ~@19]/2",
})).s("gm_fretless_bass").gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  A@8 B A@2 C A@7 ~ C A B@2 C A B A C A B@2 C A@2 ~@2 A@4 B A@2 C A@7 ~ C A B@2 C A B A C A B@2 C A@2 ~@2 A@12 B A@2 C
  A@7 ~ C A B@2 C A B A C A B@2 C A B A C A ~@5
>`.pickRestart({
  A: "x", B: "x ~@20 x ~@10", C: "x ~@10 x ~@9 x ~@10",
})).gain(0.25)

stack(piano, acoustic_guitar_steel, flute, acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass, ride)

More by Renato Teixeira