Strudelify
What Can I Do cover art

1998 · Talk on Corners

What Can I Do

The Corrs

KeyA majorTempo78 bpm
0:00/0:00
// What Can I Do — The Corrs
// 78 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 79 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · piano
const piano = note(`<
  ~@28 A B A C A B A C D E@2 F D E@2 F ~@8 A B A C A B A C A B A C A B A C G H I J K H I J ~@3
>`.pickRestart({
  A: "[e4,a4,c#5]@11 ~ [e4,g#4,b4]@11 ~", B: "[d4,f#4,a4]@5 ~@2 f#4, ~@15 a3@8 ~, ~@18 d4@5 ~",
  C: "[d4,a4]@18 f#4@2 ~ a3@2 ~, f#4@17 ~@3 d4@2 ~@2", // D5
  D: "[c#5,f#5,a5]@5 ~ [c#5,f#5,g#5]@2 ~@4 e5@6 c#5 ~@5, ~@3 c#5 ~@2", // F#m C#sus4
  E: "[[f#4,a4]@6 d5 ~@5 [f#4,c#5]@4 ~@2 f#4 ~@2 [d4,f#4,a4]@11 ~ [e4,g#4,b4]@12 ~@3, c#5@5 ~@7 a4@6 ~@30]/2", // F#m F#5 D E
  F: "[a4,d5,f#5]@8 ~ [b4,e5,g#5]@12 b4 ~@2", // D E
  G: "[a3,d4,f#4,d5]@6 [d2,d3]@3 [g#3,e4,e5]@6 ~@6 e5 ~@2, [d2,d3,a4]@5 ~ a4 ~@2 b3@9 g#3@5 ~, ~@9 b4@4 ~@2 [e2,e3,b4]@8 ~", // D C#m D5 E5
  H: "[d2,d3,d4,d5,f#5]@8 ~ [g#3,b3,e4]@6 g#3@3 [b3,e4,b4]@2 e5 b4@2 ~, [a3,f#4]@6 ~@3 [e2,e3]@13 ~@2, a4 ~@8 [b4,e5]@8 ~@7", // D E E5 D E E5
  I: "[d2,d3,d4,f#4,a4,d5]@6 a4 ~@2 [b3,e4,b4,e5]@6 g#3@3 [b3,e4]@3 g#3@2 ~, a3@4 ~@5 [e2,e3]@13 ~@2, ~@9 g#3@3 ~@3 b4@6 e5 ~@2", // D E5 E
  J: "[a3,f#4,d5]@4 ~@2 [d5,f#5] ~@2 [b3,e4,e5]@6 g#3@3 [b3,e4]@3 g#3 ~@2, [d2,d3]@8 ~ [e2,e3]@14 ~, [d4,f#5]@5 a3@3 ~ g#3@3 ~@12, ~@6 d4@2 ~ b4@5 ~ b4@7 ~@2", // D E5 D E D
  K: "[a3,d4,f#4,d5]@6 [d2,d3]@3 [g#3,e4,e5]@6 ~@6 e5@2 ~, [d2,d3,a4]@5 ~ a4 ~@2 b3@9 g#3@5 ~, ~@9 b4@4 ~@2 [e2,e3,b4]@8 ~", // D C#m D5 E5
})).s("gm_piano").gain(0.59)

// bass · fretless bass · "Marc Jacobs"
const bass = note(`<
  A B C B A B C B A B C B A B C B A B C B D E F G D E F G A B C B A B C B H I J@2 H I J@2 A B C B A B C B A B C B A B C
  B A B C B A B C B J K L M J K L M A B N
>`.pickRestart({
  A: "a2@2 ~ a2@2 ~@7 g#2@2 ~ g#2@2 ~@7", B: "d2@2 ~ d2@2 ~@19", C: "c#2@2 ~ c#2@2 ~@7 e2@2 ~ e2@2 ~@7",
  D: "a2@2 ~ a2@2 ~@6 a2 g#2 ~@2 g#2 ~@7 g#2", E: "d2 ~@2 d2@2 ~@6 d2 d2@3 c#2@3 b1@3 c#2@2 ~",
  F: "c#2@2 ~ c#2@2 ~@6 c#2 e2@2 ~ e2@2 ~@6 e2", G: "d2@2 ~ d2@2 ~@6 d2 d2@3 c#2@3 b1@3 e2@2 ~", H: "f#1@20 ~ f#1@2 ~",
  I: "f#1", J: "d2@9 e2@11 ~ e2@3", K: "d2@8 ~ e2@12 e2 ~ e2", L: "d2@9 e2@11 ~ e2 ~ e2", M: "d2@9 e2@11 ~ e2@2 ~",
  N: "a1@23 ~",
})).s("gm_fretless_bass").gain(0.23)

// chords · pad warm
const pad_warm = note(`<
  ~@12 A B C D A B C D ~@8 A B C D A B C D E@2 F@2 E@2 F@2 ~@8 A B C D A B C D A B C D A B C D G H@3 G H@3 ~@3
>`.pickRestart({
  A: "[a3,c#4,a5] [g#3,b3,g#5], e4", B: "[f#3,a3,f#5]", C: "[a3,c#4,e4,a5] [g#3,b3,e4,g#5]", D: "[f#3,a3,a5]",
  E: "[[f#4,a4,c#5]@47 ~]/2", F: "[[f#4,d5]@11 ~ [g#4,b4,e5]@10 ~ [f#4,a4]@8 ~@2 [g#4,b4,e5]@13 ~@2, ~@12 a#4 ~@35]/2",
  G: "[a4,d5,f#5]@8 ~ [g#4,b4,e5]@14 ~, ~@9 c5 ~@14", H: "[a4,d5,f#5]@8 ~ [g#4,b4,e5]@14 ~, ~@9 d#5 ~@14",
})).s("gm_pad_warm").gain(0.25)

// chords · pad warm · soft notes
const pad_warm_soft = note(`<
  ~@13 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@2 B C ~@2 B C ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11
>`.pickRestart({
  A: "d4", B: "a4@11 ~@13", C: "c5 ~ d5@6 ~@16",
})).s("gm_pad_warm").gain(0.04)

// chords · electric guitar clean · "netmatters."
const electric_guitar_clean = note(`<
  ~@8 A B C D ~@8 E F G H I J K L ~@10 M N ~@2 M N O B P D O B P D ~@16 Q R S T Q R S T ~@3
>`.pickRestart({
  A: "~@19 f#4 ~@2 f#4 ~, ~@21 e4@2 ~",
  B: "e4@3 f#4 e4@3 f#4 ~@2 f#4 ~ e4@3 f#4 e4@3 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, ~@9 e4@2 ~@10 e4@2 ~",
  C: "~@3 f#4@2 e4@3 f#4 e4@2 f#4 e4@3 f#4 e4@3 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, e4@5 ~@16 e4@2 ~",
  D: "e4@3 f#4 e4@3 ~ f#4 e4@2 f#4 ~@3 f#4 ~ e4@2 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, ~@12 e4@5 ~@4 e4@2 ~",
  E: "f#4@5 e4@4 a3@5 ~ a3@3 b3@3 a3@3", F: "f#4@4 e4@4 ~ a3@5 ~ a3@3 b3@3 a3@3",
  G: "f#4@3 ~@2 e4@4 a3@3 ~@3 a3@3 b3@3 a3@3", H: "f#4@3 ~ e4@5 a3@3 ~@3 a3@3 b3@3 a3@2 ~",
  I: "f#4@3 ~@2 e4@4 a3@3 ~@3 a3@3 ~ f#4 ~@2 f#4 ~, ~@6 b3 [a3,e4]", // A5
  J: "[e4,f#4]@3 f#4 e4@3 f#4 ~@2 f#4 ~ [a3,e4]@3 f#4 e4@2 ~ f#4 ~@2 f#4 ~, a3@3 [a3,e4] ~ a3 b3 [a3,e4]", // Esus2 A5
  K: "f#4@3 f#4@2 e4@3 f#4 [a3,e4]@2 f#4 [a3,e4]@3 f#4 e4@2 ~ f#4 ~@2 f#4 ~, a3@3 ~@2 a3 b3 [a3,e4], e4@5 ~@19", // A5
  L: "[e4,f#4]@3 f#4 e4@4 f#4 [a3,e4]@2 f#4 a3@3 a3@2 ~@2 f#4 ~@2 f#4 ~, a3@9 ~@3 e4@5 e4@3 ~@4, ~@15 f#4 ~@2 b3@3 [a3,e4]@2 ~", // Esus2 A5
  M: "f#4@5 e4@4 a3@6 f#4@3 e4@3 a3@3", N: "f#4@5 e4@4 a3@6 f#4@3 e4@3 a3@2 ~",
  O: "e4@2 e4 f#4 ~ e4@2 f#4@2 ~ f#4@2 e4@2 e4 f#4 ~ e4@2 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, ~@9 e4@2 ~@10 e4@2 ~",
  P: "e4@5 e4@3 f#4 e4@2 f#4 e4@3 f#4 e4@3 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, ~@21 e4@2 ~",
  Q: "[a3,d4]@8 ~ e4@6 ~@3 e4@3 g#4@2 ~, ~@9 b3@4 ~@2 b3@7 ~@2", // D5
  R: "[a3,d4]@6 a3@2 ~ [b3,e4]@6 ~@3 e4@3 g#4@2 ~, ~@5 b3@2 ~", // D5 E5
  S: "d4@6 a3@2 ~ [b3,e4]@6 ~@6 g#4@2 ~, a3@5 ~@10 b3@7 ~@2, ~@18 e4@5 ~", // E5
  T: "d4@6 a3@2 ~ [b3,e4]@8 ~ e4@3 b3@2 ~, a3 ~@5", // E5
})).s("gm_electric_guitar_clean").gain(0.09)

// chords · electric guitar clean · "netmatters." · soft notes
const electric_guitar_clean_2 = note("<~@6 A B C ~@13 D E F ~@21 G ~@3 G ~@28>".pickRestart({
  A: "~@3 f#4@2 e4@3 f#4 e4@2 f#4 e4@3 f#4 e4@3 f#4 ~@2 f#4 ~, ~@12 a3@11 ~, ~@21 e4@2 ~",
  B: "e4@3 f#4 e4@3 ~ f#4 e4@2 f#4 ~@3 f#4 ~ e4@2 f#4 ~@2 f#4 ~, a3@11 ~ a3@11 ~, ~@12 e4@5 ~@4 e4@2 ~",
  C: "e4@2 e4 f#4 ~ e4@2 f#4@2 ~ f#4@2 e4@2 e4 f#4 ~ e4@3 ~@4, a3@11 ~ a3@11 ~, ~@9 e4@2 ~@13",
  D: "~@3 f#4@2 ~@3 f#4 e4@2 f#4 [a3,e4]@3 f#4 e4@3 f#4 ~@2 f#4 ~, ~@7 e4", // A5
  E: "e4@3 f#4 ~@4 f#4 e4@2 f#4 a3@3 f#4 ~ e4@2 f#4 ~@2 f#4 ~, a3@9 ~@3 e4@5 ~@4 e4@2 ~",
  F: "e4@2 e4 f#4 ~@3 f#4@2 ~ f#4@2 [a3,e4]@2 e4 f#4 ~ e4@3 ~@4, a3@3 e4 ~@4", G: "~@3 f#4@2 ~@19",
})).s("gm_electric_guitar_clean").gain(0.04)

// other · melodic tom
const melodic_tom = note(`<
  ~@20 A B C D A B C D A B C D A B C D A B C D A B C D ~@8 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 ~
>`.pickRestart({
  A: "c2!4 ~@2 c2 ~ c2!2 ~ c2!5 ~ c2!2 ~ c2!2 ~ c2", B: "c2!4 ~ c2 ~ c2!3 ~ c2 ~ c2!3 ~ c2!2 ~ c2!2 ~ c2",
  C: "c2!4 ~ c2!2 ~ c2!2 ~ c2!5 ~ c2 ~ c2!3 ~ c2", D: "c2!4 ~ c2!2 ~ c2!2 ~ c2!5 ~ c2!2 ~ c2!2 ~ c2",
})).s("gm_melodic_tom").gain(0.08)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@28 A B C@2 A B C@2 D E@3 D E@3 ~@4 F G@2 H A B C@2 A B C@2 A B C@2 A B C@2 I J K L M N K N ~@3
>`.pickRestart({
  A: "a5 g#5", B: "e5@7 d5", C: "[~ c#5@11 ~@12 e4@23 ~, ~@6 e5@7 ~@11]/2", D: "a5 g#5 f#5 e5",
  E: "[c#5@2 b4@2 a4@2 c#5 e5@17]/3", F: "e4@2 a4 b4", G: "[e4@6 b4@4 a4@2 g#4@3 a4]/2", H: "e4@23 ~",
  I: "e5@9 c#5@2 b4 c#5@2 b4@4 c#5@2 ~@2 b4 ~, ~@10 b4 ~, ~@21 a4@2 ~", J: "f#5@9 e5@14 ~",
  K: "e5@9 c#5@2 b4 c#5@2 b4@4 ~ b4@2 ~ b4@2, ~@18 c#5@2 ~ a4@2 ~", L: "a4@9 f#5@9 e5@5 ~",
  M: "e5@9 c#5@2 b4 c#5@2 b4@4 ~ b4 ~@2 b4@2, ~@18 c#5@2 ~ a4@2 ~", N: "a4@9 f#5@6 e5@8 ~",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@12 A@8 B@16 A@2 B@2 A@2 B@2 ~@8 B@24 A@2 ~>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x ~@10 x!2 ~@11",
})).gain(0.6)

// drums · rim
const rim = s("rim").struct("<~@12 A@8 ~@16 A@2 ~@2 A@2 ~@34 A@2 ~>".pickRestart({
  A: "~ x ~@2",
})).gain(0.53)

// drums · snare
const snare = s("sd").struct("<~@20 A@7 B A@7 B ~@2 A@2 ~@2 A@2 ~@8 A@7 B A@7 B A@3 B A@3 B ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@11 x ~@2 x!3",
})).gain(0.67)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@7 A ~@15 B ~@7 A ~@7 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "~@5 x", B: "~@18 x ~ x!2 ~@2",
})).gain(0.6)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@12 A B C D A B C D ~@59>".pickRestart({
  A: "~@3 x!3 ~@2", B: "x!2 ~ x!4 ~", C: "x!2 ~ x!2 ~@3", D: "x!2 ~ x!3 ~@2",
})).gain(0.33)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 A ~ B A@2 ~ B A ~@7 C ~@7 C ~@15 A ~@7 C ~@7 C ~@3 C ~@3 C ~@3>".pickRestart({
  A: "~@17 x ~@6", B: "~@5 x ~@18", C: "~@5 x!2 ~",
})).gain(0.6)

// drums · open hat
const open_hat = s("oh").struct("<~@12 [~@7 x]!32 ~@8 [~@7 x]!26 ~>").gain(0.67)

// drums · high tom
const high_tom = s("ht").struct("<~@27 A ~@7 A ~@23 A ~@7 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "~ x",
})).gain(0.6)

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

// drums · congas
const congas = s("conga:13").struct("<~@12 A ~ B A@2 ~ B A ~@59>".pickRestart({
  A: "~@18 x ~ x!2 ~@2", B: "~@6 x ~ x!2 ~@14",
})).gain(1.5)

// drums · claves
const claves = s("clave:2").struct("<~@12 [~@21 x ~ x]!2 ~ [~@21 x ~ x]!3 ~ [~@21 x ~ x] ~@59>").gain(2.29)

stack(
  piano, bass, pad_warm, pad_warm_soft, electric_guitar_clean, electric_guitar_clean_2, melodic_tom, string_ensemble_1,
  kick, rim, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash, congas, claves
)

More by The Corrs