Skip to content

FluidEQ 0.7.0

Choose a tag to compare

@StartSWest StartSWest released this 05 Aug 03:11
· 490 commits to main since this release

New

  • The live spectrum can be drawn thirty-six different ways, in two palettes.
    Bars, a ridge, a staircase, floating peak caps, a contour map that shows how
    wide a peak is rather than only how tall, a slope field that draws which way
    the spectrum is turning, stalactites hung from the ceiling, a heart monitor
    that beats once per band, a car riding the loudest frequency along a road made
    of the trace, and a rank of little sprites hanging at their levels. Pick one
    from the searchable list on the legend, or click the graph to walk through
    them while you listen — Space does the same, and Ctrl with either steps
    back.
  • Every form moves in its own way. A bar snaps up and hangs, the way a level
    meter does, so a kick lands as a step. A ridge is a landscape and moves like
    one, because a hill that twitches reads as noise. The pulse is nearly
    instant, because a heartbeat that arrives late is not a heartbeat. Choosing a
    drawing changes how the music feels, not just what it looks like.
  • Wave only hides the EQ response, the voicing and driver layers and the
    band handles, leaving the live trace alone on the grid.
  • Full screen clears the bands out of the way and presents the graph in the
    middle of the workspace. Esc brings them back.
  • Ten ways to draw the titlebar meter, cycled by clicking it.
  • Smart EQ is its own layer. It used to rewrite your bands, so applying it
    overwrote the tuning you had done by hand and clearing it took your work with
    it. It now sits on top of everything else with its own chip, and survives
    clearing an AutoEQ reference. It also no longer inverts your own bands: the
    target it corrects towards includes them, where before it measured as if they
    were not there.
  • An applied reference arrives band by band, in frequency order, instead of
    every slider jumping at once. You can see what it did rather than just what
    it left behind.
  • Zoom the whole interface with Ctrl and +, - or 0. Keyboard only,
    deliberately — the mouse wheel belongs to the sliders.
  • There is a game hidden in the support panel, for anyone with the
    contribution badge. Tap the creature or press space on the beat of whatever
    you are playing. It reads the real percussion out of your own audio, so it is
    your music you are playing along to.
  • Euphoria mode. Thirty-six consecutive perfect taps and the entire
    application goes rainbow with the music: the bands, the response curve, the
    meter, the menus and the release notes. One mistake and it all goes back to
    being an equaliser.
  • Share your run. A card is drawn with the creature, your score and the
    mode's own look, ready to post — copy it straight to the clipboard and paste
    it into whatever you are writing.

Changed

  • Both waveforms move at the display's rate, not the analyser's. Sound is
    measured about twenty-two times a second, so drawing only when a measurement
    lands meant two frames in three showed the same picture as the one before —
    which the eye reads as stepping. They are drawn between measurements now,
    gliding toward each new one: at the full rate of your screen during euphoria,
    and capped at thirty otherwise, because a meter beside an equaliser does not
    need sixty and the frames are not free.
  • The graph keeps time with the music instead of catching up with it. The
    analysis window was twice as long as it needed to be and the smoothing on top
    of it added more, so the picture arrived about ninety milliseconds after the
    sound. It is closer to fifty now, and it is quick to rise and slow to fall
    rather than sluggish in both directions, which is what makes it pump rather
    than sway.
  • The graph reaches further across. The axis started at 10Hz but ended at
    25kHz, which on a logarithmic scale left three times as much empty space
    before 20Hz as after 20kHz. Both marks now sit the same distance from their
    edge, and the drawing gets the space back.
  • The grid and the supporting curves have stepped back so the response you
    are editing is obviously the subject rather than one line among five.
  • The installer opens FluidEQ when it finishes. Updates already did; a
    fresh install left you looking at a closed wizard.
  • FluidEQ is called FluidEQ in Task Manager, in development as well as in
    the installed app.
  • The language picker is one of the app's own dropdowns, not the operating
    system's, and it opens downwards at a sensible size.
  • The titlebar sits almost flush with the page, so the window reads as one
    surface rather than a bar stuck on top of one.
  • The delete-band button becomes an icon when the row runs out of room, and
    gets its label back when there is space for it. It is a bin now, not a cross:
    a cross reads as "close", which is the wrong promise.
  • The score measures accuracy, not endurance. Only a perfect adds; anything
    else pays a little and gives back a share of the total. Playing longer cannot
    move anyone past their own precision.

Fixed

  • FluidEQ was capturing your screen the entire time it was open, and the
    memory that took never came back — several gigabytes and still climbing after
    a few minutes. Windows only offers system audio through the same call that
    offers screen sharing, so a video track arrives whether or not anything wants
    one. It was being switched off in a way that mutes what a track delivers
    while leaving the capture behind it running, so full-resolution frames were
    produced continuously and nothing ever read them. The video is now released
    outright the moment the audio arrives.
  • Euphoria mode ate memory without limit — a few hundred megabytes with it
    off, several gigabytes and still climbing with it on. The travelling colour
    was animated on the window itself and inherited by everything inside it, so
    the browser had to recompute every element on the page sixty times a second
    for as long as the mode was running; the interface went sluggish, the graph
    stuttered, and the waste piled up faster than it could be cleared. The colour
    now travels only on the handful of things that actually show it. Two of those
    things also carried an animated glow over a picture that redraws twenty-two
    times a second, which meant re-rendering everything beneath it on every
    frame — that glow sits outside the moving part now. It looks the same.
  • A request that timed out leaked its listener, forever. The bridge that
    cleans up after an internal request rebuilt the wrong function and so removed
    nothing at all, silently. Beyond the memory, the abandoned listener stayed
    first in the queue and would answer somebody else's later request with the
    wrong result.
  • A band deleted mid-animation stayed in memory until the animation it was
    never going to finish would have ended. One is nothing; an afternoon of
    adding, dragging and deleting bands is not, and none of it is visible while it
    accumulates.
  • Clearing an applied reference clears its bands. The notes previously
    claimed the bands stayed, which was wrong in both directions — a reference is
    where your tuning came from, not a label beside it.
  • The pet stops reacting to a paused waveform, and stops swaying in a
    silent room. The analyser freezes mid-frame when paused, and it was dancing
    to a reading that had stopped being true.
  • The graph could not draw. 0.6.0 shipped a build that dropped d3's
    transition module, so every animated part of the response chart threw
    e.transition is not a function and the window came up broken. The build had
    been told d3 was free of side effects, which is true of almost all of it and
    false of exactly the piece that matters: transitions install themselves onto
    d3's selections when the module is evaluated, and nothing refers to them by
    name, so the bundler quite reasonably concluded they were unused and removed
    them. 0.6.0 and 0.6.1 were both withdrawn; everything they contained is in
    this release.

Faster

  • The renderer is 44% smaller. Nothing was being tree-shaken at all — the
    TypeScript build emitted require() calls before webpack ever saw the import
    graph, so every unused corner of every library shipped. d3 alone was dragging
    in geo, force, contour and delaunay to draw an axis.
  • The creature stopped re-rendering twenty-two times a second. It sits in
    the titlebar, so that never stopped: not when the window was idle, not when
    nothing was playing.
  • The device list stops polling while the window is hidden. Each tick
    enumerates every audio endpoint on the machine.
  • The spectrum is drawn as sixty-four columns rather than three hundred and
    twenty.
    At that density the bars touched, so it read as a filled area with a
    ragged top — a worse picture, built from a path string five times longer,
    rebuilt on every frame.
  • The spellchecker is gone. It was downloading a dictionary to check the
    spelling of preset names.