Strudelify

CNN Outro Friday Theme

Nathaniel W. Uribes

KeyB majorTempo100 bpm
0:00/0:00
// CNN Outro Friday Theme — Nathaniel W. Uribes
// 100 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/6351934; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 28 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · french horn · "Horn in F 1"
const french_horn = note("<~@13 A B A C D E F G H ~@6>".pickRestart({
  A: "g#5 b5", B: "f#5@14 e5 f#5", C: "f#5@2 e5 d#5", D: "c#5@5 ~@3 d#5@4 e5@4", E: "g#5@7 e5", F: "b5@7 e5",
  G: "c#6@12 ~ b4 ~ d#5", H: "c#5",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Horn in F 1" · soft notes
const french_horn_soft = note("<~@9 c#4 b3 [c#4@3 e4] [d#4 c#4] ~@15>").s("gm_french_horn").gain(0.15)

// other · french horn · "Horn in F 2"
const french_horn_2 = note("<~@13 A B A C D E F G H ~@6>".pickRestart({
  A: "g#4 b4", B: "f#4@14 e4 f#4", C: "f#4@2 e4 d#4", D: "c#4@5 ~@3 d#4@4 e4@4", E: "g#4@7 e4", F: "b4@7 e4",
  G: "c#5@12 ~ b4 ~ d#5", H: "c#5",
})).s("gm_french_horn").gain(0.5)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@4 A B C D E F C D G H I H J K L M N O P Q ~@4>".pickRestart({
  A: "~@3 e4 b3 e4 b3 e4, ~ c#4", B: "[b3,e4] ~ b3 ~ b3 ~ b3 e4, ~ e4@2 e4@2 e4@2 ~", C: "~ e4 ~ e4 ~ e4 ~ e4, b3!4",
  D: "b3 e4 b3 e4 b3 e4 [b3,e4] e4, c#4@3 ~", E: "b3 e4 b3 e4 b3 e4 b3 e4, d#4 c#4",
  F: "b3 e4 b3 e4 b3 e4 b3 e4, [c#4,g#4,c#5]", // C#5
  G: "b3@2 e4@2 b3@2 e4@2 [b3,d#4,d#5]@2 e4 ~@3 e4@2, d#4@8 ~@3 [e4,e5]@2 [f#4,f#5]@3, ~@6 b3 ~", // B E F#
  H: "b3 e4 b3 e4 b3 e4 b3 e4, g#4 b4", I: "b3@2 e4@2 b3@2 e4@2 b3@2 e4@2 b3@2 ~ f#4, f#4@7 e4",
  J: "b3 e4 b3 e4 [b3,e4] e4 b3 e4, f#4@2 ~ d#4", K: "b3 e4 b3 e4 b3 e4 [b3,e4] e4, c#4@2 d#4 ~",
  L: "b3 e4 b3 e4 b3 e4 b3 [e4,e5], [g#4,g#5]@7 ~", M: "b3 e4 b3 e4 b3 e4 b3 [e4,e5], [b4,b5]@7 ~",
  N: "[c#5,c#6]@12 ~ b4 ~ d#5", O: "[c#4,c#5]", P: "[b4,b5]@13 [g#4,g#5] ~ [f#4,f#5]", Q: "[g#4,g#5]@2 [f#4,f#5] ~",
})).s("gm_string_ensemble_1").gain(0.3)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~ A B C D ~@18 E F G H ~>".pickRestart({
  A: "c#4", B: "b3", C: "b3 e4 b3 e4 b3 e4 [b3,e4] e4, c#4@3 ~", D: "b3 e4 b3 ~@5, d#4 ~", E: "~@3 [b4,b5]",
  F: "[g#4,g#5] [f#4,f#5]", G: "[e4,e5]", H: "[c#4,e4,c#5]",
})).s("gm_string_ensemble_1").gain(0.05)

// chords · piano · "Grand Piano"
const piano = note("<~ A B@4 C@4 D E F@8 G H I@2 ~@4>".pickRestart({
  A: "~@3 [g#4,c#5], [e3,g#3,c#4]@15 ~", // C#5 C#m
  B: "[[e3,g#3,b3,e4]@8 e3@5 ~@3 [c#3,e3,g#3,c#4]@8 ~@4 b4@4 [d#3,f#3,b3]@8 ~@20 [g#4,c#5]@4, ~ e4@3 [b2,b4,d#5]@4, ~@2 b3@5 e5@5 [c#3,e3,g#3,c#4,e4]@4, ~@2 g#3@2 ~@2 [c#3,e3,g#3,c#4]@5 d#2@5, ~@13 e2@27 [d#3,f#3,b3]@24]/4", // E C#m B C#5 B C#m B
  C: "[[a2,e3,a3,c#4]@8 ~@8 [e1,b2,e3,g#3]@8 [b2,e3]@4 b2@4 ~@13 c#3@3 ~@12 [g#4,c#5]@4, ~@2 [a2,a3,c#4]@5 g#2@7 e4@2, ~ e3 ~ e1@3 [c#3,e3,g#3,c#4,f#4]@2, ~@13 e2@15 e3@4 [b1,b2,d#3,f#3,b3]@32, ~@24 g#3@21 [f#2,a#2]@19]/4", // A E E5 C#5 A C#m B F#
  D: "[a2,c#3,e3,a3]@2 ~ [e2,e4], a4, ~ [a2,c#3,e3,a3]", E: "~@2 [b2,e3] [g#2,b2,e3,e4], [e1,b3,g#4], e4@3 ~, ~ g#3",
  F: "[[b2,d#3,f#3,b3,d#4]@8 ~@5 c#3@3 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]!2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4] [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4] [c#3,e3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]!2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3] [a2,c#3,e3,a3]@3 ~@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]!2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3] [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3] [b2,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]!2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 ~@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]!2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3,g#3,c#4]@2 [c#3,e3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]!2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3] [a2,c#3,e3,a3]@3 e3@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]!2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3]@2 [b2,e3,g#3,b3] [b2,e3,g#3,b3]@3 [b2,e3,g#3,b3,e4,e5]@2, b4@13 [f#4,f#5]@3 [g#4,g#5]@16 [f#4,f#5]@14 [a2,c#3,a3]@18 [f#4,f#5]@28 [e4,e5]@2 c#4@18 [b4,b5]@16, f#4@13 [f#2,a#2]@17 g#3@16 [e4,e5]@16 [e3,g#3]@10 [e4,e5]@16 [d#4,d#5]@22 [e4,e5]@16 ~@2, ~@8 [b2,d#3,f#3,b3,d#4,d#5]@16 [b4,b5]@22 e3 [f#4,f#5]@9 [b4,b5]@22 [b2,d#3,f#3,b3]@16 g#3@2 [g#4,g#5]@32, ~@11 [e4,e5]@19 c#4@18 [g#4,g#5]@28 [d#4,d#5]@4 c#5@30 [a2,c#3,a3]@18]/8", // B C#m A E B C#m A E …
  G: "~@13 [b4,b5]@2 [d#5,d#6], [b2,d#3,f#3,b3,c#5,c#6]", H: "[c#3,e3,g#3,c#4]",
  I: "[[a2,c#3,e3,a3]@8 ~@5 [g#4,g#5]@2 ~ [e1,g#4,g#5]@12 ~@4, [b4,b5]@7 ~, ~@2 [a2,c#3,a3]@5 ~, ~@8 e3@7 [f#4,f#5]@9 ~@8, ~@13 e2@15 ~@4]/2", // A G# E B A F#
})).s("gm_piano").gain(0.3)

// chords · piano · "Grand Piano" · soft notes
const piano_soft = note("<~@23 A B C D@2>".pickRestart({
  A: "~@2 [b2,e3,g#3,f#4,f#5] [g#2,b2,e3,b4,b5]", B: "[g#4,g#5]@2 ~ d#2, [d#3,f#3,b3]@15 ~, b2@11 ~@5, ~ [f#4,f#5]",
  C: "~@3 [g#4,c#5], [c#3,e3,g#3,c#4,e4,e5]@15 ~", D: "[a2,e3,a3,c#4,e4,c#5]/2",
})).s("gm_piano").gain(0.15)

// other · timpani
const timpani = note("<~@8 A B C B C B C B C B C B C D ~@6>".pickRestart({
  A: "~@15 d#2", B: "d#2@5 ~@3 d#2@8", C: "d#2@4 ~@3 d#2 d#2@2 ~ d#2 ~@3 d#2", D: "d#2@11 ~@5",
})).s("gm_timpani").gain(0.25)

// other · timpani · soft notes
const timpani_soft = note("<~@8 A ~ B ~ B ~ B ~ B ~ B ~ B ~@7>".pickRestart({
  A: "~@14 d#2 ~", B: "~@6 d#2 ~@7 d#2 ~",
})).s("gm_timpani").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~ A ~@7 B C B C B C B C B C B C A ~@6>".pickRestart({
  A: "x", B: "x!2", C: "x ~@7 x ~@2 x ~@4",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@14 x!2] ~@27>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<A B ~@6 C D E D E D E D E D E D F B ~@6>".pickRestart({
  A: "~@14 x!2", B: "x", C: "~@13 x!3", D: "x ~ x ~ x!3 ~ x ~ x!5 ~", E: "x ~ x ~ x!5 ~ x!5 ~", F: "x ~ x ~ x!5 ~ x!6",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@5 [x ~ x ~ x!3 ~ x ~ x!5 ~]!3 [x ~ x ~ x!3 ~ x ~ x!3 ~@3] ~@19>").gain(0.05)

// drums · low tom
const low_tom = s("lt").struct("<~ x ~@26>").gain(0.5)

stack(
  french_horn, french_horn_soft, french_horn_2, string_ensemble_1, string_ensemble_1_soft, piano, piano_soft, timpani,
  timpani_soft, kick, kick_soft, snare, snare_soft, low_tom
)

More by Nathaniel W. Uribes