Releases

Changelog

Generated by Changesets from CHANGELOG.md. Install any version with pnpm add @schmooky/zvuk@<version>.

  1. v0.1.1

    GitHub release →
    patch 1 change
    • Fix `homepage` in package.json to point at the actual docs deploy
      (`https://zvuk.schmooky.dev`). v0.1.0 shipped with the wrong URL, so
      the npmjs.com page links to a non-existent domain. No code changes —
      this republishes the manifest with the correct metadata.
      Bundled doc fixes that came in alongside the rename (carried so the
      release notes describe what landed on the docs site):
      - Navbar version pill is now dynamic — reads `package.json#version`
        via SITE.version, so it stays in sync with whatever changesets
        publishes.
      - Navbar adds an npm icon-button linking to the package page.
      - Footer npm link uses the scoped name (`@schmooky/zvuk`) instead of
        the rejected unscoped one.
      - `/changelog/` page now sources from the root `CHANGELOG.md`
        (one card per published version, grouped by bump, with commit SHA
        and `@author` per bullet, deep-linkable `#v<version>` anchors).
        Replaces the previous "list pending changesets" view, which only
        showed unreleased work.
      - Hero badge and "What's in v…" heading also bind to SITE.version.
      - docs/index "What's coming" list rewritten to point at the roadmap
        (it had been listing items that already shipped).
  2. v0.1.0

    GitHub release →
    minor 2 changes
    • Initial Sprint 1 release: lazy AudioContext runtime, Master + named Buses, Sound + Voice with
      abort signals, codec-aware multi-source loading (`['sfx.webm', 'sfx.m4a']`), iOS-Safari resume
      dance, sample-accurate scheduler. Docs site with landing, quickstart, Engine concept page,
      asset-format guide, and a live Mixer Dashboard demo running on real assets.
    • Sweeps the public roadmap (Tiers 1–4) end-to-end:
      - Voice live control: `pause()`, `resume()`, `setPlaybackRate()`, exposed
        `voice.spatializer` for live `setPan` / `setPosition` while playing.
      - Audio sprites — one buffer, many named regions, one fetch — via
        `engine.loadSprite()` + `engine.sprite('cascade').play('match-3')`.
      - Stream source for long media via `engine.loadStream()` (HTMLAudioElement +
        MediaElementAudioSource), so multi-minute music tracks don't decode into RAM.
      - Loudness normalization: `loadSound(..., { normalize: true })` runs an
        RMS pass at decode and applies makeup gain (with peak ceiling).
      - Better error messages: BusNotFoundError / SoundNotFoundError now include a
        Levenshtein "did you mean?" suggestion when a close name exists.
      - Realtime time-stretch via AudioWorklet: `ensureStretchWorklet(ctx)` +
        `createStretchWorkletNode(ctx)` for live tempo automation.
      - Master limiter: `master.limiter` config (or `master.setLimiter(...)`) wires
        a fast-attack DynamicsCompressor on master out.
      - Crossfade helper: `engine.crossfade('intro', 'main', { ms })` — equal-power
        by default, picks up sourceName off the outgoing voices.
      - CLI: `npx zvuk transcode <glob>` (ffmpeg ladder) and
        `npx zvuk gen bank.json` (typed sound-name module).
      - Bench suite under `bench/` (vitest bench): voice spawn, decode + cache,
        fade drift.
      - Docs: TypeDoc-driven `/api/`, Pagefind ⌘K search, auto-built `/changelog/`,
        and per-page OG cards via astro-og-canvas.
      - Vanilla `examples/` (slot-machine, match-3, fps-footsteps) — no React/Vue.
    patch 1 change
    • Docs polish + agent-readable index:
      - `/llms.txt` route added (slotplate-style: H1, tagline, bulleted page index
        with descriptions). Linked from the top nav so both humans and crawlers
        hit it. Built from a single manifest in
        `docs/src/pages/llms.txt.ts` — keep it in sync when adding new docs pages.
      - Roadmap page rewritten: every Tier 1–4 item moved into a green
        "Recently shipped in v0.0.2" callout.
      - Concept and FX pages updated to describe the new APIs surfaced in the
        v0.0.2 sweep — sprite, stream, crossfade, master limiter, normalize,
        did-you-mean, pause/resume, setPlaybackRate, voice.spatializer live
        binding, realtime stretch worklet.
      - Loading guide expanded with stream/sprite/normalize/typed-banks sections.
      - SpatialPanner demo polished — pointer events + pointer capture (one path
        for mouse/touch/stylus), and now drives panning via the new
        `voice.spatializer.setPan()` ref instead of the v0 placeholder.
      - New `CrossfadeDemo` React island (Engine concept page) running a real
        `engine.crossfade()` between two music beds (`/audio/music-{a,b}.mp3`).
      - `examples/` (slot-machine, match-3, fps-footsteps) now use the casino
        SFX shipped under `docs/public/audio/` so the examples run with no
        extra setup. slot-machine streams the bed via `engine.loadStream`.
      - Kenney's "Digital Audio" pack (CC0) curated in under
        `docs/public/audio/` (laser/powerUp/phaseJump/zap, ×2 each), with
        attribution in the root README, examples README, and docs footer.
      - Build pipeline fixes: Search component switched to inline raw JS so
        Vite stops choking on `/pagefind/pagefind.js` at build time; OG route
        renamed `[slug].png.ts` → `[slug].ts` to fix the `*.png.png` filenames.
      - Tests: stream, crossfade source-filter precision, voice cues
        paused/resumed, stretch worklet (mocked). 40 tests pass.