Strudelify
You Were Meant for Me cover art

Pieces Of You

You Were Meant for Me

Jewel

KeyF♯ majorTempo111 bpm
0:00/0:00
// You Were Meant for Me — Jewel
// 111 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 1/4 at bar 117) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 14 "Oboe" named as a reed, played on oboe (its pan flute patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 13 "Guitar1" acoustic guitar nylon (copy of ch 12 "Guitar2" acoustic guitar steel)
// note: Full arrangement: all 116 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(111/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 · oboe
const oboe = note(`<
  ~@17 A B@2 C D E F G H I J K L C M N ~@4 O P@2 Q@4 R S@3 T@2 U@2 G H I J K L C M N V W ~@2 X Y@2 Z AA@4 ~@16 AB@5 AC@2
  AD@4 AE@8 ~@3 AF@3 AG@2
>`.pickRestart({
  A: "~@3 a#4 c#5 d#5", B: "f#5/2", C: "c#5", D: "~ a#4 c#5 d#5 f#5 g#5", E: "f#5@3 d#5@5", F: "c#5@2 d#5 f5",
  G: "[b4,d#5,f#5]", H: "[c#5,f5]@2 f#5 [f5,g#5]", I: "f#5 f5, c#5", J: "d#5@2 f5 f#5", K: "[b4,d#5]",
  L: "[c#5,f5]@2 f#5 g#5", M: "d#5@2 f#5 g#5, a#4", N: "[b4,f#5]", O: "~@3 c#5", P: "[d#5@10 c#5 a#4]/2",
  Q: "[c#5@3 d#5@3 f#5@6 g#5@2 a#5@3 f#5@9 f5@2 d#5@2 f5@2]/4", R: "d#5@10 c#5 d#5",
  S: "[c#5@6 a#4@2 g#4@2 f#4 ~ f#4@14 f#4@2 g#4@2 a#4@2 b4@2 c#5@2, ~@11 g#4@13 ~@12]/3",
  T: "[d#5@21 c#5@15 d#5@4 f#5@4 g#5@4]/2", U: "[f#5@3 d#5@4 c#5@5 d#5@2 f5@2]/2", V: "[c#5,f5]", W: "[d#5,f#5]",
  X: "~@4 d#5 f5", Y: "[~@4 f5@2 [b4,d#5] [a#4,c#5], c#5@3 ~]/2", Z: "[f#4,b4]@2 [a#4,c#5] [b4,d#5]",
  AA: "[~ [c#5,f5]@13 f#5@7 g#5@7 ~ [a#4,c#5]@29 [f#4,d#5]@22 ~@16]/4", // C# A#m D#m
  AB: "[~@11 f#5@3 g#5@3 d#5@2 f#5@22 d#5@6 c#5@6 ~@5 d#5@2]/5", AC: "[c#5@4 d#5@4 f#5@4 g#5@4 f#5@27 f5@5]/2",
  AD: "[~ d#5@6 f5@9 [b4,d#5,f#5]@24 [c#5,f5]@12 f#5@6 [f5,g#5]@6 f#5@12 f5@12 d#5@8, ~@8 c#5@3 ~]/4", // B C# Fm
  AE: "[~@4 f5@6 f#5@6 [b4,d#5]@24 [c#5,f5]@12 f#5@6 g#5@6 c#5@24 d#5@12 f#5@6 g#5@6 [b4,f#5]@24 [c#5,f5]@24 f#5@9 a#4@9 [d#5,f#5]@9 [a#4,d#5]@5, ~@44 a#4@12 ~@24 d#5@9 ~@7]/8", // B C# B5 C# D#m D#5
  AF: "[~@10 g#4@6 ~ f#4@13 [c#4,c#5]@13 [d#4,d#5]@7 [f4,f5]@7 [f#4,f#5]@7 [g#4,g#5]@8]/3", AG: "[[a#4,a#5]@29 ~@19]/2",
})).s("gm_oboe").gain(0.09)

// chords · acoustic guitar steel · "Guitar2"
const acoustic_guitar_steel = note(`<
  A B C D A B C D A B C E A B C F A B C E A B C F G H I J K L M N O P Q@2 A B C E A B C F A B C E A B C F G H I J K L R
  N O P S@2 T U V@2 W X Y@2 Z@8 AA@8 AB@8 AC@7 AD@6 AE@5 AF@2
>`.pickRestart({
  A: "~@3 c#3@2 c#4@3 ~@3 c#4, b2, ~@2 f#3@7 f#3@3, ~@8 d#4@3 ~",
  B: "~@3 c#3@2 c#4@3 ~@3 a#3, a#2, ~@2 f#3@7 f#3@3, ~@8 d#4@3 ~",
  C: "~@3 d#3@2 b3@3 ~@3 a#3, b2, ~@2 f#3@7 f#3@3, ~@8 d#4@3 ~",
  D: "~@3 d#3@2 a#3@3 ~ d#3@2 a#3, d#2, ~@2 f#3@7 ~@3, ~@8 d#4@3 ~",
  E: "~@3 d#3@2 a#3@3 ~ d#3@2 c#3, d#2, ~@2 f#3@7 ~@3, ~@8 d#4@3 ~",
  F: "~@5 f4@3 ~ g#3@2 c#3, c#3@11 ~, ~@2 c#4@3 ~@3 c#4@3 ~, ~ g#3@2 ~",
  G: "~@10 d#4@6 f#3@2 c#3 ~ d#3@2 ~ f#3, b2@3 ~, ~@3 f#3@5 ~@4",
  H: "[c#3,g#3]@3 g#3@2 f4@3 ~ c#3@3, ~ c#3@2 ~, ~@2 g#3", // C#5
  I: "~@3 [c#4,f#4]@3 ~@2 f#3 ~@2 c#3, f#2 f2, ~ f#3@3 c#4@2, ~@3 f#3", // F#5
  J: "~@2 f#3 [d#3,a#3]@2 d#4@3 ~ d#3@2 c#3, d#2, ~@5 f#3@4 ~@3, ~@8 a#3@3 ~", // D#5
  K: "~@3 d#3@2 [b3,d#4]@3 f#3 [d#3,f#3]@2 f#3, b2, ~ f#3@3 ~@2", // B D#m
  L: "~@3 g#3@2 f4@3 ~ g#2@2 a#3, c#3, ~@2 c#4@6 b3@3 ~",
  M: "~@3 [c#4,f#4]@2 ~@4 f#3@2 ~, [f#2,c#3,f#3]@5 f#3@4 ~@3, ~@6 f2@5 ~, ~@8 a#3@3 ~", // F#5
  N: "~@3 c#3@2 f#3@4 [c#3,f#3,a#3]@3, d#2, ~ a#2@5", O: "~@3 d#3@2 [b3,d#4]@3 ~ b3@2 a#3, b2, ~@2 f#3@6 f#3@3 ~",
  P: "~@6 g#3@4 f4@6 ~@2 g#3@5 ~, c#3@23 ~, ~@4 c#4@12 c#4@7 ~",
  Q: "[~@2 f#3 d#3@2 a#3@3 ~@3 a#3@4 g#4 c#5 ~ a#5@3 [d#2,f5]@2 c#4, d#2@7 ~, ~@8 d#4@4 ~@5 f5@4 ~@3]/2", // D#sus2
  R: "~@3 [c#4,f#4]@2 ~@4 f#3@3, [f#2,c#3,f#3]@5 f#3@4 ~@3, ~ f2, ~@2 a#3", // F#5
  S: "[~@2 f#3 d#3@2 a#3@3 d#3@3 ~@9 a#3 d#3@2 c#3, d#2@12 ~@2 a#3@3 ~@7, ~@11 d#4@6 d#4@7, ~@5 d#3@2 ~]/2",
  T: "~@3 [d#3,f#3,b3]@2 [d#3,f#3,b3]@3 [d#3,f#3] [d#3,f#3,b3]@2 [f#3,a#3], g#2", // B D#m B F#
  U: "~@3 c#4@2 [c#4,f4]@3 g#3 [g#3,c#4]@2 [f#3,a#3], c#3@2 c#3, ~@3 g#3@5 ~@4", // C# C#5 F#
  V: "[f3@6 [f3,a#3,c#4]@4 [f3,a#3,c#4]@6 a#2@2 [a#2,f3]@4 [c#3,g#3,c#4,f4]@8 [c#3,g#3,c#4,f4]@4 c#3@2 [b2,d#3,f#3,d#4]@5 ~ [a#2,c#3,f#3,c#4]@5 ~, a#2@8 [a#3,c#4]@3 ~@13]/2", // A#m A#5 C# B F# A#m
  W: "b3@6 [d#3,f#3,b3]@4 [d#3,f#3,d#4]@6 ~ [d#3,f#3]@2 [d#3,f#3,b3]@4 [f#3,a#3], g#2", // B D#m B F#
  X: "~ g#3@7 c#4@4 [c#4,f4]@7 g#3@2 [g#3,c#4]@3, ~ c#3@18 c#3@5, ~@8 g#3@11 ~@5", // C# C#5
  Y: "[~@7 a#3 ~@26 d#2@2 ~@2 d#3@10, ~@5 c#3@31 [d#2,a#2]@12, ~ f3@5 ~@2, ~@2 c#4@7 ~@3]/2", // D#5
  Z: "[~@13 c#3@2 ~@7 c#3@4 c#4@6 ~@6 c#4@2 ~@6 c#3@4 c#4@6 ~@6 a#3@2 ~@6 d#3@4 b3@6 ~@6 a#3@2 ~@6 d#3@4 a#3@6 ~@2 d#3@4 a#3@2 ~@6 c#3@4 c#4@6 ~@6 c#4@2 ~@6 c#3@4 c#4@6 ~@6 a#3@2 ~@6 d#3@4 b3@6 ~@6 a#3@2 ~@6 d#3@2, ~@8 b2@12 a#2@12 b2@12 d#2@12 ~@8 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@5, ~@10 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 ~@3 b2@12 a#2@12 b2@12 d#2@4, ~@16 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@3 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@2]/8",
  AA: "[~ a#3@3 ~ d#3@2 a#3 ~@3 c#3@2 c#4@3 ~@3 c#4 ~@3 c#3@2 c#4@3 ~@3 a#3 ~@3 d#3@2 b3@3 ~@3 a#3 ~@3 d#3@2 a#3@3 ~ d#3@2 c#3 ~@3 c#3@2 c#4@3 ~@3 c#4 ~@3 c#3@2 c#4@3 ~@3 a#3 ~@3 d#3@2 b3@3 ~@3 a#3 ~@3 g#3, ~@4 d#4@3 ~ b2@12 a#2@12 b2@12 d#2@12 ~@8 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@3 c#4@2, ~@10 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 ~@3 b2@12 a#2@12 b2@12 c#3@4, ~@16 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@3 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@4]/8",
  AB: "[~ f4@3 ~ g#3@2 c#3 ~@3 c#3@2 c#4@3 ~@3 c#4 ~@3 c#3@2 c#4@3 ~@3 a#3 ~@3 d#3@2 b3@3 ~@3 a#3 ~@3 d#3@2 a#3@3 ~ d#3@2 c#3 ~@3 c#3@2 c#4@3 ~@3 c#4 ~@3 c#3@2 c#4@3 ~@3 a#3 ~@3 d#3@2 b3@3 ~@3 a#3 ~@3 g#3, ~@4 c#4@3 ~ b2@12 a#2@12 b2@12 d#2@12 ~@8 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@3 c#4@2, ~@10 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 ~@3 b2@12 a#2@12 b2@12 c#3@4, ~@16 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@9 d#4@3 ~@3 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@2 f#3@7 f#3@3 ~@4]/8",
  AC: "[~@2 f4@6 ~@2 g#3@4 c#3@2 ~@10 d#4@6 f#3@2 c#3 d#3@2 ~ f#3 ~ [c#3,g#3]@6 g#3@4 f4@6 ~@2 c#3@6 ~@6 [c#4,f#4]@6 ~@4 f#3@2 ~@4 c#3@2 ~@4 f#3@2 [d#3,a#3]@4 d#4@6 ~@2 d#3@4 c#3@2 ~@6 d#3@4 [b3,d#4]@6 f#3@2 [d#3,f#3]@4 f#3@2 ~@6 g#3@4 f4@6 ~@2 g#2@4 a#3@2 ~@6 [c#4,f#4]@2, ~@4 c#4@3 ~ b2@9 ~@6 c#3@6 ~@3 f#2@6 f2@6 d#2@12 ~@24 [f#2,c#3,f#3]@4, ~@11 f#3@5 ~@12 g#3@4 ~@2 f#3@6 c#4@4 ~@8 a#3@3 ~@3 f#3@6 ~@6 c#4@6 b3@3 ~@5, ~@41 f#3@3 ~@5 f#3@4 ~@3 b2@12 c#3@12 ~@4]/7", // C#5 F#5 D#5 B D#m F#5
  AD: "[~@10 f#3@4 ~@8 c#3@4 f#3@8 [c#3,f#3,a#3]@6 ~@6 d#3@4 [b3,d#4]@6 ~@2 b3@4 a#3@2 ~@6 g#3@4 f4@6 ~@2 g#3@5 ~@5 f#3@2 d#3@4 a#3@6 d#3@6 ~@8 d#3@4 a#3@6 f#3@2 [d#3,f#3,a#3]@4 a#2@2 ~@6 d#3@2, ~@2 f#3@8 ~@10 a#2@20 b2@24 c#3@23 ~@29 a#3@6 [d#3,d#4]@8 ~@6 b2@8, ~@2 f2@5 ~ d#2@12 ~@24 d#2@12 ~@16, ~@8 a#3@6 ~@30 f#3@12 f#3@6 ~@6 c#4@12 c#4@7 ~@23 d#4@12 ~@8 d#4@6 ~@4 f#3@4]/6", // F# B D#m D#
  AE: "[~@2 [b2,f#3,b3,d#4]@6 [b2,b3,d#4]@2 b3@4 a#3@2 ~@6 g#3@4 f4@6 ~@2 g#3@4 f#3@2 ~@6 c#3@4 c#4@6 ~@2 f#3@5 c#4@2 ~@7 c#3@4 c#4@7 ~@6 a#3@2 ~@7 d#3@5 b3@7 ~@2 f#3@5 [g#2,a#3]@3, ~@8 f#3@6 ~@6 c#4@12 c#4@6 ~@6 f#3@14 ~@11 f#3@16 f#3@7 ~@4 f#3@16 ~@8, ~@10 b2@6 c#3@22 ~@2 b2@25 a#2@27 ~@18 d#4@7 ~@3, ~@56 d#4@6 ~@21 d#4@7 ~ b2@28 ~]/5", // B G#sus2
  AF: "[~@3 d#3 ~ a#3 d#4@24 ~@18, d#2@5 ~@3, ~@2 a#2@2 f#3@3 ~@41]/2",
})).s("gm_acoustic_guitar_steel").gain(0.27)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B A C A D A E A B A F A B G H I J I K L M N O N P Q R N P Q R N S T@2 A B A F A B U V L M W X L M Y Z N P AA AB N P
  Q R N AC T@2 AD AE AF@2 AG AH AI@2 AJ@7 AK@5 AL@8 AM@8 AN@4 AO@7 ~@3 AP@2
>`.pickRestart({
  A: "b2", B: "a#2", C: "d#2!2", D: "a#2@21 ~ a#2@2", E: "d#3", F: "d#2", G: "b2@5 ~ f#2@5 ~", H: "c#3@21 ~ f1@2",
  I: "b1", J: "f#1@19 ~@5", K: "d#2@21 ~ a#1@2", L: "b1@21 ~ b1@2", M: "f#1@21 ~ a#1@2", N: "b1@12 f#1@9 ~ b1@2",
  O: "c#2@2 f#1 g#1", P: "c#2 g#1", Q: "f#2 f2", R: "d#2@9 ~ a#1@2 d#2@5 ~ f#1@3 ~ a#1@2",
  S: "c#2@12 g#1@5 ~ c2@2 c#2@2 d2@2", T: "d#2/2", U: "b2 f#2", V: "c#3@10 f#1 a#1", W: "b1@10 b1 c#2",
  X: "d#2@14 ~@4 a#1@5 ~", Y: "b1@10 ~@2 f#1@5 ~ b1@3 ~ c2@2", Z: "c#2@12 f#1@5 ~ g#1@3 ~ f#1@2", AA: "f#2@5 ~ f2@5 ~",
  AB: "d#2@8 f2@2 d#2@2 f#2@5 ~ f#1@3 ~ b1@2", AC: "c#2@6 g#1@5 ~", AD: "g#1@9 ~ g#1@2 g#1@9 ~ g#1@2",
  AE: "c#2@9 ~ c#2@2 c#2@9 ~ c#2@2", AF: "[a#1@12 a#1@6 a#1@3 ~ c#2@14 b1@6 a#1@6]/2", AG: "g#1@12 g#1@10 ~ g#1",
  AH: "~ c#2@10 ~ c#2@2 c#2@6 ~ b1@3", AI: "[~@5 a#1@29 d#2@14]/2",
  AJ: "[~@16 b2@24 a#2@24 b2@19 ~@5 d#2@24 b1@19 ~@5 a#1@21 ~ a#1@2 b1@8]/7",
  AK: "[~@4 a#1@5 ~ c#2@3 ~ d2@2 d#2@19 ~@5 b1@24 f#1@24 b1@24 d#2@8]/5",
  AL: "[~@10 a#1@5 ~ b1@24 f#1@24 b1@19 ~@5 c#2@14 ~@4 f#1@3 ~ g#1@2 b1@21 ~ b1@2 f#1@14 ~@4 f#1@3 ~ g#1@2 b1@14 ~@4 b1@3 ~ c#2@2 d#2@8]/8",
  AM: "[~@10 a#1@5 ~ b1@14 ~@4 b1@3 ~ b1@2 f#1@21 ~ a#1@2 b1@10 ~@2 f#1@5 ~ b1@3 ~ c2@2 c#2@12 f#1@5 ~ g#1@3 ~ f#1@2 b1@12 f#1@9 ~ b1@2 c#2@12 g#1@12 f#2@12 f2@12 d#2@8]/8",
  AN: "[~@2 a#1@2 d#2@5 ~ f#1@3 ~ a#1@2 b1@12 f#1@9 ~ b1@2 c#2@12 g#1@12 f#2@10 ~@2 a#1@5 ~ c#2@5 ~ d#2@8]/4",
  AO: "[f2@2 d#2@2 f#2@5 ~ f#1@3 ~ b1@2 b1@12 f#1@9 ~ b1@2 c#2@12 g#1@10 ~@2 d#2@48 b1@21 ~ c2@2 c#2@19 ~@13]/7",
  AP: "[[d#1,d#2]@2 ~]/2", // D#
})).s("gm_acoustic_bass").gain(0.27)

// drums · rim
const rim = s("rim").struct("<~@23 [~@2 x] ~@27 [~@2 x] ~@44 [~ x ~] ~@19>").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@19 B A@11 C A@15 D A@12 E@2 F G E H ~@6 I J@18 K L J@14 M N O ~@2>".pickRestart({
  A: "x!2", B: "x ~@4 x ~@6", C: "x", D: "~@5 x ~@6", E: "x ~@2 x", F: "x ~@8 x ~ x", G: "~@5 x ~@3 x ~@2",
  H: "~ x ~@19 x ~@2", I: "~@2 x", J: "~ x ~@2 x ~", K: "~ x ~@4", L: "~ x ~@14 x ~@7", M: "~@4 x ~@12 x ~@6",
  N: "~@6 x ~@12 x ~@4", O: "~@3 x ~@4",
})).gain(0.13)

// drums · snare
const snare = s("sd").struct("<~@4 A@19 B A@11 C A@15 D A@16 E F ~@6 G H@18 I J H@14 K L M ~@2>".pickRestart({
  A: "~@3 x ~ x ~@2 x!2 ~ x", B: "~@5 x!2 ~@7 x ~ x ~ x ~ x ~ x ~", C: "~ x ~@2", D: "~@5 x!2 ~@7 x ~ x ~ x ~ x ~ x!2",
  E: "~@6 x ~@3 x ~@5 x ~ x ~@4 x", F: "~@8 x ~@3 x ~@6 x ~ x ~@2", G: "~@11 x", H: "~ x ~@2 x!2 ~ x ~@3 x",
  I: "~@2 x ~@5 x ~ x ~@3 x ~@6 x!2 ~", J: "~@6 x ~ x ~ x ~ x!2 ~@8 x ~", K: "~@2 x ~@5 x ~ x ~@4 x ~@7 x",
  L: "~@4 x ~@5 x ~@2 x ~@3 x ~@6", M: "~@2 x ~@4 x ~@6 x ~@9",
})).gain(0.22)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@19 B A@11 C A@15 B A@15 D E F ~@6 G H@18 I G H@14 J K L ~@2>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "~ x ~@2", C: "x ~ x!2 ~@8", D: "~@2 x!2 ~ x!2 ~ x!2 ~ x",
  E: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@4 x", F: "~ x ~@3 x ~@2 x ~@3 x ~ x ~@4 x ~ x ~@2", G: "~@8 x ~ x!2",
  H: "~ x!2 ~ x!2 ~ x!2 ~ x!2", I: "~ x!2 ~ x!2 ~ x ~@3 x", J: "~@2 x ~ x ~@3 x ~ x ~@4 x ~ x ~@3 x ~ x",
  K: "~@4 x ~ x ~@3 x ~@2 x ~@3 x ~ x ~@4", L: "x ~ x ~@4 x ~ x ~@4 x ~ x ~@4 x ~@2",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@23 A ~@11 B ~@15 A ~@18 C ~@25 D ~@17 E ~>".pickRestart({
  A: "~@2 x", B: "~ x", C: "~@5 x ~@18", D: "~ x ~", E: "x",
})).gain(0.18)

// drums · ride
const ride = s("rd").struct("<~@35 [~ x] ~@34 [~@5 x ~@18] ~@43 x ~>").gain(0.18)

stack(oboe, acoustic_guitar_steel, bass, rim, kick, snare, hihat, open_hat, ride)

More by Jewel