Files
skills/plugins/library-navigator/skills/sp-audio-ir-loader/SKILL.md
2026-05-29 08:20:56 +01:00

2.2 KiB

name, description
name description
sp-audio-ir-loader Pipeline package for the audio-ir family — composes IrRegistry, StorageUriResolver, AudioDecoder, and manifest validation into a single createIrLoader(). Universal.

sp-audio-ir-loader

Symbol Kind Responsibility
createIrLoader Function Composes registry, URI resolver, decoder, and manifest validation into a unified loader
IrLoader Interface Load surface: load(family, id), preload(options), cacheStats()
ImpulseResponseCache Class In-memory LRU cache for decoded impulse responses
impulseResponseBytes Function Loads raw IR bytes from a resolved URI
validateAndFinalize Function Validates decoded audio against manifest expectations
runPreload Function Preloads a set of IRs into the cache
AUDIO_IR_LOADER_CODES Constant Error-code registry via @suaveplan/error defineCodes

File Structure: packages/media/audio-ir/audio-ir-loader/src/{loader,cache,otel,error-codes}/

Sibling packages:

  • @suaveplan/audio-ir-core — IR schemas and registry
  • @suaveplan/audio-ir-room-plugin-club — content package (club IRs)
  • @suaveplan/audio-ir-room-plugin-pool — content package (pool IRs)
  • @suaveplan/storage-uri — URI resolution
  • @suaveplan/audio-decode-wav — WAV decoder

Patterns:

Quick Start:

import { createIrLoader } from "@suaveplan/audio-ir-loader";
const loader = createIrLoader({ registry, resolver, decoder });
const ir = await loader.load("room", "club1"); // decoded audio buffer

Preload:

await loader.preload({ families: ["room"], ids: ["club1", "club2"] });

Constraints:

  • Universal — zero platform-only APIs
  • Subpath exports: /error-codes
  • Caches decoded audio buffers to avoid repeated decode
  • OTel instruments for cache hits, misses, load success, and errors
  • Manifest validation ensures decoded audio matches expected format

Checklist:

  • createIrLoader() returns a loader that resolves URIs to decoded audio
  • preload() warms the cache for specified IRs
  • ImpulseResponseCache evicts least-recently-used entries
  • Manifest validation rejects mismatched sample rates or channel counts