Strudelify

It's OK

Atomic Kitten

KeyD majorTempo89 bpm
0:00/0:00
// It's OK — Atomic Kitten
// 89 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 75 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(89/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 · electric bass finger
const bass = note(`<
  ~@5 A B C D E B C F A B G H A I G D E I G F ~@2 A I G F E J G F A B C D E I G K A B G H ~@2 E B G F A B G H A I C D A
  B G D E B C F A I G D ~@2
>`.pickRestart({
  A: "d1@8 ~@14 d1 ~ d1@6 ~@6 d1@8 ~@4", B: "a1@4 ~@7 a1 a1@3 ~@3 f#1@3 a1@3", C: "b1@8 ~@14 b1 ~ b1@6 ~@6 f#1@8 ~@4",
  D: "g1@8 ~@14 g1@2 a1@6 ~@4 a1 ~ a1@6 e1@6", E: "d1@4 ~@7 d1 d1@3 ~@3 d1@4 ~@2",
  F: "g1@8 ~@14 g1 ~ a1@6 ~@4 a1 ~ a1@6 e1@6", G: "b1@4 ~@7 b1 b1@3 ~@3 f#1@4 ~@2",
  H: "g1@4 ~@7 g1 a1@3 ~@2 a1 a1@3 e1@3", I: "a1@8 ~@14 a1 ~ a1@6 ~@6 f#1@6 a1@6", J: "a1@4 ~@14 f#1@3 a1@3",
  K: "g1@8 ~@14 g1 ~ a1@6 ~@4 a1@2 a1@6 e1@6",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · epiano1
const epiano1 = note(`<
  ~@13 A B C D A B C D A B E F ~@10 A B E D A B E F A B E D ~@6 A B E G A B E G A H E D A B C D A H E D I ~
>`.pickRestart({
  A: "[f#3,a3,d4]@47 ~", B: "[a3,c#4,e4]@47 ~", C: "[b3,d4,f#4]@23 ~", D: "[g3,b3,d4]@23 ~ [a3,c#4,e4]@23 ~",
  E: "[b3,d4,f#4]@47 ~", F: "[g3,b3,d4]@23 ~ [a3,c#4,e4]@22 ~@2", G: "[g3,b3,d4]@22 ~@2 [a3,c#4,e4]@23 ~",
  H: "[a3,c#4,e4]@23 ~", I: "[f#3,a3,d4]",
})).s("gm_epiano1").gain(0.08).pan(0.8)

// other · violin
const violin = note(`<
  ~ A B C D ~@12 A B C D A B C D ~@14 A B C D A B C D ~@6 A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "f#5 g5 a5@6", B: "c#5 d5 e5@6", C: "d5@2 e5@2 f#5@6 e5 d5 c#5@4", D: "b4@4 c#5@2 d5 e5",
})).s("gm_violin").gain(0.06).pan(0.1)

// other · violin
const violin_2 = note(`<
  ~ A B C D ~@12 A B C D A B C D ~@14 A B C D A B C D ~@6 A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "d5@4 a4@2 d5 c#5 b4@2 a4@6", B: "f#4@4 a4@3 g4 f#4@2 e4@2 d4@2 e4@2", C: "f#4@2 e4 d4 c#4@4 d4@4 e4@2 f#4@2",
  D: "g4@4 a4@2 b4 c#5",
})).s("gm_violin").gain(0.06).pan(0.3)

// other · viola
const viola = note(`<
  ~ A B C D ~@12 A B C D A E C D ~@14 A F C D A G C D ~@6 A E C D A H C D A E C D A B C D A H C D ~@2
>`.pickRestart({
  A: "a3@6 c#4 d4", B: "f#4@9 e4@2 d4 c#4@6 a3@30", C: "b3@6 a3 g3 f#3@8", D: "b3@4 c#4@2 b3 c#4",
  E: "f#4@9 e4 ~ d4 c#4@6 a3@30", F: "f#4@9 e4 d4@2 c#4@6 a3@30", G: "f#4@9 e4@2 ~ c#4@6 a3@30, ~@11 d4@2 ~@35",
  H: "f#4@9 e4 ~@2 c#4@6 a3@30, ~@11 d4@2 ~@35",
})).s("gm_viola").gain(0.08).pan(0.8)

// other · cello
const cello = note(`<
  ~ A B C D ~@12 A B C D A B C D ~@14 A B C D A B C D ~@6 A B C D A B C D A B C D A B C D A B C D A ~
>`.pickRestart({
  A: "d3", B: "a2@6 b2 c#3", C: "b2@3 a2", D: "g2@6 a2 b2 c#3@4 b2@2 c#3@2",
})).s("gm_cello").gain(0.08).pan(0.9)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@7 A B ~@2 A B C D E B C D E B C D E B ~@4 A B ~@2 A B C D E B C D E B C D E B ~@4 A B C D E B C D E B C D E B C D E
  B C D E B F ~
>`.pickRestart({
  A: "~@3 f#2", B: "g2 a2", C: "d2", D: "a2", E: "b2@3 f#2", F: "d3",
})).s("gm_string_ensemble_1").gain(0.17).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@5 A ~@3 B ~@3 C D E F G H I J K L M N O P Q ~@3 R ~@3 A S T U V W X Y Q@2 Z AA AB AC G ~@3 L AD AE AF AG AH AI AJ D
  A AK AL D AM AN AO AP AQ AR AF ~@2
>`.pickRestart({
  A: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2",
  B: "d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2 a4@3 d4@3",
  C: "d4@6 a4@3 e4@3 d4@3 ~ a4@2 e4@3 d4@3 a4@3 e4@3 d4@3 a4@3 e4@3 d4@3 a4@3 e4@3",
  D: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2",
  E: "d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 e4@3 a4@3 d4@3 e4@3 a4@3 d4@3 ~ e4@2 a4@3 ~ d4@2",
  F: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 d4@3 ~ e4@2 a4@3 d4@3 e4@3 a4@3 d4@3 ~ e4@2",
  G: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 d4@3 a4@3 e4@3",
  H: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 d4@3 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2",
  I: "d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2",
  J: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2",
  K: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3",
  L: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3",
  M: "d4@3 ~ e4@2 a4@3 d4@3 e4@3 a4@3 d4@3 e4@3 a4@3 ~ d4@2 e4@3 a4@3 d4@3 e4@3 a4@3 ~ d4@2",
  N: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 d4@3 e4@3 a4@3 d4@3 e4@3 a4@3 d4@3 ~ e4@2",
  O: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 e4@3",
  P: "d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2",
  Q: "d4@6 a4@3 e4@3 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3",
  R: "d4@3 e4@3 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 e4@3 a4@3 ~ d4@2",
  S: "d4@6 a4@3 e4@3 d4@3 ~ a4@2 e4@3 d4@3 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3",
  T: "d4@3 e4@3 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2 a4@3 ~ d4@2",
  U: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 d4@3 e4@3 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2",
  V: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 e4@3 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2",
  W: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 d4@3 a4@3 ~ e4@2 d4@3 a4@3 e4@3 d4@3 a4@3 ~ e4@2",
  X: "d4@3 e4@3 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 e4@3 a4@3 d4@2 ~",
  Y: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 d4@2 ~ d4@3 ~ e4@2 a4@3 d4@3 e4@3 a4@3 d4@3 e4@3",
  Z: "d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 e4@3 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 d4@2 ~",
  AA: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 e4@3",
  AB: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 e4@3",
  AC: "d4@3 ~ a4@2 e4@3 d4@3 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 d4@3 a4@3 e4@3 d4@3 a4@3 e4@3 d4@3",
  AD: "d4@6 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 a4@3 e4@3 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2",
  AE: "d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2",
  AF: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 ~ e4@2",
  AG: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 d4@3 a4@3 ~ e4@2 d4@3 a4@3 e4@3 d4@3 a4@3 ~ e4@2",
  AH: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 a4@3 e4@3 d4@3 a4@3 e4@3",
  AI: "d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 d4@2 ~",
  AJ: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 d4@3 e4@3 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2",
  AK: "d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 e4@3 a4@3 ~ d4@2",
  AL: "d4@6 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 a4@3 d4@3 ~ e4@2",
  AM: "d4@6 a4@3 e4@3 d4@3 ~ a4@2 e4@3 d4@3 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2",
  AN: "d4@3 ~ e4@2 a4@3 d4@3 e4@3 a4@3 d4@3 ~ e4@2 a4@3 d4@3 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2",
  AO: "d4@6 a4@3 e4@3 d4@3 ~ a4@2 e4@3 d4@3 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 e4@3",
  AP: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 ~ e4@2 d4@3 a4@3 e4@3 ~ d4@2 a4@3 ~ e4@2",
  AQ: "d4@6 a4@3 ~ e4@2 d4@3 ~ a4@2 e4@3 ~ d4@2 a4@3 e4@3 d4@3 ~ a4@2 e4@3 d4@3 a4@3 ~ e4@2",
  AR: "d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2 e4@3 ~ a4@2 d4@3 ~ e4@2 a4@3 ~ d4@2",
})).s("gm_electric_guitar_muted").gain(0.06).pan(0.3)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A@2 ~@2 B@2 C@2 ~@5 D@2 E F@3 E A@2 ~@13 D@2 E F@3 E A@2 ~@5 D@2 E F@3 E F@3 E F@3 E F@3 E A@2 ~
>`.pickRestart({
  A: "[~@2 c#4@4 d4 a3@9]/2", B: "[~@7 c#4@6 ~@3]/2", C: "[~@3 a3@5]/2", D: "[~@6 f#3 a3@5 ~@2 f#3 a3]/2", E: "a3@3 ~",
  F: "[~@2 c#4@4 d4 a3@6 ~ f#3 a3@5 ~@2 f#3 a3]/3",
})).s("gm_acoustic_guitar_steel").gain(0.31).pan(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~@5 A B C D A B C D A B C D A B C D A B C D E F A B C D A B C D A B C D A B C D A B C D E F A B C D A B C D A B C D A
  B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "~ [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@2", B: "~ [e3,a3,c#4,e4] ~@3 [e3,a3,c#4,e4] ~@2",
  C: "~ [f#3,b3,d4,f#4] ~@3 [f#3,b3,d4,f#4] ~@2", D: "~ [d3,g3,b3,d4] ~@3 [e3,a3,c#4,e4] ~@2",
  E: "d3 [d3,f#3,a3,d4] ~@2 d3 [d3,f#3,a3,d4] ~@2", F: "a2 [e3,a3,c#4,e4] ~@2 a2 [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]",
})).s("gm_acoustic_guitar_steel").gain(0.1)

// chords · string ensemble 1
const string_ensemble_1_2 = note("<~@8 A B ~@2 A B ~@16 A B ~@2 A B ~@39>".pickRestart({
  A: "~@5 [f#3,a3,c#4]@4 [g3,b3,d4]@7", B: "~ [e3,a3,c#4]@8 ~@7",
})).s("gm_string_ensemble_1").gain(0.04).pan(0.8)

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

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

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

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!31 [x ~ x ~ x ~@7 x!4] [x!16]!40 ~@2>").gain(1.26)

stack(
  bass, epiano1, violin, violin_2, viola, cello, string_ensemble_1, electric_guitar_muted, acoustic_guitar_steel,
  acoustic_guitar_steel_2, string_ensemble_1_2, kick, snare, hihat, open_hat, cabasa
)

More by Atomic Kitten