You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.