Strudelify

Baby It's Cold Outside

Frank Loesser

KeyF majorTempo112 bpm
0:00/0:00
// Baby It's Cold Outside — Frank Loesser
// 112 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/16 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2988451; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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.

// other · flute
const flute = note(`<
  ~ A B C@2 D@2 C@2 E ~ F G@4 H I J K@2 L@2 M@2 N@2 O P I Q R S T U@3 C@2 D@2 C@2 E ~ F G@4 H I J K@2 L@2 M@2 N@2 O P I
  Q R S T V
>`.pickRestart({
  A: "a4 bb4@2 b4@4 ~", B: "d4 eb4@2 e4@4 ~", C: "[~@6 c4@2 a4@3 g4 f4@2 a4@4 f4@4 f4@6 ~@4]/2",
  D: "[~@6 c4@2 bb4@3 a4 g4@2 bb4@4 g4@4 g4@6 ~@4]/2", E: "eb4 ~@3", F: "~ f4 ~ f4", G: "~ d4 ~ d4",
  H: "~@2 d4@2 ~@3 f5", I: "d6@3 g5 g5@3 g5 g5@3 g5 g5@4", J: "g5@11 ~@3 c5@2", K: "[a5@3 g5 f5@2 c6@17 ~@7 c5@2]/2",
  L: "[bb5@3 a5 g5@2 c6@17 ~@7 c5@2]/2", M: "[a5@3 g5 f5@2 c6@13 ~ c6@4 a5@4 f5@4]/2", N: "[g5@23 ~@7 f5@2]/2",
  O: "d6@3 f5 f5@4 f5@4 f5@4", P: "f5@4 ~@3 f5", Q: "g5@11 ~ e4@4", R: "~ f4 ~ a4", S: "~ gb4 ~ gb4", T: "~ a4 ~ g4",
  U: "[f4@4 ~@8 g5@2 g5@6 e5@2 e5@6 c5@2 c5@4 db4@2 d4 f4 ~ a4 c5@4 ~@4]/3", V: "f4 c6 f6 ~",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note(`<
  ~ A B C D C D C E F@2 G H I J K H I L@3 M@2 N@2 O ~@4 P Q@3 R ~@2 C D C D C E F@2 G H I J K H I L@3 M@2 N@2 O ~@4 P
  Q@3 S
>`.pickRestart({
  A: "f4@13 ~@3", B: "bb4@13 ~@3", C: "f4 e4", D: "d4 e4", E: "d4 c4", F: "[~ d5@3 c5@2 g4 d5@3 c5@2 g4@2 a4@2]/2",
  G: "bb4@11 ~@5", H: "d5@3 f4 f4@4 f4@4 f4@4", I: "f4 f4@3 ~@4", J: "d5@3 f4 f4@3 f4 f4@3 f4 f4@4", K: "f4 ~",
  L: "[d5@3 g4 g4@3 g4 c4@3 d4 e4@2 f4@6 ~@2 c4@2 a4@3 g4 f4@2 a4@4 f4@4 f4@6 ~@4]/3",
  M: "[~@6 c4@2 bb4@3 a4 g4@2 bb4@4 g4@4 g4@6 ~@4]/2", N: "[~@6 c4@2 a4@3 g4 f4@2 a4@4 f4@4 f4@6 ~@4]/2", O: "eb4 ~@3",
  P: "~@7 c5", Q: "[a5@3 g5 f5@2 c6@17 ~ a5@3 bb5 c6@2 d6@9 ~ e5@8]/3", R: "f5@9 ~@7", S: "f5@11 ~@5",
})).s("gm_flute").gain(0.45)

// other · flute · soft notes
const flute_soft = note("<~@27 [~ d4 ~ d4]!3 [~ d4 ~@2] ~@30 [~ d4 ~ d4]!3 [~ d4 ~@2] ~@4>").s("gm_flute").gain(0.25)

// chords · piano
const piano = note(`<
  ~ A B C@2 D E C F G ~ H@2 I@2 J K L M C@2 D E C@2 N ~ O P Q R S T U V@3 C@2 D E C F G ~ H@2 I@2 J K L M C@2 D E C@2 N
  ~ O P Q R S T U W
>`.pickRestart({
  A: "f4@3 g2, b3@11 ~@5", B: "bb3@6 c2 ~, c3@11 ~@5", C: "f2 [a3,c4] c2 [a3,c4]", D: "g2 [bb3,c4] c2 [g3,bb3,c4]",
  E: "g2 [f3,g3,bb3] c2 [g3,bb3,c4]", F: "f2 [a3,c4] c2 [f3,a3]", G: "[f2,g3,a3,c4] ~@3",
  H: "bb2 [g3,bb3,d4] f2 [g3,bb3,d4]", I: "~ [bb2,ab3,c4,d4] ~ [bb2,ab3,c4,d4]", J: "f2 [a3,c4,d4] c2 [a3,c4,d4]",
  K: "f2 [a3,c4,f4] c2 [a3,c4,f4]", L: "g2 [b3,d4,f4] g1 [b3,d4,f4]", M: "g2 [b3,d4,f4] c3 [bb3,c4,e4]",
  N: "[g3,a3,c4] ~@3", O: "bb2 [g3,bb3] bb2 [g3,bb3]", P: "a2 [f3,c4] ab2 [f3,c4]", Q: "g2 [g3,b3] g2 [g3,b3]",
  R: "c3 [g3,bb3] c3 [g3,bb3,c4]", S: "f3 [a3,c4,d4] eb3 [bb3,db4,f4]", T: "d3 [a3,c4,d4] d3 [a3,c4,d4]",
  U: "g2 [b3,d4,f4] c3 [bb3,db4,e4]", // Bdim Bbdim
  V: "[[f3,a3,c4,d4]@4 c3@4 f2@4 [e4,a4,c5]@2 a4@2 a4@4 [c4,f4,a4]@2 [c4,f4,a4]@6 [a3,d4,f4]@2 f4@2 f4@2 db4@2 d4 f4 ~ a4 [c3,bb3,e4,a4]@4 ~@4, ~@7 [e4,c5]@3 ~@5 [g3,d4]@2 ~@7]/3", // Dm7 Am F Dm Am C G5
  W: "[f2,f3,a3,c4,d4] [c2,c3,c5] [f1,f2,f5] ~", // Dm7 C F
})).s("gm_piano").gain(0.25)

stack(flute, flute_2, flute_soft, piano)