Strudelify

Amanheceu, peguei a viola

Renato Teixeira

KeyD majorTempo115 bpm
0:00/0:00
// Amanheceu, peguei a viola — Renato Teixeira
// 115 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D@8 E@2 F@2 G H I J K L K M N O P Q R S T U V E@2 F@2 G H I J K L K W ~ E@2 F@2 G H I J K L K N O P Q R S T U
  V E@2 F@2 G H I J K L K@2 X Y Z Y AA ~ AB@2 AC@2 AD AE AF AG Y Z Y Z Y Z Y Z Y Z Y AH AI AJ AK AL AM AN AO AH AI AJ AK
  AL AM AN AO AP
>`.pickRestart({
  A: "~@7 [f#4,a4,d5]@8 ~", B: "[b4,d5]@2 [g4,b4,c#5,d5]@3 [g4,b4]@3 f#4@6 [d4,f#4]@2, ~ [a4,d5]",
  C: "~ [g4,b4] ~ [g4,b4]@3 [f#4,a4]@3 [d4,f#4,a4,d5]@6 [b3,d4], ~@3 d5 ~@12", // G F#m D Bm
  D: "[~ [e4,g4] ~@2 [e4,g4,b4,d5]@3 [d4,f#4]@3 [d4,f#4]@8 ~@3 [g4,b4,d5] ~@2 e4 d4 ~ [d4,f#4,a4,d5]@9 ~@2 [g4,b4,d5] ~@5 [f#4,a4,d5]@8 ~@3 [g4,b4,d5] ~@4 [f#4,a4,d5]@8 ~@4 [g4,b4,d5]@2 ~@3 [f#4,a4,d5]@9 ~@3 [g4,b4,d5] ~@4 [f#4,a4,d5]@11 [g4,b4,d5] ~@5 [f#4,a4,d5]@15 ~@2, ~@5 [a4,d5]@5 ~@54, ~@18 f#4@5 ~@105]/8", // Em Em7 D G D G D G …
  E: "[[f#4,a4,d5]@8 [a4,d5]@6 ~@2 f#4@3 f#4@5 f#4@3 ~@2 d5@2 ~, d3@31 ~, ~@8 f#4@8 ~@8 d5@5 ~@3, ~@14 [a4,d5]@10 a4@7 ~, ~@27 f#4@4 ~]/2", // D D5
  F: "[~@3 g4@5 [b4,d5]@5 ~@3 g4@8 [b4,d5]@5 [b4,d5]@2 ~, g3, ~ g4 ~ g4, ~@13 [b4,d5]@11 ~@8]/2", // Bm
  G: "[f4,a4,c5]@7 ~ [e4,g#4,b4]@7 ~", H: "~@5 [a4,d5]@3 f#4@5 f#4@3, d3, f#4 [a4,d5]",
  I: "~@5 [e4,g#4]@3 [b3,e4,g#4]@6 [b3,e4,g#4]@2, e3, ~ b3@3 ~@4", // E
  J: "~@6 [e4,a4]@2 [c#4,e4,a4]@5 [e4,a4] c#4 ~, a3@7 ~, ~@3 c#4@5 ~@8", K: "[d3,f#4,a4,d5]@10 ~ [g3,g4,b4,d5]@3 ~@2",
  L: "~ [f#4,a4]@8 ~@2 [g3,g4,b4,d5]@3 d5 ~, [d3,d5]@9 ~@7", M: "~ [f#4,a4,d5]@15, d3@15 ~",
  N: "[d3,f#4,a4,d5] ~@2 [b3,d4]@2 [c#4,e4]@3 [d4,f#4]@3 [e4,g4]@2 [f#4,a4]@2 ~", // D Bm C#m D Em F#m
  O: "[g4,b4] ~@2 [g4,b4]@2 [f#4,a#4]@3 [g4,b4]@5 [f#4,a#4]@2 ~", // G F# G F#
  P: "[g4,b4]@2 ~ [g4,b4]@2 [f#4,a#4]@3 [g4,b4]@5 [a4,c#5]@3", // G F# G A
  Q: "[f#4,a4]@4 ~ [f#4,a4]@3 [f4,g#4]@2 ~ [f#4,a4]@2 [f4,g#4]@2 ~", // F#m Fm F#m Fm
  R: "[f#4,a4] ~@2 [f#4,a4]@2 [f4,g#4]@3 [f#4,a4]@5 [g4,b4]@3", // F#m Fm F#m G
  S: "[e4,g4]@4 ~ [e4,g4]@2 ~ [d#4,f#4]@2 ~ [e4,g4]@2 [d#4,f#4]@2 ~", // Em D#m Em D#m
  T: "[e4,g4]@2 ~ [e4,g4]@2 [d#4,f#4]@2 ~ [e4,g4]@5 [f#4,a4]@3", U: "[d4,f#4]@13 ~@3", V: "[a3,d4,f#4,a4] ~@15",
  W: "~ [f#4,a4,d5]@15, d3", X: "[e3,g#4,b4,e5]@10 ~ [a4,e5]@2 ~@3, ~@5 [a3,c#5] ~@2",
  Y: "[e3,g#4,b4,e5]@10 ~ [a3,a4,c#5,e5]@3 ~@2", Z: "~ [g#4,b4]@8 ~@2 [a3,a4,c#5,e5]@3 e5 ~, [e3,e5]@9 ~@7",
  AA: "~ [g#4,b4,e5]@15, e3@15 ~", // E
  AB: "[[g#4,b4,e5]@8 [b4,e5]@6 ~@2 g#4@3 g#4@5 g#4@3 ~@2 e5@2 ~, e3@31 ~, ~@8 g#4@8 ~@8 e5@5 ~@3, ~@14 [b4,e5]@10 b4@7 ~, ~@27 g#4@4 ~]/2", // E E5
  AC: "[~@3 a4@5 [c#5,e5]@5 ~@3 a4@8 [c#5,e5]@5 [c#5,e5]@2 ~, a3, ~ a4 ~ a4, ~@13 [c#5,e5]@11 ~@8]/2", // C#m
  AD: "[g4,b4,d5]@7 ~ [f#4,a#4,c#5]@7 ~", AE: "~@5 [b4,e5]@3 g#4@5 g#4@3, e3, g#4 [b4,e5]",
  AF: "~@5 [f#4,a#4]@3 [c#4,f#4,a#4]@6 [c#4,f#4,a#4]@2, f#3, ~ c#4@3 ~@4", // F#
  AG: "~@6 [f#4,b4]@2 [d#4,f#4,b4]@5 [f#4,b4] d#4 ~, b3@7 ~, ~@3 d#4@5 ~@8", // B5 B B5
  AH: "[e3,g#4,b4,e5] ~@2 [c#4,e4]@2 [d#4,f#4]@3 [e4,g#4]@3 [f#4,a4]@2 [g#4,b4]@2 ~", // E C#m D#m E F#m G#m
  AI: "[a4,c#5] ~@2 [a4,c#5]@2 [g#4,c5]@3 [a4,c#5]@5 [g#4,c5]@2 ~", // A G# A G#
  AJ: "[a4,c#5]@2 ~ [a4,c#5]@2 [g#4,c5]@3 [a4,c#5]@5 [b4,d#5]@3", // A G# A B
  AK: "[g#4,b4]@4 ~ [g#4,b4]@3 [g4,a#4]@2 ~ [g#4,b4]@2 [g4,a#4]@2 ~", // G#m Gm G#m Gm
  AL: "[g#4,b4] ~@2 [g#4,b4]@2 [g4,a#4]@3 [g#4,b4]@5 [a4,c#5]@3", // G#m Gm G#m A
  AM: "[f#4,a4]@4 ~ [f#4,a4]@2 ~ [f4,g#4]@2 ~ [f#4,a4]@2 [f4,g#4]@2 ~", // F#m Fm F#m Fm
  AN: "[f#4,a4]@2 ~ [f#4,a4]@2 [f4,g#4]@2 ~ [f#4,a4]@5 [g#4,b4]@3", AO: "[e4,g#4]@13 ~@3", AP: "[e3,g#4,b4,e5]",
})).s("gm_acoustic_guitar_steel").gain(0.17)

// bass · electric bass finger
const bass = note(`<
  ~@12 A@2 B C D A E F G H@2 A I J K A L M@2 A N A@2 J C D A O F G H@2 A P A@2 J C D A O F G H@2 I J K A L M@2 A N A@2 J
  C D A O F G H@3 Q R S@2 O@4 T U V O W X R S R S R S R S R S R Y M Z O AA AB@2 O AC M Z O AA AB@2 O AD
>`.pickRestart({
  A: "d2@5 f#2@5 ~ a2@5", B: "g1@5 b1@6 d2@5", C: "g1@5 b1@5 ~ g2@2 f#2@3", D: "f2 e2", E: "e2@5 g#2@6 b2@5",
  F: "a1@5 c#2@2 ~ a2@3 g2@2 c#2@3", G: "d2@11 g2@5", H: "d2@10 ~ g2@5", I: "d2 ~@15", J: "g1@5 b1@5 ~ d2@5",
  K: "g1@5 b1@5 ~ d2@4 ~", L: "d2@5 f#2@5 ~ a2@4 ~", M: "a1@5 c#2@5 ~ e2@5", N: "d2 ~@7", O: "e2@5 g#2@5 ~ b2@5",
  P: "d2@3 ~@13", Q: "e2@7 ~@4 a1@3 ~@2", R: "e2@11 a2@5", S: "e2@10 ~ a2@5", T: "a1@5 c#2@6 e2@5",
  U: "a1@5 c#2@5 ~ a2@2 g#2@3", V: "g2 f#2", W: "f#2@5 a#2@6 c#3@5", X: "b1@5 d#2@2 ~ b2@3 a2@2 d#2@3", Y: "e2 ~@15",
  Z: "a1@5 c#2@5 ~ e2@4 ~", AA: "e2@5 g#2@5 ~ b2@4 ~", AB: "b1@5 d#2@5 ~ f#2@5", AC: "e2@5 b1@5 ~ g#1@5", AD: "e2",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@12 A@8 B@4 A C@7 A C@8 B@4 A C@8 B@3 A C@7 A C@8 B@9 A C@8 B@11 A C@15 A>".pickRestart({
  A: "x", B: "x ~@2 x ~@12", C: "x ~@2 x ~@4 x ~@7",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@12 [~@3 x ~@4 x ~@7]!8 ~@63 [~@3 x ~@4 x ~@7] ~@36>").gain(0.16)

// drums · rim
const rim = s("rim").struct("<A B ~@10 C@12 ~ C@7 ~ C@12 ~ C@11 ~ C@7 ~ C@37 ~ C@15 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~@6", C: "~@11 x ~@4",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@8 B@4 C A@7 C A@8 B@4 C A@8 B@3 C A@7 C A@8 B@9 A@9 B@11 C A@15 C>".pickRestart({
  A: "x ~@7 x ~@2 x ~ x ~@2", B: "x ~@4 x ~@5 x ~@4", C: "x",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@12 A@8 ~@5 A@7 ~ A@8 ~@5 A@8 ~@4 A@7 ~ A@8 ~@9 A@9 ~@12 A@15 ~>".pickRestart({
  A: "~@3 x ~ x ~@10",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@119 x>").gain(0.4)

// drums · claves
const claves = s("clave:2").struct("<~@33 A@8 ~@5 A@8 ~@12 A@8 ~@10 A@8 ~@28>".pickRestart({
  A: "~@3 x!2 ~@3 x ~@7",
})).gain(2.35)

// drums · claves · soft notes
const claves_soft = s("clave:2").struct("<~@33 A@8 ~@5 A@8 ~@12 A@8 ~@10 A@8 ~@28>".pickRestart({
  A: "~@5 x ~@10",
})).gain(1.18)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@25
  [x ~@3 x!2 ~@2 x ~@4 x ~@2]!7
  ~@26
  [x ~@3 x!2 ~@2 x ~@4 x ~@2]!7
  ~@39
  [x ~@3 x!2 ~@2 x ~@4 x ~@2]!15
  ~
>`).gain(0.48)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@25 [~@3 x ~@12]!7 ~@26 [~@3 x ~@12]!7 ~@39 [~@3 x ~@12]!15 ~>").gain(0.24)

stack(
  acoustic_guitar_steel, bass, kick, kick_soft, rim, hihat, hihat_soft, crash, claves, claves_soft, shaker, shaker_soft
)

More by Renato Teixeira