Skip to content
BoWen Chai's Notes
Go back

Create Classic Glass Animals-Style Music in Strudel

Edit page

Glass Animals combine psychedelic indie pop with R&B and hip-hop production: dry, syncopated drums; warm sub-bass; processed guitar; unusual organic textures; bittersweet extended chords; and short hooks that leave room for the vocal.

The two runnable sketches below are original style studies, not transcriptions. They use new chord progressions and melodies while exploring the production ideas behind Heat Waves and Youth. They are also entirely synthesized, so pressing Play does not require an external sample download.

Heat Waves: hazy nocturnal pop

For Heat Waves, Dave Bayley recorded guitar parts an octave above and below the original to leave space in the middle for the vocal. He then added a deep synth, layered acoustic and electronic drums, off-beat seventh chords, larger chorus vocals, and 808 bass. He describes those parts in the Song Exploder episode transcript.

This sketch translates that approach into a slow D Dorian loop. A filtered sawtooth supplies warmth, two short pluck voices surround the middle register, and a sine-wave sub carries the harmony. The drums stay dry and slightly asymmetrical.

stack(
  // A round synthesized kick with two late, syncopated hits.
  note("[d1 ~ ~ ~] [~ ~ ~ d1] [d1 ~ ~ ~] [~ ~ d1 ~]")
    .sound("sine")
    .penv(28)
    .pdecay(0.075)
    .decay(0.2)
    .sustain(0)
    .gain(0.3),

  // Layered noise gives beats two and four a dry clap/snare character.
  sound("~ [pink,white] ~ [pink,white]")
    .hpf(900)
    .lpf(5200)
    .decay(0.105)
    .sustain(0)
    .late(0.01)
    .gain(0.052),

  // Alternating levels make the eighth-note hats breathe.
  sound("white*8")
    .hpf(6800)
    .decay(0.018)
    .sustain(0)
    .gain("[0.01 0.024]*4"),

  // Dm9 → Fmaj7 → Am7 → G9, one chord per bar.
  note("<[d3,f3,a3,c4,e4] [f3,a3,c4,e4] [a2,c3,e3,g3] [g2,b2,d3,f3,a3]>")
    .sound("sawtooth")
    .lpf("<760 920 680 1050>")
    .attack(0.05)
    .decay(0.45)
    .sustain(0.3)
    .release(1.1)
    .room(0.24)
    .gain(0.07),

  // A sparse upper pluck suggests heavily processed guitar.
  note("<[a4 ~ c5 e5] [a4 c5 ~ e5] [g4 ~ c5 e5] [a4 g4 d5 ~]>")
    .sound("triangle")
    .hpf(420)
    .lpf(3000)
    .decay(0.13)
    .sustain(0)
    .release(0.16)
    .pan("<0.3 0.7>")
    .delay(0.11)
    .room(0.18)
    .gain(0.075),

  // A lower answer creates the octave-separated guitar effect.
  note("<[d3 ~ f3 a3] [c3 ~ f3 a3] [e3 ~ g3 c4] [d3 b2 ~ a2]>")
    .sound("triangle")
    .hpf(180)
    .lpf(1700)
    .decay(0.16)
    .sustain(0)
    .pan("<0.68 0.32>")
    .gain(0.055),

  // A restrained 808-like sub follows the four-bar harmonic movement.
  note("<[d1 ~ d2 ~] [f1 ~ f2 ~] [a1 ~ a1 ~] [g1 ~ [g1 a1] ~]>")
    .sound("sine")
    .lpf(260)
    .attack(0.018)
    .decay(0.3)
    .sustain(0.42)
    .release(0.32)
    .gain(0.18),

  // An original, compact four-bar vocal-like hook.
  note("<[a4 ~ c5 d5] [~ a4 g4 ~] [e5 ~ d5 c5] [a4 g4 ~ ~]>")
    .sound("sawtooth")
    .vowel("<a e i o>")
    .lpf(1750)
    .attack(0.025)
    .decay(0.17)
    .sustain(0.12)
    .release(0.3)
    .delay(0.16)
    .room(0.38)
    .gain(0.047)
).cpm(82 / 4)

To make it more intimate, mute the final hook and upper pluck. To make a chorus, restore both parts, raise the chord filter values slightly, and increase the sub-bass gain by no more than 0.02.

Youth: bright, bouncing psychedelia

Bayley explained that the guitar on Youth began as a rough laptop-microphone recording that he processed until it barely sounded like a guitar. His percussion often comes from homemade recordings and is treated as another melodic hook, according to his Universal Audio interview. He also turned an owl recording into a playable synth for the track, as described in his Coup De Main interview.

This faster A Dorian sketch uses a narrow, clipped pluck and a pitch-envelope lead to suggest those transformed organic sounds. The percussion is busier than in the first loop, but each hit remains short and dry.

stack(
  // A buoyant kick pattern with movement before beats three and four.
  note("[a0 ~ ~ ~] [~ ~ a0 ~] [a0 ~ ~ a0] [~ ~ a0 ~]")
    .sound("sine")
    .penv(31)
    .pdecay(0.065)
    .decay(0.17)
    .sustain(0)
    .gain(0.28),

  // A short, bright backbeat stays almost completely dry.
  sound("~ [white,pink] ~ [white,pink]")
    .hpf(1150)
    .lpf(5900)
    .decay(0.085)
    .sustain(0)
    .gain(0.05),

  // Light swing prevents the hats from sounding mechanically straight.
  sound("white*8")
    .hpf(7200)
    .decay(0.014)
    .sustain(0)
    .swingBy(0.075, 4)
    .gain("[0.012 0.027]*4"),

  // Tiny pitched percussion acts as part of the hook.
  note("~ [e5 ~] ~ [b4 e5]")
    .sound("sine")
    .penv(7)
    .pdecay(0.045)
    .decay(0.075)
    .sustain(0)
    .pan("<0.25 0.75>")
    .gain(0.055),

  // Am9 → D9 → Cmaj7 → Em7 gives minor color with a bright lift.
  note("<[a2,c3,e3,g3,b3] [d3,f#3,a3,c4,e4] [c3,e3,g3,b3] [e3,g3,b3,d4]>")
    .sound("triangle")
    .lpf("<1250 1550 1380 1100>")
    .attack(0.035)
    .decay(0.32)
    .sustain(0.28)
    .release(0.75)
    .room(0.14)
    .gain(0.085),

  // A deliberately narrow, clipped texture stands in for mangled guitar.
  note("<[e4 ~ a4 c5] [f#4 a4 ~ c5] [e4 g4 b4 ~] [d4 ~ g4 b4]>")
    .sound("sawtooth")
    .hpf(720)
    .lpf("<2100 2700 2350 1850>")
    .decay(0.09)
    .sustain(0)
    .release(0.12)
    .pan("<0.72 0.28>")
    .gain(0.046),

  // Syncopated roots keep the bass melodic rather than purely functional.
  note("<[a1 ~ a2 e2] [d2 ~ a1 c2] [c2 ~ g1 b1] [e2 ~ b1 d2]>")
    .sound("sine")
    .lpf(330)
    .attack(0.012)
    .decay(0.22)
    .sustain(0.3)
    .release(0.2)
    .gain(0.16),

  // Pitch bends turn this original melody into an owl-like synth call.
  note("<[e5 ~ a5 g5] [f#5 e5 ~ b5] [g5 ~ e5 d5] [b4 d5 e5 ~]>")
    .sound("triangle")
    .penv("<3 5 2 4>")
    .pdecay(0.11)
    .lpf(2600)
    .attack(0.018)
    .decay(0.19)
    .sustain(0.08)
    .release(0.26)
    .delay(0.13)
    .room(0.28)
    .gain(0.065)
).cpm(96 / 4)

To make the loop more playful, change the tiny percussion line to note("~ [e5 a5] ~ [b4 e5]"). To create a calmer verse, mute the owl-like lead and reduce the hats to sound("white*4").

Reuse the style without copying the songs

Keep the contrast between intimate and expansive sections more carefully than any individual sound:

  1. Begin with one processed pluck or chord texture.
  2. Add dry kick, snare, and a quiet melodic percussion detail.
  3. Introduce sub-bass only after the rhythm is established.
  4. Save the brightest hook, wider register, and longest reverb for the chorus.
  5. Build a new melody from a short rhythmic phrase rather than borrowing the melody of either reference track.

Strudel measures time in cycles. With four perceived beats per cycle, .cpm(82 / 4) means 82 BPM in the first sketch and .cpm(96 / 4) means 96 BPM in the second. See Strudel’s guides to cycles, synthesis, and audio effects for the underlying controls.


Edit page
Share this post:

Next Post
Build a Cozy Lo-fi Study Loop with Strudel