Strudelify

Introduction I Love to See You Smile

Randy Newman

KeyC majorTempo110 bpm
0:00/0:00
// Introduction   I Love to See You Smile — Randy Newman
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: track names are the Roland MT-32 patch names at their program numbers ("Clarinet1" on 83, "AcBass2" on 65, "Harmonica" on 87, "StrSect3" on 50, "Guitar1" on 59), so with no bank select the whole file is read through the MT-32 patch table: ch 2 "Clarinet1" Clarinet 2 -> clarinet; ch 5 "AcBass2" Acou Bass 2 -> acoustic bass; ch 6 "Harmonica" Harmonica -> harmonica; ch 8 "Guitar1" Guitar 1 -> acoustic guitar nylon
// note: Full arrangement: all 86 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// chords · piano · "AcouPno2"
const piano = note(`<
  ~ A B C D@2 E F G H@3 I J E F K H@3 I J L@2 M@2 N@4 E F G H@3 I J O@3 P Q R S T U V W@2 X Y Z AA B C E F G H@3 I J
  AB@2 M@2 N@4 E F AC AD@3 AE AF AG AH B AI@3
>`.pickRestart({
  A: "~@2 [c5,e5,a5] [b4,d#5,g#5]@2 [a#4,d5,g5] ~@2 [g4,b4,e5] [f#4,a#4,d#5]@2 [f4,a4,d5]", // Am G#m Gm Em D#m Dm
  B: "~@2 [g#4,c5,f5] [g4,b4,e5]@2 [f#4,a#4,d#5] ~@2 [d#4,g4,c5] [d4,g4,b4]@2 [c#4,g4,a#4]", // Fm Em D#m Cm G Gdim
  C: "~@2 [g4,b4,e5] [f#4,a#4,d#5]@2 [f4,a4,d5] ~@2 [b3,f4,g4] a4@2 [d4,f#4]", // Em D#m Dm G7 D
  D: "[e4@2 [g4,c5]@3 [b3,d#4]@3 [f4,a4]@3 [c4,e4]@3 [g4,c5] [c4,e4]@2 [b3,d#4]@3 [f4,a4]@3 [b3,d#4]]/2", // C5 B F C C5 C B F …
  E: "[c4,e4]@2 c5 e4@2 [b3,d#4]@3 [f4,a4]@3 [b3,d#4]", // C B F B
  F: "[c4,e4]@2 [g4,c5] [c4,e4]@2 [a#3,d4]@3 [a#4,d5] [a#3,d4] d#4 [c4,e4]", // C C5 C A# C
  G: "[f4,a4]@2 c5@3 [f4,c5]@3 c4 a4@2 [b3,d#4]", // F F5 B
  H: "[[c4,e4]@4 c5@2 [b3,d#4]@4 [c4,e4]@6 [g4,a#4]@2 c4@4 [f4,a4]@6 c5@2 c4@3 d4 d#4@6 [a4,c5]@4 d4 d#4 e4@6 c5@2 d4@3 c4 c#4@6 [f#4,a4]@2 a3@2 g#3@2 g3@2]/3", // C B C Gm F Am F#m
  I: "f#3@2 c4@3 [f#3,a#3] [f3,b3]@2 g4@3 f4", // F# Fdim
  J: "e3@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5]", // C Cdim C Cdim C Cdim C
  K: "[f4,a4]@2 c5@3 [f4,c5]@3 c4 f4@2 [b3,d#4]", // F F5 B
  L: "[~@4 c4@2 [c4,f4,a4]@2 c4@2 [c4,f4,c5]@6 c4@2 [f4,a4]@3 d4 d#4@6 [a4,c5]@2 c4@4 d#4@6 [a4,c5]@2 c4@4 [c4,d#4]@2]/2", // F F5 F Am Cm
  M: "[e4@4 c5@5 d#4 e4@6 c5@6 c#5@6 [f#5,a5]@2 a4@4 g#4@2 g4@4 e5@6 f#4@2]/2", // F#m
  N: "[f#4@2 b4@3 d4@3 c4@3 f#4@3 b4 d4@2 d4@3 c4@3 b3@3 g4@3 c4@3 g4@3 c#4@3 g4@3 d4@3 g4 f4@2 d#4]/4",
  O: "[[g4,c5,e5]@4 f5@2 [d#5,f#5]@4 [e5,g5]@6 g5@2 a5@2 g5@2 ~@2 e5@6 a#5 a5 ~ g5 a#5 ~ a5@2 g5@2 g5@6 c5@4 f5@2 d#5@2 d5@3 c5@5 f5@2 d#5@4 f#5 ~ d#5 f#5, ~@11 c6@4 ~@21]/3", // C D#m Em
  P: "g5@2 c6@2 a#5@2 f#5 [e5,g5]@4 ~@5 e5@2 c5 d5 f5 g5 ~@2", Q: "f4@4 c5@6 a4 c5 d#5@2 f#5@2 ~@2 [a5,c6]@2 ~@2 f#5@2",
  R: "g5 c6 ~ a#5 a5 ~@3 [g5,c6,e6]@2 ~@2 [a4,a5]@4 g5@2 e5 f5 g5@2 a#5@2", // C A
  S: "a4 c5 d5 a4 c5 d5 a4 c5!2 a4 c5 d5 g4 b4 c5 g4 b4 d5 g4 b4 c5 d5 g5 f5",
  T: "e5@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5]", // C Cdim C Cdim C Cdim C
  U: "[g4,c5,e5]@3 ~ [a4,a5] [g4,g5] [a4,a5]@2 [g4,g5] [a4,a5]@2 [g4,g5]", // C A G A G A G
  V: "[a4,a5]@4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4 c5 e4", // A
  W: "[~@8 [c5,c6]@2 [c5,a5]@2 [c5,c6]@6 [a4,a5]@4 [g4,g5]@6 c5@2 [b3,d#4]@4 [c4,e4]@6 a#4 g4 a#4 g4 a#4 g4 a#4 g4]/2", // C F C A G B C
  X: "~ [c5,c6] [a4,a5] [c5,c6] [a4,a5] [c5,c6]@4 d#4@3", // C A C A C
  Y: "[e4,g5]@4 [c5,g5]@4 [b4,g#5]@4 [a4,a5]@4 e5 c#5 e5 c#5 e5 c#5 e5 c#5", // Em C5 E A
  Z: "~@2 [a4,a5] a5 [a4,a5] f#5 [g4,g5]@2 g5 [g4,g5]@2 g5", // A G
  AA: "[c4,c5]@2 [c5,e5,a5] [b4,d#5,g#5]@2 [a#4,d5,g5] ~@2 [g4,b4,e5] [f#4,a#4,d#5]@2 [f4,a4,d5]", // C Am G#m Gm Em D#m Dm
  AB: "[~@4 c4@2 [c4,f4,a4]@2 c4@2 [f4,c5]@6 c4@2 [f4,a4]@3 d4 d#4@6 [a4,c5]@2 c4@4 d#4@6 [a4,c5]@2 c4@4 [c4,d#4]@2]/2", // F F5 F Am Cm
  AC: "[f4,a4]@2 c5 c4@2 [c4,f4]@3 c4 a4@2 [b3,d#4]", // F F5 B
  AD: "[[c4,e4]@4 c5@2 [b3,d#4]@4 [c4,e4]@6 [g4,a#4]@2 c4@4 [f4,a4]@6 c5@2 c4@3 d4 d#4@6 [a4,c5]@2 c4@3 d#4 e4@6 c5@2 d4@4 c4@2 c#4@4 [f#4,a4]@2 a3@2 g#3@2 g3@2]/3", // C B C Gm F Am F#m
  AE: "f#3@2 c4@3 f#3 [f3,b3]@2 g4 f3@2 e3", // Fdim
  AF: "~@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5] [f#4,c5,d#5]@2 [g4,c5,e5]", // C Cdim C Cdim C Cdim C
  AG: "~@3 f4 f#4@2 c5@4 c4@2 [b3,f4]@4 g5@6 g4@2", // Bdim
  AH: "c4@2 [c5,e5,a5] [b4,d#5,g#5]@2 [a#4,d5,g5] ~@2 [g4,b4,e5] [f#4,a#4,d#5]@2 [f4,a4,d5]", // Am G#m Gm Em D#m Dm
  AI: "[~@2 [g4,b4,e5] [f#4,a#4,d#5]@2 [f4,a4,d5] ~@2 [b3,f4,g4] a4@2 [g3,a3,c4,e4]@25]/3", // Em D#m Dm G7 Am7
})).s("gm_piano").gain(0.41)

// other · piano · "AcouPno1"
const piano_2 = note(`<
  A B C D E F@2 G H I J K L M F G H I J K L M N O P Q R S T U F G H I J K L V W X Y Z AA AB AC V W X Y Z AA AB AC AD C D
  F G H I J K L V N O P Q R S T U F AE AF AG AH AI AJ AK AL AM AN D AO@2
>`.pickRestart({
  A: "~@6 g9 ~@15 [g3,a3] b3", B: "c4 g3", C: "g#3 d#3", D: "g3 g2", E: "c3 g3 g2 f3", F: "c3 [g3,c4] g2 f3",
  G: "c3@6 c2@3 c3@2 c3", H: "f2 [a3,c4] a2@2", I: "c3 [g2,f3] [c3,g3] e2", J: "f2 f3 f#2 [a3,c4]",
  K: "g2@3 g#2@3 a2@3 e3@2 e3", L: "d2@3 a2@2 f#2 g2@3 g2@2 g2", M: "[c2,c3]@2 a#3 a3@2 a#3 a3@2 a#3 a3@2 g2",
  N: "f2 [f3,a3] c2 [f3,a3]", O: "f#2 [d#3,a3] c2 [d#3,a3]", P: "g2 [e3,g3] g2 g#2", Q: "a2 [c#4,e4] e2 a2",
  R: "d2 [f#3,a3] a2 [f#3,a3]", S: "d2@3 [f#3,a3]@3 a2@2 a2 d2@3", T: "g2 a2", U: "a#2@2 b2 g2",
  V: "[c2,c3]@2 a#3 [c3,a3]@2 a#3 [c3,a3]@2 a#3 [c3,a3]@2 a#3", W: "c3 [e3,g3,c4] g2 [f3,g3,b3]",
  X: "c3@3 [e3,g3,c4]@3 c2@3 [c3,g3,a#3]@2 c3", Y: "f2 [f3,a3,c4] a2 [f3,a3,c4]", Z: "c3@3 [g2,f3]@3 [c3,g3]@3 e2@2 g2",
  AA: "f2@3 [f3,a3]@3 f#2@3 [a3,c4]@2 f#2", AB: "g2@3 g#2@3 a2@3 e3@2 e2",
  AC: "d2@3 [a2,d3,f#3]@2 f#2 [g2,d3,b3]@3 [g2,d3,b3]@2 g2", AD: "c3 g3", AE: "c3@6 g3@3 c3@2 c3", AF: "f2 a2",
  AG: "c2@3 g2@3 c3@4 d#2 e2", AH: "f2@5 f2 f#2@5 f#2", AI: "g2 g#2 a2!2", AJ: "d2@5 d2 g2@6",
  AK: "c2@2 a#3 [c3,a3]@2 a#3 [c3,a3]@2 a#3 [c3,a3]@2 a#3", AL: "d2 g2", AM: "[e2,c3] [g2,g3]", AN: "[g#2,g#3] d#3",
  AO: "[c2,c3]/2", // C
})).s("gm_piano").gain(0.32)

// bass · acoustic bass · "AcBass2"
const bass = note(`<
  ~@14 A@2 B C D E F G H I J K L@2 ~ M N O P Q R S T U A@2 B C D E F V N O P Q R S T ~@2 W N O P Q R S T U X Y Z AA AB
  AC AD AE N O P Q R S T U AF A AG AH AI ~
>`.pickRestart({
  A: "c3 g2", B: "f2 a2", C: "c2 g2 c3@2", D: "f2 f#2", E: "g2 g#2 a2@2", F: "d2 g2", G: "c3 ~@7 g2 d3@2 g2",
  H: "f2 c2", I: "f#2 c2", J: "g2@2 g2 g#2", K: "a2 e2", L: "d2 a2", M: "~@9 b3@2 g3", N: "c3@5 e3 g3@2 g2@4",
  O: "c3@5 e3 g3@2 g2 a#2@3", P: "f2@6 a2@2 a2 c3@2 f2", Q: "c2@3 ~@2 g2 c3@3 c2@2 g2", R: "f2@5 f2 f#2@5 f#2",
  S: "g2@2 g2 g#2@3 a2@6", T: "d2 a2@2 g2 d3@2", U: "c3@6 ~@2 g2 d3@2 e2", V: "c3@6 ~@2 g2 d3@2 g2", W: "~@3 g2",
  X: "f2@5 c3 f3@2 f2@4", Y: "f#2@5 c3 f#3@2 f#2 a2@3", Z: "g2@2 g2 c3@2 g2@3 c3@3 g#2",
  AA: "a2@3 e3@2 a3@3 e3 a2@2 e3", AB: "d3@5 a2 d2@6", AC: "~@2 d3@3 a2 d2@3 a2@2 d2", AD: "g2 a2",
  AE: "a#2@6 b2@3 b3@2 g3", AF: "d2@5 a2 g2@6", AG: "g#2 d#3", AH: "g3 g2", AI: "c2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · harmonica
const harmonica = note("<~@64 A@3 B C@2 ~@4 D E F G H I ~ J K L@2 ~>".pickRestart({
  A: "c5", B: "c#5", C: "d5/2", D: "[a4,c5,f5]@2 [a4,c5,g5] [a4,c5,f5]", E: "[g4,c5,e5] [g4,b4,d#5] [g4,c5,e5]@2",
  F: "[f4,a4,c5] [f#4,a4,c5]", G: "[g4,c5,e5] [g#4,b4,e5] [a4,c#5,e5] [g4,c#5,e5]", H: "[f#4,a4,d5] [g4,b4,d5]",
  I: "[g4,c5,e5] ~@3", J: "~@2 a5 g#5@2 g5 ~@2 e5 d#5@2 d5", K: "~@2 f5 e5@2 d#5 ~@2 c5 b4@2 a#4",
  L: "[~@2 e5 d#5@2 d5 ~@2 g4 a4@2 e4@13]/2",
})).s("gm_harmonica").gain(0.18)

// chords · harmonica · soft notes
const harmonica_soft = note("<~@70 A@2 B C ~@12>".pickRestart({
  A: "g4/2", B: "[c5,e5,g5] [b4,d#5,g5]", C: "[c5,e5,g5]@2 [d5,e5,g5] [c5,e5,g5]",
})).s("gm_harmonica").gain(0.04)

// chords · synth strings 1 · "StrSect3"
const synth_strings_1 = note("<~@14 A@5 B@8 ~@19 C@8 ~@10 D E F G@3 ~@13 H@2 ~>".pickRestart({
  A: "[c4@2 d#4@2 c4@2 d4 ~ f4@2 g4 f4 ~ [b3,d#4] ~ e3 f3@2 f#3@2, g4@2 a3 g3 a3, e4@2 e4@4 e4 ~@3, ~@7 c4@6 ~ [c4,e4]@6]/5", // B C
  B: "[g3 [g#3,b3] a3 g3 [f#3,a3]@2 [g3,b3]@2 ~@4 [c5,f5]@4 [d#5,f#5]@4 [g4,c5]@4 c#5@4 [d5,f#5]@4, e4, ~ c#4 d4@2 ~@2 a4@4 e5@4 ~@2, ~@3 a4]/8", // G#m F#m G F5 D#m C5 D
  C: "[c4@4 [b3,d#4]@4 c4@4 d4@2 c4@2 f4@4 g4@2 f4@2 ~@2 [b3,d#4]@2 ~@2 e3@2 f3@4 f#3@4 g3@2 [g#3,b3]@2 a3@2 g3@2 [f#3,a3]@4 b3@4 c4 ~@7, g4@8 c4@5 ~ c4@7 ~ c#4@2 d4@4 ~@4, e4@8 e4@16 e4@4 e4@12 e4@17 ~@7, ~@16 a3@8 g3@8 a3@8 ~@12 g3@5 ~@7]/8", // B G#m F#m
  D: "f5", E: "[d#5,f#5]", F: "g4", G: "[c#5 [d5,f#5]@2, a4]/3", H: "[~@11 [g3,c4]@13]/2",
})).s("gm_synth_strings_1").gain(0.2)

// other · acoustic guitar nylon · "Guitar1"
const acoustic_guitar_nylon = note("<~@30 A B C D E F G H ~@48>".pickRestart({
  A: "~ c5 e5 g5@2 e5 ~ b5 d6 b5@2 g5", B: "~ c5 e5 g5@2 e5 ~ e5 g5 e5@2 a#4", C: "~ c5 f5 a5@2 f5 ~ c5 f5 c5@2 a4",
  D: "~ c5 e5 g5@2 g5 ~ e5 g5 a#5@2 a#5", E: "~ f4 a4 c5@2 c5 ~ f#4 a4 c5@2 c5", F: "~ g4 c5 e5@2 b4 ~ a4 c#5 e5@2 c#5",
  G: "~ f#4 a4 d5@2 a4 ~ b4 d5 b4@2 g4", H: "c5 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

stack(piano, piano_2, bass, harmonica, harmonica_soft, synth_strings_1, acoustic_guitar_nylon)

More by Randy Newman