Timpanist original-recording PCM library

Runtime location: <plugin folder>/assets/audio/
No synthesized replacement sounds were generated. Parent task is cutting the user's
supplied recording. The removable-drive original is not accessed by this subtask.

Required twelve files:
left-low-strike.wav    left-low-roll.wav
left-mid-strike.wav    left-mid-roll.wav
left-high-strike.wav   left-high-roll.wav
right-low-strike.wav   right-low-roll.wav
right-mid-strike.wav   right-mid-roll.wav
right-high-strike.wav  right-high-roll.wav

Optional strike takes: append -02 through -06 before .wav, e.g.
left-low-strike-02.wav,left-low-strike-03.wav,...,left-low-strike-06.wav.
Up to6 takes per drum/tuning are rotated in order. Missing or malformed optional
takes are skipped; the unsuffixed required take remains the first variant.

Player labels: left G / B / D; right B / D / F. Preserve the actual recordings and
do not infer octaves or retune from these labels. Runtime indices: low=0,mid=1,high=2.

Optional paired recordings; one paired voice replaces the two individual voices:
split-0-0-roll.wav  split-0-1-roll.wav  split-0-2-roll.wav
split-1-0-roll.wav  split-1-1-roll.wav  split-1-2-roll.wav
split-2-0-roll.wav  split-2-1-roll.wav  split-2-2-roll.wav
First index is left tuning; second index is right tuning. All nine are supported.
Missing paired files fall back to two continuous individual roll recordings, logged
once per actor. Never to repeated strike samples or a native Golem sound.

Format: RIFF WAVE PCM signed16-bit little-endian, mono or stereo,8-96kHz.
48kHz mono is preferred. Stereo input is averaged to mono, then resampled once to48kHz.
No float WAV, compressed WAV,RF64,or WAVE_FORMAT_EXTENSIBLE input.
Limits: file<=5MiB,total WAV input<=96MiB,each duration50ms..24s,
total decoded mono frames<=24,000,000 (96MB float PCM). Current cut-manifest bank:
47 WAVs,32 strikes,6 individual rolls,9 paired rolls;73,810,988 encoded bytes,
18,452,230 decoded mono frames before wrap overlap;longest20.85s/4,003,244bytes.
These bounds fit the actual recording cuts without trimming their sustained rolls.
The complete library caches after its first
successful load. Restart the game after replacing files.
Actual cuts preserve recorded strike tails and12..21s of steady rolls.
The loader applies a5ms overlap at roll wrap. Runtime loop fade in/out is20ms.
Do not include spoken labels or unrelated extra licks in the playback cues.

Playback: one Windows WinMM waveOut device,at most8 active clients,16 strike voices
and3 loop slots/client(two individual plus one paired transition). Three10ms persistent
native PCM buffers. Actual device latency is unverified. Gain,attenuation,and pan are
computed on the Unity main thread. The worker never calls Unity or logging delegates.
User volume is independent of game Wwise SFX/master volume. Windows listening,pause,
focus,death,retuning,multiplayer,output-device and cleanup acceptance remain pending.

API references:
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutopen
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutprepareheader
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutwrite
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutreset
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutunprepareheader
https://learn.microsoft.com/en-us/windows/win32/api/mmeapi/nf-mmeapi-waveoutclose
