Strudelify

Um anjo do ceu

Rastape

KeyG majorTempo73 bpm
0:00/0:00
// Um anjo do ceu — Rastape
// 73 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(73/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick
const bass = note(`<
  A B C D E F G H I J K L M N O P Q N O P Q R B C D E F G H I J K L M N O P Q N O P Q R B C D E F G H I J K L M N O P Q
  N O P Q S
>`.pickRestart({
  A: "a2 ~@15", B: "d2@2 ~ d2 f#2@2 d2@2 c2@2 ~ c2 e2@2 c2@2", C: "g1@2 ~ g1 b1@2 d2@2 g1@2 ~ g1 b1@2 g1@2",
  D: "d2@2 ~ d2 f#2@2 d2 ~ c2@2 b1@2 a1@2 d2@2", E: "g1@2 ~ g1 b1@2 d2@4 ~ d2 b1@2 d2@2",
  F: "g1@3 g1 b1@2 d2@2 g1@2 ~ g1 b1@2 d2@2", G: "g1@2 ~ g1 b1@2 d2@2 g1@2 ~ g1 b1@2 d2@2",
  H: "c2@2 ~ c2 e2@2 c2@4 ~ c2 e2@2 c2 ~", I: "c2@2 ~ c2 e2@2 c2@2 d2@2 ~ d2 f#2@2 a2@2",
  J: "g1@2 ~ g1 d2@2 g1@4 ~ g1 b1@2 d2@2", K: "g1@2 ~ g1 b1@2 g1@2 g1@2 ~ g1 b1@2 d2@2",
  L: "c2@2 ~ c2 e2@2 c2@4 ~ c2 e2@2 c2@2", M: "c2@2 ~ c2 e2@2 g2@2 d2@2 ~ d2 f#2@2 a2@2",
  N: "g1@2 ~ g1 b1@2 d2 ~ d2@2 ~ d2 f#2@2 d2@2", O: "c2@2 ~ c2 e2@2 c2@2 g1@2 ~ g1 d2 g1 ~ g1",
  P: "g1@2 ~ g1 b1@2 g1@2 d2@2 ~ d2 f#2@2 d2@2", Q: "c2@2 ~ c2 g2 c2 ~ c2 g1@2 ~ g1 b1@2 g1 ~",
  R: "b1!2 ~ b1 c2 ~ c2 d2 ~@8", S: "g2 ~@15",
})).s("gm_electric_bass_pick").gain(0.43)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C D E ~ F G E D H I J K J K J K J K ~ A B C D E ~ F G E D H I J K J K J K J K ~ A B C D E ~ F G E D H I J K J K
  J K J K ~
>`.pickRestart({
  A: "[d3,f#3,a3]@3 ~ [c3,e3,g3]@3 ~", B: "[d3,g3,b3]@7 ~ [d3,g3,b3]@6 ~@2", C: "[d3,f#3,a3]@3 ~ [c3,e3,g3]@2 ~@2",
  D: "[d3,g3,b3]@7 ~", E: "[d3,g3,b3]@15 ~", F: "~@4 c4@3 ~, [c3,e3,g3]@15 ~", G: "[c3,e3,g3]@7 ~ [d3,f#3,a3]@6 ~@2",
  H: "[c3,e3,g3]@7 ~", I: "[c3,e3,g3]@6 ~@2 [d3,f#3,a3]@5 ~@3", J: "[d3,g3,b3]@3 ~ [d3,f#3,a3]@3 ~",
  K: "[c3,e3,g3]@6 ~@2 [d3,g3,b3]@7 ~", // C G
})).s("gm_electric_guitar_muted").gain(0.36)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F G H I J K L M N O P M N O P ~ A B C D E F G H I J K L M N O P M N O P ~ A B C D E F G H I J K L M N O P
  M N O P ~
>`.pickRestart({
  A: "~ a4@2 ~@2 g4@2 ~, d4@7 ~ c4@6 ~@2, ~ f#4@5 ~@3 e4@5 ~@2", B: "~ b4@3 ~ b4@2 ~, d4@7 ~ d4@7 ~, ~ g4@7 ~ g4@6 ~",
  C: "~@2 a4@4 ~@2 c4 e4 b3 d4 a3 c4 d4 f#4, d4@3 ~@5, ~ f#4@5 ~@10", D: "~@4 d5@3 ~, ~ g4@6 ~, ~@3 b4@11 ~@2",
  E: "~@5 d5@10 ~, ~@2 g4@13 ~, ~@3 b4@12 ~", F: "~@4 g4@3 ~, ~ g3@6 ~, ~@3 b3@11 ~@2, ~@5 d4@9 ~@2",
  G: "~@3 g4@4 ~, ~@2 c4@13 ~, ~@3 e4@11 ~@2", H: "c4@6 ~@5 f#4@3 a4 ~, ~@5 d4@2 ~",
  I: "~@8 g4@7 ~, g3@15 ~, ~ b3@14 ~, ~@2 d4@13 ~", J: "~@8 g4@7 ~, g3@7 ~, ~ b3@13 ~@2, ~@2 d4@13 ~",
  K: "~@2 g4@13 ~, c4@15 ~, ~ e4@14 ~", L: "~@2 g4@5 ~@3 a4@4 ~@2, c4@7 ~ d4@6 ~@2, ~ e4@6 ~@2 f#4@5 ~@2",
  M: "~@3 g4@4 ~@4 d5@4 ~, g3@6 ~@4 a4@5 ~, ~ b3@5 ~@3 f#4@6 ~, ~@2 d4@4 ~@2 d4@7 ~",
  N: "~@2 g4@4 ~@3 g3 b3 g3 d4 g3 ~@2, c4@7 ~@9, ~ e4@5 ~@10",
  O: "~@2 d4@4 g4 ~@3 [d4,f#4,a4]@3 ~ [d4,f#4,a4] ~, g3@7 ~@9, ~ b3@6 ~@9", // D
  P: "~ g4@2 ~@2 d4@2 ~, c4@3 ~ g3@3 ~, ~ e4@5 ~@3 b3@5 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.39)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D E F G H F I J K L M N O L M N O ~ A B C D E F G H F I J K L M N O L M N O ~ A B C D E F G H F I J K L M N O
  L M N O ~
>`.pickRestart({
  A: "~@2 [d4,f#4,a4]!2 ~@2 [d4,f#4,a4] ~@3 [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~", // D C
  B: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@2 d4 [d4,g4,b4] [d4,g4] ~@2 [d4,g4,b4] ~", // G G5 G
  C: "~@2 [d4,f#4,a4] [f#4,a4] ~@2 [d4,f#4,a4] ~ [c4,e4] ~ [b3,d4]@2 [a3,c4] ~ [d4,f#4,a4] ~", // D F#m D C Bm Am D
  D: "~@3 g4@2 ~@3 [g4,b4]@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~, ~@2 d4@2 ~ d4@2 d4@3 ~@6, ~@3 g4 ~@4", // G
  E: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  G: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  H: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // C D
  I: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@3 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~", // G
  J: "~@2 [c4,e4,g4]!2 ~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  K: "~@2 [c4,e4,g4]!2 ~@2 [c4,e4,g4] ~@3 [d4,f#4,a4]!2 ~ d4 f#4 d4", // C D
  L: "~@2 [d4,g4] [d4,g4]@3 [d4,g4,b4] ~@3 [d4,f#4,a4]@4 [d4,f#4,a4] ~, ~ b4@2 ~@5", // G5 G D
  M: "~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~@3 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~", // C G
  N: "~@2 [d4,g4,b4] [d4,g4] ~@2 [d4,g4,b4] ~@3 [d4,f#4,a4] [d4,f#4] ~@2 [d4,f#4,a4] ~", // G G5 G D
  O: "~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~@3 [d4,g4,b4] [d4,g4] ~@2 [d4,g4,b4] ~", // C G G5 G
})).s("gm_electric_guitar_clean").gain(0.39)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  A B C D E F G H I J K H L M N O P Q R S T A B C D E F G H I J K H L M N O P Q R S T A B C D E F G H I J K H L M N O P
  Q R S T ~
>`.pickRestart({
  A: "~@9 g4 b4 d5 g5 f#5 e5 d5", B: "a5 f#5 d5 ~@5 g5 e5 c5 ~@5", C: "e5 d5 b4 ~@6 g4 b4 d5 g5 f#5 e5 d5",
  D: "a5 f#5 d5 ~@5 c5 ~ d5 ~ c5 ~ a4 ~", E: "~@2 [g4,b4,d5] [b4,d5] ~@2 [g4,b4,d5] ~@2 g4 a4 g4@3 b4 ~",
  F: "~@2 [g4,b4,d5]!2 ~@2 [g4,b4,d5] ~@3 [g4,b4,d5]!2 ~@2 [g4,b4,d5] ~", // G
  G: "~@2 d5 b4 ~ g4 b4 ~@2 g4 b4 g4 d5 b4 g4 ~",
  H: "~@2 [c4,e4,g4]!2 ~@2 [c4,e4,g4] ~@3 [g4,c5,e5]!2 ~@2 [g4,c5,e5] ~", // C
  I: "~@2 [c5,e5] [g4,c5,e5] ~@2 [g4,c5,e5] ~@3 [d4,f#4,a4]!2 ~@2 [d4,f#4,a4] ~", // C D
  J: "~@2 [g4,b4,d5]!2 ~ g4 b4 g4 ~ g4 d5 b4 ~ g4 [g4,b4] ~", // G
  K: "~ g4 [b4,d5] g4 ~@2 [b4,d5] [g4,b4,d5] ~ g4 b4 d5@2 b4 g4 ~, ~@5 g4@2 ~@9", L: "~@4 c4 e4 g4 ~@9",
  M: "~@2 [g4,b4,d5]!2 ~@2 [g4,b4,d5] ~@3 [d4,a4]@2 ~@2 [d4,f#4] ~", // G D5 D
  N: "~ c4 e4 c4 ~@2 [c4,e4,g4] ~@3 [g4,b4,d5]!2 ~ g4 [g4,b4,d5] ~", // C G
  O: "~ g4 g5 g4!3 [g3,g5] g4 ~ d4 d5 d4 [f#4,a4] [d4,g4] [d4,f#4,d5] f#4, g3@3 a3@3 ~@10", // G F#m G5 D
  P: "c4 e4 g4 e4 d4 f#4 a4 [e4,f4,g4,a4,b4,c5,d5,e5] [g4,f5] ~ [b4,d5] ~@2 g4 [b4,d5] [g4,b4,c5,d5,e5,f5], ~@8 g5@7 ~", // Em7 G7 Bm G7
  Q: "[g4,a4]@2 [g4,b4,d5] [b4,d5] ~@2 [g4,b4,d5] d4 ~ f#4 ~ g4 a4 g4 [d4,f#4] e4, ~@3 g4@3 ~@2 d5@2 [d4,a4]@2 ~@4", // Gsus2 G Bm G D D5
  R: "c4 ~ e4 [c4,e4] f#4@2 [c4,e4,g4] ~ g4 b4 [g4,b4,d5]!2 d5 [g4,b4] [g4,b4,d5] b4, ~ c4@2 ~@13", // C G
  S: "~ g4 [g4,b4,g5] [g4,b4] g4!2 [b4,d5,g5] g4 ~ d4 [f#4,d5] [d4,a4] [f#4,a4] [d4,a4] [a4,d5] f#4", // G D D5 F#m D5
  T: "[c4,b4,c5,d5] [e4,e5,f5,g5] g4 [e4,f#5] [d4,g5] [f#4,f#5] a4 g5 g4!2 [b4,d5] ~@2 g4 [b4,d5] [g4,b4], ~@8 g5@7 ~", // G Em Esus2 G5 F# Bm G
})).s("gm_acoustic_guitar_nylon").gain(0.46)

// other · harmonica
const harmonica = note("<A B C D E ~@16 A B C D E ~@16 A B C D E ~@16 F>".pickRestart({
  A: "~ b4 c5 ~ c5 c#5 ~ c#5 d5 g4 b4 d5 g5 f#5 e5 d5",
  B: "a5 f#5 d5 f#5 a5 f#5 ~ f#5 g5 e5 c5 e5 ~ e5 c5 e5, ~@3 d5 ~@2 g5 ~",
  C: "~ d5 ~ d5 ~ d5 b4 c5 d5 g4 b4 d5 g5 f#5 e5 d5, e5 b4 e5 ~@5",
  D: "a5 f#5 d5 f#5 a5 f#5 d5 ~ c5 c6 d5 b5 c5 a5 a4 a5", E: "g5@9 ~@7", F: "[g4,b4,d5] ~@15",
})).s("gm_harmonica").gain(0.33)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!63 ~>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<[x!2 ~ x ~ x ~ x] [~ x ~ x ~ x ~ x]!62 ~>").gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@63 x>").gain(0.57)

// drums · claves
const claves = s("clave:2").struct("<[x!2]!63 ~>").gain(2.1)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<[~ x ~ x]!63 ~>").gain(0.62)

// drums · triangle
const triangle = s("triangles:30").struct("<[x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!63 ~>").gain(3.73)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<[~ x ~ x ~ x ~ x]!63 ~>").gain(3.73)

stack(
  bass, electric_guitar_muted, acoustic_guitar_nylon, electric_guitar_clean, acoustic_guitar_nylon_2, harmonica,
  pedal_hat, open_hat, ride, claves, woodblocks, triangle, triangle_2
)

More by Rastape