Files
skills/plugins/document-navigator/docs/media/audio-ir/audio-ir-room-plugin-club/README.md
admin 9bf56a806b Move docs/ package mirror into document-navigator plugin
Relocate the ~6k-file docs tree from the repo root into
plugins/document-navigator/docs/ so the plugin is self-contained and
portable. docs/superpowers/ (specs and plans) stays at the repo root.

Moved via cp+rm rather than git mv because directory rename() fails with
EPERM on this WSL /mnt DrvFs mount; git rename-detection pairs the
identical-content files at commit time.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 01:10:00 +01:00

4.2 KiB

@suaveplan/audio-ir-room-plugin-club - Original audio-ir content package: ships the bundled club1.wav and club2.wav room impulse responses, registered through @suaveplan/storage-uri-plugin-bundle and @suaveplan/audio-ir-core. Universal; bundle-only content package.

Original audio-ir content package. Ships two bundled room impulse responses (club1.wav, club2.wav) wired through the @suaveplan/audio-ir-* family.

This package is the canonical example of the bundle-only content-package pattern in the IR family — every future audio-ir-{family}-plugin-<name> package that ships only local files follows this shape.

Documentation tree

  • manifest — The manifest constant is the single source of truth for which impulse responses this content package ships. It is a `…
    • manifest — The manifest constant is the single source of truth for which impulse responses this content package ships. It is a `…
  • register — This module is the only side-effecting entrypoint a consumer ever calls from @suaveplan/audio-ir-room-plugin-club. It…
    • register — This module is the only side-effecting entrypoint a consumer ever calls from @suaveplan/audio-ir-room-plugin-club. It…

Install

bun add @suaveplan/audio-ir-room-plugin-club

Peer-installed alongside @suaveplan/audio-ir-core, @suaveplan/storage-uri, @suaveplan/storage-uri-plugin-bundle.

Quick start

import {
    createIrRegistry,
    createUriPluginCollector,
} from "@suaveplan/audio-ir-core";
import { register } from "@suaveplan/audio-ir-room-plugin-club";
import { createIrLoader } from "@suaveplan/audio-ir-loader";
import { createStorageUriResolver } from "@suaveplan/storage-uri";
import { nodeFileFetch } from "@suaveplan/storage-uri-plugin-bundle/node-fetch";
import { decodeWav } from "@suaveplan/audio-decode-wav";

const registry = createIrRegistry();
const collector = createUriPluginCollector();
register(registry, collector, { fetch: nodeFileFetch }); // omit `fetch` in the browser
const resolver = createStorageUriResolver(collector.plugins);

const loader = createIrLoader({
    registry,
    resolver,
    decoders: { wav: decodeWav },
});

const club1 = await loader.load("club-club1");
const club2 = await loader.load("club-club2");

Manifest

id URI Channels Sample rate Gain
club-club1 bundle://audio-ir-room-plugin-club/club1.wav 2 44 100 Hz 0 dB
club-club2 bundle://audio-ir-room-plugin-club/club2.wav 2 44 100 Hz 0 dB

Channels and sample rate are decoded at manifest-authoring time; the loader re-validates and throws AUDIO_IR_LOADER.MANIFEST_MISMATCH on disagreement.

Modules

  • ./manifest — manifest: IrManifest, BUNDLE_PACKAGE_SLUG, MANIFEST_SLUG.
  • ./register — register(registry, collector, options?) (collector pattern).

The root barrel re-exports every public binding so import { register } from "@suaveplan/audio-ir-room-plugin-club" is equivalent to the subpath form.

Browser vs Node

  • Browser: omit options.fetch in register — globalThis.fetch reads the bundled URL directly.
  • Node: pass register(registry, collector, { fetch: nodeFileFetch }) from @suaveplan/storage-uri-plugin-bundle/node-fetch — Node's undici-backed global fetch refuses file: URLs.

License & sources

This package is published under the MIT license. Both IR captures (club1.wav, club2.wav) originate from the operator's Mountain Duck media library at /media/_/audio/ir/room/club{1,2}.wav and are redistributed inside Suaveplan under the same MIT license. The IR samples themselves are room captures with no upstream proprietary attribution requirement.

The IrManifestEntry.source field on each entry records the Mountain Duck origin path so a future operator can reproduce the import end-to-end.

Pre-publish gate

bunx turbo lint typecheck test --filter=@suaveplan/audio-ir-room-plugin-club
bunx turbo test:coverage --filter=@suaveplan/audio-ir-room-plugin-club   # 100/100/100/100
bunx turbo build --filter=@suaveplan/audio-ir-room-plugin-club