Strudelify
One Week cover art

1998 · Stunt

One Week

Barenaked Ladies

KeyA majorTempo110 bpm
0:00/0:00
// One Week — Barenaked Ladies
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Piano" named as a piano, played on piano (its rock organ patch is not one)
// note: duplicate parts dropped: ch 7 "Melody 3" acoustic guitar steel (copy of ch 11 "Strings" string ensemble 2)
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D B C@2 E C@2 B@4 C A C B C A F G H I J K A@2 B L A C B D B@2 C B A B@2 A@2 C A@2 C B@3 A@2 C@2 M N O P J Q
  B C@2 L A@2 B D C A B@2 A C B@2 R ~
>`.pickRestart({
  A: "a1 ~ a1@2 a1 ~ g#1 ~ a1 ~ a1 ~ d2 ~ d2 ~", B: "a1 a0 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ d2 ~ d2 ~",
  C: "a1 ~ a1@2 a1 ~ a1 a0 a1 ~ a1 ~ d2 ~ d2 ~", D: "a1 a0 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ g1 ~ g1 ~",
  E: "a1 ~ a1@2 a1 ~ g#1 ~ a1 ~ a1 ~ g1 ~ g1 ~", F: "f#2 ~ f#2@2 f#2 ~ f#2 f#1 e2 ~ e2@2 e2 ~ c2 ~",
  G: "c#2 c#1 c#2 ~ c#2 ~ c#2 ~ d2 d1 d2 ~ d2 ~ d2 ~", H: "f#2 ~ f#2@2 f#2 ~ f#2 f#1 e2 ~ e2@2 e2 ~ e2 e1",
  I: "c#2 ~ c#2@2 c#2 ~ c#2 ~ d2 ~ d2@2 d2 ~ d2 d1", J: "f#2 ~ f#2@2 f#2 ~ d#2 ~ e2 ~ e2@2 e2 ~ e2 e1",
  K: "c#2 ~ c#2@2 c#2 ~ c#2 ~ d2 d1 d2 ~ d2 ~ d2 ~", L: "a1 ~ a1@2 a1 ~ a1 a0 a1 ~ a1 ~ g1 ~ g1 ~",
  M: "f#2 f#1 f#2 ~ f#2 ~ f#2 ~ e2 ~ e2@2 e2 ~ c2 ~", N: "c#2 ~ c#2@2 c#2 ~ c#2 ~ d2 ~ d2@2 d2 ~ f2 ~",
  O: "f#2 f#1 f#2 ~ f#2 ~ f#2 ~ e2 e1 e2 ~ e2 ~ e2 ~", P: "c#2 ~ c#2@2 c#2 ~ c#2 c#1 d2 d1 d2 ~ d2 ~ d2 ~",
  Q: "c#2 c#1 c#2 ~ c#2 ~ c#2 ~ d2 ~ d2@2 d2 ~ g#1 ~", R: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
})).s("gm_fretless_bass").gain(0.38)

// chords · piano
const piano = note(`<
  ~@2 A B A ~ A B A B ~@2 C ~@2 A ~ A@5 D E F G F H ~ B ~ B A ~@2 A@2 ~ C B A C@2 ~ B A@2 B@3 C B C@2 B C I ~ I J K L ~
  A C A ~ A@4 B C A ~ A C ~ M ~
>`.pickRestart({
  A: "[e4,a4,c#5,e5] ~", B: "[e4,c#5,e5]@7 ~@9", C: "[e4,c#5] ~", D: "[a4,c#5,e5,f#5] ~",
  E: "[g#4,c#5,e5,g#5]@8 [c5,f#5,a5,c6]@7 ~", F: "[a4,e5] [g#4,d5]", G: "[g#4,c#5,e5,g#5] ~", H: "[g#4,e5,g#5]@7 ~@9",
  I: "[a4,e5]@8 [g#4,d5,f#5,g#5]@7 ~", J: "~ [c5,e5,f#5,a5]", K: "[a4,c#5,e5,f#5]@8 [g#4,d5,f#5,g#5]@7 ~",
  L: "[g#4,e5,g#5]@7 ~ [c5,f#5,a5,c6]@7 ~", M: "[a4,c#5]@10 ~@4 c#5 a4, e4, e5@9 ~ e5@2 a4@2 ~@2, ~@11 c#5@2 e5@2 ~",
})).s("gm_piano").gain(0.19)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@2 A@3 B A@4 B@2 A B@2 A B A@5 C ~@2 D ~ D B A B A@2 B@2 A@2 B A@5 B A@12 ~ E ~ F ~@2 B A@3 B A@7 B A@2 B ~@2
>`.pickRestart({
  A: "~@2 c#5 f#5", B: "~ [a4,c#5] ~@2 c#5@2 f#5@2", C: "~@5 [g#4,d5] ~@2", D: "~@5 [c5,f#5] ~@2",
  E: "~ [c#5,e5] ~@3 [c5,f#5] ~@2", F: "~ [c#5,e5] ~@6",
})).s("gm_piano").gain(0.05)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~@2 A B C D A E A F C B A C E B@2 A B A@2 E G H I J K L C B C D B C B M C E@2 A@2 E C A C E B E C B C B C E A@2 N O I
  O P H B@3 F B A E D B C E B@2 A C@2 Q ~
>`.pickRestart({
  A: "~@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@2 [a2,e3,a3]@3 ~ [d3,a3,e4]@3 ~", // A5 Dsus2
  B: "[a2,a3] ~@3 e3@2 [e3,a3]@2 [a2,e3,a3]@3 ~ [d3,a3,e4]@3 ~, e3 a2@3 ~@4", // A A5 Dsus2
  C: "[a2,e3]@6 ~@2 [a2,e3,a3]@3 ~ [d3,a3,e4]@3 ~", // A5 Dsus2
  D: "~@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@2 [a2,e3,a3]@3 ~ [g2,d3,a3]@3 ~", // A5 Gsus2
  E: "[a2,e3]@2 ~@2 e3@2 ~@2 [a2,e3,a3]@3 ~ [d3,a3,e4]@3 ~, ~@3 a2@2 ~@11", // A5 Dsus2
  F: "[a2,e3]@6 ~@2 [a2,e3,a3]@3 ~ [g2,d3,a3]@3 ~", G: "[f#2,c#3]@3 ~ [e3,b3] ~ [e3,b3] ~, ~@11 e2@2 ~@3",
  H: "[c#3,g#3] ~ [c#3,g#3] ~ [d3,a3] ~ [d3,a3] ~, ~@3 c#2@2 ~@6 d2@2 ~@3", I: "[f#2,c#3]@3 ~ [e3,b3]@3 e2",
  J: "~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [d3,a3,e4] ~ [d3,a3,c4,e4]", // C#5 Dsus2 Am
  K: "[f#2,c#3]@2 ~@2 c#3@2 ~@2 [e3,d4] ~@3 b3@2 [b3,f#4]@2, ~@3 f#2@2 ~@3 [b3,f#4]@4 ~@4, ~@5 e3@3", // F#5 E7 B5
  L: "[c#3,c#4] ~@3 g#3@2 [g#3,c#4]@2 ~@2 [d3,a3,e4]@2 ~@2 [d3,a3,c4,e4]@2, g#3 c#3@3 ~@4", // C# C#5 Dsus2 Am
  M: "[a2,e3]@2 ~@2 e3@2 ~@2 [a2,e3,a3]@3 ~ [g2,d3,a3]@3 ~, ~@3 a2@2 ~@11", // A5 Gsus2
  N: "[f#2,c#3] ~ c#3 ~ [e3,b3] ~ [e3,b3] ~, ~@3 f#2@2 ~@6 e2@2 ~@3", O: "[c#3,g#3]@3 c#2 ~ [d3,a3,e4] ~ [d3,a3,c4,e4]",
  P: "[f#2,c#3]@3 ~@2 [e3,b3,f#4] ~ [e3,b3,d4,f#4]", Q: "~@2 [a2,d#3,e3] ~@3 a2@2 e3@6 ~@2",
})).s("gm_electric_guitar_muted").gain(0.26).pan(0.6)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~@2 A B A C A C A C D E D E F G D H F@3 G I J I K I L A B A C A B A C M N M O M P Q R D E D E F G D H F@3 G I J I K I
  L A B A C A B A C D S H S D S H S T ~
>`.pickRestart({
  A: "a2@4 ~ c#3 d3 g2", B: "a2@4 c#3 d3@2 c#3", C: "a2@2 c#3 d3@2 e3@2 e3", D: "a2@3 c#3@2 b2@2 a2",
  E: "a2@3 b2@2 a2@3", F: "a2@3 c#2@2 e2@2 f#2", G: "a2@3 e2@2 f#2@2 a2", H: "a2@3 b2@2 a2@2 f#2", I: "f#2@3 e2@4 e2",
  J: "c#2@3 d2@4 d2", K: "c#2 a2 c#2 d2@4 e2", L: "c#2@3 d2@2 d2@2 e2", M: "a2@3 a2@2 a2!3", N: "a2@3 a2@2 e2@2 e2",
  O: "a2@3 a2@2 e2@2 f#2", P: "a2@3 c#3@2 d3@2 e3", Q: "a2@3 a2@2 a2 e3 d3", R: "a2@3 a2@2 a2 d3 c#3",
  S: "a2@3 e2@2 f#2@2 f#2", T: "a2",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@2 A B A B A B A B C@8 D C D C E F E F E F A B A B A B A B G H G H G H G H C@8 D C D C E F E F E F A B A B A B A B G
  H G H G H G H I ~
>`.pickRestart({
  A: "[c#4,e4,a4]@2 [c#4,e4,a4]@2 ~ [c#4,e4,a4] [d4,e4,f#4,a4]@2", // A D
  B: "[c#4,e4,a4]@2 [c#4,e4,a4]@2 ~ [d4,e4,f#4,a4] [d4,e4,f#4,a4]@2", // A D
  C: "[c#4,e4,a4]@3 [c#4,e4,a4] ~@2 [c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A
  D: "[c#4,e4,a4]@3 [c#4,e4,a4] ~@2 [c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 ~ [c#4,e4,a4]@2 c#5@2", // A
  E: "[e4,a4,c#5] f#4 a4 [e4,a4,c#5]@2 e4 a4 c#5", F: "[e4,g#4,c#5] g#4 c#5 [d4,f#4,a4,c#5]@2 a4 f#4 a4",
  G: "c#4 e4 a4 c#5@2 a4 e4@2 e4@2 a4@2 c#5@4", H: "c#4 e4 a4 c#5@2 a4 e4@2 e4@2 a4@4 a4@2", I: "[e4,a4,c#5]@3 ~",
})).s("gm_string_ensemble_2").gain(0.31).pan(0.6)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@17 [~@3 x] ~@51 [~@3 x] ~@10>").gain(0.43)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@69 [~@3 x ~@2 x ~] ~@10>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A B@3 ~@3 B A B ~@2 A ~@2 B ~ A ~@3 C ~@3 A ~ B A B A ~ A ~ A B A B ~@2 A ~ A B ~ A B A ~@2 B ~@4 D ~ A@3 ~ A B
  ~@2 A@2 ~@2 B@2 ~ E ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@15 x", C: "~@2 x ~@3 x!2", D: "~ x!3", E: "x",
})).gain(0.33)

// drums · high tom
const high_tom = s("ht").struct("<~@69 x ~@10>").gain(0.43)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@7 A ~@6 B ~@4 A ~@5 A ~@15 A ~@17 A ~@7 A ~@9>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [x!4]!76 [x!8] ~>").gain(0.33)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@2 [x!4]!77 ~>").gain(1.69)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@2 [~ x ~ x ~ x ~ x]!77 ~>").gain(0.97)

// drums · shaker
const shaker = s("sh").struct("<~@2 [x!4]!77 ~>").gain(0.33)

stack(
  bass, piano, piano_soft, electric_guitar_muted, bass_2, string_ensemble_2, kick, rim, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, tambourine, cabasa, cabasa_soft, shaker
)

More by Barenaked Ladies