AudioEnginePlusСкачатьСкачатьСкачатьСкачать
ВЕРСИИ (4)
alpha
AudioEnginePlus 4.0-alpha
4.0.0-alpha4 июн. 2026 г.359Minecraft: 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11fabric
Что нового
# v4.0 Alpha — Weather Audio, Occlusion Polish & Stability
---
## ✨ New
- **Weather-safe streaming** — `MemoryAudioStream` **loops PCM** when the buffer ends instead of returning `null` (avoids OpenAL reload overlap)
- **Continuous ambient bypass** — `AsyncStreamer.isContinuousAmbientStream()` keeps **rain, weather, and cave ambients** on vanilla `OggAudioStream` (no Phase 5 PCM cache for those paths)
- **Occlusion 2.1** — **provisional cache** + async refine; **player-centric raycasting** (`phase4.playerCentricRaycasting`, default on); smoothed gain via `OcclusionState` / `writeSmoothedGain`
- **LOOP_FAR priority** — distant ambient/weather loops (>32 blocks) use `SourcePriority.LOOP_FAR` with shared `maxAmbientSources` budget
- **Reload generation guards** — `reloadGeneration` on `SoundPreloader`, `AsyncStreamer`, and `SoundReloadListener` so in-flight preloads/decode do not write after resource reload
- **OcclusionApi** — `getOcclusionFromProvider()` hook for external occlusion mods/providers
- **Cloth Config lang** — `en_us.json` tooltip for deprecated `asyncWorkerThreads`
---
## ⚡ Performance
- **PCM replay** — seamless loop for cached stream segments; fewer redundant OGG decodes on short repeatable streams
- **Occlusion tick** — invalidates stale pending futures when source/listener block moves; sync fallback before async refine; normalized cache path for player-centric mode
- **OcclusionCache** — tick-based TTL retained; provisional entries reduce “silent until ray completes” gaps
- **Smart pool** — deferred eviction queue (`aep$deferredEvictions`); `getEffectiveCount()` / pending-eviction accounting; position tracking with 0.01-block epsilon
- **Dedup** — greedy centroid clustering retained; **weather** path exempt so global loops are not merged/delayed
- **LOD** — `LodPcmGenerator` **Lanczos resampler** (anti-alias) replaces box filter; correct **native byte-order** on `ByteBuffer.duplicate()` (fixes distant mob LOD crackle)
- **Preload** — direct-memory headroom checks and generation-stamped async work in `SoundPreloader`
- **Phase 3** — async tick work stays **sync on render thread** (~μs per sound); `asyncWorkerThreads` marked unused in config
---
## 🔧 Changes
- **Updated:** `gradle.properties` / docs — release line **3.0-alpha → 4.0-alpha**
- **Updated:** `SoundEngineMixinPhase4` — occlusion apply order; category scaling after occlusion; **WEATHER** and **relative** sounds skip occlusion processing
- **Updated:** `SoundDeduplicator` — `weather` added to dedup-exempt patterns (with block interaction sounds)
- **Updated:** `SoundReloadListener` — coordinated cache clear: PCM, session static, LOD, occlusion state, dedup/pool, `AsyncStreamer.reset()`
- **Updated:** `SoundPhysicsRemasteredCompat` — runtime occlusion disable when SPR is present (unchanged behavior, refined checks)
- **Unchanged from 3.0:** `StreamingBufferQueue` still not wired; `SoundInstancePool` still removed; Caffeine still absent
---
## 🐛 Fixes
- **Duplicate rain / weather layer** — second rain heard while moving or standing (PCM stream end → reload overlap + occlusion gain on listener-bound loops)
- **Shared `OggAudioStream` corruption** — per-play `MemoryAudioStream` with independent cursor (carried from 3.0; loop rewind completes the fix for repeatable streams)
- **LOD crackle** on distant sounds — wrong endian on duplicated PCM views in `LodPcmGenerator`
- **Stale occlusion** after movement — cancel pending futures and refresh cache when source/listener block changes
- **Dedup replay** — `MergedSoundInstance` never re-deferred; key counts cleared on flush
- **Resource reload races** — blacklist pattern swap, native buffer ownership, and in-flight preload abandonment
- **Smart pool double-register** — merged sounds only registered via `play()` injection path
---
## ⚠️ Known limitations (alpha)
- **`StreamingBufferQueue`** — implemented but **not connected** to `SoundLoader`; true decode-while-playing pipeline is future work
- **Weather PCM cache** — if manually cached via blacklist/config edge cases, prefer vanilla path; continuous ambients are excluded by default
- **No automated tests** — heavy farms/PvP may need lower `globalRayBudgetPerTick`, `dedupThreshold`, or category limits in Phase 1
- **Phase 5 static path** — `enableStaticCaching` still limited by `staticCacheThresholdBytes`; long streamed ambients should stay on OGG
---
## 📦 Upgrade from 3.0-alpha
| If you had… | In 4.0… |
|-------------|---------|
| Rain/weather “ghost” audio | Fixed by default (no config toggle required) |
| Distant mob LOD noise | Improved resampler + byte-order fix |
| Occlusion pumping while walking | Reduced; weather/relative loops excluded |
| Same `phase5` / `phase4` config keys | Compatible; new: `playerCentricRaycasting` |
alpha
AudioEnginePlus 3.0-alpha
3.0.0-alpha4 июн. 2026 г.35Minecraft: 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11fabric
Что нового
## v3.0 Alpha — Phase 5, Occlusion 2.0 & Stability
### ✨ New
- **Phase 5 — PCM fast path** — `MemoryAudioStream` replays pre-decoded PCM per play with an independent cursor; fixes shared `OggAudioStream` corruption on repeat playback
- **AsyncStreamer** — fully wired into `SoundLoader` mixins for streamed/static sounds; separate **Phase 5** config section (`enableStreamingOptimization`, `enableStaticCaching`, size thresholds)
- **SoundBlacklistManager** — regex-based sound blacklist with per-context rules (dedup, occlusion, LOD)
- **IncrementalChunkSnapshot** — incremental 48³ fine grid + coarse layer world snapshot for occlusion; rebuilds on player movement and block changes
- **GlobalRayBudget** — per-tick global ray cap with optional FPS-adaptive scaling
- **OcclusionState** — per-sound occlusion/volume state extracted from mixins
- **ClientWorldBlockChangeMixin** — invalidates dynamic occlusion cache on `setBlockState`
- **CategoryScaleHolder** — per-category volume scaling in Phase 3 async pipeline
- **project_map.md / README** — architecture reference, shutdown order, and phase status documented
### ⚡ Performance
- **PCM replay** — small/medium sounds skip per-play OGG decode when served from `PcmBufferCache` via `MemoryAudioStream`
- **Occlusion engine** — pending async futures fixed; dimension-change and chunk-unload cleanup; tick-based cache TTL (not full world-tick reset every tick)
- **Sound deduplication** — centroid clustering, early flush, blacklist integration
- **Source pooling** — improved category-priority and distance-based eviction in `SmartChannelAccess` / `SourceEvictionPolicy`
- **Sound preloading** — `SoundPreloader` direct-memory limits and OOM guards
- **Native memory** — `SessionSoundCache` reload accounting and native buffer lifecycle fixes; premature `memFree` risk reduced
- **LOD** — `LodPcmGenerator` / `LodBufferLibrary` refinements; silent buffer for culled sounds
### 🔧 Changes
- **Removed:** `SoundInstancePool` (fully); smart pooling uses `SmartChannelAccess` only
- **Removed:** unused Caffeine dependency
- **Updated:** `AEPConfig` — added `phase5` and `soundBlacklist`; Phase 5 settings moved out of Phase 4
- **Updated:** `audioengineplus.mixins.json` — added `ClientWorldBlockChangeMixin`
- **Updated:** `gradle.properties` / release line — `3.0-alpha`
- **Target:** Minecraft **1.21.1** (Fabric) — explicit version pin vs broad 1.21.x range on 2.0
### 🐛 Fixes
- Shared `OggAudioStream` corruption when the same sound plays multiple times
- Stale occlusion cache entries after block changes and pending future handling
- Dedup merge edge cases and blacklist race during config reload
- Resource reload native cache accounting and buffer ownership on shutdown
- Sound Physics Remastered: built-in occlusion still auto-disabled when SPR is loaded
### ⚠️ Known limitations (alpha)
- **StreamingBufferQueue** — implemented but not yet connected to the sound loader; true decode-while-playing pipeline is future work
- No automated tests; heavy farms/PvP may need lower `globalRayBudgetPerTick` or dedup thresholds
alpha
AudioEnginePlus 2.0.0-alpha
2.0.0-alpha23 мая 2026 г.63Minecraft: 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11fabric
Что нового
AudioEnginePlus v2.0 Alpha — Changelog
## v2.0 Alpha — Performance & Stability Overhaul
### ✨ New
- `SessionSoundCache` — new session-scoped sound cache with lifecycle management
- `AsyncAudioWorkerManager` — centralized async worker lifecycle manager
- `LodBufferLibrary` — full LOD buffer library with distance-based PCM generation
- `NativeMemoryTracker` — improved native memory tracking and ByteBuffer management
- `StreamingBufferQueue` — streaming audio buffer queue for continuous playback
- `RayLodStrategy` — integrated LOD-level selection in occlusion raycasting
### ⚡ Performance
- **Thread-safety overhaul**: all critical paths (dedup, cache, async, occlusion) now use proper locking and concurrent data structures
- **Shutdown safety**: graceful teardown with ordered subsystem shutdown sequence
- **Native memory management**: `ByteBufferNativeAccess` refactored for direct buffer allocation, zero-copy patterns, and proper deallocation
- **Async audio worker**: complete rewrite with `AsyncAudioWorkerManager` for better worker pool lifecycle
- **Occlusion engine**: `OcclusionCache` rewritten with world-tick-based reset, `ChunkSnapshot` for thread-safe chunk access, `DdaRaycaster` optimizations
- **Sound deduplication**: `SoundDeduplicator` refactored for O(1) lookup with eviction, `SoundEventKey` streamlined
- **PCM buffer cache**: improved caching strategy, async preloading enhancements, resource reload listener support
- **Source pooling**: `SmartChannelAccess` and `SourceEvictionPolicy` optimized for category-based priority eviction
- **Sound Physics Remastered compat**: improved conditional integration
### 🔧 Changes
- Removed: `ChannelAccessMixin` (Phase 1 mixin consolidated), `PooledSoundHandle` (replaced by pooled instance ref pattern)
- Updated: `fabric.mod.json`, `AEPConfig` validation, `AudioEnginePlusClient` entry point with `CLIENT_STOPPING` handler
- Config: `AEPConfig` sections aligned to phases 1–4 with proper clamping in `validate()`
alpha
AudioEnginePlus 1.0.0-alpha
1.0.0-alpha14 мая 2026 г.50Minecraft: 1.21, 1.21.1fabric
Что нового
AudioEnginePlus 1.0.0-alpha.1 - Initial Release
Initial release of the advanced audio optimization engine!
Smart Sound Pooling: Reuses sound handles to minimize native memory churn and GC pressure.
Audio Deduplication: Intelligently merges identical sounds to reduce audio clutter and CPU overhead.
PCM Caching: Off-thread audio decoding with efficient caching to eliminate frame stutters.
Audio LOD (Level of Detail): Dynamically scales sound quality and processing based on distance.
Native Memory Tracking: Advanced monitoring of OpenAL buffers and memory usage.
Compatibility: Built-in compatibility layer for Sound Physics Remastered.
Config Support: Fully integrated with ModMenu and Cloth Config.