Strudelify

You're In My Heart

Rod Stewart

KeyD majorTempo108 bpm
0:00/0:00
// You're In My Heart — Rod Stewart
// 108 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/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 · percussive organ
const percussive_organ = note("<~@47 A@6 B C ~@16 A@6 B C ~@16 D@6 E F A@6 B C G@2>".pickRestart({
  A: "[[c5,e5]@24 [b4,d5]@23 ~ [c5,e5]@24 [b4,d5]@23 ~ [c5,e5]@23 ~ [b4,d5]@10 ~@2 [a4,c5,e5]@4 ~@2 [g4,b4,d5]@4 ~@2, g4@65 ~@7]/6", // C Bm C Bm C Bm Am G
  B: "[a4,c5,e5]@11 ~", C: "[g4,b4,d5]@7 ~@5 [a4,c#5,e5]@9 ~@3",
  D: "[[c5,e5]@24 [b4,d5]@23 ~ [c5,e5]@24 [b4,d5]@23 ~ [c5,e5]@23 ~ [b4,d5]@10 ~@2 [a4,c5,e5]@3 ~@3 [g4,b4,d5]@4 ~@2, g4@65 ~@7]/6", // C Bm C Bm C Bm Am G
  E: "[a4,c5,e5]@23 ~", F: "~ f5, [g4,b4,d5]", G: "[[f#4,a4,d5]@13 ~@11]/2",
})).s("gm_percussive_organ").gain(0.08).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@47 A@6 B C ~@8 D E F G D E H@2 A@6 B C ~@8 D E F G D E H@2 I@6 J K A@6 B C L@2
>`.pickRestart({
  A: "[[c4,e4]@24 [b3,d4]@23 ~ [c4,e4]@24 [b3,d4]@23 ~ [c4,e4]@23 ~ [b3,d4]@10 ~@2 [a3,c4,e4]@4 ~@2 [g3,b3,d4]@4 ~@2, g3@65 ~@7]/6", // C Bm C Bm C Bm Am G
  B: "[a3,c4,e4]@11 ~", C: "[g3,b3,d4]@7 ~@5 [a3,c#4,e4]@9 ~@3", D: "[a4,d5]@23 ~", E: "[g#4,c#5]@23 ~",
  F: "[f#4,b4]@11 ~", G: "[e4,a4]@11 ~", H: "[b4@22 ~@2 a4@11 ~ [g4,b4]@12, f#4@35 ~@13, ~ d5]/2",
  I: "[[c4,e4]@24 [b3,d4]@23 ~ [c4,e4]@24 [b3,d4]@23 ~ [c4,e4]@23 ~ [b3,d4]@10 ~@2 [a3,c4,e4]@3 ~@3 [g3,b3,d4]@4 ~@2, g3@65 ~@7]/6", // C Bm C Bm C Bm Am G
  J: "[a3,c4,e4]@23 ~", K: "~ f4, [g3,b3,d4]", L: "[[f#3,a3,d4]@13 ~@11]/2",
})).s("gm_string_ensemble_1").gain(0.1).pan(0.3)

// other · violin
const violin = note("<~@23 A B C D A B E F ~@82>".pickRestart({
  A: "d5@8 c#5 ~ d5 ~", B: "c#5@2 a4@8 e4 f#4", C: "e4@15 ~ e4@3 ~ d4@2 ~@2",
  D: "c#4@4 d4@2 ~@2 e4@2 ~@2 f#4@3 ~ g#4@2 ~@2 a4 ~@3", E: "e4@20 d4@3 ~",
  F: "c#4@3 ~ d4@3 ~ e4@3 ~ f#4@3 ~ g#4@3 ~ a4@3 ~",
})).s("gm_violin").gain(0.18).pan(0.3)

// chords · epiano1
const epiano1 = note(`<
  ~@5 A B C D E F G H I J K L M N O P M Q R@2 S T U@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO@5 AP AQ X Y
  Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO@5 AP AQ X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO@5 AR AS AN
  AT@5 AP AQ AU@2
>`.pickRestart({
  A: "~@6 [f#4,a4]@3 ~@3 [f#4,a4]@2 ~@8 d4@2, d3, ~@2 d4@9 ~, ~@2 [f#4,a4]", // F#m
  B: "~@3 [f#4,a4]@2 d4 [f#4,a4] ~ [d4,f#4,a4]@4, d3, ~@4 d4@5 ~@15", C: "~@10 d5@13 ~, [d3,d4,f#4], a4@11 ~",
  D: "~@6 [e4,g#4] ~, c#3@23 ~, ~@2 c#4@4 c#5@5 ~, ~@6 e4@10 c#4@7 ~, ~@10 g#4@7 ~@7", // E
  E: "~@10 [d4,f#4]@6 ~@2 [d4,f#4]@4 b3 ~, b2, ~@6 b3@9 ~ b3@5 ~@3", // D
  F: "[c#4,e4]@9 ~@9 a3@2 ~@4, a2, a3@7 ~@3 c#4@10 ~@4, ~@5 a3 e4@4 ~@2, ~@6 a4@5 ~", // C#m
  G: "d4@9 ~@9 [f#4,a4]@2 ~@4, d3, [f#4,a4]@2 ~, ~@5 d4@6 ~", H: "~@10 c#5@11 ~@3, c#3, [c#4,g#4]@7 ~, e4@19 ~@5",
  I: "~@10 a4@8 [d4,f#4,a4]@3 ~@3, b2, b3@11 ~, [d4,f#4]@3 ~", J: "~@6 a4 ~, a2, [a3,c#4,e4]@5 ~",
  K: "~@5 d5@5 ~@2, d3, [d4,f#4]@11 ~, a4@5 ~", L: "~@10 c#5@11 ~@3, c#3@23 ~, [c#4,e4,g#4]@5 ~",
  M: "~@10 a4@11 ~@3, b2, [b3,d4,f#4]@11 ~", N: "~@18 c#4@2 a4 ~@3, a2, e4@7 ~, c#4@4 a3 ~, a3@12 a4@7 ~@5",
  O: "~@10 d5@6 d4@2 [f#4,a4,d5]@3 ~@3, d3, [f#4,a4]@17 ~@7, d4@5 ~@3", // D F#m
  P: "~@5 c#5@5 ~@2, c#3@23 ~, [c#4,g#4]@7 ~, e4@19 ~@5", Q: "[a2,a3,c#4,e4]@11 ~",
  R: "[[f#4,a4]@6 ~@2 [c#4,e4,g#4]@7 ~, d3@11 c#3@12 ~, d4@5 ~@7]/2", // F#m C#m
  S: "~@10 a4@11 ~@3, [b2,b3]@23 ~, [d4,f#4]@19 ~@5", // B D
  T: "[a2,a3,c#4,e4]@11 ~ [a3,c#4,e4] ~@3 [b2,b3,d4] ~@3 [c#3,c#4,g#4]@2 ~@2, ~@6 a2 ~ f#4 ~@3", // A Bm C#5
  U: "[[d4,f#4,a4]@19 ~@3 [c#3,g#4]@23 ~@3, d3@22 [c#4,e4]@21 ~@5]/2", V: "~@6 a4@5 ~, [b2,b3]@23 ~, [d4,f#4]@7 ~",
  W: "[a2,a3,c#4,e4]@11 ~ [c#4,e4]@2 ~@2 [b3,d4] ~@3 [c#4,e4,g#4]@2 ~@2, ~@12 a3 ~@3 f#4@2 ~@6", // A C#m Bm C#m
  X: "~@16 a4@4 f#4 ~@3, d3, d4@5 ~, ~@8 f#4@7 ~@9, ~@5 a4 d5@4 ~@2",
  Y: "~@6 [c#4,e4] ~, c#3, g#4@7 ~, [c#4,e4]@3 ~, ~@10 c#5@11 ~@3", // C#m
  Z: "~@6 [d4,f#4] ~, b2@23 ~, [d4,f#4]@2 ~, b3@14 ~@2 b3@5 ~@3, ~@5 a4@6 ~", // D
  AA: "c#4@10 c#4 ~ [a2,c#4,e4]@3 ~ [b2,f#4]@2 ~@2 [c#3,c#4,e4,g#4]@2 ~@2, [a2,a3,e4]@12 a3 ~@3 [b3,d4] ~@7", // A B5 C#m A5 Bm
  AB: "[f#4,a4]@5 ~ f#4 ~, [d3,d4]@23 ~, ~@16 a4@5 ~@3", // F#m D
  AC: "~@10 c#5@6 ~@2 c#5@4 c#4 ~, [c#3,g#4]@23 ~, c#4@5 ~, e4@7 ~ e4@2 ~@2", // C#5
  AD: "~@18 [b3,d4]@5 ~, [b2,f#4]@23 ~, [b3,d4]@17 ~@7, ~@10 a4@13 ~", // Bm B5 Bm
  AE: "[a2,a3,c#4,e4]@11 ~ [a2,c#4,e4]@3 ~ [b2,f#4]@2 ~@2 [c#3,c#4,g#4]@2 ~@2, ~@12 a3 ~@3 [b3,d4] ~@3 e4 ~@3", // A B5 C#5 Bm
  AF: "~@10 d5@11 ~@3, d3@23 ~, [d4,f#4]@7 ~, a4@19 ~@5", AG: "~@10 c#5@11 ~@3, c#3@23 ~, [c#4,e4,g#4]@7 ~",
  AH: "~@5 a4@6 ~, [b2,b3,d4,f#4]@23 ~", // Bm
  AI: "[a2,a3,c#4,e4]@11 ~ [a2,a3,c#4,e4]@2 ~@2 [b2,f#4]@2 ~@2 [c#3,c#4,g#4]@2 ~@2, ~@16 [b3,d4] ~@3 e4 ~@3", // A B5 C#5 Bm
  AJ: "~@10 d5@11 ~@3, d3@23 ~, [d4,f#4,a4]@7 ~", AK: "[e4,g#4]@17 ~ [e4,g#4]@3 ~@3, [c#3,c#4]@23 ~",
  AL: "~@5 a4@3 ~ [d4,f#4]@2 ~, b2@23 ~, [d4,f#4]@17 ~ a4@2 ~@4, b3@15 ~ b3@5 ~@3", // D
  AM: "[d3,d4] [g2,b3,d4,g4], [a3,f#4]@5 ~@7", // D G D
  AN: "[g3,c4,e4]@6 ~@4 [c4,e4]@6 g3@2 [c4,e4]@4 g3 ~, ~@6 g3@8 ~@4 g3@3 ~@3", // C
  AO: "[g3@5 ~ g3@4 g4@6 ~@2 [b3,d4,g4]@4 ~@2 [c4,e4]@6 ~@4 [c4,e4]@6 g3@2 [c4,e4]@4 ~@12 g4@6 ~@2 [b3,d4,g4]@4 ~@2 [c4,e4]@6 ~@4 [c4,e4]@6 ~@2 [c4,e4]@4 ~@8 g3@3 ~@3 [a3,c4,e4]@3 ~@3 [g3,b3,d4]@3 ~@3, [b3,d4]@16 ~@32 [b3,d4]@17 ~@7 d4 ~@23 [b3,d4]@10 ~@14, ~@10 g3@3 ~@3 g3@4 ~@2 g3@6 ~@2 g3@9 ~@3 g3@11 ~ g3@9 ~ g3@5 ~ g3@15 ~@3 g3@4 ~@2 g3@6 ~@20]/5", // G C G C Am G Bm
  AP: "~@10 a4@11 ~@3, a3@7 ~, [c4,e4]@19 ~@5", AQ: "[g3,b3,d4]@7 ~@5 [a3,c#4,e4]@9 ~@3",
  AR: "~@5 g4@6 ~, [a3,c4,e4]@11 ~", AS: "[g3,b3,d4]@11 ~ [g3,b3,d4,f4]@12",
  AT: "[g3@5 ~ g3@3 ~ g4@6 ~@2 [b3,d4,g4]@4 ~@2 [c4,e4]@6 ~@4 [c4,e4]@6 g3@2 [c4,e4]@4 ~@12 g4@6 ~@2 [b3,d4,g4]@4 ~@2 [c4,e4]@6 ~@4 [c4,e4]@6 ~@2 [c4,e4]@4 ~@8 g3@3 ~@3 [a3,c4,e4]@3 ~@3 [g3,b3,d4]@3 ~@3, [b3,d4]@16 ~@32 [b3,d4]@17 ~@7 d4 ~@23 [b3,d4]@10 ~@14, ~@10 g3@3 ~@3 g3@4 ~@2 g3@6 ~@2 g3@9 ~@3 g3@11 ~ g3@9 ~ g3@5 ~ g3@15 ~@3 g3@4 ~@2 g3@6 ~@20]/5", // G C G C Am G Bm
  AU: "[d4 c#5@18 ~@5, [f#4,a4]@3 ~, ~@2 d4@33 ~@13]/2", // F#m
})).s("gm_epiano1").gain(0.25)

// bass · acoustic bass
const bass = note(`<
  ~@23 A B C D E B F G H I J G H K J L M K J G H K N O P Q R S T U V W H I J G H K J X M K J G H K N O P Q R S T U V W H
  I J G H K J L M K J G H K N O P Q R S T U V Y@2 Q R S T U V W Z@2
>`.pickRestart({
  A: "d3@23 ~", B: "c#3@23 ~", C: "b2@20 a2 ~@3", D: "c#2@3 ~ d2@3 ~ e2@2 ~@2 f#2@2 ~@2 g#2@2 ~@2 a2@2 ~@2",
  E: "d3@11 ~", F: "b2", G: "a2@11 ~ a2@3 ~ b2@2 ~@2 c#3@2 ~@2", H: "d3@21 ~ d3 ~", I: "c#3@21 ~ c#3@2",
  J: "b2@21 ~ b2@2", K: "c#3@21 ~ c#3 ~", L: "a2@12 a3@9 ~ a2@2", M: "d3@20 ~@2 d3 ~", N: "b2@23 ~",
  O: "d2@5 ~ d2@6 g2@5 ~ g2@5 ~", P: "c2@9 ~ c2@2 e2@5 ~ g2@5 ~", Q: "g2@9 ~ g2@2 b2@5 ~ d3@5 ~",
  R: "c2@9 ~ e2@2 g2@6 e2@5 ~", S: "g2@9 ~ g2@2 b2@6 d3@5 ~", T: "c2@9 ~ c2@2 e2@6 g2@5 ~",
  U: "g2@8 ~@2 g2@2 a2@3 ~@3 g2@4 ~@2", V: "a2@23 ~", W: "g2@3 ~ a2@3 ~", X: "a2@12 a1@9 ~ a2@2",
  Y: "[~@24 c2@9 ~ c2@2 e2@5 ~ g2@5 ~, g2@3 ~ e2@3 ~@9, ~@2 f2@3 ~ d2@3 ~@7]/2", Z: "[d2@5 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@46 A B@5 C B D ~@15 A B@5 C B D B@15 D B@5 C B D B@5 C B D A ~>".pickRestart({
  A: "x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x!2 ~@2 x ~@2", D: "x!2",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@112>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@46 A B@7 ~@16 A B@7 ~ B@15 A B@7 C B@7 ~@3>".pickRestart({
  A: "~ x!4 ~@7", B: "~ x ~ x", C: "x!6 ~@6",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@47 A@7 ~@17 A@7 ~@17 A@7 ~ A@7 ~@3>".pickRestart({
  A: "~ x ~ x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ A@25 B A@20 ~@8 A@16 ~@8 C@15 D ~@18>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x ~ x!2 ~ x!2 ~ x!2 ~ x", D: "x!2 ~ x",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@46 A ~@23 A ~@23 A ~@7 B ~@10>".pickRestart({
  A: "~@10 x!2", B: "~@11 x",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~ A ~@20 B ~@63 C ~@7 B ~@18>".pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@46 A ~@23 A ~@23 A ~@7 B ~@10>".pickRestart({
  A: "~@8 x!2 ~@2", B: "~@9 x!2 ~",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@46 A@2 ~@6 B ~@15 A@2 ~@7 A ~@14 A@2 ~@6 A@2 ~@6 B A ~>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@46 A ~@23 A ~@23 A ~@7 B ~@10>".pickRestart({
  A: "~@5 x!3 ~@4", B: "~@6 x!3 ~@3",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~@23 A ~@2 B A ~@18 C D E@3 F E@2 ~@16 C D E@3 F E@2 G ~@16 D E@3 F E@2 G D E@3 F E@2 ~@3
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "~@3 x", D: "~@3 x ~ x!2 ~ x!2 ~ x", E: "x ~ x!2 ~ x!2 ~ x!2 ~ x",
  F: "x ~@2 x ~ x!2 ~ x!2 ~ x", G: "x!2",
})).gain(0.25)

stack(
  percussive_organ, string_ensemble_1, violin, epiano1, bass, kick, rim, snare, clap, hihat, low_tom, open_hat, mid_tom,
  crash, high_tom, ride
)

More by Rod Stewart