Skip to content

7.4.0

Latest

Choose a tag to compare

@juzzlin juzzlin released this 05 Sep 07:57
· 11 commits to master since this release

Release date:

Fri, 04 Sep 2026 18:36:50 +0300

New features:

  • Add per-pad tuning to the Sampler

    • Coarse in whole semitones, two octaves either way, plus fine tuning in cents
  • Add a per-pad amp envelope to the Sampler

    • Attack, decay, sustain and release, on top of the pad's own filters
  • Add an end offset and reverse playback to the Sampler's pads

    • The end offset trims the pad the way the start offset already did
    • Reverse plays the trimmed range backwards
  • Add looping to the Sampler's pads

    • Repeats the pad's range until the note is released
    • Works with reverse, and wraps on whole frames so the loop does not buzz
  • Add a loop point to the Sampler's pads

    • The pad plays its range once and then repeats only what follows the point
    • Turning looping on drops the point in the middle of the range
  • Draw the pad's amp envelope over the Sampler's waveform

    • White lines over the range, the release included
  • Drag the Sampler's start, end and loop markers on the waveform

    • Each has a handle, and neither trim can be dragged past the other
  • Add choke groups to the Sampler's pads

    • Triggering a pad silences the other pads sharing its group
    • Eight groups, the way a closed hi-hat cuts off an open one

Bug fixes:

  • Validate the --window-size argument

    • A malformed size reported "stoi" instead of saying what was wrong
    • A zero or negative size was accepted and saved over the stored one
  • Stop rebuilding the Sampler's waveform for every pad setting

    • The sample file was read again on every knob move
  • Fix the Sampler's offsets at whole seconds

    • Some read back a second short, with a thousand milliseconds beside them
  • Stop Piano Synth V3 clicking when a key is struck over its own decay

    • The restrike zeroed the sounding string instead of damping it
    • A restrike under the sustain pedal now layers, as the instrument does
  • Steal the quietest Piano Synth V3 voice once all sixteen are sounding

    • Round-robin cut the loudest note as readily as the faintest
  • Stop sending note-offs for notes that never played

    • A muted or unsoloed track logged "No port found" once per note
  • Ask PulseAudio for the latency the audio buffer size implies

    • The stream took the server's own, on PipeWire up to 2048 frames
    • The callback then came four buffers at a time, and notes landed on
      the 42 ms burst instead of the buffer
  • Give devices a MIDI event queue that carries the frame to play on

    • The engine breaks a block wherever an event falls, so a note no
      longer waits for the next block boundary
    • A device holding an event is no longer skipped for being silent
    • The engine publishes where it is in the stream and when, so a tick's
      time can be turned into the frame it falls on
  • Play internal synths on the frame the note was written for

    • The player runs a little ahead of itself and names the moment, so a
      note no longer waits for whichever block starts next
    • Only for songs played entirely by internal devices; anything going
      out of a port keeps the timing it had
    • How far ahead comes from what the backend is doing, so the buffer
      size no longer has to be guessed at
    • Controller and bend moves go the same way, so a value written on a
      note's own line still reaches the device with it