Skip to content

opal v1.0.2

Choose a tag to compare

@github-actions github-actions released this 18 Jul 18:34
· 4 commits to main since this release

Added

  • The web player accepts a ?play=1 query parameter and starts the first track on load, or
    on the first tap where the browser demands a gesture. The README's live demo links use it.
  • BINDINGS.md lists third-party language bindings, starting with
    opal-zig.

Fixed

  • The example player's DRO decoder assumed the 24-byte v1 header. The earliest DOSBox builds
    wrote a single-byte hardware type (21-byte header), so those files lost their first commands
    or desynced. Nonzero bytes in the padding now identify them (AdPlug's heuristic).
  • The web player's nine channel meters no longer run a cosmetic CSS animation. They track the
    live OPL envelopes (EgOut on each channel's modulator and carrier) via a new webLevels
    export, so bars rise and fall with the music being played.

Documentation

  • opal.h documents the channel-to-operator slot layout (modulator Op[slot], carrier
    Op[slot + 3], with the ch_slot table inlined) so state snapshot consumers such as
    visualizers stop guessing a sequential pair layout that is wrong for every channel but 0.
  • opal.h documents the operator fields most useful to visualizers: EnvelopeStage values,
    EgOut as total attenuation in 0.1875 dB steps, and Key as a key-on source bitmask.
  • opal.h warns that Opal_Init wires internal cross pointers, so an instance must be
    initialized in place and never copied or relocated afterwards.
  • README and CONTRIBUTING cover DRO early headers, Opal pointer stability, buffered ports,
    CI on main only, and core versus player naming.