Strudelify
Wishing I Was There cover art

1997 · Left Of The Middle

Wishing I Was There

Natalie Imbruglia

KeyB♭ majorTempo92 bpm
0:00/0:00
// Wishing I Was There — Natalie Imbruglia
// 92 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 11 "synth.bass" named as a bass, played on synth bass 1 (its contrabass patch is not one)
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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.

// bass · slap bass 2 · "bass"
const bass = note(`<
  ~ A B C A@2 B C D E F G E@2 F G E H I J@2 H I K L A B C A@2 B C M ~ E F G E@2 F G E H I J@2 H I K L A B C A@2 B C A@2
  B C A@2 B C N ~@8 A B C A@2 B C O A B C A@2 B C P Q@8 R ~@2
>`.pickRestart({
  A: "f2@3 f2@3 f2@3 f2 a2 c3 f3@4", B: "eb2@3 eb2@3 eb2@3 eb2 g2 bb2 f3@4", C: "bb1@3 bb1@3 bb1@3 bb1 f2 bb2 f3@4",
  D: "f2@3 f2@3 f2@3 f2 a2 c3 f3@3 ~", E: "f2@2 ~@2 a2@2 ~ c3 ~ c3 f3 ~ f3@3 ~",
  F: "eb2@2 ~@2 g2@2 ~ bb2 ~ bb2 f3 ~ f3@3 ~", G: "bb1@2 ~@2 f2@2 ~ bb2 ~ bb2 f3 ~ f3@3 ~",
  H: "bb2@3 ~ bb2 ~ bb2@3 ~ bb2 ~ bb2@2 c3 ~", I: "d3@3 ~ d3 ~ d3@3 ~ d3 ~ d3@3 ~", J: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~",
  K: "eb3@3 ~ eb3 ~ eb3@3 ~ eb3 ~ eb3@3 ~", L: "bb3 ~ bb2 ~@5", M: "f2@3 f2@3 f2@3 f2 a2 c3 f3@2 f2!2",
  N: "f2@3 f2@9 ~@4", O: "f2@3 f2@3 f2@3 db2@3 c2@2 bb1@2", P: "f2@3 f2@3 f2@4 f2@4 c3 ~",
  Q: "f2@2 ~ f2@2 ~ f2@3 ~ f2 ~ f2@4", R: "f2@2 ~ f2@2 ~@11",
})).s("gm_slap_bass_2").gain(0.48).pan(0.4)

// other · electric guitar clean · "electric"
const electric_guitar_clean = note(`<
  ~ A B@2 A@2 B@2 C@2 ~@7 D E F ~ D G H ~ A B@2 A@2 B@2 I ~@9 D E F ~ D G H ~ A B@2 A@2 B J I K L M@2 K L M@2 ~@8 K L
  N@2 K L N@2 K L N@2 K L N@2 ~@4 O P Q P R ~@2
>`.pickRestart({
  A: "a3@3 f4@3 eb4@4 a3@2 f4@2 eb4@2", B: "bb3@3 f4@3 eb4@4 bb3@2 f4@2 eb4@2", C: "[a3@3 f4@3 eb4@4 a3@2 f4@7 ~@13]/2",
  D: "[f3,bb3,d4]@13 ~@3", E: "~ a4@13 ~@2, [d4,f4]@13 ~@3", F: "~ c4@13 ~@2, [f3,a3]@13 ~@3", G: "[d4,f4,a4]@13 ~@3",
  H: "~ bb4@13 ~@2, [eb4,g4]@13 ~@3", I: "a3@3 f4@3 eb4@4 a3@2 f4@2 ~@2", J: "bb3@3 f4@3 eb4@4 f4@2 eb4@2 bb3@2",
  K: "g4@9 f4@7", L: "g4@7 a4 g4@2 f4@6", M: "[g4@5 f4 a4 f4@9]/2", N: "[g4@7 f4 g4@2 f4@2 a4@2 f4@18]/2",
  O: "c4@3 c4@2 ~ c4@4 c4 ~ c4 c4@3", P: "db4@3 db4@2 ~ db4@4 db4 ~ db4 db4@3", Q: "d4@3 d4@2 ~ d4@4 d4 ~ d4 d4@3",
  R: "c4@3 c4@2 ~ c4@4 c4 ~@5",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0)

// chords · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D A B C E F G H F@2 G H F C I J K C I L M A B C D A B C A N F G H F@2 G H F C I J K C I L M A B C D A B C A@2
  B C A@2 B C A O P Q R S T U V A B C A@2 B C A@2 B C A@2 B C W X Y Z AA AB Y Z AA AC ~@2
>`.pickRestart({
  A: "[a3,c4,f4]@2 ~ [a3,c4,f4]!2 [a3,c4,f4]@2 ~@3 [a3,c4,f4]!2 [a3,c4,f4]@2 [a3,c4,f4]!2", // F
  B: "[g3,bb3,f4]@2 ~ [g3,bb3,f4]!2 [g3,bb3,f4]@2 ~@3 [g3,bb3,f4]!2 [g3,bb3,f4]@2 [g3,bb3,f4]!2", // Gm7
  C: "[bb3,d4,f4]@2 ~ [bb3,d4,f4]!2 [bb3,d4,f4]@2 ~@3 [bb3,d4,f4]!2 [bb3,d4,f4]@2 [bb3,d4,f4]!2", // Bb
  D: "[a3,c4,f4]!3 [a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 [a3,c4,f4]!3 [a3,c4,f4]@2 [a3,c4,f4]!2", // F
  E: "[a3,c4,f4]@2 ~ [a3,c4,f4]!2 [a3,c4,f4]@2 ~@3 [a3,c4,f4]!2 [a3,c4,f4]@2 ~@2", // F
  F: "e4 f4@2 [f3,c4,f4] ~@2 e4 f4@2 [f3,c4,f4] ~@2 [f3,c4,f4]!2 ~@2, [f3,c4]@3 ~@3 [f3,c4]@3 ~@7", // F5
  G: "d4 eb4@2 [f3,bb3,eb4] ~@2 d4 eb4@2 [f3,bb3,eb4] ~@2 [f3,bb3,eb4]!2 ~@2, [f3,bb3]@3 ~@3 [f3,bb3]@3 ~@7", // Ebsus2 Bb5
  H: "a3 bb3@2 [f3,bb3] ~@2 a3 bb3@2 [f3,bb3] ~@2 [f3,bb3]!2 ~@2, f3@3 ~@3 f3@3 ~@7", // Bb5
  I: "[d4,f4,a4]@2 ~ [d4,f4,a4]!2 [d4,f4,a4]@2 ~@3 [d4,f4,a4]!2 [d4,f4,a4]@2 [d4,f4,a4]!2", // Dm
  J: "[a3,c4,f4]@2 [a3,c4,f4]!3 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]", // F
  K: "[a3,c4,f4]@2 [a3,c4,f4]!3 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]!3 [a3,c4,f4]@2 [a3,c4,f4]!2", // F
  L: "[eb4,g4,bb4]@2 [eb4,g4,bb4]!3 ~ [eb4,g4,bb4]@2 ~ [eb4,g4,bb4]!3 [eb4,g4,bb4]@2 [eb4,g4,bb4]!2", // Eb
  M: "[d4,f4,bb4]!4 [d4,f4,bb4]@2 ~@10", N: "[a3,c4,f4] ~@15", O: "[a3,c4,f4]@3 [f3,c4,f4]@12 ~",
  P: "[bb3,eb4]@3 [bb3,f4]@12 ~, f3@7 ~", Q: "f3@3 [f3,f4]@11 ~@2, bb3@15 ~", R: "~ [f3,a3]@15, [c4,f4]@15 ~",
  S: "[a3,c4,f4]@3 [f3,c4,f4]@3 [f3,c4,f4]@4 [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]@2", // F F5
  T: "[f3,bb3,eb4]@3 [bb3,eb4,f4]@3 [bb3,eb4,f4]@4 [bb3,eb4]@2 [bb3,eb4]@2 [bb3,eb4]@2", // Ebsus2 Bbsus4 Eb5
  U: "f3@3 [f3,f4]@3 [f3,f4]@4 [f3,f4]@5 ~, bb3@7 ~", V: "~ f3@15, [a3,c4,f4]@15 ~",
  W: "[a3,c4,f4]@2 ~ [a3,c4,f4]!2 [a3,c4,f4]@2 ~@3 [a3,c4,f4]@2 ~ [a3,c4,f4]!3", // F
  X: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~ [f3,a3,c4]@4 [f3,a3,c4] ~ [f3,a3,c4]@3 ~", // F
  Y: "[f3,a3,db4]@3 [f3,a3,db4]@2 ~ [f3,a3,db4]@4 [f3,a3,db4] ~ [f3,a3,db4] [f3,a3,db4]@2 ~", // Faug
  Z: "[f3,a3,d4]@3 [f3,a3,d4]@2 ~ [f3,a3,d4]@4 [f3,a3,d4] ~ [f3,a3,d4]!4", // Dm
  AA: "[f3,a3,db4]@3 [f3,a3,db4]@2 ~ [f3,a3,db4]@4 [f3,a3,db4] ~ [f3,a3,db4] [f3,a3,db4]@3", // Faug
  AB: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~ [f3,a3,c4]@4 [f3,a3,c4] ~ [f3,a3,c4] [f3,a3,c4]@3", // F
  AC: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~@11", // F
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.1)

// other · pad poly · "wheel.1"
const pad_poly = note("<[~@7 f4@9] ~@32 [~@7 f4@9] ~@67>").s("gm_pad_poly").gain(0.29).pan(1)

// other · acoustic guitar steel · "guitar2"
const acoustic_guitar_steel_2 = note(`<
  ~ A B@2 A@2 B@2 C@2 ~@15 A B@2 A@2 B@2 A ~@17 A B@2 A@2 B D A@2 B D A@2 B@2 E ~@8 A B D A@2 B@2 E A B D A@2 B@2 E ~@11
>`.pickRestart({
  A: "a3@3 f4@3 eb4@4 a3@2 f4@2 eb4@2", B: "bb3@3 f4@3 eb4@4 bb3@2 f4@2 eb4@2", C: "[a3@3 f4@3 eb4@4 a3@2 f4@7 ~@13]/2",
  D: "bb3@3 f4@3 eb4@4 f4@2 eb4@2 bb3@2", E: "a3@3 f4@3 eb4@4 a3@2 f4@3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.53).pan(0.7)

// chords · whistle · "synth,"
const whistle = note("<~@17 A@2 ~@2 A@2 ~@19 A@2 ~@2 A@2 ~@53>".pickRestart({
  A: "[[bb3,f4] [a3,f4], d4]/2", // Bb5 Dm
})).s("gm_whistle").gain(0.1)

// other · pad warm · "synth.R"
const pad_warm = note("<~@66 A@4 B@4 ~@17 C D@2 E@2 F@2 E@2 ~>".pickRestart({
  A: "[f4@13 ~@5 f6@14, ~@30 f5@33 ~]/4", B: "[~@9 f6@7, ~ f5@7 ~@8, ~@27 f4@37]/4", C: "f5@7 ~", D: "[f5@7 ~]/2",
  E: "[f5@15 ~]/2", F: "[~@3 f5@25 ~@4, c6@7 ~]/2",
})).s("gm_pad_warm").gain(0.11).pan(0.7)

// bass · synth bass 1 · "synth.bass"
const bass_2 = note("<~@25 A ~@3 A ~@20 A ~@3 A ~@35 A ~@3 A ~@6>".pickRestart({
  A: "f1",
})).s("gm_synth_bass_1").gain(0.41).pan(1)

// other · epiano1 · "synth.L"
const epiano1 = note("<~@71 A B ~@18 C D@2 E ~ F@2 E ~@2>".pickRestart({
  A: "c6", B: "f6", C: "~ f5@6 ~", D: "[f5@24 ab4 ab4@3 ab4 ab4@2 ~]/2", E: "f5",
  F: "[~@3 f5@20 ~ ab4 ab4@3 ab4 ab4@2 ~, c6@3 ~]/2",
})).s("gm_epiano1").gain(0.15).pan(0)

// other · electric guitar clean · "elec.2"
const electric_guitar_clean_2 = note("<~@81 A B C@2 D B E C F ~@2 G@2 ~@7>".pickRestart({
  A: "~@4 a4 bb4 c5 db5", B: "c5", C: "d5@3 bb4@12 ~", D: "a4@4 a4 bb4 c5 db5", E: "d5@3 bb4@13", F: "a4 ~",
  G: "[f5@3 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.6).pan(1)

// other · electric guitar clean · "elec.2" · soft notes
const electric_guitar_clean_3 = note("<~@94 A ~ B@2 A ~@2>".pickRestart({
  A: "f5", B: "[~@3 f5@20 ~@9, c6@3 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.36).pan(1)

// bass · fretless bass · "bass.2"
const bass_3 = note("<~@73 [~@11 f4 f3@2 f2@2] ~@27>").s("gm_fretless_bass").gain(0.51)

// other · distortion guitar · "wheel.2"
const distortion_guitar = note("<[~@7 f4@9] ~@32 [~@7 f4@9] ~@67>").s("gm_distortion_guitar").gain(0.29).pan(1)

// 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 ~ A B A B A B A B ~ A B A B A B A B A B A B A B A ~ A B A B A B A B A
  B A B A B A C ~@8 A B A B A B A C A B A B A B A C D E D E D E D F G ~@2
>`.pickRestart({
  A: "x ~@6 x ~ x!2 ~@4 x", B: "~@3 x ~@3 x ~ x!2 ~@5", C: "~@3 x ~@3 x ~ x!2 ~@4 x", D: "x ~@6 x ~ x!3 ~@3 x",
  E: "x ~@2 x ~@3 x ~ x!3 ~@3 x", F: "~@3 x ~@3 x ~ x!3 ~@3 x", G: "x ~@6 x ~@8",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C D A E C D A F A G A F A G A E C D A E C H A E C D A E C D ~ A F A G A F A G A E C D A E C H A E C D A E C D A
  E C D A E C I ~@8 A E C D A E C I A E C D A E C I J F J F J F J F H ~@2
>`.pickRestart({
  A: "x ~@3 x ~@4 x!2 ~ x ~@2 x", B: "x ~@2 x!2 ~@2 x ~ x!2 ~ x ~@3", C: "x ~@3 x ~@4 x!2 ~ x ~@3",
  D: "x ~@3 x ~@2 x ~ x!2 ~ x ~@3", E: "x ~@3 x ~@2 x ~ x!4 ~@3", F: "x ~@3 x ~@2 x ~ x!4 ~@2 x",
  G: "x ~@3 x ~@2 x ~ x!2 ~ x ~@2 x", H: "x!2 ~@2", I: "x ~@3 x ~@2 x ~ x!3 ~@4", J: "x ~@3 x ~@4 x!4 ~@2 x",
})).gain(0.35)

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

// drums · hihat
const hihat = s("hh").struct("<~ A B A@21 C A B A@6 ~ A@15 C A B A@14 D@7 E A@24 F ~@2>".pickRestart({
  A: "~ x ~ x!2 ~@2 x", B: "~@2 x ~@3 x ~ x ~@4 x ~@2", C: "~ x ~@6", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2",
  F: "~ x ~ x!2 ~@3",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 [~@11 x!2 ~@3] ~@27>").gain(0.52)

// drums · tambourine
const tambourine = s("tb").struct("<~ A B@15 C@7 D B@7 E ~ B@8 C@7 D B@15 F ~@8 B@7 F B@7 F B@7 F G ~@2>".pickRestart({
  A: "x!6 ~ x ~ x ~ x!5", B: "~ x!5 ~ x ~ x ~ x!5", C: "~ x!11 ~ x!3", D: "~ x!4 ~@11", E: "~ x!5 ~ x ~ x ~ x!3 ~ x",
  F: "~ x!5 ~ x ~ x ~@2 x!4", G: "~ x!5 ~ x ~@8",
})).gain(0.35)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@23 B A@8 ~ A@15 B A@23 C A@24 D ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~@12", C: "~ x ~ x ~ x ~ x ~ x ~@6", D: "~ x ~ x ~ x ~ x ~@8",
})).gain(1.76)

// drums · shaker
const shaker = s("sh").struct("<~ A@23 B A@8 ~ A@15 B A@23 C A@24 D ~@2>".pickRestart({
  A: "x!8", B: "x!3 ~@5", C: "x!6 ~@2", D: "x!5 ~@3",
})).gain(0.35)

stack(
  bass, electric_guitar_clean, acoustic_guitar_steel, pad_poly, acoustic_guitar_steel_2, whistle, pad_warm, bass_2,
  epiano1, electric_guitar_clean_2, electric_guitar_clean_3, bass_3, distortion_guitar, kick, snare, low_tom, hihat,
  open_hat, mid_tom, tambourine, cabasa, shaker
)

More by Natalie Imbruglia