Recent Post

Diatribe Machine Whines Low Quality Ephemera

I recently released my first EP: Diatribe Machine Whines Low Quality Ephemera- through my underutilized solo moniker "Joe Evil".

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

Diatribe Machine Whines Low Quality Ephemera is not about any one person, it's more about an environment. The characters that populate it are alienated, unmoored, corroding quietly as splayed pathways atomize them further from each other as their world rapidly morphs. They are constructs or vehicles. They speak in the first person but the "I" is borrowed, projected, a way of saying something true through someone despite their existence never being established. The enigmatic nature of the lore doesn't obfuscate from the intention of what presents as straightforward perspective driven songs.

That distance here is intentional though. They are subjects of the machine but also perpetuate it's purpose, mostly unknowingly.

The machine

What the machine does is produce low quality ephemera. This isn't an attempt at something self effacing- it's a reality of our times. We consume information developing at a rate faster than we can calibrate ourselves to monitor and digest it. Media, emotion, meaning, each other. The infrastructure that enables this such as feeds, dopamine fueled doom scrolls- that's the machine. The whine is what it sounds like when you slow down long enough to notice it's been running the whole time.

The ephemera

The music is almost redundant as it's a part of the systems of saturation- but the intention is to evoke feeling. A lot of these songs were short, simple songs- something intentional but also what I find quite enjoyable. Straightforward and digestable without over simplifications depreciating the intention. My hope was to leave any listener wanting more while letting out the lead a bit where it made sense.

The whine

But I'll be honest: the characters are inevitably just me. The alienation is ultimately mine. The decay I'm describing I see in myself as much as anywhere else. Joe Evil was meant to just be a conduit for me to express this- it exists because some things are easier to say when you put them in someone else's mouth. This record is just about tuning into the whine of the machine as you watch what it produces.

Archive

2026

  • Diatribe Machine Whines Low Quality Ephemera 03-09

    I recently released my first EP: Diatribe Machine Whines Low Quality Ephemera- through my underutilized solo moniker "Joe Evil".

    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

    Diatribe Machine Whines Low Quality Ephemera is not about any one person, it's more about an environment. The characters that populate it are alienated, unmoored, corroding quietly as splayed pathways atomize them further from each other while their world rapidly morphs. They are constructs or vehicles. They speak in the first person but the "I" is borrowed, projected, a way of saying something true through someone despite their existence never being established. The enigmatic nature of the lore doesn't obfuscate from the intention of what presents as straightforward perspective driven songs.

    That distance here is intentional though. They are subjects of the machine but also perpetuate it's purpose, mostly unknowingly.

    The machine

    What the machine does is produce low quality ephemera. This isn't an attempt at something self effacing- it's a reality of our times. We consume information developing at a rate faster than we can calibrate ourselves to monitor and digest it. Media, emotion, meaning, each other. The infrastructure that enables this such as feeds, dopamine fueled doom scrolls- that's the machine. The whine is what it sounds like when you slow down long enough to notice it's been running the whole time.

    The ephemera

    The music is almost redundant as it's a part of the systems of saturation- but the intention is to evoke feeling. A lot of these songs were short, simple songs- something intentional but also what I find quite enjoyable. Straightforward and digestable without over simplifications depreciating the intention. My hope was to leave any listener wanting more while letting out the lead a bit where it made sense.

    The whine

    But I'll be honest: the characters are inevitably just me. The alienation is ultimately mine. The decay I'm describing I see in myself as much as anywhere else. Joe Evil was meant to just be a conduit for me to express this- it exists because some things are easier to say when you put them in someone else's mouth. This record is just about tuning into the whine of the machine as you watch what it produces.

  • Recursive Sound 02-15

    If you haven't already, hit the button in the top right corner. That sound isn't a recording. It's being composed in real time by about 170 lines of JavaScript running in your browser.

    I wanted give the site more prescence as it's a simple site where I imagine I will post infrequently. So to breath some life into this site I repurposed a generative ambient engine that I had made for a porfolio piece called Recursive Canvas- with some tweaked additions to differentiate from it's origin.

    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

    How it works

    There's a pool of seven chords native to pop or lofi tunes for easy transitions. Each chord has a weight. When it's time to move on, the engine picks the next chord using weighted probability biased toward nearby harmonic neighbors. while close chords are more likely, distant leaps are rare but not impossible.

    const weights = chords.map((chord, i) => {
      const distance = Math.abs(i - current);
      return chord.weight / (1 + distance * 0.3);
    });

    The result is a progression that provides a meditative drift that i was surprisingly delight by myself. It's enchanting to listen to and wait to hear what comes next. As someone who doesnt always compose with theory as the foremost framework for which you write the music, it's a pleasant reminder just how much math resides in its creation.

    Two voices

    A synth plays full chords through a slow 6 second attack. This is just a pure sine pad with a subtle vibrato LFO fading in over 8 seconds. A stereo widener opens up at the 6 second mark adding a bit more space to the mix. When the notes release, a dedicated reverb ramps to fully- sometimes creating anomolies that I decided not to clean up as I felt it added some character.

    Sitting on top of that is a single voice arp. Using FM synthesis, triangle carrier with a sine modulator. It picks one note from the current chord, shifts it up two octaves. An LFO on the pitch kicks in almost immediately, giving each note a bit of movement.

    Signal chain

    Both voices signal chains feed into a master gain, then through a dotted-quarter feedback delay into a convolution reverb with 8-second decay:

    pad → vibrato → stereoWidener → padReverb → master
    arp → master
    master → feedbackDelay → reverb → output

    The pad reverb, widener, and vibrato all have time-scheduled parameter automation synced to the chord cycle.

    Generative music bad?

    With the advent of AI music inevitably creating an association with the term "generative music"- I feel the need to differential the two. But that will be for a later post.

    Nonetheless, it felt right to have endless generative music for a site called Diatribe Machine. The machine never stops producing.

2025

  • Init 04-04

    This will serve as an archive for writing and poetry that tends to collect digital dust in some file somewhere.

    I was obsessed with the idea of a blog with a classic but approachable aesthetic. So i built this with nothing but plain HTML, CSS, and JavaScript. No fancy modern frameworks. No annoying dependencies. Just code.

    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

    What to expect

    Just getting started here.

    const self = {
      state: 'undefined',
      entropy: Math.random() * 0xFFFF | 0,
    
      init() {
        this.state = 'listening';
        this.loop();
      },
    
      loop() {
        const signal = this.entropy-- > 0;
        if (!signal) return this.init();
        requestAnimationFrame(() => this.loop());
      }
    };
    
    self.init();

    That's it for now. More offerings for the void coming soon