Strudelify
Eres Tu cover art

Eres Tú

Eres Tu

Mocedades

KeyE♭ majorTempo90 bpm
0:00/0:00
// Eres Tu — Mocedades
// 90 bpm, 4/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: duplicate parts dropped: ch 2 "Staff-2" piano (copy of ch 1 "Staff" piano); ch 4 "Staff-4" synth brass 2 (copy of ch 3 "Staff-3" synth strings 2)
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// other · piano · "Staff"
const piano = note(`<
  A B C D E D F D G H I D E D F D G J K L M N O P Q R S L T U O P V R W D E D F D G H K L M N O P Q R S L T U O X V R Y
  V Z AA AB@3
>`.pickRestart({
  A: "g4@7 ~ bb4@7 ~", B: "eb4@11 ~ f4@2 g4@2", C: "ab4@2 g4@2 f4@2 eb4@2 [f4,g4]!4 f4@2 eb4 f4",
  D: "~@3 bb3 eb4 f4 ~ g4 g4@2 f4@4 eb4 d4", E: "eb4@5 ~ f4 eb4 g4@7 ~", F: "c4@7 ~ d4@7 ~",
  G: "eb4@5 ~ c5!2 bb4 f4 g4@4 ab4@2", H: "[f4,g4] eb4@5 g4@2 bb3@5 ~ eb4 d4",
  I: "eb4@7 ~ db4 f3 ab3 eb4 c4 eb3 ab3 c4", J: "g4 f4 eb4@4 g4@2 bb3@5 ~ c4 eb4", K: "eb4@7 ~ c4@3 ~ [c4,eb4]@3 ~",
  L: "[eb4,g4]@7 ~ [f4,bb4]@7 ~", M: "[c4,eb4]@11 ~ [d4,f4]@2 [eb4,g4]@2",
  N: "[f4,ab4]@3 ~ [eb4,g4]@3 ~ [c4,f4]@3 ~ [c4,eb4]@3 ~", O: "[eb4,g4]@7 ~ [d4,f4]@7 ~",
  P: "[f4,bb4]@7 ~ [bb4,d5]@7 ~", Q: "[bb4,eb5]@2 [g4,bb4]@5 ~@3 [f4,ab4]@2 [f4,bb4]@2 [ab4,c5]@2",
  R: "[eb4,g4]@5 ~ f4 eb4 [d4,f4]@5 ~ eb4@2", S: "eb4@5 ~ bb3@2 c4@3 ~ eb4@2 f4@2",
  T: "[g3,eb4]@11 ~ [d4,f4]@2 [eb4,g4]@2", U: "[f4,ab4]@3 ~ [c4,g4]@3 ~ [c4,f4]@3 ~ [c4,eb4]@3 ~",
  V: "[bb4,eb5]@2 [eb4,bb4]@5 ~@3 ab4@2 bb4@2 c5@2", W: "[bb3,eb4]@7 ~ c4 f3 ab3 eb4 c4 eb3 ab3 c4",
  X: "f4@7 ~ f5@3 ~ g5 f5 ~ eb5", Y: "eb4@11 ~@2 g5 f5 eb5", Z: "[eb4,g4]@6 ~ f4 eb4 f4 g4 f4 g4 f4 [f4,g4] f4",
  AA: "eb4@2 [bb3,eb4]@6 ~ bb3@2 c4@3 [c4,eb4]@2", AB: "[~ [eb4,ab4]@2 [ab4,c5]@3 [g4,bb4]@27 ~@15]/3",
})).s("gm_piano").gain(0.8)

// other · electric bass finger · "Staff-1"
const electric_bass_finger = note("<~@43 A B C D E F G H ~@14>".pickRestart({
  A: "~@3 bb3 g4 f4 eb4 f4@2 g4@5 ~@2", B: "~@3 bb3 g4 f4 eb4 f4@2 eb4@5 ~@2",
  C: "~@2 ab4!3 bb4 c5 c5@2 a4@2 f4@2 c4@2 ~", D: "[eb4,g4]@7 ~ [d4,f4]@7 ~", E: "~@3 bb4 c5 bb4 g4 bb4@2 c5@5 ~@2",
  F: "~@3 bb4 g5 f5 eb5 f5@2 eb5@5 ~@2", G: "g4@2 bb4 g4@2 f4 eb4 f4@3 ~ bb3 g4 f4 eb4 f4", H: "eb4@7 ~@9",
})).s("gm_lead_8_bass_lead").gain(0.8)

// bass · electric bass finger · "Staff-5"
const bass = note(`<
  A B C D E F G H I J K L M L N L O P Q R S T U V W X Y Z AA AB AC AD AE AF AG L M L N L O P Q R S T U V W X Y Z AA AB
  AC AD AE AF ~@3 AH AI@3
>`.pickRestart({
  A: "eb3@7 ~ d3@7 ~", B: "c3@7 ~ bb2@7 ~", C: "f2@2 g2@2 ab2@2 a2@2 bb2@3 ~ bb2@3 ~", D: "eb2@7 ~ bb2@7 ~",
  E: "ab2@7 ~ eb3@3 ~ [db2,ab2]@2 [d2,a2]@2", F: "[eb2,bb2]@7 ~ [bb2,bb3]@7 ~", G: "[ab2,eb3]@7 ~ bb2@3 ~ bb2@2 bb1@2",
  H: "eb2@7 ~ [bb2,bb3]@7 ~", I: "ab2@7 ~ eb3@7 ~", J: "eb2@3 ~ g2@3 ~ [bb2,eb3]@7 ~",
  K: "eb2@5 ~ bb2@2 [db2,db3]@3 ~ [ab1,ab2]@3 ~", L: "[eb2,eb3]@5 ~ eb2@2 [bb2,bb3]@5 ~ bb2@2",
  M: "[ab2,ab3]@5 ~ ab2@2 [eb2,eb3]@3 ~ eb3@2 bb2@2", N: "[ab2,eb3]@5 ~ ab2@2 bb2@2 bb2@2 bb1 c2 d2@2",
  O: "[ab2,eb3]@3 ~ ab3@3 ~ [g2,eb3]@3 ~ ab2@3 ~", P: "[bb2,eb3]@3 ~ g3@3 ~ [bb2,ab3]@3 ~ [f3,ab3]@3 ~",
  Q: "eb2@5 ~ bb2@2 bb2@2 bb2@2 [bb1,bb2]@2 [bb1,bb2]@2", R: "[eb2,eb3]@7 ~ [d2,d3]@7 ~",
  S: "[c2,c3]@7 ~ [bb1,bb2]@7 ~", T: "[ab1,ab2]@7 ~ [a1,a2]@7 ~", U: "[bb1,bb2]@7 ~ [bb2,bb3]@7 ~",
  V: "[bb2,bb3]@7 ~ [ab2,ab3]@7 ~", W: "[g2,g3]@3 ~ [ab2,ab3]@2 [eb2,eb3]@9 ~",
  X: "[bb2,bb3]@7 ~ [bb2,ab3]@3 ~ bb2@3 ~", Y: "eb2@3 ~ eb2@2 g2@2 ab2@2 ab2@2 bb2@2 bb2@2",
  Z: "[eb2,eb3]@5 ~ eb3@2 [d2,d3]@5 ~ d3@2", AA: "[c2,c3]@5 ~ c3@2 [bb1,bb2]@5 ~ bb2@2",
  AB: "[ab1,ab2]@2 ab2@4 ab2@2 [a1,a2]@3 ~ a2@3 ~", AC: "[bb1,bb2]@3 ~ bb2@3 ~ [bb1,bb2]@3 ~ bb2@3 ~",
  AD: "[bb2,bb3]@5 ~ bb3@2 [ab2,ab3]@5 ~ ab3@2", AE: "[g2,g3]@3 ~ bb3@2 eb3@2 ab2@7 ~",
  AF: "[bb2,bb3]@7 ~ [bb2,ab3]@7 ~", AG: "eb2@7 ~ bb2@2 bb2@2 bb2@2 bb2@2", AH: "~@2 [eb2,eb3]@8 ~ bb2@3 bb2@2",
  AI: "[~ bb2@2 bb2@3 [eb2,eb3]@27 ~@15]/3", // Eb
})).s("gm_electric_bass_finger").gain(0.56)

// bass · contrabass · "Staff-6"
const bass_2 = note(`<
  A B C D E F G H I J K L M L N L O P Q R S T U V W P X Y Z AA AB AC AD AE AF L M L N L O P Q R S T U V W P X Y Z AA AB
  AC AD AE ~@3 AG AH@3
>`.pickRestart({
  A: "[eb2,eb3]@7 ~ [d2,d3]@7 ~", B: "[c2,c3]@7 ~ [bb1,bb2]@7 ~",
  C: "[f1,f2]@2 [g1,g2]@2 [ab1,ab2]@2 [a1,a2]@2 [bb1,bb2]@3 ~ [bb1,bb2]@3 ~", D: "eb1@7 ~ bb1@7 ~",
  E: "ab1@7 ~ eb2@3 ~ db1@2 d1@2", F: "[eb1,eb2]@7 ~ [bb1,bb2]@7 ~", G: "[ab1,ab2]@7 ~ bb1@3 ~ bb1@2 bb0@2",
  H: "eb1@7 ~ [bb1,bb2]@7 ~", I: "[ab1,ab2]@7 ~ [eb2,eb3]@7 ~", J: "[eb1,eb2]@3 ~ [g1,g2]@3 ~ [bb1,bb2]@7 ~",
  K: "[eb1,eb2]@5 ~ [bb1,bb2]@2 [db1,db2]@3 ~ [ab0,ab1]@3 ~", L: "[eb1,eb2]@5 ~ eb1@2 [bb1,bb2]@5 ~ bb1@2",
  M: "[ab1,ab2]@5 ~ ab1@2 [eb1,eb2]@3 ~ eb2@2 bb1@2", // Ab Eb
  N: "[ab1,ab2]@5 ~ [ab1,ab2]@2 [bb1,bb2]@2 [bb1,bb2]@2 [bb0,bb1] [c1,c2] [d1,d2]@2", // Ab Bb C D
  O: "[ab1,ab2]@7 ~ [g1,g2]@3 ~ [ab1,ab2]@3 ~", P: "[bb1,bb2]@7 ~ [bb1,bb2]@7 ~",
  Q: "[eb1,eb2]@5 ~ bb1@2 bb1@2 bb1@2 [bb0,bb1]@2 [bb0,bb1]@2", R: "[eb1,eb2]@7 ~ [d1,d2]@7 ~",
  S: "[c1,c2]@7 ~ [bb0,bb1]@7 ~", T: "ab1@7 ~ a1@7 ~", U: "[bb0,bb1]@7 ~ [bb1,bb2]@7 ~",
  V: "[bb1,bb2]@7 ~ [ab1,ab2]@7 ~", W: "[g1,g2]@3 ~ [ab1,ab2]@2 [eb1,eb2]@9 ~",
  X: "[eb1,eb2]@3 ~ [eb1,eb2]@2 [g1,g2]@2 [ab1,ab2]@2 [ab1,ab2]@2 [bb1,bb2]@2 [bb1,bb2]@2", // Eb G Ab Bb
  Y: "[eb1,eb2]@5 ~ eb2@2 [d1,d2]@5 ~ d2@2", Z: "[c1,c2]@5 ~ c2@2 [bb0,bb1]@5 ~ bb1@2",
  AA: "ab1@2 ab1@4 ab1@2 a1@3 ~ a1@3 ~", AB: "[bb0,bb1]@3 ~ bb1@3 ~ [bb0,bb1]@3 ~ bb1@3 ~",
  AC: "[bb1,bb2]@5 ~ bb2@2 [ab1,ab2]@5 ~ ab2@2", AD: "[g1,g2]@3 ~ bb2@2 eb2@2 ab1@7 ~", AE: "[bb1,bb2]@7 ~ bb1@7 ~",
  AF: "[eb1,eb2]@7 ~ [bb1,bb2]@2 [bb1,bb2]@2 [bb1,bb2]@2 [bb1,bb2]@2", AG: "~@2 [eb1,eb2]@8 ~ bb1@3 bb1@2",
  AH: "[~ bb1@2 bb1@3 [eb1,eb2]@27 ~@15]/3", // Eb
})).s("gm_contrabass").gain(0.56)

// chords · string ensemble 2 · "Staff-7"
const string_ensemble_2 = note(`<
  A B C D E F G H I J K F E F G F I J L M N O P Q R S T M U V P Q W S X F E F G F I J L M N O P Q R S T M U V P Q W S Q
  W Y Z AA@3
>`.pickRestart({
  A: "g4@7 ~ bb4@7 ~", B: "eb4@11 ~ f4@2 g4@2", C: "ab4@2 g4@2 f4@2 eb4@2 [c4,eb4]@3 ~ [bb3,d4]@3 ~",
  D: "~@3 bb3 eb4 f4 [bb3,g4] ~ g4@2 f4@4 eb4 d4", E: "eb4@5 ~ f4 eb4 g4@7 ~",
  F: "~@3 bb3 eb4 f4 g4@2 g4@2 f4@4 eb4 d4", G: "c4@7 ~ d4@7 ~", H: "~@3 bb3 eb4@2 f4 g4 g4@2 f4@4 eb4 d4",
  I: "eb4@5 ~ c5!2 bb4 f4 g4@4 ab4@2", J: "g4 f4 eb4@4 g4@2 bb3@5 ~ c4 eb4", K: "eb4@7 ~ db4 f3 ab3 eb4 c4 eb3 ab3 c4",
  L: "eb4@7 ~ c4@3 ~ [c4,eb4]@3 ~", M: "[eb4,g4]@7 ~ [f4,bb4]@7 ~", N: "[c4,eb4]@11 ~ [d4,f4]@2 [eb4,g4]@2",
  O: "[f4,ab4]@3 ~ [eb4,g4]@3 ~ [c4,f4]@3 ~ [c4,eb4]@3 ~", P: "[eb4,g4]@7 ~ [d4,f4]@7 ~",
  Q: "[f4,bb4]@7 ~ [bb4,d5]@7 ~", R: "[bb4,eb5]@2 [g4,bb4]@5 ~@3 [f4,ab4]@2 [f4,bb4]@2 [ab4,c5]@2",
  S: "[eb4,g4]@5 ~ f4 eb4 [d4,f4]@5 ~ eb4@2", T: "eb4@5 ~ bb3@2 c4@3 ~ eb4@2 f4@2",
  U: "[g3,eb4]@11 ~ [d4,f4]@2 [eb4,g4]@2", V: "[f4,ab4]@3 ~ [c4,g4]@3 ~ [c4,f4]@3 ~ [c4,eb4]@3 ~",
  W: "[bb4,eb5]@2 [eb4,bb4]@5 ~@3 ab4@2 bb4@2 c5@2", X: "[bb3,eb4]@7 ~ [ab3,c4]@2 [c4,eb4]@2 [c4,eb4] f4@2 [eb4,g4]",
  Y: "[eb4,g4]@6 ~ f4 eb4 [d4,f4]@6 ~", Z: "eb4@2 [bb3,eb4]@6 ~ bb3@2 c4@3 [c4,eb4]@2",
  AA: "[~ [eb4,ab4]@2 [ab4,c5]@3 [g4,bb4]@27 ~@15]/3", // Ab5 Ab Gm
})).s("gm_string_ensemble_2").gain(0.72)

// other · piano · "Staff-8"
const piano_2 = note(`<
  ~@3 A B A B A B C D A B A B A B C D A B A B A B C D A B A B A B C D A B A B A B C D A B A B A B C D A B A B A B C ~@7
>`.pickRestart({
  A: "g3!8", B: "g3!3 [d3,g3] g3!4", C: "~ d3 ~@3 b2 ~@2",
  D: "g3@2 g3@2 g3@2 g3@2 [c3,g3] c3 [b2,g3] c3 [b2,c3,g3] b2!3", // C5 Em Cmaj7
})).s("gm_piano").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@3 A ~@3 A B@3 A ~@2 B A B@3 A B@5 A B A B@3 A B@3 A B@3 A B@3 C B@2 D ~@7
>`.pickRestart({
  A: "~ x!3", B: "~ x ~ x", C: "x!4", D: "x!2 ~ x",
})).gain(0.4)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@3 A@7 ~ A@3 ~ A@3 ~@5 A@2 ~@40>".pickRestart({
  A: "~ x ~ x",
})).gain(0.16)

// drums · congas
const congas = s("conga:13").struct("<~@3 A@17 B A@6 B A@26 ~ A@2 ~@8>".pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3",
})).gain(1.28)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@3 A@7 B A@3 B A@3 B A C A B A@3 B C A@2 B A@5 B A B A@3 B A@3 B A@3 B A@3 D A@2 E ~@7
>`.pickRestart({
  A: "~ x", B: "~@12 x!4", C: "~ x!2 ~@5", D: "~@4 x!4 ~@4 x!4", E: "~@4 x!5 ~@7",
})).gain(1.28)

// drums · ht
const ht = s("ht").struct(`<
  ~@10 A ~@3 A ~@3 A ~ B ~ A ~@3 A B ~@2 A ~@5 A ~ A ~@3 A ~@3 A ~@3 A ~@3 C ~@2 D ~@7
>`.pickRestart({
  A: "~@8 x!4 ~ x!2 ~", B: "~ x ~ x ~ x ~ x", C: "x!4 ~ x!2 ~ x!4 ~ x!2 ~", D: "x!4 ~ x!2 ~@9",
})).gain(0.4)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct(`<
  ~@10 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~ A ~@3 A ~@3 A ~@3 A ~@3 B ~@2 C ~@7
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@6",
})).gain(0.58)

stack(
  piano, electric_bass_finger, bass, bass_2, string_ensemble_2, piano_2, crash, crash_soft, congas, congas_2, ht,
  woodblocks
)