Strudelify
Acid Folk cover art

Acid Folk

Acid Folk

Perplexer

KeyG majorTempo161 bpm
0:00/0:00
// Acid Folk — Perplexer
// 161 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 219 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(161/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · lead 8 bass lead · "BASS&LEAD"
const bass = note(`<
  ~@42 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~ A@3 B A@3 B A@3 B
  A@4 ~@24 A@3 B A@3 B A@3 B A@3 ~ A@3 B A@3 B A@3 B C D C E A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@17
>`.pickRestart({
  A: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~", B: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2!2 g1 ~ g2 ~",
  C: "~@2 g2 ~@3 g2 ~@3 g2 ~@3 g2 ~", D: "~@2 g2 ~@3 g2 ~@3 g2 ~ f2 ~ g2 ~", E: "~@2 g2 ~@3 g2 ~ g2 ~ g2!3 ~ g2 ~",
})).s("gm_lead_8_bass_lead").gain(0.64)

// other · bagpipe · "BAG PIPE"
const bagpipe = note("<A@5 B@6 C@5 D@6 E@44 ~@16 E@24 ~@56 E@12 F@3 ~@42>".pickRestart({
  A: "[~ g2@9]/5", B: "[~@7 g2@41]/6", C: "[~ g2@19]/5", D: "[~@5 g2@43]/6", E: "g2/4", F: "g2/3",
})).s("gm_bagpipe").gain(0.4).pan(0.3)

// other · shanai · "SHANNAI"
const shanai = note(`<
  A@3 B@7 C D@4 E@5 F@2 G H I J K L K L K L K L K L K L K L K L K L K L K L K L K L K L M L K L M L K L M L K L ~@16 K L
  K L K L K L K L K L M L K L M L K L M L K L ~@56 K L K L K L K L K L K L M L K ~@42
>`.pickRestart({
  A: "[~@8 a4@21 ~ d5@18]/3", B: "[f5@15 d5@6 a4@5 f5@12 e5@4 d5@4 a4@21 d5@19 f5@15 d5@6 a4@5]/7", C: "f5@3 e5",
  D: "[d5@4 a4@21 d5@19 f5@15 d5@5]/4", E: "[~ a4@5 f5@12 e5@4 d5@4 a4@21 d5@19 f5@14]/5",
  F: "[~ d5@6 a4@5 f5@12 e5@4 d5@4]/2", G: "a4 f5 a4 d5", H: "f5@4 a4@3 d5@3 d5@3 f5@3",
  I: "f5@3 d5@2 a4@3 f5@3 e5@3 c5@2", J: "~ g4@2 c5@3 e5@2 g5@2 ~ f5@2 e5@2 ~", K: "a4@2 d5 ~ d5@2 f5@4 d5@2 a4@2 f5@2",
  L: "e5@2 g5@2 f5@2 e5 ~ e5@2 d5@2 d5@2 a4@2", M: "a4 ~ d5 ~ d5@2 f5@4 d5@2 a4@2 f5@2",
})).s("gm_shanai").gain(0.35)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~@66
  [~ f3!3 g3!4 d4 f4 d4@2 g3@2 ~@2]!8
  [~ f3 f#3!2 g3!4 d4 f4 d4@2 g3@2 ~@2]
  [~ f3!3 g3!4 d4 f4 d4@2 g3@2 ~@2]!6
  ~@97
  [~ f3!3 g3!4 d4 f4 d4@2 g3@2 ~@2]!24
  ~@17
>`).s("gm_lead_1_square").gain(0.45)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square_2 = note(`<
  ~@73 A B C B C B C B ~@24 A B C B C B C B C B C B C B C B D ~@31 A B E B F B E B ~@32 A B C B C B C B C ~@17
>`.pickRestart({
  A: "~@7 g2", B: "~@2 g2 ~ g2@3 ~@3 g2 ~ g2@3 ~", C: "~@2 g2 ~@2 g2 ~ g2", D: "~@2 g2 ~@2 g2 ~@2",
  E: "~@2 g2 ~ g2@2 ~@4 g2@2 ~@2 g2@2", F: "~@2 g2 ~ g2@3 ~@3 g2@2 ~@2 g2@2",
})).s("gm_lead_1_square").gain(0.61).pan(0.4)

// chords · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@122 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 D@2 ~@48 A@2 B@2 C@2 A@4 B@2 C@2 E@3
>`.pickRestart({
  A: "[g3,d4,g4,b4,d5]/2", B: "[f3,c4,f4,a4,c5]/2", C: "[c4,e4,g4,c5,e5]/2", D: "[[g3,d4,g4,b4,d5]@31 ~]/2",
  E: "[[g3,d4,g4,b4,d5]@5 ~]/3", // G
})).s("gm_pad_halo").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@26 A@7 ~ B@7 C B@23 ~ B@15 ~ B@23 ~ B@16 D E D ~ D ~ D F B@23 C B@7 ~ B@12 ~@4 B@23 ~ D E D ~ D ~ D F D ~@8
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", D: "x", E: "~@5 x ~@2", F: "x!8",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@26 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@6 C@2 ~@16 A B A B A B A B A B A B A B A B A@6
  C@2 ~@14 C@2 ~@40 A B A B A B A B A B A B A B A ~@42
>`.pickRestart({
  A: "x!8", B: "~@2 x!6", C: "x!16",
})).gain(0.32)

// drums · clap
const clap = s("cp").struct("<~@122 [~ x ~ x]!39 ~@41 [~ x ~ x]!8 ~@9>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@38 A@20 ~@8 A@32 ~@8 A@8 ~@48 A@40 ~@17>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@34 A@24 B@8 A@32 B@8 A@8 B@8 ~@8 A@80 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@50 A@32 ~@8 A@32 ~@16 A@24 ~@8 A@32 ~@17>".pickRestart({
  A: "x!16",
})).gain(0.56)

// drums · splash
const splash = s("cr").struct(`<
  ~@64 A@2 ~@8 B ~@5 A C ~@22 A@2 ~@14 A@2 B D B ~ B ~ B E ~@23 A ~@7 A ~@15 A ~@8 F ~ F ~ F ~ F A F ~ F ~ F ~ F A B D B
  ~ B ~ B E B D B ~ B ~ B ~@2
>`.pickRestart({
  A: "x!4", B: "x", C: "x!5 ~ x!2", D: "~@5 x ~@2", E: "x!8", F: "x!2 ~@2",
})).gain(0.56)

stack(
  bass, bagpipe, shanai, lead_1_square, lead_1_square_2, pad_halo, kick, snare, clap, hihat, open_hat, tambourine,
  splash
)

More by Perplexer