Skip to content

Solidify playback API, rendering pipeline, and coverage#16

Merged
heucuva merged 2 commits into
gotracker:mainfrom
heucuva:playback-bulk-improvements
Dec 24, 2025
Merged

Solidify playback API, rendering pipeline, and coverage#16
heucuva merged 2 commits into
gotracker:mainfrom
heucuva:playback-bulk-improvements

Conversation

@heucuva

@heucuva heucuva commented Dec 24, 2025

Copy link
Copy Markdown
Contributor

Added

  • Explicit Advance/Render API alongside compatibility Tick; sequencing and render separation tests.
  • Mixer read-only accessor (MixerConfig) while keeping legacy pointer for compatibility.
  • Focused tests across player/machine lifecycle, feature parsing, playback contracts, period/frequency math, mixers/panning, filters/DSP, oscillators, instruments, song helpers, tracing/logging, voice components (including envelopes, autovibrato, sampler behaviors), format loaders (IT/S3M/XM/MOD), and utility helpers.
  • Documentation notes covering sampler concurrency expectations and mixer ownership/callback behavior.

Fixed or Changed

  • Tick now enforces a non-nil sampler and delegates to Advance/Render.
  • Sampler examples updated for the stereo separation parameter; sampler render pipeline refactored into isolated, testable steps with hardware synth handling abstracted.
  • Channel display output split into MVVM-style layers to decouple UI rendering from player state.
  • Generics pared back where unused and reflection-based option handling replaced with typed options; OPL2 hardware mix tolerates mismatched sample lengths.
  • Playback/feature option parsing and tracker-version quirks wiring refined for deterministic sequencing, loop handling, and tick/render behaviors.
  • Stereo mixing now properly accounts for singular power factor, which matches modern stereo mixing behaviors.
  • Stereo separation is now properly handled across all calculations, not just matrix mixing.
  • Dolby Pro Logic II surround sound now mixed correctly in Stereo mode.

Removed

  • Unused type parameters and reflection-based option paths trimmed from effects/helpers and tracing entries.

- Added explicit Advance/Render API, enforced non-nil sampler in Tick, and migrated callers off Tick.
- Pruned unused generics and reflection options, replacing them with typed options/interfaces.
- Exposed read-only mixer accessor while keeping legacy pointer compatibility.
- Extracted render pipeline stages and isolated OPL2 handling; split channel display into MVVM-style layers.
- Documented sampler concurrency expectations and mixer ownership/callback behavior; refreshed examples for new sampler signature.
- Expanded focused tests for sequencing vs rendering, option parsing, mixers/panning, filters/DSP, player lifecycle/render, output pipeline, voice components (sampler/envelopes/OPL2), period/frequency math, format loaders (IT/S3M/XM/MOD), registration wiring, tremor, tracing/logging, and utility helpers.
- Fixed IT correctness quirks (pan clamping, panbrello/tremolo oscillator choice, disabled channel handling, random-wave delay, muted-but-processing channels).
- Stabilized mixing by clamping denormals and matching echo filter semantics to Microsoft behavior.
- Added tracker-version quirks framework for opt-in compatibility behaviors.
@heucuva heucuva merged commit c1453b2 into gotracker:main Dec 24, 2025
@heucuva heucuva deleted the playback-bulk-improvements branch December 24, 2025 19:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant