Strudelify
Feliz Navidad cover art

Feliz Navidad

Feliz Navidad

Jose Feliciano

KeyD majorTempo140 bpm
0:00/0:00
// Feliz Navidad — Jose Feliciano
// 140 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: track names are the Roland MT-32 patch names at their program numbers ("Bass" on 65, "BELL Melody" on 38), so with no bank select the whole file is read through the MT-32 patch table: ch 2 "Bass" Acou Bass 2 -> acoustic bass; ch 3 "BELL Melody" Warm Bell -> pad bowed; ch 1 "PIANO" Warm Bell -> pad bowed
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A B C D A B E F G B H D A B E F G B H I J K L I J M N I J K L I J M N D A B E F G B H I J K L I J M N I J K L I J
  M N D A B E F G B H O ~@8
>`.pickRestart({
  A: "e2@3 g2@3 e2@2", B: "a2@3 e2@3 a2@2", C: "d2@2 a2 g2@2 f#2@2 e2", D: "d2 ~@3", E: "d2@3 a2@3 a2@2",
  F: "d2@3 a2@3 d2@2", G: "e2@3 e3@3 b2@2", H: "d2@2 d3 b2@2 a2@2 f#2", I: "d2 d3!4 e3@2 f#3", J: "g3@3 d3@3 g2@2",
  K: "a2@3 e3@3 a2@2", L: "d2@3 d3@3 a2@2", M: "a2@3 a2 e2@2 a2@2", N: "d2@3 f#2 g2 f#2@2 e2", O: "d2@2 a2 d2@5",
})).s("gm_acoustic_bass").gain(0.15)

// bass · piano · "DRUM KICK"
const bass_2 = note("<~@2 A@15 B C@7 D C@27 E C@3 D C@11 F@8 ~>".pickRestart({
  A: "c2 ~@5 c2 ~ c2 ~@5 c2 ~", B: "c2 ~@5 c2@2 c2@6 c2@2", C: "c2@3 c2 c2@3 c2", D: "c2@6 c2@2 c2@3 c2@3 c2@2",
  E: "c2@3 c2!5", F: "[c2@3 c2 c2@3 c2@57]/8",
})).s("gm_piano").gain(0.41)

// chords · piano
const piano = note("<~@2 A B C D E F G H I J@3 E F G H K L@2 M ~@56>".pickRestart({
  A: "~@3 g4 a4 b4@3, [g4,b4]@3 ~@5, ~ d4@3", B: "[f#4,a4] [f#4,a4]@2 [f#4,a4] [e4,g4]@2 [e4,g4]@2, c#4",
  C: "[d4,f#4]@3 [d4,g4,b4]@2 [d4,a4]@2 [d4,g4]", D: "[d4,f#4]@2 ~ a4 d5@2 c#5 d5", E: "[d4,g4,b4]@2 b4 g4 e4 d4@3",
  F: "c#4@2 ~ b4 e5@2 d5 b4, ~ g4@3", G: "[d4,f#4,a4]@2 a4 f#4 d4 b3@3", H: "a3@2 ~ a4 d5@2 c#5 d5, ~ f#4@3",
  I: "~@3 g4 [g4,b4]@2 [g4,b4]@2, [g4,b4]@3 ~@5, ~ c#4@3", // G
  J: "[[f#4,a4]!2 [g4,b4] [f#4,a4] [e4,g4]@2 [e4,g4] [d4,f#4]@11 ~ a4 d5@2 c#5 d5]/3", // F#m G F#m Em D
  K: "~@3 g4 b4@2 b4@2, b4@3 ~@5, ~ c#4@3", L: "[[f#4,a4]!2 [g4,b4] [f#4,a4] [e4,g4]@2 [e4,g4] f#4@9, ~@7 d4@3 ~@6]/2",
  M: "~ [a4,d5,f#5] ~@6", // D
})).s("gm_piano").gain(0.26)

// chords · pad bowed · "PIANO"
const pad_bowed = note(`<
  ~@21 A B C D E F G H@2 I C D E J G K@2 L M N O P Q@2 R B C D E F G H@2 I C D E J G K@2 L M N O P S@3 ~@8
>`.pickRestart({
  A: "~@2 [f#4,a4,d5,f#5]!3 [e4,a4,e5]@2 [d4,a4,d5]", B: "[d4,g4,b4,d5]@2 [b3,g4,b4]@2 [b3,g4,b4] [d4,g4,b4,d5]@3",
  C: "~ [e4,g4,c#5,e5]!3 [e4,g4,c#5,e5]@2 [d4,g4,d5] [b3,b4]", // C#dim G5 B
  D: "[b3,d4,f#4,b4]@2 [a3,d4,f#4,a4]@2 [g#3,g#4] [a3,a4]@3", E: "~ [f#4,a4,d5,f#5]!4 [e4,a4,e5]@2 [d4,a4,d5]",
  F: "[d4,g4,b4,d5]@2 [b3,g4,b4]@2 [b3,g4,b4]!2 [e4,g4,b4,e5] [d4,g4,b4,d5]", // G Em G
  G: "[c#4,g4,a4,c#5] [c#4,g4,a4,c#5]@3 [d4,g4,b4,d5]@2 [e4,g4,c#5,e5]@2", // A7 G C#dim
  H: "[[e4,e5] [f#4,f#5] ~ [e4,e5] ~@2 a4@2 b4@2 a4@4 g4@2 f#4@2 [f#4,a4,d5,f#5]@2 [f#4,a4,d5,f#5]@2 [f#4,a4,d5,f#5]@2 [f#4,a4,d5,f#5]@2 [e4,a4,e5]@4 [d4,a4,d5]@2, a4@3 ~@13, ~@2 [d4,d5]@7 ~@7]/2", // E F# E D A5 D5 D
  I: "[d4,g4,b4,d5]@2 [b3,g4,b4]@2 [a#3,f#4,a#4] [b3,g4,b4]@3", // G Em D#m Em
  J: "[d4,g4,b4,d5]@2 [b3,g4,b4]@2 [b3,g4,b4]@2 [e4,g4,b4,e5] [d4,d5]", // G Em D
  K: "[[e4,e5] [f#4,f#5] ~ [e4,e5] ~@2 a4@2 b4@2 a4@4 g4@2 f#4@4 ~@2 a4@2 d5@4 c#5@2 d5@2, a4@3 ~@13, ~ [d4,d5]@4 ~@3]/2", // E F# E D
  L: "[d4,g4,b4]@2 b4 g4 e4 d4@3", M: "c#4@2 ~ b4 e5@2 d5 b4, ~ g4@3", N: "[d4,f#4,a4]@2 a4 f#4 d4 b3@3",
  O: "a3@2 ~ a4 d5@2 c#5 d5, ~ f#4@3", P: "~@3 g4 b4@2 b4@2, b4@3 ~@5, ~ c#4@3",
  Q: "[[f#4,a4]!2 [g4,b4] [f#4,a4] [e4,g4]@2 [e4,g4] f#4@9, ~@7 d4@3 ~@6]/2", // F#m G F#m Em
  R: "~ [a4,d5,f#5] [f#4,a4,d5,f#5]!3 [e4,a4,e5]@2 [d4,a4,d5]", // D A5 D5
  S: "[[f#4,a4]!2 [g4,b4] [f#4,a4] [e4,g4]@2 [e4,g4] f#4@12 ~@5, ~@7 d4@3 ~@14]/3", // F#m G F#m Em
})).s("gm_pad_bowed").gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B A C A@3 D A@3 B A@3 E A C A D A@3 F B A@2 B A@3 E A@7 E A@3 C A@3 E A@3 B A@3 F B G A C A@3 E A@3 E ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x ~@2 x!3", D: "~@4 x ~@6 x!3 ~@2", E: "~@2 x!2 ~@4",
  F: "~@4 x ~@3 x ~@2 x ~@2 x ~", G: "~@4 x ~@2 x ~@3 x!3 ~@2",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@6 A ~@9 A ~@2 B C ~@8 A ~@2 A ~@2 D E ~@6 D E ~@6 D E ~@6 F ~ A ~@5 D E ~@9
>`.pickRestart({
  A: "~ x!2 ~@13", B: "~@15 x", C: "x!2 ~ x ~@12", D: "~@13 x ~ x", E: "~ x ~ x ~@12", F: "~@3 x ~@4",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@5 A ~@3 A ~@3 B ~@3 A ~@4 A ~@2 C ~@3 D ~@7 D ~@7 D ~@8 A@2 ~@5 D ~@3 B ~@8
>`.pickRestart({
  A: "~@14 x!2", B: "~@10 x ~ x!3 ~", C: "~@15 x", D: "~@10 x ~ x!4",
})).gain(0.46)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 A B A@9 B A@11 B@2 A@2 B A@27 C B A@11 ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@4",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@13 B ~@11 C ~@3 D ~@7 D ~@7 D ~@9 C ~@5 D ~@3 B ~@8>".pickRestart({
  A: "~@15 x", B: "~@11 x ~@3 x", C: "~@7 x", D: "~@11 x ~@4",
})).gain(0.51)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B A@9 B A@11 B@2 A@2 B A@27 C B A@11 ~@8>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@25 [~@8 x ~@2 x ~@2 x ~] ~@31 [~@8 x ~@2 x ~@2 x ~] ~@20>").gain(0.46)

// drums · ride
const ride = s("rd").struct(`<
  ~@2
  [x!8]!23
  [x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~]
  [x!8]!31
  [x ~@7 x ~@2 x ~@2 x ~]
  [x!8]!12
  ~@8
>`).gain(0.36)

// drums · cowbell
const cowbell = s("cb").struct("<[x!2] [x!4] ~@76>").gain(0.41)

stack(bass, bass_2, piano, pad_bowed, snare, snare_soft, low_tom, pedal_hat, mid_tom, open_hat, crash, ride, cowbell)

More by Jose Feliciano