Strudelify

Una Noche (feat. Alejandro Sanz)

The Corrs

KeyC majorTempo115 bpm
0:00/0:00
// Una Noche (feat. Alejandro Sanz) — The Corrs
// 115 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 131 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/4)

// 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.

// bass · electric bass finger
const bass = note(`<
  ~@32 A B C D E F C D G H C D I J K L M N O P Q R S T U N V W Q T U T U X Y Z AA AB AC L AD AE AF AG AH F AI D AD AE AF
  AG AH F AI D M N V P Q R S T ~@8 AD AE AF AG AH F AI D AD AE AF AG AH F AI D AD AE AF AJ ~@7
>`.pickRestart({
  A: "c1@2 c1!2 ~@3 d1", B: "e1!4 ~@4", C: "d1@2 d1!2 d1@3 f1", D: "g1!3 g1@5", E: "c1@2 c1!2 c1@2 c1 d1",
  F: "e1!3 e1@2 e1 e1@2", G: "c1@2 c1!2 c1@3 d1", H: "e1!4 e1@4", I: "c1@2 c1!3 ~ c1 d1", J: "e1!3 e1@3 e1@2",
  K: "d1@2 d1!2 d1@4", L: "g1!4 g1@4", M: "e1@2 e1!2 e1@3 e1", N: "d1!4 g1@4", O: "c2", P: "d1@2 d1!2 d1@2 f1@2",
  Q: "g1@2 g1!2 g1@4", R: "f1!4 f1@2 f1@2", S: "e1@2 e1 e1@4 e1", T: "f1!4 f1@4", U: "e1@2 e1!2 e1@4",
  V: "c2@2 c2!2 c2@4", W: "d1 d1@2 d1@2 d1 f1@2", X: "a1!4 a1@4", Y: "e1@2 e1!3 e1@2 e1", Z: "a1!5 a1@3",
  AA: "d1@2 d1!2 d1@3 d1", AB: "d1!4 d1@4", AC: "g1@2 g1!2 g1@3 g1", AD: "c1@2 c1!3 c1@2 d1", AE: "e1!5 e1@3",
  AF: "d1@2 d1!3 d1@2 f1", AG: "g1!5 g1@3", AH: "c1@2 c1!5 d1", AI: "d1@2 d1!3 d1@2 d1", AJ: "g1!2 ~@6",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@123 A B C D E F@3>".pickRestart({
  A: "~@2 g1!3 g1@3", B: "c1@2 c1!5 d1", C: "e1!3 e1@2 e1 e1@2", D: "d1@2 d1!3 d1@2 d1", E: "g1!3 g1@5", F: "c1/3",
})).s("gm_electric_bass_finger").gain(0.24)

// other · cello
const cello = note("<A B C D A E F G H@2 I C J K L K J M I C J K B K B N B N O@2 J@2 ~@99>".pickRestart({
  A: "c3", B: "e3", C: "d3", D: "g2", E: "e2 g2", F: "f2", G: "d2", H: "[e2@7 g2]/2", I: "c3@6 d3 c3", J: "g3", K: "f3",
  L: "e3!2", M: "g3@5 g2@3", N: "a2", O: "d3/2",
})).s("gm_cello").gain(0.25)

// other · violin
const violin = note(`<
  A B C@2 D E F G H@2 I J K@2 L M N@2 O P Q R S M T U T U V@2 W@2 ~@64 Q X Y Z AA@2 R A AB@2 AC A AB AD@3 AB AE@3 AF
  AG@3 AH@2 AI@2 AJ@3 ~@4
>`.pickRestart({
  A: "g4", B: "c4 b3, g4", C: "[g4@3 ~@3 f3 e3 f3@4 g3@4, g3@3 ~@5, ~@3 f4@13]/2", D: "[e3,g3]", E: "c4 d4, g3",
  F: "c3@2 d3@2 d3@3 e3", G: "f3@6 [e3,g3] [f3,a3]", H: "[g3,b3]/2", I: "e3@6 [d3,f3] [c3,e3], c4", J: "[d3,f3,a3]",
  K: "[d3,g3,b3]/2", L: "[g3,c4] g3", M: "a3", N: "[~ g3@7, b3]/2", O: "e3@6 f3 e3, c4", P: "[f3,a3,c4]", Q: "b3",
  R: "d4", S: "c4@5 b3 a3 g3", T: "[e3,b3]", U: "[e3,c4]", V: "[f3,d4,f4]/2", W: "g3/2", X: "c4", Y: "[d4,g4]", Z: "e4",
  AA: "d4/2", AB: "c5 b4 c5@2", AC: "a4", AD: "[c5 b4 c5 g5@9]/3", AE: "[c5 b4 c5@10]/3", AF: "c5@2 b4 c5@3 g4@2",
  AG: "g5/3", AH: "[c5@2 b4@2 c5@6 c5@2 d5@3 a4]/2", AI: "[a4@2 b4 c5@2 c5@2 c5@9]/2", AJ: "[c5 b4 c5@3 c5 g5@6]/3",
})).s("gm_violin").gain(0.25)

// chords · pad warm
const pad_warm = note(`<
  A B C@2 D E F@2 ~@10 G@2 H I J K ~@6 L@2 M@2 L@2 M@2 L@2 M@2 L@2 M@2 N ~ O@2 P Q R S Q@2 S@2 Q@2 R S Q@2 ~@67
>`.pickRestart({
  A: "[c5,g5]", B: "[c5,e5,g5]", C: "[~@3 c5@8 d5@3 e5@2, f5@3 ~]/2", D: "e5", E: "e5@3 g5", F: "[c6, g5@5 ~@3]/2",
  G: "[~ [g4,c5,c6]@7]/2", H: "[g4,b5]", I: "d6", J: "c6@5 b5 a5 g5", K: "a5", L: "[c5,f5]/2",
  M: "[[c5,e5]@4 ~ d5@2 ~ c5@4 ~@4, ~@7 e5@5 ~@4]/2", N: "[c5,f5]", O: "[~ e5@12 ~@3, g4@3 ~, ~ b4@24 ~@7]/2",
  P: "[g4,c5,e5,c6]", Q: "c6", R: "c6 b5@3", S: "b5",
})).s("gm_pad_warm").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C@2 D E F G H@2 I J K@2 L M N@2 O P Q R S M T U T U V@2 W@2 X@2 Y Z AA@2 AB Z X@2 Y Z AA@2 AC AD AE@2 AF AG AH AI
  AJ AK AL AM AN AO AP AQ AR AK AS AT AS AT AU@2 AV@2 AW@2 AX Z AW@2 AB Z AW@2 AX Z AW@2 AB AY AZ BA BB BC BD BE BF BG Q
  BH BI BJ BK@2 BL@2 AW@2 AX Z AW@2 AB Z AW@2 AX Z AW@2 AB Z AW@2 AX Z AW@2 AB Z ~@3
>`.pickRestart({
  A: "[c3,c4,g4]", B: "c4 b3, [e3,g4]", C: "[g4@3 ~@3 f3 e3 f3@4 g3@4, d3 g2, g3@3 ~@5, ~@3 f4@13]/2", D: "[c3,e3,g3]",
  E: "[e2,c4] [g2,d4], g3", F: "c3@2 d3@2 d3@3 e3, f2", G: "f3@6 [e3,g3] [f3,a3], d2",
  H: "[e2 ~ d3 ~ g3 ~@23 g2@4, b3, g3@4 ~ g3@27, ~ e2@27 ~@4]/2", I: "e3@6 [d3,f3] [c3,e3], c4, c3@7 ~",
  J: "[d3,f3,a3]", K: "[~ f3, [d3,g3,b3]]/2", L: "[e3,g3,c4] [e3,g3]", M: "[f3,a3]",
  N: "[e2 ~ d3 ~ g3 ~@23 g2@4, b3, e3 ~, g3@4 ~ g3@27]/2", O: "[c3,e3]@6 [d3,f3] [c3,e3], c4", P: "[d3,f3,a3,c4]",
  Q: "[g3,b3]", R: "[f3,d4]", S: "c4@5 b3 a3 g3, e3", T: "[e3,b3]", U: "[a2,e3,a3,c4]", V: "[d3,f3,d4,f4]/2", W: "g3/2",
  X: "[~ [g3,c4], e4]/2", Y: "c4@2 ~ c4, [a3,d4,f4]", Z: "[g3,b3,d4,f4,g4]", AA: "[~ [g3,c4,g4], e4]/2",
  AB: "c4@2 d4 c4, [a3,f4,a4]", AC: "~@2 d4 ~, [a3,c4,f4,a4]", AD: "[g3,b3,d4,g4]@5 ~@3, f4",
  AE: "[b3@2 b3 d4, e4@3 ~]/2", AF: "[e3,c4]", AG: "[f3,c4]", AH: "c4 b3 g3@2, g3 ~", AI: "g3 b3 c4 d4, g4, ~ g3@3",
  AJ: "[g3,e4,g4]", AK: "[g3,a3,f4,g4,a4]", AL: "[b3,e4,g4]", AM: "[b3,e4,g4] [d4,g4]", AN: "[e3,c4,g4]",
  AO: "a4 g4, [f3,c4]", AP: "c4 b3 g3@2, g4, g3 ~", AQ: "g3 b3 c4 d4, [g4,b4], ~ g3@3", AR: "[g3,e4,g4,c5]",
  AS: "[b3,d4,g4]", AT: "[g3,c4,e4]", AU: "[c4@6 ~ c4, [d4,f4]]/2", AV: "[b3,d4,f4]/2", AW: "[c5 [g3,c4,g4], e4]/2",
  AX: "c4@2 ~ c4, [a3,d4,f4,a4]", AY: "[g3,b3,d4]@5 ~@3, [f4,g4], a4 ~", AZ: "[g3,b3,e4,g4]",
  BA: "[g3,b3,d4]@8 d4@2 c4@2 ~ b3@2 ~, g4, ~ g3", BB: "[g3,c4,e4,g4]", BC: "[a3,c4]@3 [b3,b4] [c4,c5]@4, [f4,a4]",
  BD: "~@6 [e3,e4] [f3,f4], [g3,d4,g4,b4]", BE: "~@4 d5@3 c5, [g3,d4,g4,b4]", BF: "c5@5 b4 a4 g4, [e3,c4,e4], g4@7 ~",
  BG: "g4 a4@5 ~@2, [f3,a3,c4,f4]@3 ~", BH: "[a3,c4]", BI: "[g3,b3,g4]", BJ: "[a3,c4,e4]", BK: "[c4,d4,f4]/2",
  BL: "[g3,d4,f4]/2", // G7
})).s("gm_string_ensemble_1").gain(0.24)

// chords · rock organ
const rock_organ = note(`<
  ~@24 A B A B C@2 D@2 E@2 F G E@2 F G E@2 F G E@2 F H I@2 ~@14 A B A B C@2 D@2 E@2 F G E@2 F G E@2 F G E@2 F H I@2 ~@14
  E@2 F G E@2 F G E@2 F G E@2 F G E@2 F G ~@7
>`.pickRestart({
  A: "[b4,e5]", B: "[c5,e5]", C: "[f4,a4,f5]/2", D: "[g4,d5,f5]/2", E: "[~ c5, e5]/2", F: "[d5,f5]", G: "[b4,d5,f5]",
  H: "d5 f5, b4", I: "[[b4,e5]@3 d5]/2",
})).s("gm_rock_organ").gain(0.19)

// chords · rock organ · soft notes
const rock_organ_soft = note("<~@96 A B A B C@2 D@2 ~@20 E@2 F G ~@3>".pickRestart({
  A: "[b4,e5]", B: "[c5,e5]", C: "[f4,a4,f5]/2", D: "[g4,d5,f5]/2", E: "[~ c5, e5]/2", F: "[d5,f5]", G: "[b4,d5,f5]",
})).s("gm_rock_organ").gain(0.12)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@31 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@3 B C D E F G H I ~@7 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
  ~@2 A@2 ~@2 A@2 ~@6
>`.pickRestart({
  A: "[~ g2 b2 c3@2 b2@2 c3@9]/2", B: "[e3,g3,b3] ~ [e3,g3,b3] ~ [e3,g3,b3] ~@11",
  C: "[d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~@11", D: "[e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~@3 g3@4 c4@4",
  E: "[c3,f3] ~ [c3,f3] ~ [c3,f3] ~@11, a3", F: "[d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~@7 d3@2 g3@2",
  G: "[d3,g3] ~ [d3,g3] ~ [d3,g3] ~@11, b3 ~", // G5
  H: "[e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] ~@3 [e3,g3,c4] ~ [e3,g3,c4] ~@5", // C
  I: "[f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~@3 [a3,c4] ~ [a3,c4] ~ [f3,g3] ~ [f3,g3] ~", // F Am Fsus2
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.4)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@88 A B C D B E C F ~@31 G@4>".pickRestart({
  A: "~@6 [e3,g3,b3] ~@9", B: "~@6 [d3,g3,b3] ~@9", C: "~@6 [e3,g3,c4] ~@9", D: "~@6 [c3,f3] ~@9", E: "~@6 [d3,g3] ~@9",
  F: "~@6 [f3,a3,c4] ~@9", G: "[~ g2 b2 c3@2 b2@2 c3@25]/4",
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@31 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@5 B@4 C@2 D@2 E@2 F@2 G@2 H I J@2 ~@2 K L@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@3 M N O P Q R
  S T ~ U ~@5 V@2 W X Y@2 W X Y@2 W X Y@2 W X Y@2 W Z AA ~@7
>`.pickRestart({
  A: "[~ g2 b2 c3@2 b2@2 c3@9]/2",
  B: "[~@6 c4@3 b3 ~@3 b3 c4 d4, ~@2 e3@4 e3@9 ~@17, ~ c4@2 ~@5, ~@5 f3@2 ~@3 g3@4 ~@2]/4",
  C: "[e4 ~@2 c4 c4@4, ~ c4@2 ~@5, ~ g4@3]/2", D: "[~@3 b3@2 ~@3, ~ b3@2 ~@5, ~ g4@3]/2",
  E: "[~ f3, ~ e3@3 ~@4, ~ g3@3, ~@3 c4@5]/2", F: "[~ b3@2 b3, d3 ~, ~ g3@4 ~@3]/2",
  G: "[e3 ~@2 e3 f3@4, ~ e3@2 ~@5, ~ c4@3]/2", H: "~@2 d4 e4 d4 e4 d4 e4",
  I: "d3@2 d3 e3 g3@2 a3@2 g3@2 a3@2 g3@2 a3@2",
  J: "[~@8 b3@4 [c4,d4]@2 c4@5 ~ a3@4 g3@4 e3@4, ~@20 g3 ~@3 f3 ~@3 d3 ~@3]/2", K: "~@4 d4@2 c4 g3, ~@8 c4 ~@7",
  L: "[~ g2 b2 c3@2 b2@2 c3@9, b3 ~]/2", M: "~@6 e3@2 e3@3 f3@2 g3@3, ~@13 f#3 ~@2", N: "g3@6 g3@2 b3@3 c4@2 d4@3",
  O: "d4 e4@2 g3!2 ~@2 e4, ~@2 d#4 ~@13", P: "e4@3 f4@2 a3@3 a3@3 g4 ~ g#4 g4@2, ~@6 [g#4,a4] ~", Q: "g4",
  R: "~@2 b3@2 d4@2 g4@2 b4@3 c5@3 d5@2", S: "d5@2 d#5 e5@3 g4@2 g4@6 g4 e4", T: "g4 a4@7, ~@2 g#4 ~@13", U: "~ g4@3",
  V: "[~ g2 b2 c3@2 b2@2 ~ [e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 ~ [g3,c4,e4,g4], ~@7 c3 ~@8, ~@15 [g3,c4]@5 ~@12]/2", // Em C C5
  W: "[g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 ~ [g3,c4,e4,g4]", // C
  X: "[g3,c4,d4,f4]@2 [g3,c4,d4,f4]@2 [g3,c4,d4,f4]!4", // Gsus4
  Y: "[[g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!2 ~@2 [e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 ~ [g3,c4,e4,g4], ~@15 [g3,c4]@5 ~@12]/2", // G Em C C5
  Z: "[g3,c4,d4,f4]@2 [g3,c4,d4,f4]@2 [g3,c4,d4,f4] ~ [g3,c4,d4,f4] ~", AA: "[g3,b3,d4,g4] ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.48).pan(0.6)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note("<~@122 A B@2 C D E@4>".pickRestart({
  A: "~@5 [g3,c4,d4,f4] ~ [g3,c4,d4,f4]", // Gsus4
  B: "[~@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!2 ~@2 [e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 ~ [g3,c4,e4,g4], ~@15 [g3,c4]@5 ~@12]/2", // G Em C C5
  C: "[g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 ~ [g3,c4,e4,g4]", // C
  D: "[g3,c4,d4,f4]@2 [g3,c4,d4,f4]@2 [g3,c4,d4,f4]!4", // Gsus4
  E: "[[g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!2 ~@2 e4@24, ~@15 [g3,c4]@47 ~@2]/4", // G C5
})).s("gm_acoustic_guitar_steel").gain(0.16).pan(0.6)

// other · vibraphone
const vibraphone = note(`<
  ~@72 A ~@3 A ~@3 A ~@3 A ~@3 B@2 C ~ B@2 C ~@9 A ~@3 A D@2 ~ A ~ A ~ E@2 ~@2 A ~ A ~ A F@2 ~@4
>`.pickRestart({
  A: "c6", B: "b5 g6 b6@2 b5 g6 b6@2 ~@8", C: "c6 g6 c7@2 c6 g6 c7@2 ~@8", D: "[~@3 g6@4 ~, ~@2 c6@5 ~]/2",
  E: "[c6@3 ~ g6@4, ~@3 c6@4 ~]/2", F: "[~ g6@2 ~, ~ c6@4 ~@3]/2",
})).s("gm_vibraphone").gain(0.22).pan(0.6)

// chords · ocarina
const ocarina = note("<~@64 A B C@2 ~@28 A B C@2 ~@31>".pickRestart({
  A: "[b4,g5]", B: "[c5,e5]", C: "[b4@2 c5 ~, g5@3 ~]/2",
})).s("gm_ocarina").gain(0.25).pan(0.4)

// other · distortion guitar
const distortion_guitar = note("<~@104 A B@3 A C@3 A B@3 D E@3 F@2 G@2 H@4 ~@3>".pickRestart({
  A: "c5 b4 c5@2", B: "[c5 b4 c5@10]/3", C: "[c5 b4 c5 g5@9]/3", D: "c5@2 b4 c5@3 g4@2", E: "g5/3",
  F: "[c5@2 b4@2 c5@6 c5@2 d5@3 a4]/2", G: "[a4@2 b4 c5@2 c5@2 c5@9]/2", H: "[c5 b4 c5@3 c5 g5@10]/4",
})).s("gm_distortion_guitar").gain(0.3)

// drums · kick
const kick = s("bd").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 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 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 B A B A B A B A B A B A B A B A B C D C@3 D C@2 A B A B A B A B A B A B A B A
  B A B A B A B A B ~@3
>`.pickRestart({
  A: "x ~ x!2 ~@3 x", B: "~ x ~ x ~ x ~ x", C: "x ~ x ~@2 x ~ x", D: "x ~ x ~@2 x ~@2",
})).gain(0.19)

// drums · rim
const rim = s("rim").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 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 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 B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B
  A B A B ~@3
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "~@6 x!2",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<[~ x]!96 ~@8 [~ x]!19 ~@8>").gain(0.25)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@96 A B A B A B A B ~@19 A@5 ~@3>".pickRestart({
  A: "~ x", B: "~@4 x ~@2 x",
})).gain(0.13)

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

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!128 ~@3>").gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@39 A ~@31 A ~@15 A ~@10>".pickRestart({
// … 44 more lines

More by The Corrs