Strudelify

história de un amor

Carlos Eleta Almarán

KeyG majorTempo98 bpm
0:00/0:00
// história de un amor — Carlos Eleta Almarán
// 98 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 11 "Voice Aahs" choir aahs (copy of ch 1 "Voice Oohs" voice oohs)
// note: Transcription provider: pdmx. https://musescore.com/score/5903021; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 31 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · synth strings 1 · "Syn. Strings 1"
const synth_strings_1 = note("<~@16 A B C D E F G H I J K L M N O>".pickRestart({
  A: "~@2 [e4,g4] [d4,f#4] [b3,e4] [d4,f#4] [e4,g4] [b3,e4]", B: "[c4,a4]!2",
  C: "[f#4,a4]!3 [e4,g4] [d4,f#4] [e4,g4] [f#4,a4] [d4,f#4]", D: "[g4,b4] [d#4,b4]",
  E: "~@2 [g4,b4] [e4,a4] [e4,g4] [e4,a4] [g4,b4] [e4,g4]", F: "[a4,c5]!2",
  G: "~@2 [f#4,a4] [e4,g4] [d4,f#4] [e4,g4] [f#4,a4] [d4,f#4]", H: "[g4,b4]!2",
  I: "~@2 [e4,g4] [d4,f#4] [c4,e4] [d4,f#4] [e4,g4] [c4,e4]", J: "[c4,a4]",
  K: "~@2 [c4,a4] [e4,g4] [d4,f#4] [c4,e4] [b3,d4] [a3,c4]", L: "b3",
  M: "~@2 [a3,c4] [g3,d4] [c4,e4] [d4,f#4] [e4,g4] [c4,a4]", N: "[d#4,b4]", O: "~ [d#4,b4]@9 ~@6",
})).s("gm_synth_strings_1").gain(0.3)

// other · tremolo strings · "Strings tremolo"
const tremolo_strings = note("<~@7 A B ~@6 C D E F G H I F J F K F ~@4>".pickRestart({
  A: "~@4 f#3 ~ g3 ~ g#3 ~ a3 ~ a#3@2 b3@2", B: "e3 ~", C: "~@2 e3 f3 f#3 g3 g#3 a3", D: "b3 ~",
  E: "~@2 c4 b3 a3 g#3 g3 a3", F: "c4 ~", G: "~@2 d4 c4 b3 a#3 a3 b3", H: "e4 ~",
  I: "~@4 e4 ~ d4 ~ c4 ~ e4 ~ e4@2 d4@2", J: "~@4 d4 ~ c4 ~ b3 ~ c4 ~ d4@2 d4@2", K: "~@2 c4 b3 a3 b3 c4 a3",
})).s("gm_tremolo_strings").gain(0.4)

// chords · acoustic guitar nylon · "Nylon Guitar Bright"
const acoustic_guitar_nylon = note("<~ A B C D E F A D A B C D E G H I J K L I J K M N O P Q R S@2>".pickRestart({
  A: "[d#3,a3,b3,f#4]@6 [d#3,a3,b3,f#4] ~@3 [d#3,a3,b3,f#4]@6", // B7
  B: "[d#3,a3,b3,f#4]@2 ~@2 [d#3,a3,b3,f#4]@4 ~@2 [d#3,a3,b3,f#4] ~@3 [d#3,a3,b3,f#4]@2", // B7
  C: "[g3,b3,e4]@6 [g3,b3,e4] ~@3 [g3,b3,e4]@6", D: "[g3,b3,e4]@2 ~@2 [g3,b3,e4]@4 ~@2 [g3,b3,e4] ~@3 [g3,b3,e4]@2",
  E: "[a3,d4,f#4]@6 [a3,d4,f#4] ~@3 [a3,d4,f#4]@6", // D
  F: "[g3,c4,e4]@2 ~@2 [g3,c4,e4]@4 ~@2 [f#3,a3,c4,e4] ~@3 [d#3,a3,c4,f#4]@2", // C F#m7b5 D#dim
  G: "[g3,c4,e4]@2 ~@2 [g3,c4,e4]@4 ~@2 [f#3,a3,c4,e4] ~@3 [d#3,a3,b3,g4]@2", // C F#m7b5 D#aug
  H: "[g3,b3,e4]@6 [g3,b3,e4] ~@3 [a3,c4,e4]@6", I: "[g3,b3,e4]@2 b2 [g3,b3,e4] ~ b2 [g3,b3,e4]@2",
  J: "[a3,c4,e4]@2 e3 [a3,c4,e4] ~ e3 [e3,g3,c4,e4]@2", K: "[d3,a3,c4,f#4]@2 a2 [d3,a3,c4,f#4] ~ a2 [d3,a3,c4,f#4]@2",
  L: "[d3,g3,b3,g4]@2 d3 [d3,g3,b3,g4] ~ f#2 [d#3,a3,b3,f#4]@2", // G B7
  M: "[d3,g3,b3,g4]@2 d3 [d3,g3,b3,g4] ~ d3 [d3,g3,b3,f4]@2", N: "[g3,c4,e4]@2 g2 [g3,c4,e4] ~ g2 [g3,c4,e4]@2",
  O: "[a3,c4,e4]@2 e2 [a3,c4,e4] ~ e2 [a3,c4,e4]@2", P: "[g3,c4,e4]@2 g2 [g3,c4,e4] ~ g2 [d3,a3,b3,f#4]@2",
  Q: "[d#3,a3,b3,f#4]@2 f#2 [d#3,a3,b3,f#4] ~ f#2 [d#3,a3,b3,f#4]@2", R: "[g3,c4,e4]@6 [g3,c4,e4] ~@3 [g3,c4,e4]@6",
  S: "[[d#3,a3,b3,f#4]@2 ~@2 [d#3,a3,b3,f#4]@4 ~@3 [d#3,a3,b3,f#4] ~@3 [d#3,a3,b3,f#4]@2 [d#3,a3,b3,f#4]@9 ~@6]/2", // B7
})).s("gm_acoustic_guitar_nylon").gain(0.18)

// chords · epiano2 · "E-Piano Rhodes"
const epiano2 = note("<~ A B C D E F G H I B C H J K L H M N O H P N Q R S T U V W X>".pickRestart({
  A: "~@2 [a3,d#4,f#4,c5]@3 [b3,d#4,f#4,a4]@3", B: "[b3,d#4,f#4,a4]@3 [b3,d#4,f#4,a4]@3 [b3,d#4,f#4,a4]@2",
  C: "~@2 [e4,g4,b4]@3 [e4,g4,b4]@3", D: "[e4,g4,b4]@3 [e4,g4,b4]@3 [e4,g4,b4]@2", E: "~@2 [d4,f#4,a4]@3 [d4,f#4,a4]@3",
  F: "[c4,e4,g4]@3 [a3,c4,e4,f#4]@3 [a3,c4,d#4,f#4]@2", G: "~@2 [a3,b3,d#4,f#4]@3 [a3,b3,d#4,f#4]@3",
  H: "~@2 [b3,e4,g4] ~ [b3,e4,g4] ~@3", I: "[a3,d#4,f#4,c5]@3 [b3,d#4,f#4,a4]@2 [a#3,d4,f4,g#4] [b3,d#4,f#4,a4]@2",
  J: "[d4,f#4,a4]@3 [a3,d4,f#4]@2 [g#3,c#4,f4] [a3,d4,f#4]@2", K: "[c4,e4,g4]@3 [c4,e4,f#4,a4]@3 [a3,b3,d#4,g4]@2",
  L: "[b3,e4,g4]@2 [a3,c4,e4] [c4,e4,a4]", M: "[c4,e4,a4]@3 [c4,e4,g4,a4]@2 [b3,d#4,f#4,g#4] [c4,e4,g4,a4]@2",
  N: "~@2 [c4,d4,f#4,a4] ~ [c4,d4,f#4,a4] ~@3", O: "[d4,g4,b4]@2 [d#4,f#4,a4,b4]!2",
  P: "[e4,a4,c5]@3 [e4,g4,a4,c5]@2 [b3,d#4,f#4,g#4] [c4,e4,g4,a4]@2", Q: "[d4,g4,b4]@2 [d4,f4,g4,b4]!2",
  R: "~@2 [e4,g4,c5] ~ [c4,e4,g4] ~@3", S: "[e4,a4,c5]@3 [c4,e4,a4]@2 [b3,d#4,g#4] [c4,e4,a4]@2",
  T: "[c4,e4,g4]@3 [c4,e4,g4]@3 [d4,f#4,a4,b4]@2", U: "[d#4,f#4,a4,b4]@4 [b3,d#4,f#4,a4]@2 [d#4,f#4,a4,b4] ~",
  V: "[e4,g4,c5]@3 [e4,g4,c5]@2 [b3,d#4,f#4] [c4,e4,g4]@2", // C B C
  W: "[d#4,f#4,a4,b4]@6 [d#4,f#4,a4,b4]@6 ~ [d#4,f#4,a4,b4]@3", X: "~ [d#4,f#4,a4,b4]@9 ~@6",
})).s("gm_epiano2").gain(0.13)

// bass · electric bass finger · "E-Bass Finger"
const bass = note("<~ A B C D E F G D H B C D E I J D K L M D K L N O P Q R S T U>".pickRestart({
  A: "b2@4 ~@2 f#2 ~ b1@4 f#2@4", B: "b1@4 ~@2 f#2 ~ a2@4 ~@2 b2 ~", C: "e2@4 ~@2 b2 ~ g2@4 e2@4",
  D: "e2@4 ~@2 b2 ~ g2@4 ~@2 e2 ~", E: "d2@4 ~@2 a2 ~ e2@4 d2@4", F: "c2@4 ~@2 g2 ~ a2@4 ~@2 d#2 ~",
  G: "b1@4 ~@2 f#2 ~ a2@4 b2@4", H: "b1@4 ~@2 f#2 ~ b1@4 f#2@4", I: "c2@4 ~@2 g2 ~ a1@4 ~@2 b1 ~",
  J: "e2@4 ~@2 b2 ~ a2@4 e2@4", K: "a1@4 ~@2 e2 ~ f#2@4 e2@4", L: "d2@4 ~@2 a2 ~ c2@4 ~@2 d2 ~",
  M: "g1@4 ~@2 d2 ~ b1@2 c#2@2 d2@2 d#2@2", N: "g2@4 ~@2 d2 ~ g1@2 a1@2 a#1@2 b1@2", O: "c2@4 ~@2 g2 ~ a2@4 ~@2 c3 ~",
  P: "a2@4 ~@2 e2 ~ f#2@4 e2@4", Q: "c3@4 ~@2 g2 ~ e2@4 ~@2 b2 ~", R: "b1@4 ~@2 f#2 ~ e2@2 d#2@2 d2@2 c#2@2",
  S: "c2@4 ~@2 g2 ~ c2@4 a#1@4", T: "b1@4 ~@2 b1 ~@2 f#1@4 ~@2 b1", U: "~ a1@9 ~@6",
})).s("gm_electric_bass_finger").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~ A@2 B A B@3 A@2 B@2 A@5 B A B A@4 B@3 A@2 C D>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@3", C: "x ~@5 x ~@2 x ~@5 x", D: "~ x ~@14",
})).gain(0.2)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@3 A ~ A@3 ~@2 A@2 ~@5 A ~ A ~@4 A@3 ~@4>".pickRestart({
  A: "~@7 x",
})).gain(0.1)

// drums · rim
const rim = s("rim").struct("<~ A B A@3 B A@3 B A@3 B A C B C B C B C B C B C B A D ~>".pickRestart({
  A: "~ x ~@2 x ~ x ~", B: "x ~@2 x ~@2 x ~", C: "~@2 x ~@2 x ~@2", D: "~@2 x ~@6 x ~@3 x ~@2",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~ A B A B A B A B A B A B A B A B@12 A C ~>".pickRestart({
  A: "x!7 ~", B: "x!8", C: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@3 A ~@3 A ~@3 A ~@17>".pickRestart({
  A: "~@3 x",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~ B ~ B ~ B ~ B C B C D B ~@2>".pickRestart({
  A: "~@6 x!2", B: "~@5 x!2 ~", C: "~@3 x", D: "~@12 x ~ x!2",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@12 A ~@2>".pickRestart({
  A: "~@7 x",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@15 A B ~ B ~ B ~ B ~ B ~ B A ~ B ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@4",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct("<~ A B A B A B A B A B A B A B A C@13 D E>".pickRestart({
  A: "~@7 x", B: "x", C: "x!8", D: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x", E: "~ x ~@14",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct("<~ [~@2 x!2 ~@2 x!2]!28 [~@4 x ~ x ~@6 x ~@2] ~>").gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct("<~ [x!2 ~@2 x!2 ~@2]!28 [x ~ x ~@6 x ~ x ~@3 x] [x!2 ~@14]>").gain(0.95)

// drums · claves
const claves = s("clave:2").struct("<~ A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 C ~>".pickRestart({
  A: "~@3 x ~ x ~@2", B: "x ~ x ~@2 x ~ x", C: "x ~@3 x ~@6 x ~@3 x",
})).gain(0.73)

// drums · shaker
const shaker = s("sh").struct("<~ A@11 B A@2 B C D@2 C D@2 E D@2 E@3 F G ~>".pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "x!4", C: "x!3 ~ x!4", D: "x!7 ~", E: "x!3 ~ x!3 ~", F: "x!8",
  G: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2",
})).gain(0.25)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@12 A ~@2 A B A@2 B A@2 C A@2 C@3 ~ D ~>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@3 x ~@3 x", D: "~@15 x",
})).gain(0.15)

stack(
  synth_strings_1, tremolo_strings, acoustic_guitar_nylon, epiano2, bass, kick, kick_soft, rim, hihat, low_tom, mid_tom,
  open_hat, high_tom, ride, congas, congas_2, claves, shaker, shaker_soft
)