Strudelify
Picture of You cover art

1997 · A Different Beat

Picture of You

Boyzone

KeyC majorTempo115 bpm
0:00/0:00
// Picture of You — Boyzone
// 115 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · brass section
const brass_section = note(`<
  ~ A@2 B@2 C@2 D@2 ~@7 E@2 ~@7 F G H I J@2 K@2 L@2 M@2 ~@12 F G H I J@2 K@2 L@2 M@2 ~@8 F G H I J@2 K@2 L@2 M@2 J@2 K@2
  L@2 M@2 J@2 K@2 L@2 M@2 ~
>`.pickRestart({
  A: "[[e4,e5] [d4,d5] [c4,c5] [d4,d5] [e4,e5]@28]/2", // E D C D E
  B: "[[d4,d5] [c4,c5] [a#3,a#4] [c4,c5] [d4,d5]@7 ~ [e4,e5]@2 [c4,c5]@17 ~, ~@12 [d4,d5] ~@19]/2", // D C A# C D E C D
  C: "[[e4,e5] [d4,d5] [c4,c5] [d4,d5] [e4,e5]@24 [c4,c5]@2 [f4,f5] ~]/2", // E D C D E C F
  D: "[[g4,g5]@3 ~ [g4,g5]@2 [e4,e5]@6 [a3,a4]@2 [c4,c5]@17 ~]/2", // G E A C
  E: "[~@2 [e4,e5] ~ [c4,c5] [a3,a4] ~ [g3,g4]@6 ~@3]/2", F: "[d3,f3,a3,c4]!5 ~@9 [a3,c4,e4] ~",
  G: "~@2 [a3,c4,e4] ~@3 [g3,b3,d4]@9 ~", H: "[d3,f3,a3,c4]!5 ~@9 [g4,a4,c5,d5,g5] ~",
  I: "~@2 [g4,a4,c5,d5,g5] ~@3 [g4,c5,d5,g5]@10", J: "[e5 d5 c5 d5 e5@28]/2",
  K: "[d5 c5 a#4 c5 d5@7 ~ e5@2 c5@17 ~, ~@12 d5 ~@19]/2", L: "[e5 d5 c5 d5 e5@24 c5@2 f5 ~]/2",
  M: "[g5@3 ~ g5@2 e5@6 a4@2 c5@17 ~]/2",
})).s("gm_brass_section").gain(0.4)

// chords · piano · "Accoustic Piano"
const piano = note("<~ A@24 B C D E A@20 B C D E A@16 B C D E A@24 ~>".pickRestart({
  A: "[[g3,c4,e4]@9 ~ [g3,c4,e4]@3 ~ [g3,b3,d4]@11 ~ [g3,b3,d4]@3 ~ [f3,a#3,d4]@11 ~ [f3,a#3,d4]@3 ~ [f3,a3,c4]@9 ~ [f3,a3,c4] ~ [g3,b3,d4]@5 ~]/4", // C G A# F G
  B: "[d3,f3,a3,c4]!5 ~@9 [a3,c4,e4] ~", C: "~@2 [a3,c4,e4] ~@3 [g3,b3,d4]@9 ~",
  D: "[d3,f3,a3,c4]!5 ~@9 [g4,a4,c5,d5,g5] ~", E: "~@2 [g4,a4,c5,d5,g5] ~@3 [g4,c5,d5,g5]@10",
})).s("gm_piano").gain(0.29)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 B@2 C@2 F@2 G H I J A@2 B@2 C@2 D@2 A@2 B@2 E@2 B@2 C@2 F@2 G H I J E@2 B@2 C@2
  D@2 A@2 B@2 C@2 D@2 G H I J A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~
>`.pickRestart({
  A: "[c2@4 c3@3 c2 a2@4 g2@2 b1@6 b2@3 b1 b2 ~ a2@2 b2@2 a2@2]/2",
  B: "[g1@4 g2@3 g1 g2 ~ g2@2 g1@2 f2@5 ~ f2@3 f1 f2 ~ f2@2 g2 ~ g2@2]/2",
  C: "[c2@4 c3@3 c2 a2@4 g2@2 b1@6 b2@3 b1 b2 ~ a2 ~ b2@2 a2@2]/2",
  D: "[g1@4 g2@3 g1 g2 ~ g2@2 g1@2 f2@5 ~ f2@3 f1 f2 ~ f2@2 g2@2 g2@2]/2",
  E: "[c2@4 c3@3 c2 a2@3 ~ g2@2 b1@6 b2@3 b1 b2 ~ a2@2 b2@2 a2@2]/2",
  F: "[g1@4 g2@3 g1 g2 ~ g2@2 g1@2 f2@5 ~ f2@3 f1 f2 ~ f2@2 f1@2 e2@2]/2", G: "d2!5 ~@9 a2 ~",
  H: "~@2 a2@2 ~@2 g2@4 g1@2 g2@3 ~", I: "d2!5 ~@9 g2 ~", J: "~ g2 ~ g2@2 g1 g2@2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@2 B@2 A@2 C@2 ~@20 A@2 B@2 A@2 C@2 D E@3 ~@12 A@2 B@2 A@2 C@2 ~@12 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2
  ~
>`.pickRestart({
  A: "[[c5,c6]@5 [a5,a6]@2 [g5,g6]@9]/2", B: "[[f5,f6]@10 [g5,g6]@4 [c5,c6]@17 ~]/2",
  C: "[[a#5,a#6]@5 [a5,a6]@2 [f5,f6]@9]/2", D: "~@4 c5@4 e5@3 ~ f5@4", E: "[g5@12 c5@2 c6@14 a5@2 g5@17 ~]/3",
})).s("gm_string_ensemble_1").gain(0.22)

// chords · electric guitar muted · "Guitar Rythm"
const electric_guitar_muted = note(`<
  ~ A B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@4 A B A@3 B A@3 B A ~ A B A@3 B A@2 ~@4 A B A@3 B A@3 B A@3 B A@2 ~@4 A B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~
>`.pickRestart({
  A: "~@4 [c4,e4,g4] ~@11", B: "~@4 [g4,b4,d5] ~@11",
})).s("gm_electric_guitar_muted").gain(0.4)

// other · tuba · "Tuba solo"
const tuba = note("<~@61 A@2 B@2 C@2 D E ~@29>".pickRestart({
  A: "[~@6 d4@2 e4@2 a4 ~@3 g4@13 ~ f4@2 e4@2]/2", B: "[f4@6 e4@2 f4@2 g4@4 c4@17 ~]/2",
  C: "[~@6 d4@2 e4@2 a4 ~@3 g4@12 ~@2 g4 ~ a4@2]/2", D: "a#4@3 a4 a#4 c5 ~ a4", E: "~@2 f4@11 ~@3",
})).s("gm_tuba").gain(0.32)

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

// drums · snare
const snare = s("sd").struct("<A B@7 C B@7 C B@11 C B@11 D B@11 C B@7 C B@11 C B@7 C B@7 C B@8 ~>".pickRestart({
  A: "~@10 x!4 ~@2", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~@12 x!2 ~@2",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~@2]!39 ~ [~ x ~@2]!56 ~>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!96 ~>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<[~ x] ~@27 [~@7 x] ~@23 [~@7 x] ~@19 [~@7 x] ~@25>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@4 x ~@2 x] ~@97>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x]!96 ~>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@7 A ~@11 A ~@7 A ~ B ~ A ~@11 A ~@7 A ~@11 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!39 ~ [~ x ~ x]!56 ~>").gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<~ [x!4]!96 ~>").gain(0.45)

stack(
  brass_section, piano, bass, string_ensemble_1, electric_guitar_muted, tuba, kick, snare, clap, hihat, low_tom,
  mid_tom, open_hat, crash, tambourine, cowbell
)

More by Boyzone