Strudelify
I Love Your Smile cover art

Inner Child

I Love Your Smile

Shanice

KeyB♭ majorTempo93 bpm
0:00/0:00
// I Love Your Smile — Shanice
// 93 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 90 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano
const piano = note("<~@13 A ~@15 A ~@15 A ~@4 B C ~@9 A ~@15 A ~@12>".pickRestart({
  A: "~@20 [ab6,bb6] gb6 eb6 db6 bb5 [gb5,ab5] eb5 db5 [ab4,bb4] gb4 ~@2", B: "~@13 f4 g4 ~", C: "~@4 bb5@3 eb5@4 ~@5",
})).s("gm_piano").gain(0.3)

// bass · synth bass 2
const bass = note(`<
  ~@4 A B C D E F C G H I J K L M N G O P C Q H R C Q H R J K L M N G O P C Q H R C Q H R S T U V W X Y Z C Q H R C Q H
  R S T U V W X Y Z C Q H R C Q H R C Q H R C Q H AA@5
>`.pickRestart({
  A: "eb2 eb1 ~ eb1!2 ~ eb1!3 f1 eb1 ~@5", B: "eb2@2 eb1@2 ~@2 eb1@2 eb1@3 ~ eb1@2 eb1@2 eb1@3 ~ bb1@3 ~ bb2@6 ~@2",
  C: "eb1@3 ~ bb1@2 eb2@2 ~@4 eb1@3 ~@3 eb1@2 f1@3 ~ gb1@3 ~ g1@3 ~", D: "g1@15 ~@3 d1@2 eb1@3 ~ e1@3 ~ f1@3 ~",
  E: "f1@5 ~ g1@3 ~@3 ab1@2 ~@4 eb1@2 f1@3 ~ g1@3 ~ ab1@3 ~",
  F: "bb1@5 ~ bb1@2 ~@2 bb1@2 bb1@3 ~ bb1@2 bb1@2 c2@3 ~ eb2@5 ~@3",
  G: "g1@3 ~ g1@2 g2@2 ~@4 d1@3 ~@3 d1@2 eb1@3 ~ e1@3 ~ f1@3 ~",
  H: "f1@5 ~ g1@2 ~@4 ab1@3 ~@3 eb1@2 f1@3 ~ g1@3 ~ ab1@3 ~",
  I: "bb1@5 ~ bb1@2 ~@2 bb2@2 bb2@2 ~@4 bb1@2 eb2@2 ~@2 bb2@6 ~@2",
  J: "eb1@5 ~ eb2@2 ~@4 eb2@2 ~@4 eb1@2 f1@3 ~ gb1@3 ~ g1@3 ~",
  K: "g1@5 ~ g1@2 ~@4 d1@2 ~@4 d1@2 d1@3 ~ eb1@3 ~ f1@3 ~",
  L: "f1@5 ~ f2@2 ~@2 f1@2 f1@3 ~@3 f1@2 f1@2 c2@2 eb2@3 ~ c2@2 ab1@2",
  M: "bb1@5 ~ bb2@2 ~@2 bb1@2 bb1@5 ~ bb1@2 bb1@3 ~ bb2@2 ~@2 bb1@2 ~@2",
  N: "eb1@5 ~ eb2@2 ~@4 eb2@3 ~@3 eb1@2 f1@3 ~ gb1@3 ~ g1@2 f1@2",
  O: "f1@5 ~@5 f1@2 f1@3 ~@3 f1@2 f1@2 c2@2 eb2@3 ~ c2@2 a1@2",
  P: "bb1@3 ~ f2@2 bb2@2 ~@2 bb1@2 bb1@5 ~ bb1@2 bb1@3 ~ bb1@6 ~@2", Q: "g1@9 ~@3 d1@3 ~@3 d1@2 eb1@3 ~ e1@3 ~ f1@3 ~",
  R: "bb1@5 ~ bb1@2 ~@2 bb1@2 bb1@3 ~ bb1@2 bb1@2 c2@3 ~ eb2@7 ~",
  S: "c2@3 ~@3 c2@2 ~@4 eb2@3 ~@5 eb1@3 ~ c1@3 ~ eb1@3 ~", T: "f1@5 ~ g1@2 ~@4 ab1@3 ~@3 ab1@2 ab1@3 ~ f1@3 ~ g1@3 ~",
  U: "bb1@3 ~ bb1@2 bb1@2 ~@4 bb1@3 ~@5 bb1@3 ~@3 bb1@2 bb1@2 ab1@2", V: "g1@5 ~ f1@5 ~ g1@3 ~ g1@7 ~ bb1@7 ~",
  W: "c2@5 ~ c3@2 c3@2 eb1@5 ~@3 eb1@2 eb1@3 ~ c1@3 ~ eb1@3 ~",
  X: "f1@5 ~ g1@2 ~@4 ab1@3 ~@3 ab1@2 g1@3 ~ f1@3 ~ g1@3 ~",
  Y: "bb1@3 ~ f2@2 bb2@2 ~@4 bb1@3 ~@5 bb1@3 ~@3 bb1@2 bb1@2 ab1@2",
  Z: "ab1@3 ~ ab1@2 g1@2 bb1@3 ~@9 eb2@3 ~ bb2@6 ~@2", AA: "[f2@2 g2@2 bb2@55 ~ bb1@73 ~@27]/5",
})).s("gm_synth_bass_2").gain(0.54)

// chords · epiano1
const epiano1 = note(`<
  ~@6 A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D F G H I J K L M A B C D A B C D F
  G H I J K L M A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "[bb3,d4,f4]@5 ~ [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@11 [bb3,d4,f4] ~@7", B: "~@12 [bb3,d4,f4] ~@19",
  C: "[ab3,c4,eb4]@5 ~ [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@11 [ab3,c4,eb4] ~@7", // Ab
  D: "~@4 [ab3,c4,eb4] ~@7 [ab3,c4,eb4] ~@19", E: "~@4 [ab3,c4,eb4] ~@7 [ab3,c4,eb4] ~@3 bb4@4 eb5@4 bb5@6 ~@2",
  F: "~@7 [bb3,eb4,g4] ~@8", G: "~@9 [bb3,eb4,g4] ~@2 [ab3,c4,eb4] ~@3", H: "~@9 [bb3,d4,f4] ~@4 [f3,bb3,d4] ~",
  I: "~@13 [b3,eb4,f4] ~@2", J: "~@4 [eb4,g4,bb4]@3 [bb3,eb4,g4] ~@8", K: "~@4 [c4,eb4,f4] ~@2 [ab3,c4,eb4] ~@8",
  L: "[bb3,d4,f4] ~@8 [bb3,d4,f4] ~@6", M: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [d4,f4,bb4]@2 ~@10",
})).s("gm_epiano1").gain(0.49)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 ~@8 B C D@2 B C D@2 ~@8 B C
  D@2 B C D@2 B C D@2 B C D ~@5
>`.pickRestart({
  A: "~@12 bb3 ~@11 bb3 ~@7", B: "~@26 [g3,bb3,eb4] ~@5", C: "~@26 [a3,c4,f4] ~@5", D: "~@26 [ab3,c4,eb4] ~@5",
})).s("gm_electric_guitar_clean").gain(0.3)

// other · lead 5 charang
const lead_5_charang = note(`<
  ~@4
  [bb2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2]!49
  [bb2 ~@2 bb2!2 ~@2 bb2!2 ~@23]
  [bb2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2]!15
  [bb2 ~@2 bb2!2 ~@2 bb2!2 ~@23]
  [bb2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2!2 ~@2 bb2]!15
  ~@5
>`).s("gm_lead_5_charang").gain(0.25).pan(0.6)

// chords · pad poly
const pad_poly = note(`<
  ~@6 A B C D A B C D ~@8 A B C D A B C D ~@8 A B C D A B C D E F G H E I J K A B C D A B C D E F G H E L J K A B C D A
  B C D A B C D A B C M N@4
>`.pickRestart({
  A: "[g3,bb3,d4,f4]@15 ~", B: "[bb3,d4,f4,bb4]@7 ~ [c4,d4,f4,a4]@7 ~", C: "[c4,eb4,ab4]@15 ~", D: "[ab3,c4,eb4]@15 ~",
  E: "[bb3,eb4,g4]@7 ~", F: "[c4,eb4,g4]@7 ~", G: "[bb3,eb4,g4] ~ [bb3,d4,f4] ~ [bb3,d4,f4]@10 ~@2",
  H: "[bb3,eb4,g4] ~ [b3,eb4,f4] ~ [b3,eb4,f4]@10 ~@2", I: "[ab3,c4,eb4]@7 ~",
  J: "[c4,eb4,g4] ~ [bb3,d4,f4] ~ [bb3,d4,f4]@2 ~ [c4,eb4,g4]@2 ~ [bb3,d4,f4] ~ [bb3,d4,f4]@3 ~", // Cm Bb Cm Bb
  K: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [bb3,d4,f4]@3 ~@9", L: "[bb3,eb4,f4]@7 ~", M: "[ab3,c4,eb4]",
  N: "[~@3 [f2,bb2,f3,d4]@97 ~@28]/4", // Bb
})).s("gm_pad_poly").gain(0.35)

// other · alto sax
const alto_sax = note("<~@54 A B C D@2 E F@3 ~@2 G@4 ~@9 H I J K L M@2 N@4 ~>".pickRestart({
  A: "f5@15 ~", B: "d5@5 ~ c5 b4 bb4@2 ~ g4@2 bb4@2 ~ c5@8 a4@2 f4@2 c4@2 a3@2",
  C: "eb4@8 ~@12 eb4@3 ~ g4@4 ab4@2 g4@2",
  D: "[~ ab4 g4@2 ab4 g4 ~ ab4 bb4 g4 eb4 f4 eb4@2 eb4 f4@7 ~@2 d4 eb4 f4 g4 bb4@2 c5 bb4]/2",
  E: "d5@6 c5@10 a4@2 ~ bb4@2 c5@2 ~ a4@5 f4@2 ~",
  F: "[bb4@2 bb4@2 bb4@3 ~ g4@7 ~ ab4@2 ~@2 ab4@2 bb4@2 g4@6 eb4@4 f4@4 g4@2 ab4!2 ~ bb4 g4@2 f4@2 eb4@2 c4@2 bb3@4 d4@4 f4@2 eb4@28 ~@6]/3",
  G: "[~@16 eb5@2 f5@6 bb4@4 g4@2 bb4@4 c5@2 g4@2 g4@4 f4@2 eb4@10 eb4@4 eb4@18 eb4@12 eb4@2 f4@2 g4@8 f4@4 f4@6 g4@3 ab4 ~ g4 f4@2 ~@2 f4@8]/4",
  H: "~@9 d4@2 eb4 c4@2 ~@2", I: "~@6 d4 g4", J: "f4@2 eb4 f4@2 ~ eb4 f4@2 g4@2 ab4@2 g4@3",
  K: "~ ab4 ~ g4@2 ab4@2 g4@6 ~ f4 eb4", L: "f4@11 ~ eb4 f4 d4@2",
  M: "[d4 f4 bb4 ~ bb4@2 c5 a4@3 bb4 a4@2 g4 f4 ab4@3 g4 f4@5 ~@8]/2",
  N: "[~@4 c4@4 eb4@2 ~@2 f4@4 ~ g4@2 ~@2 bb4@4 ~ c5@9 ~@10 d4@5 c4@3 bb3@6 g3@2 f3@2 eb3@3 d3@6 f3@7 c3@10 bb2@33 ~@6]/4",
})).s("gm_alto_sax").gain(0.54)

// other · string ensemble 1
const string_ensemble_1 = note("<~@45 A B C D@2 B E F G ~@7 A B C D@2 B E F G ~@16 H@4>".pickRestart({
  A: "f4@7 ~ g4@7 ~ ab4@7 ~ bb4@7 ~", B: "g4@31 ~", C: "ab4@7 ~ bb4@7 ~ g4@7 ~ eb4@7 ~", D: "g4@3 ~ f4 ~@3 f4@23 ~",
  E: "f4@29 ~@3", F: "g4@3 ~ f4 ~@3 f4@5 ~ g4@5 ~ f4 ~@3 f4@7 ~", G: "ab4@3 ~ ab4 ~@3 bb4@3 ~@21",
  H: "[~@3 [f2,f3,bb3,d4,f4]@98 ~@27]/4", // Bb
})).s("gm_string_ensemble_1").gain(0.4)

// chords · brass section
const brass_section = note("<~@13 A ~@31 A B ~@3 B ~@6 C D ~@3 B ~@3 B ~@6 E F ~@2 E F ~@2 E F ~@7>".pickRestart({
  A: "[c4,eb4,bb4]", B: "[eb5,g5,c6]@3 ~@29", C: "~@18 g5 ~@7 g5 ~@5", D: "~@7 f5 ~@8", E: "~@18 bb5 ~@7 bb5 ~@5",
  F: "~@13 f5 ~@18",
})).s("gm_brass_section").gain(0.78)

// other · muted trumpet
const muted_trumpet = note("<~@53 [ab5@2 ~@2 ab5@2 ~@2 bb5@5 ~@19] ~@15 [ab5@2 ~@2 ab5@2 ~@2 bb5@5 ~@19] ~@20>")
  .s("gm_muted_trumpet").gain(0.45)

// other · vibraphone
const vibraphone = note(`<
  ~@5 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@3 B C D E B F G ~@4 A@2 ~@3 B C D E B F G ~@4 A@2 ~@6 A@2 ~@2 H@5
>`.pickRestart({
  A: "[~@4 bb5 eb6 bb6 f6@4 ~@5]/2", B: "g4@15 ~", C: "ab4 bb4 g4 eb4", D: "g4@2 f4 ~ f4@12", E: "g4@2 f4 ~ f4@11 ~",
  F: "f4@8 g4@3 eb4@5", G: "g4@2 f4 ~ f4@3 g4@3 f4 ~ f4@4", H: "[~@17 bb5@4 eb6@4 ~ bb6@4 f6@103 ~@27]/5",
})).s("gm_vibraphone").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@4 A B C@2 D E C@2 F G@40 H G@15 H G@15 ~@5>".pickRestart({
  A: "x ~@3 x ~@2 x!2 ~@7", B: "x", C: "x ~@2 x!3 ~@2", D: "x ~@2 x ~@2 x ~ x ~ x ~@5", E: "x ~@2 x ~@3 x!5 ~@4",
  F: "x ~@2 x ~@2 x ~ x ~ x ~@3 x ~", G: "x ~@2 x ~@4 x ~ x ~@5", H: "x!3 ~@5",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!49 [~ x ~@2] [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!15 ~@5>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!49
  [x ~@2 x!2 ~@2 x!2 ~@23]
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!15
  [x ~@2 x!2 ~@2 x!2 ~@23]
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!15
  ~@5
>`).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@7 x] ~@68>").gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 [~@11 x ~@2 x ~] ~@3 [~@13 x ~@2] ~@68>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@17 [~@13 x ~@2] ~@72>").gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!49
  [x ~@2 x!2 ~@2 x!2 ~@23]
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!15
  [x ~@2 x!2 ~@2 x!2 ~@23]
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!15
  ~@5
>`).gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  ~@22 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@4 x ~@85>").gain(0.45)

stack(
  piano, bass, epiano1, electric_guitar_clean, lead_5_charang, pad_poly, alto_sax, string_ensemble_1, brass_section,
  muted_trumpet, vibraphone, kick, snare, hihat, low_tom, mid_tom, high_tom, tambourine, crash, ride
)