Strudelify

Freak Me

Another Level

KeyD majorTempo68 bpm
0:00/0:00
// Freak Me — Another Level
// 68 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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 · epiano1
const epiano1 = note(`<
  ~@4 A B C B C B D ~ E@2 C B E@2 C F A B C B C B D ~ E@2 C B E@2 C F A B C B C B D ~ A B C B C G ~@2
>`.pickRestart({
  A: "[b3,e4,g4,b4]@3 ~@3 d5@2, ~@3 [a3,d4,f#4,a4]@4 ~", B: "[a3,d4,g4]@8 [d3,f#4,a4]@7 ~, ~@8 d4@5 ~@3",
  C: "[c3,e3,c4]@8 [d3,a3,d4,d5]@7 ~, b4@7 ~@9, g3 ~@15", // C D5
  D: "[c4,e4,g4,b4]@3 d5@2 ~@2 g5@3 ~@6, ~@5 c5@3 ~@8, ~@6 d5@3 ~@7", // Cmaj7
  E: "[[b3,e4,g4,b4]@6 ~@10 [a3,d4,g4]@8 [d3,f#4,a4]@7 ~, ~@8 [a3,d4,f#4,a4]@8 ~@8 d4@5 ~@3, ~@7 d5@2 ~@7]/2", // Em Dsus4 D
  F: "[a3,d4,g4] ~", G: "[a3,b3,d4,g4] ~",
})).s("gm_epiano1").gain(0.64)

// chords · epiano1 · soft notes
const epiano1_soft = note(`<
  ~@5 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ B C ~
>`.pickRestart({
  A: "b3@7 ~@9", B: "~@8 [d3,f#4,a4]@7 ~, ~@8 d4@5 ~@3",
  C: "[c4,e4,g4,b4]@3 d5@2 ~@2 g5@3 ~@6, ~@5 c5@3 ~@8, ~@6 d5@3 ~@7", // Cmaj7
})).s("gm_epiano1").gain(0.4)

// chords · brass section
const brass_section = note("<~@3 A B C D E F G ~@9 A B C D E F G ~@9 A H I J K F L ~@2 H I J K F L ~@2>".pickRestart({
  A: "~@12 e4 f#4 e4 f#4", B: "[e4,g4] ~ [c4,e4] ~ [d4,f#4]@3 ~@3 [d4,f#4] [d4,f#4]@2 [e4,g4]@2 d4",
  C: "[b3,d4] ~@10 [d4,g4,a4] ~ [d4,g4,a4] ~ [e4,b4]", // Bm Dsus4 E5
  D: "[c4,g4]@2 [c4,e4]!4 [d4,f#4]@2 [d4,f#4] ~ [d4,f#4]!2 ~ [e4,g4]@2 ~", E: "[d4,f#4] ~@11 [d4,f#4]!2 ~ [e4,g4]",
  F: "g4@2 [c4,e4] e4@2 [c4,e4] [d4,f#4]@4 [d4,f#4] [d4,f#4]@2 [d4,f#4] [e4,g4] [d4,f#4], e4 ~@2 c4 ~@12", // C D Em D
  G: "[d4,f#4]@7 ~@9, [e4,g4] ~@15", // D Em
  H: "e4@2 e4@2 [d4,f#4]@3 ~@3 [d4,f#4] [d4,f#4]@2 [e4,g4]@2 d4, g4@5 ~@11, ~@2 c4 ~@13", // D Em
  I: "[b3,d4]@8 ~@3 [d4,g4,a4] ~ [d4,g4,a4] ~ [e4,b4]", // Bm Dsus4 E5
  J: "[c4,g4]@2 [c4,e4]!3 e4 [d4,f#4]@2 [d4,f#4] ~ [d4,f#4]!2 ~ [e4,g4]@2 ~, ~@5 c4@3 ~@8", // C5 C D Em
  K: "d4@8 ~@4 [d4,f#4]!2 ~ [e4,g4], f#4 ~@15", L: "[d4,f#4,g4] ~, e4 ~@15",
})).s("gm_brass_section").gain(0.48).pan(0.6)

// chords · epiano2
const epiano2 = note("<~@4 A B C D A B E F ~@8 A B C D A B E F ~@8 A B C D G B E F A B C D G H ~@2>".pickRestart({
  A: "[g3,c4]!2 g3 d4 [g3,c4] [f#3,a3,d4] g3 d4 ~ f#3 ~ d4 ~ f#3 g3 d4, ~@5 g3 ~@2", // C5 D
  B: "~ f#3 g3 d4 ~ f#3 ~ d4 ~ e3 f#3 c4!2 b3 g3@2, ~@3 g3 ~@4",
  C: "~@2 [g3,c4]!2 ~@2 [g3,c4] [a3,d4] ~@2 [a3,d4]!2 ~ [a3,d4]@3", D: "g3@3 ~ a3@2 a3@2",
  E: "~@3 [g4,g5]@2 ~@2 [g4,g5]@2 ~@2 [g4,g5]@2 ~ g3@2", F: "~@3 [g4,g5]@2 ~@2 [g4,g5]@2 ~@2 [g4,g5]@2 ~@3",
  G: "[g3,c4] g3!2 d4 g3 [f#3,a3,d4] g3 d4 ~ f#3 ~ d4 ~ f#3 g3 d4, ~ c4@3 c4@4 ~@2 g3@2 ~@4", // C5 D
  H: "~ f#3 g3 d4 ~ f#3 ~ d4 ~@8, ~@3 g3 ~@4",
})).s("gm_epiano2").gain(0.64).pan(0.7)

// chords · epiano2 · soft notes · G
const epiano2_soft = note(`<
  ~@49
  [~@9 e3 f#3 c4!2 b3 g3@2]
  [~@3 [g4,g5]@2 ~@2 [g4,g5]@2 ~@2 [g4,g5]@2 ~ g3@2]
  [~@3 [g4,g5]@2 ~@2 [g4,g5]@2 ~@2 [g4,g5]@2 ~@3]
>`).s("gm_epiano2").gain(0.24).pan(0.7)

// bass · synth bass 1
const bass = note("<~@4 A B A B C D E F ~@8 A B A B C D E F ~@8 A B A B C D E F G B A B C H ~@2>".pickRestart({
  A: "c1@2 ~@5 d1 d1@4 ~@4", B: "e1@3 ~@4 e1 f#1 ~ f#1@3 g1@2 g1", C: "c1!2 ~@5 c1 d1!4 ~@4",
  D: "e1@3 ~@4 e1 f#1 ~ f#1@3 g1@3", E: "a1@3 ~@4 a1 a1@3 ~@3 a2@2", F: "d3@3 ~@4 d3 d3@3 ~@5", G: "~@7 d1 d1@4 ~@4",
  H: "e1@3 ~@4 e1 f#1 ~ f#1@3 ~@3",
})).s("gm_synth_bass_1").gain(0.56)

// bass · synth bass 1 · soft notes
const bass_soft = note("<~@49 [~@13 g1@3] [a1@3 ~@4 a1 a1@3 ~@3 a2@2] [d3@3 ~@4 d3 d3@3 ~@5]>")
  .s("gm_synth_bass_1").gain(0.24)

// other · clavinet
const clavinet = note("<~@21 A ~ A ~@13 A ~ A ~@5 A ~ A ~@4>".pickRestart({
  A: "f#3!16",
})).s("gm_clavinet").gain(0.36).pan(0.3)

// other · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@2
>`.pickRestart({
  A: "~@11 d6!5", B: "~@9 d6!7",
})).s("gm_lead_8_bass_lead").gain(0.48).pan(0.1)

// other · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B
>`.pickRestart({
  A: "~@9 d6!2 ~@5", B: "~@9 d6!7",
})).s("gm_lead_8_bass_lead").gain(0.24).pan(0.1)

// other · harpsichord
const harpsichord = note("<A@3 ~ A@6 ~@10 A@6 ~@10 A@6 ~@2 A@6 ~@2>".pickRestart({
  A: "f5@3 ~@5 f5@3 ~@5",
})).s("gm_harpsichord").gain(0.41)

// bass · piano
const bass_2 = note("<~@4 A B C D E F G H ~@8 A D A D E F G H ~@8 A D A D E F G H A D A D E I ~@2>".pickRestart({
  A: "c2@2 ~@5 d2 d2@4 ~@4", B: "e2@3 ~@4 e2 f5@2 f#2@3 g2@2 g2, ~@8 f#2 ~@7", C: "[c2,f5]@3 ~@4 d2 d2@4 ~@4",
  D: "e2@3 ~@4 e2 f#2 ~ f#2@3 g2@2 g2", E: "c2 ~@6 c2 d2!4 ~@4", F: "e2@3 ~@4 e2 f#2 ~ f#2@3 g2@3",
  G: "a2@3 ~@4 a2 a2@3 ~@3 a2@2", H: "d3@3 ~@4 d3 d3@3 ~@5", I: "e2@3 ~@4 e2 f#2 ~@7",
})).s("gm_piano").gain(0.41)

// bass · piano · soft notes
const bass_soft_2 = note("<~@49 [~@10 f#2@3 g2@3] [a2@3 ~@4 a2 a2@3 ~@3 a2@2] [d3@3 ~@4 d3 d3@3 ~@5]>")
  .s("gm_piano").gain(0.15)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@49 [~@7 x!2 ~@3 x!4] [x ~@6 x!2 ~@7] [~@12 x!4]>").gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@49 [~ x ~ x]!2 [~@3 x]>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@7 B A@7 B A@7 B A@7 B A@7 B A@4 C ~@3>".pickRestart({
  A: "x!16", B: "x!13 ~@3", C: "x!15 ~",
})).gain(0.72)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@48 [~@15 x] [x!16]!2 [x!13 ~@3]>").gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · shaker
const shaker = s("sh").struct("<[~ x!2 ~ x ~@7 x!2 ~@2]!49 ~@3>").gain(0.72)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@49 [~ x!2 ~ x ~@7 x!2 ~@2]!3>").gain(0.24)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  A B C D E F E F@3 E D E F E F@3 E D E F E F@3 E D E F E F@3 E D E F E F@3 E D E F E F@3 E D
>`.pickRestart({
  A: "x!3 ~ x ~ x ~", B: "x ~ x!2", C: "x!4", D: "x!3 ~", E: "~@3 x", F: "~ x",
})).gain(2.09)

stack(
  epiano1, epiano1_soft, brass_section, epiano2, epiano2_soft, bass, bass_soft, clavinet, lead_8_bass_lead,
  lead_8_bass_lead_soft, harpsichord, bass_2, bass_soft_2, kick, kick_soft, snare, snare_soft, hihat, hihat_soft, crash,
  shaker, shaker_soft, triangle
)

More by Another Level