COWMODSКаталог модов

DreamVoice

Advanced spatial audio framework for Paper, Fabric, NeoForge & Simple Voice Chat. Featuring soundproof acoustic physics (VoiceWall), 3D visualizer, spatial speakers, covert wiretaps, radio channels, playable audio cassettes, DSP filters & speech AI.

Автор: TryhZix2563обновлён 28 окт. 2026 г.
ОбщениеТехнологииУтилиты

Описание

🎙️ DreamVoice

The ultimate spatial audio, acoustic physics & speech intelligence expansion for Simple Voice Chat on Minecraft (Paper, Fabric & NeoForge)!

Bring real sound physics, soundproof rooms, offline AI speech recognition, keyword spotting, 3D directional speakers, covert spy microphones, walkie-talkie radios, hot-loadable DSP voice filters, real-time acoustic visualizer, and playable audio cassette tapes directly into your Minecraft server.


🌟 What is DreamVoice?

DreamVoice transforms proximity voice chat into a truly immersive, next-generation audio experience. Designed for Roleplay servers, Survival SMPs, Investigation & Mystery games, and Narrative Minigames, it bridges the gap between Minecraft mechanics and real-world audio physics and speech recognition.

With full first-class support for Paper / Purpur servers (as a plugin), Fabric servers (as a mod), and NeoForge servers (as a mod), sound no longer magically passes through thick walls—it bends around open doorways, muffles through solid materials, attenuates inside soundproof rooms, and interacts realistically with the environment.

Players can trigger in-game events by speaking keywords out loud, analyze recorded tapes on lecterns to generate written books, inspect acoustics in real-time with an in-game 3D visualizer, and export audio into MP3/OGG/WAV files. External survival and tech mods can even create craftable speakers, spy bugs, walkie-talkies, and cassette players that interface seamlessly with DreamVoice.


✨ Core Features

🧱 1. Realistic Sound Physics & Soundproof Walls (VoiceWall)

  • Smart Sound Occlusion: Sound realistically stops or muffles behind solid stone, wood, glass, and metal blocks (STRICT_BLOCK or REALISTIC).
  • Acoustic Pathfinding & Diffraction: Sound naturally travels through open doors, windows, and bends around corners.
  • High-Frequency Air Damping: Distant voices naturally lose high frequencies, sounding warmer and muffled through open air over distance.
  • Visual Particle Debugging: Check raycast sound propagation in real-time with visual particles and action bar stats via /voicewall debug [player] or /voice wall debug.

👁️ 2. Real-Time 3D Acoustic Visualizer (/voice visualizer)

  • Live 3D Raycasting: Renders dynamic particle streams in real-time showing line-of-sight sound paths, wall collision impacts, aperture diffraction routes, and speaker audible coverage spheres.
  • Performance-Conscious Hand-Held Mode: To protect client FPS and eliminate visual clutter, particles render only when the inspecting player holds the visualizer tool (Compass) in their main hand.

🏰 3. Acoustic Rooms & Soundproof Zones

  • Soundproof & Reverberant Zones: Define spatial cuboids with custom isolation percentages (isolationPct) and reverb parameters (decay, roomSizeMs, wetGain).
  • Acoustic Presets: Comes with built-in presets (soundproof, studio, cathedral, bunker).
  • Dynamic Filter Stacking: Automatically applies vocal effects (e.g., muffled, echo, cave reverb) upon entering specific rooms and removes them upon exit.

🗣️ 4. Speech Recognition & Real-Time Keyword Spotting (KWS)

  • Real-Time Keyword Spotting: Lightweight background keyword detection powered by offline Vosk models with constrained grammar ([unk], zero hallucinations).
  • Voice-Activated Events: Triggers events for custom roleplay spells, voice-activated doors, passphrases, and minigame mechanics.
  • Smart Audio Gating: RMS noise gate (minEnergyThreshold) and automatic phonetic buffer clearance on pauses (silenceResetMs) to eliminate phantom detections.
  • Interactive Cassette Transcription Stations: Right-click a Lectern or Jukebox with an audio cassette to analyze speech and receive a paginated Written Book with timestamps and speaker names.
  • Hybrid Engine: Works 100% offline inside the JVM (Vosk) or can offload transcription to an external Whisper Sidecar container.

📢 5. 3D Locational Speakers & Physical Broadcasts

  • Place directional 3D speakers anywhere in your world at static coordinates.
  • Attach to Entities: Mount speakers to moving vehicles, drones, ArmorStands, or NPCs!
  • Dual Channels: Speak through a microphone while playing background music/sound effects simultaneously with zero collision.
  • Podium & Intercom Broadcasts: Broadcast points route voices within a capture radius to target speakers or across the whole server (/voice broadcast).

👻 6. Voice Projections & Security Cameras

  • Project your voice remotely to any target block or moving entity.
  • Hear what the camera or remote point hears—ideal for CCTV security cameras, intercoms, surveillance drones, or magical projections.

🕵️ 7. Covert Wiretaps & Spy Bugs

  • Plant hidden microphones at secret coordinates or mount a bug directly on an NPC or player.
  • Listen in real-time to secret conversations or record them directly to an in-game cassette tape!
  • Cross-Module Propagation: Wiretaps realistically intercept voices emitted from voice projections.

📼 8. Audio Cassettes & Multi-Format Audio Export

  • Record live voice conversations with zero-CPU direct Opus streaming (OpusAudioPlayer).
  • Generates a physical Cassette item that players can hold and play with a right-click or load into 3D speakers.
  • Async Audio Export: Export any session recording directly into MP3, OGG, or WAV files via /voice record export.
  • Timeline Slicing: Extract specific segments or the final N seconds from any recording (/voice record slice).

📻 9. Walkie-Talkies & Radio Channels

  • Connect players to specific radio frequency channels for team tactical comms, police dispatch, or survival walkie-talkies.
  • Authentic analog band-pass filter (300 Hz - 3400 Hz) with push-to-talk mic clicks.
  • Directional Transmitters: Point-to-point voice transmission with customizable ranges.

🎛️ 10. Dynamic DSP Voice Filters & File-First Pipeline

  • Transform player voices on the fly with 13 built-in filters (alien, cave, deep, disguise, gasmask, ghost, helium, megaphone, muffled, radio, robot, telephone, underwater).
  • Hot-Reloadable Files (.yml, .json, .java):
    • Declarative DSP pipelines (lowpass, highpass, gain, overdrive, ring_modulator, delay/echo).
    • On-the-fly JDK compilation for custom .java filter source files.
  • Filter Exporter: Export active filters into pipeline YAML/JSON or Java source files (/voice filter export).
  • Built-in Soft-Knee Dynamic Limiter prevents microphone clipping and distortion.

🛠️ 11. Interactive Configuration GUI (/voice config)

  • Open a full visual GUI dashboard to configure and monitor all modules without touching config files.
  • Interactive tool (Echo Shard) to target entities, blocks, or positions in real-time.

📡 12. Cross-Mod Network Packets & Ecosystem (Fabric & NeoForge)

  • 40+ custom packets (@DreamPacket) allowing third-party survival, tech, and companion mods to create and control speakers, wiretaps, radios, cassettes, and filters without hard compile dependencies.

🕹️ Quick Commands Reference

All commands support both the unified /voice <module> <action> syntax and convenient direct aliases (/radio, /speaker, /record, etc.).

Unified CommandDirect AliasDescription
/dv status/voice statusDisplays system status and active module counts
/voice config—Opens the interactive visual configuration GUI
/voice visualizer [toggle|on|off]—Toggles 3D acoustic visualizer (hand-held tool required)
/dv reload [module]/voice reloadReloads configuration, saved data, or both
/voice wall mode <strict|realistic|off>/voicewall modeChanges soundproof wall physics mode
/voice wall debug [player]/voicewall debugToggles visual particle sound path diagnostics
/voice room list / /voice room delete <id>/room listLists and manages acoustic rooms
/voice filter list/filter listLists active voice filters
/voice filter apply <filter> [player]/filter applyApplies a voice filter to a player
/voice speech status/speech statusDisplays speech recognition engine and model status
/voice speech keywords/speech keywordsDisplays active keyword spotting list
/voice speaker create <name> [dist]/speaker createCreates a 3D speaker at your position
/voice speaker play <name> <source>/speaker playPlays audio, recording, or web URL through the speaker
/voice speaker link <name> [player]/speaker linkLinks player microphone to broadcast through speaker
/voice wiretap create <name> [dist]/wiretap createPlaces a covert wiretap listening bug
/voice wiretap listen <name>/wiretap listenConnects a player to live wiretap eavesdropping
/voice wiretap cassette <name>/wiretap cassetteGives a cassette from wiretap recording
/voice projection create [dist]/projection createCreates a voice projection / body anchor
/voice radio join <channel>/radio joinTunes into a radio frequency channel
/voice radio leave/radio leaveLeaves current radio frequency channel
/voice transmitter enable|disable/transmitter enable|disableToggles point-to-point voice transmitter
/voice record start / /voice record stop/record start|stopRecords voice and saves .dv binary capture
/voice record cassette <id>/record cassetteGives a physical, playable Cassette item
/voice record export <id> <mp3|ogg|wav>/record exportExports a recording to MP3, OGG, or WAV

📦 Installation

For Paper / Purpur Servers:

  1. Make sure your server runs Paper or Purpur (version 26.1.2+ with Java 25+).
  2. Install Simple Voice Chat (2.6.20+).
  3. Drop DreamVoice.jar into your server's plugins/ directory.
  4. Restart your server.

For Fabric Servers:

  1. Make sure your server runs Fabric Loader 0.19.3+ for Minecraft 26.1.2+ with Java 25+.
  2. Install Fabric API and Simple Voice Chat Fabric.
  3. Drop DreamVoice-fabric-2.0.2.jar into your server's mods/ directory.
  4. Restart your server.

For NeoForge Servers:

  1. Make sure your server runs NeoForge 26.1.2+ for Minecraft 26.1.2+ with Java 25+.
  2. Install Simple Voice Chat NeoForge.
  3. Drop DreamVoice-neoforge-2.0.2.jar into your server's mods/ directory.
  4. Restart your server.

💻 Developer API

DreamVoice includes a unified public API (DreamVoiceAPI.get()) to build custom plugins, Fabric mods, NeoForge mods, and minigames.

📦 Gradle Kotlin DSL (build.gradle.kts)

repositories {
    mavenCentral()
    maven("https://jitpack.io")
    maven("https://repo.papermc.io/repository/maven-public/")
}

dependencies {
    compileOnly("com.github.Dreamin-MC.DreamVoice:api:2.0.2")
}

📦 Gradle Groovy (build.gradle)

repositories {
    mavenCentral()
    maven { url = "https://jitpack.io" }
    maven { url = "https://repo.papermc.io/repository/maven-public/" }
}

dependencies {
    compileOnly "com.github.Dreamin-MC.DreamVoice:api:2.0.4"
}

📦 Maven (pom.xml)

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
    <repository>
        <id>papermc</id>
        <url>https://repo.papermc.io/repository/maven-public/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.github.Dreamin-MC.DreamVoice</groupId>
        <artifactId>api</artifactId>
        <version>2.0.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

📄 License & Links

Последние версии

Все версии →
release

DreamVoice NeoForge 2.0.4

2.0.4+neoforge
28 окт. 2026 г.27Minecraft: 26.1.2neoforge
Скачать
Что нового
# Changelog 2.0.4 ## 📦 Build System & JitPack Support - **JitPack Java 25 & API Isolation**: - Added dedicated `jitpack.yml` configuration targeting **OpenJDK 25** (`openjdk25`). - Configured `settings.gradle` to isolate the `:api` subproject during JitPack builds (`JITPACK` environment detection), avoiding unnecessary Fabric Loom and NeoForge ModDev initialization on JitPack containers. - Updated root `build.gradle` Java toolchain declaration (`JavaLanguageVersion.of(25)`) for native JitPack JDK auto-detection and scoped Maven repositories by group. - **Release Pipeline Optimization**: - Resolved Gradle project configuration lock contention on multi-loader builds (`Paper`, `Fabric`, `NeoForge`).
release

DreamVoice Fabric 2.0.4

2.0.4+fabric
28 окт. 2026 г.14Minecraft: 26.1.2fabric
Скачать
Что нового
# Changelog 2.0.4 ## 📦 Build System & JitPack Support - **JitPack Java 25 & API Isolation**: - Added dedicated `jitpack.yml` configuration targeting **OpenJDK 25** (`openjdk25`). - Configured `settings.gradle` to isolate the `:api` subproject during JitPack builds (`JITPACK` environment detection), avoiding unnecessary Fabric Loom and NeoForge ModDev initialization on JitPack containers. - Updated root `build.gradle` Java toolchain declaration (`JavaLanguageVersion.of(25)`) for native JitPack JDK auto-detection and scoped Maven repositories by group. - **Release Pipeline Optimization**: - Resolved Gradle project configuration lock contention on multi-loader builds (`Paper`, `Fabric`, `NeoForge`).
release

DreamVoice Paper 2.0.4

2.0.4+paper
28 окт. 2026 г.9Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 2.0.4 ## 📦 Build System & JitPack Support - **JitPack Java 25 & API Isolation**: - Added dedicated `jitpack.yml` configuration targeting **OpenJDK 25** (`openjdk25`). - Configured `settings.gradle` to isolate the `:api` subproject during JitPack builds (`JITPACK` environment detection), avoiding unnecessary Fabric Loom and NeoForge ModDev initialization on JitPack containers. - Updated root `build.gradle` Java toolchain declaration (`JavaLanguageVersion.of(25)`) for native JitPack JDK auto-detection and scoped Maven repositories by group. - **Release Pipeline Optimization**: - Resolved Gradle project configuration lock contention on multi-loader builds (`Paper`, `Fabric`, `NeoForge`).
release

DreamVoice Fabric 2.0.2

2.0.2+fabric
28 окт. 2026 г.14Minecraft: 26.1.2fabric
Скачать
Что нового
# Changelog 2.0.2 ## 🎙️ Multi-Speaker Tracking & Selective Voice Recording - **Per-Frame Speaker Attribution**: - `TimedAudioFrame` now tags every audio frame with the speaker's unique identifier (`speakerUuid`). - **Multi-Speaker Track Management in `VoiceRecording`**: - `getSpeakers()`: Returns all distinct players who spoke during the recording session. - `getFramesOfSpeaker(UUID)`: Retrieves audio frames filtered by speaker. - `extractSpeakerRecording(UUID)`: Isolates and generates an independent recording containing only the selected speaker's voice. - **Enhanced `.dv` Audio Persistence**: - Serializes and deserializes speaker UUIDs per frame while preserving backward compatibility with older format revisions. - **Selective Audio Export**: - `VoiceRecordingService.exportRecording(rec, format, targetFile, speakerUuid)`: Allows exporting either full mixed audio or an isolated individual speaker track to WAV, MP3, or OGG. - `VoiceRecordingService.extractSpeakerRecording(recUuid, speakerUuid)`: Direct service extraction helper. - **Wiretap Speaker Tagging**: - Intercepted audio streams captured by `VoiceWiretapService` now track speaker UUIDs on every recorded frame. --- ## 📻 Radio Channel Recording & Broadcasting - **Full Radio Channel Capture**: - Added radio recording APIs: `startRecording(channel)`, `stopRecording(channel)`, `isRecording(channel)`, and `getActiveRecording(channel)`. - Captures all conversations transmitted across a radio frequency with complete speaker attribution. - **Radio Playback Streaming**: - Added radio playback APIs: `playRecordingToRadio(channel, recording)`, `stopRadioPlayback(channel)`, and `isRadioPlaying(channel)`. - Seamlessly broadcasts pre-recorded audio or intercepted transmissions back over radio channels. - **Zero-CPU Direct Opus Streaming (`OpusAudioPlayer`)**: - Lightweight audio player streams raw Opus packets directly into Simple Voice Chat static audio channels without decoding and re-encoding overhead. - Supports dynamic `frameConsumer` callbacks per frame for real-time synchronization with external addons. --- ## 📡 Radio Transmission Filtering & Packet Interception (`RadioPacketFilter`) - **Bidirectional Packet Filter Interface (`RadioPacketFilter`)**: - `shouldTransmit(channel, senderUuid)`: Intercepts transmissions at the sender microphone stage before recording or dispatching. Enables mods (such as AcoustiCraft) to block transmissions if players are out of antenna range or lacking power/equipment. - `shouldDeliver(channel, senderUuid, receiverUuid)`: Intercepts delivery at the receiver stage to simulate range attenuation, line-of-sight wall penetration, and distance falloff. - Registered and accessed via `VoiceRadioService.setPacketFilter(...)` and `VoiceRadioService.getPacketFilter()`. - **New `RadioTransmissionEvent`**: - Dispatched whenever voice audio is transmitted over a radio frequency, providing access to the channel, sender UUID, and raw Opus audio data. - **Audio Transmission Listeners**: - Added `RadioAudioTransmissionListener` and `VoiceRadioService.addAudioTransmissionListener(...)` to subscribe to broadcast frames. - **Cleaner Voice Output**: - Removed artificial RF hiss generator from `RadioVoiceFilter` for cleaner and more intelligible voice communications. --- ## ⌨️ New Commands (Fabric & Paper) - **Radio Recording Management**: - `/record radio start <channel>`: Starts recording audio from a specific radio channel. - `/record radio stop <channel> [target]`: Stops recording and saves the captured radio stream. - `/record radio play <channel> <recording>`: Plays back an audio recording over a radio channel. - `/record radio stop-play <channel>`: Halts an active radio broadcast. - **Audio Timeline Slicing**: - `/record slice <recording> <startMs> <endMs> [target]`: Cuts out a precise timestamp window from an existing recording. - `/record slice-last <recording> <durationSec> [target]`: Quickly slices the last N seconds of an active or saved recording. - **Speaker-Filtered Export**: - `/record export <id> <format> [speaker]`: Exports an audio recording to disk with optional player filtering. --- ## 🛠️ Bug Fixes & Refactoring - **Command Argument Parsing**: - Fixed optional `Boolean` argument handling (`rogerBeep`, `loop`) on Fabric `/radio create` and `/speaker play` commands. - **Radio Channel Member Restoration**: - Corrected member population logic in `RadiosPersistence` to use `channel.addMember(...)`. - **Version Bump**: - Updated project version to `2.0.2` in `gradle.properties`.
release

DreamVoice Paper 2.0.2

2.0.2+paper
28 окт. 2026 г.8Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 2.0.2 ## 🎙️ Multi-Speaker Tracking & Selective Voice Recording - **Per-Frame Speaker Attribution**: - `TimedAudioFrame` now tags every audio frame with the speaker's unique identifier (`speakerUuid`). - **Multi-Speaker Track Management in `VoiceRecording`**: - `getSpeakers()`: Returns all distinct players who spoke during the recording session. - `getFramesOfSpeaker(UUID)`: Retrieves audio frames filtered by speaker. - `extractSpeakerRecording(UUID)`: Isolates and generates an independent recording containing only the selected speaker's voice. - **Enhanced `.dv` Audio Persistence**: - Serializes and deserializes speaker UUIDs per frame while preserving backward compatibility with older format revisions. - **Selective Audio Export**: - `VoiceRecordingService.exportRecording(rec, format, targetFile, speakerUuid)`: Allows exporting either full mixed audio or an isolated individual speaker track to WAV, MP3, or OGG. - `VoiceRecordingService.extractSpeakerRecording(recUuid, speakerUuid)`: Direct service extraction helper. - **Wiretap Speaker Tagging**: - Intercepted audio streams captured by `VoiceWiretapService` now track speaker UUIDs on every recorded frame. --- ## 📻 Radio Channel Recording & Broadcasting - **Full Radio Channel Capture**: - Added radio recording APIs: `startRecording(channel)`, `stopRecording(channel)`, `isRecording(channel)`, and `getActiveRecording(channel)`. - Captures all conversations transmitted across a radio frequency with complete speaker attribution. - **Radio Playback Streaming**: - Added radio playback APIs: `playRecordingToRadio(channel, recording)`, `stopRadioPlayback(channel)`, and `isRadioPlaying(channel)`. - Seamlessly broadcasts pre-recorded audio or intercepted transmissions back over radio channels. - **Zero-CPU Direct Opus Streaming (`OpusAudioPlayer`)**: - Lightweight audio player streams raw Opus packets directly into Simple Voice Chat static audio channels without decoding and re-encoding overhead. - Supports dynamic `frameConsumer` callbacks per frame for real-time synchronization with external addons. --- ## 📡 Radio Transmission Filtering & Packet Interception (`RadioPacketFilter`) - **Bidirectional Packet Filter Interface (`RadioPacketFilter`)**: - `shouldTransmit(channel, senderUuid)`: Intercepts transmissions at the sender microphone stage before recording or dispatching. Enables mods (such as AcoustiCraft) to block transmissions if players are out of antenna range or lacking power/equipment. - `shouldDeliver(channel, senderUuid, receiverUuid)`: Intercepts delivery at the receiver stage to simulate range attenuation, line-of-sight wall penetration, and distance falloff. - Registered and accessed via `VoiceRadioService.setPacketFilter(...)` and `VoiceRadioService.getPacketFilter()`. - **New `RadioTransmissionEvent`**: - Dispatched whenever voice audio is transmitted over a radio frequency, providing access to the channel, sender UUID, and raw Opus audio data. - **Audio Transmission Listeners**: - Added `RadioAudioTransmissionListener` and `VoiceRadioService.addAudioTransmissionListener(...)` to subscribe to broadcast frames. - **Cleaner Voice Output**: - Removed artificial RF hiss generator from `RadioVoiceFilter` for cleaner and more intelligible voice communications. --- ## ⌨️ New Commands (Fabric & Paper) - **Radio Recording Management**: - `/record radio start <channel>`: Starts recording audio from a specific radio channel. - `/record radio stop <channel> [target]`: Stops recording and saves the captured radio stream. - `/record radio play <channel> <recording>`: Plays back an audio recording over a radio channel. - `/record radio stop-play <channel>`: Halts an active radio broadcast. - **Audio Timeline Slicing**: - `/record slice <recording> <startMs> <endMs> [target]`: Cuts out a precise timestamp window from an existing recording. - `/record slice-last <recording> <durationSec> [target]`: Quickly slices the last N seconds of an active or saved recording. - **Speaker-Filtered Export**: - `/record export <id> <format> [speaker]`: Exports an audio recording to disk with optional player filtering. --- ## 🛠️ Bug Fixes & Refactoring - **Command Argument Parsing**: - Fixed optional `Boolean` argument handling (`rogerBeep`, `loop`) on Fabric `/radio create` and `/speaker play` commands. - **Radio Channel Member Restoration**: - Corrected member population logic in `RadiosPersistence` to use `channel.addMember(...)`. - **Version Bump**: - Updated project version to `2.0.2` in `gradle.properties`.
release

DreamVoice Fabric 2.0.1

2.0.1+fabric
30 сент. 2026 г.99Minecraft: 26.1.2fabric
Скачать
Что нового
# Changelog 2.0.1 ## 🚀 Dual-Platform Engine: Paper & Fabric First-Class Support - **Multi-Module Gradle Architecture**: - Restructured the entire codebase into a clean, modern multi-module architecture: - `:api`: Platform-independent public interfaces, models, and events (`DreamVoiceAPI`, `VoiceLocation`, `Speaker`, `VoiceWiretap`, `VoiceEvent`, etc.). - `:common`: Platform-agnostic core acoustic engine (`DreamVoiceCommon`), DSP audio pipelines, raycasting logic, persistence, and service implementations. - `:paper`: Paper / Purpur 26.1.2+ server plugin (`DreamVoice-paper-2.0.1.jar`) utilizing Paperweight and shadow jar packaging. - `:fabric`: Fabric 26.1.2+ server mod (`DreamVoice-fabric-2.0.1.jar`) built with Fabric Loom 1.17, Fabric API, and Cloud Fabric commands. - **Platform Abstraction Layer (`VoicePlatform`)**: - Implemented `PaperVoicePlatform` and `FabricVoicePlatform` bridging server scheduling (sync/async/timer), entity tracking, block occlusion raycasts, particle dispatches, and loggers. - Native multiplatform coordinates via `VoiceLocation`, allowing services to operate identically regardless of whether Bukkit or Minecraft ServerLevel is running underneath. - **Dual Configuration Directories**: - Automatically loads and saves data in standard platform locations: - **Paper**: `plugins/DreamVoice/` - **Fabric**: `config/dreamvoice/` --- ## 🔌 Unified `DreamVoiceAPI` Service Locator - **Universal API Entrypoint**: - Unified entry point `DreamVoiceAPI.get()` accessible from both Paper plugins and Fabric mods without platform-specific boilerplate. - Direct accessor methods for all acoustic services: - `api.speakerService()`: 3D spatial speakers, dual-channel audio, entity tracking. - `api.wallService()`: VoiceWall raycast occlusion, material decibel loss, diffraction. - `api.roomService()`: Soundproof Cuboid zones and reverberation presets. - `api.recordingService()`: Zero-CPU Opus capture, timeline slicing, interactive cassettes. - `api.radioService()`: Frequency channels, analog band-pass filters, push-to-talk clicks. - `api.wiretapService()`: Covert listening bugs, mobile entity bugs, live eavesdropping. - `api.projectionService()`: Decoupled voice anchors, CCTV feeds, bilateral audio. - `api.transmitterService()`: Point-to-point directional voice transmitters. - `api.broadcastService()`: Server-wide and localized podium/intercom broadcasts. - `api.filterService()`: File-first DSP filters, hot-compilation, and stack management. - `api.speechService()`: Offline Vosk keyword spotting and transcription stations. - `api.playerService()`: Voice player wrappers (`VPlayer`) and connection metadata. - `api.persistenceService()`: Asynchronous disk flushes and auto-save coordination. - `api.voiceService()`: Direct Simple Voice Chat bridge and raw packet dispatch. --- ## 📡 Fabric Network Packet System & Inter-Mod Protocols (`@DreamPacket`) - **Annotation-Driven Networking Pipeline**: - Introduced `@DreamPacket` and `@DreamServerReceiver` with automatic classpath scanning via `PacketAnnotationProcessor` and `ServerPacketAnnotationProcessor`. - Registered all packet codecs with Fabric's `PayloadTypeRegistry` under the `dreamvoice:*` namespace. - **Preshot Server-Bound & Client-Bound Packet Catalog (40+ Packets)**: - **Configuration & Visualizer**: `ServerBoundRequestConfigSyncPacket`, `ClientBoundConfigSyncPacket`, `ServerBoundVisualizerTogglePacket`, `ClientBoundVisualizerSyncPacket`. - **3D Spatial Speakers**: `ServerBoundSpeakerCreatePacket`, `ServerBoundSpeakerDeletePacket`, `ServerBoundSpeakerLinkPacket`, `ServerBoundSpeakerUnlinkPacket`, `ServerBoundSpeakerPlaySoundPacket`, `ServerBoundSpeakerStopSoundPacket`, `ServerBoundSpeakerUpdatePacket`, `ClientBoundSpeakerSyncPacket`. - **Wiretaps & Surveillance**: `ServerBoundWiretapCreatePacket`, `ServerBoundWiretapDeletePacket`, `ServerBoundWiretapSubscribePacket`, `ServerBoundWiretapUnsubscribePacket`, `ClientBoundWiretapSyncPacket`. - **Radios & Walkie-Talkies**: `ServerBoundRadioCreatePacket`, `ServerBoundRadioJoinPacket`, `ServerBoundRadioLeavePacket`, `ClientBoundRadioSyncPacket`. - **Audio Recordings & Cassettes**: `ServerBoundRecordingStartPacket`, `ServerBoundRecordingStopPacket`, `ServerBoundCassetteCreatePacket`, `ServerBoundRecordingPlayPacket`, `ServerBoundRecordingStopPlayPacket`, `ClientBoundRecordingSyncPacket`. - **DSP Voice Filters**: `ServerBoundFilterApplyPacket`, `ServerBoundFilterRemovePacket`, `ServerBoundFilterClearPacket`, `ServerBoundFilterTogglePacket`, `ClientBoundFilterSyncPacket`. - **Acoustic Rooms**: `ServerBoundRoomCreatePacket`, `ServerBoundRoomDeletePacket`, `ServerBoundRoomUpdatePacket`, `ClientBoundRoomSyncPacket`. - **Transmitters & Projections**: `ServerBoundTransmitterCreatePacket`, `ServerBoundTransmitterDeletePacket`, `ServerBoundTransmitterTogglePacket`, `ClientBoundTransmitterSyncPacket`, `ServerBoundProjectionCreatePacket`, `ServerBoundProjectionDeletePacket`, `ClientBoundProjectionSyncPacket`. - **Zero-Dependency Inter-Mod Integration**: - Allows external survival mods (craftable megaphones, spy bugs, walkie-talkies, tape recorders) and client HUD mods to control DreamVoice subsystems via JSON custom payloads without hard compile-time dependencies. --- ## ⚡ Dual-Platform Event Bus (Bukkit & Fabric) - **Unified Voice Events**: - All event classes extend `VoiceEvent` and feature self-dispatching via `.callEvent()`. - **Platform Event Dispatching**: - **Paper**: Dispatched natively through Bukkit's `PluginManager` for `@EventHandler` listeners. - **Fabric**: Dispatched through `DreamVoiceEvents.VOICE_EVENT.register(...)` callback hook. - **Event Coverage**: - Cancellable hooks across all lifecycle actions: `SpeakerLinkPlayerEvent`, `SpeakerPlaySoundEvent`, `RadioChannelJoinEvent`, `CassetteCreateEvent`, `CassettePlayEvent`, `VoiceRecordingStartEvent`, `VoiceFilterApplyEvent`, `VoiceWallOcclusionEvent`, `VoiceKeywordSpokenEvent`, `WiretapSubscribeEvent`, etc. --- ## 👁️ Real-Time 3D Acoustic Visualizer Mode (`/voice visualizer`) - **Interactive Acoustic Raycasting**: - Added `/voice visualizer [toggle|on|off]` (permission: `dreamvoice.visualizer`). - Renders 3D particle rays illustrating line-of-sight paths, wall collision impacts, aperture diffraction bypasses around doors/openings, and speaker audible coverage spheres. - **Performance-Conscious Hand-Held Requirement**: - Particle streams are rendered **only** when the inspecting player has the visualizer tool (default: `COMPASS`) equipped in their main hand, preventing client lag and visual clutter during normal gameplay. - **Synchronized Visualizer State**: - State is automatically synced to Fabric clients via `ServerBoundVisualizerTogglePacket` and `ClientBoundVisualizerSyncPacket`. --- ## 🎙️ VoiceWiretap x VoiceProjection Integration - **Cross-Module Audio Propagation**: - Covert wiretap microphones (`VoiceWiretap`) now dynamically support and intercept voices emitted through active voice projections (`VoiceProjection`). - **Dual-Origin Spatial Audio**: - **Physical Emission (`isEmitVoiceAtPlayer`)**: Microphones in proximity to the player's physical body capture the direct voice as normal. - **Anchor Emission (`isEmitVoiceAtAnchor`)**: Microphones in proximity to the projection's anchor location (`projection.getAnchorLocation()`) intercept the projected voice in real time. - **Acoustic Occlusion & Wall Physics**: Line-of-sight raycasting (`VoiceRayCast`) and material attenuation (`VoiceWall`) are accurately simulated between the anchor coordinates and the wiretap. - **Filter Inheritance**: Voice projections configured with custom filters (e.g., megaphone, radio, disguise) pass their processed audio downstream to wiretap listeners. --- ## 🔌 Public Hearing & Attenuation API (`VoiceService` & `VoiceWallService`) - **Unified Audibility Check (`canHear`)**: - Introduced `voiceService.canHear(speaker, listener)` (with `Player` and `UUID` overloads). - Evaluates whether a listener can hear a speaker across all communication channels: 1. Direct point-to-point audio transmitters (`VoiceTransmitterService`). 2. Shared radio frequency channels (`VoiceRadioService`). 3. Proximity spatial voice chat (`canHearProximity`). - **Full-Condition Proximity Audibility (`canHearProximity`)**: - Introduced `voiceService.canHearProximity(speaker, listener)` (with `Player` and `UUID` overloads). - Validates active Simple Voice Chat connections for both players. - Enforces life states (`ALIVE`, `DEAD`, `SPECTATE`). - Evaluates voice projection constraints (`emitVoiceAtPlayer`, `emitVoiceAtAnchor`, `hearPlayerEnvironment`). - Respects configured distance limits (`Codex.getEffectiveDistance()`). - Computes total dB attenuation across `VoiceWall` materials and isolated `VoiceRoom` cuboids; returns `false` if sound is blocked ($\ge 99.0\text{ dB}$). - **Direct Decibel Attenuation Metrics**: - Added `voiceService.getEffectiveAttenuationDb(speaker, listener)` to measure total acoustic dB loss between two players. - Added `voiceWallService.getAttenuationDb(speaker, listener)` for querying raw wall and room isolation losses. --- ## 📢 Physical Broadcast System (`VoiceBroadcastService`) - **Podium & Intercom Broadcast Points**: - Introduced `VoiceBroadcastService` and `/voice broadcast` command suite. - Players speaking within a configured capture radius around a location or entity automatically have their voice routed to connected speakers. - **Flexible Audio Routing**: - **All Speakers Routing (`allSpeakers = true`)**: Broadcasts to every registered speaker across the server. - **Selective Target Speakers**: Link specific speakers to a broadcast point (`/voice broadcast link <name> <speaker>`). - **On/Off Toggle & Filter Chaining**: - Broadcast points can be toggled on/off on demand (`/voice broadcast toggle <name>`). - Optional custom audio filters can be chained to the broadcast (e.g. intercom distortion, PA megaphone filter). - **Modular Persistence**: - Stored under `modules/broadcast/` with automatic saving on server shutdown. --- ## 🛠️ Interactive Configuration Mode & Tool (`/voice config`) - **Interactive Configuration Tool (`/voice tool`)**: - Added `/voice config` and `/voice tool` commands (using `ECHO_SHARD` as the physical tool to prevent conflicts with WorldEdit wands). - Config tool supports interactive targeting: entities, blocks, or air/gaze fallback. - **Full InvUI Management GUIs Across All Audio Subsystems**: - **Dashboard (`VoiceConfigMainGUI`)**: Visual dashboard covering all audio subsystems with target coordinates/entity indicators. - **Speakers Manager (`SpeakerListGUI`, `SpeakerEditGUI`)**: Browse speakers, adjust distance/range with +/- buttons, toggle mode (GLOBAL / RESTRICTED), teleport, or create new speakers at current target. - **Broadcast Manager (`BroadcastListGUI`, `BroadcastEditGUI`, `BroadcastLinkSpeakersGUI`)**: Browse broadcast points, toggle active state (ON/OFF), adjust radius, toggle all-speakers routing, visually link/unlink individual speakers, cycle filters, or create new points. - **Wiretaps Manager (`WiretapListGUI`, `WiretapEditGUI`)**: Inspect covert bugs, toggle live eavesdropping, teleport, or deploy new bugs. - **Acoustic Rooms Inspector (`RoomListGUI`)**: View room dimensions, reverberation presets, and acoustic isolation percentages. - **Radio Channels Manager (`RadioListGUI`)**: Browse frequencies, view active listener counts, and tune in/disconnect directly. - **Transmitters Manager (`TransmitterListGUI`)**: Toggle transmitter mode, view linked receiver players, unlink or configure receivers. - **Projections Inspector (`ProjectionListGUI`)**: Inspect active player projections, emission modes (anchor/player), and teleport to anchor coordinates. - **Acoustic & Wall Engine (`AcousticInspectGUI`)**: Live toggle for VoiceWall, cycle occlusion modes (Realistic/Strict/Off), toggle air damping, particle raycast debug, and inspect acoustic properties of targeted blocks/materials. --- ## 🌐 Complete Localization & Translation System (`LangService`) - **Adventure Component.translatable Integration**: - All command messages, items (Cassette, Config Tool), and InvUI configuration menus now use `Component.translatable(...)` backed by MiniMessage translation stores. - Eliminated all hardcoded `TextDecoration` (`<!italic>`, `<b>`) and `NamedTextColor` calls across UI classes; all styling is defined directly within language files. - **Bilingual English (Default) & French Support**: - Populated `lang-dreamvoice.json` with comprehensive translation keys, gradients, formatting tags, and arguments. - Configured default plugin language to English (`EN`) with full client-side French (`FR`) fallback. --- ## 📦 Build System & Dependency Centralization - **Centralized `gradle.properties`**: - Consolidated all plugin, toolchain, and dependency versions into `gradle.properties`: - `minecraft_version = 26.1.2` - `paper_api_version = 26.1.2.build.+` - `fabric_api_version = 0.155.0+26.1.2` - `loader_version = 0.19.3` - `loom_version = 1.17-SNAPSHOT` - `shadow_version = 9.4.1` - `voicechat_api_version = 2.6.20` - `vosk_version = 0.3.45` - `cloud_fabric_version = 2.0.0-beta.16` - `java_version = 25` - Streamlined `settings.gradle` and all subproject build files (`api`, `common`, `paper`, `fabric`) to reference properties exclusively. - **CI/CD Workflow Modernization**: - Updated GitHub Actions workflows (`publish.yml`, `javadoc.yml`, `discord-announce.yml`) for dual-platform publishing to GitHub Packages and Modrinth. --- ## 🐛 Bug Fixes & Stability - **Projection Audio Crackling & Transcoding Artifacts**: - Eliminated audio crackling and high-frequency buzzing occurring when speaking while in voice projection: - Removed discontinuous chunk-level 1-pole lowpass smoothing filter that injected 50 Hz boundary discontinuities into audio packets. - Prevented multi-decoding of incoming microphone Opus packets on shared decoders across listeners. - Implemented `encoder.resetState()` on speech pauses (> 400ms) to prevent Opus predictor state corruption upon resuming speech. - Bypassed PCM decoding and lossy Opus transcoding completely when no wall occlusion or voice filters are present, routing raw Opus packets directly to 3D locational audio channels. - **Speech Recognizer Crash on Reload**: - Resolved `kaldi::KaldiFatalError` (`Can't add speaker model to already running recognizer`) triggered during `/voice speech reload` by safely closing and cycling active Vosk recognizer instances before applying updated keyword grammars. - **CI / Discord Webhook Release Workflow**: - Fixed Python variable scope (`brand_color`) in `.github/workflows/discord-announce.yml`. - Added role mention `<@&1546913649308995738>` to automated Discord release broadcasts. --- ## 🧹 Code Quality & Conventions - Removed redundant control-flow braces on single statements (`if`, `else`, `for`) across `fabric`, `paper`, `common`, and `api`. - Cleaned up inline fully-qualified class names in favor of clean header imports. - Standardized `final var` declaration across all local variable scopes.
release

DreamVoice Paper 2.0.1

2.0.1+paper
30 сент. 2026 г.30Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 2.0.1 ## 🚀 Dual-Platform Engine: Paper & Fabric First-Class Support - **Multi-Module Gradle Architecture**: - Restructured the entire codebase into a clean, modern multi-module architecture: - `:api`: Platform-independent public interfaces, models, and events (`DreamVoiceAPI`, `VoiceLocation`, `Speaker`, `VoiceWiretap`, `VoiceEvent`, etc.). - `:common`: Platform-agnostic core acoustic engine (`DreamVoiceCommon`), DSP audio pipelines, raycasting logic, persistence, and service implementations. - `:paper`: Paper / Purpur 26.1.2+ server plugin (`DreamVoice-paper-2.0.1.jar`) utilizing Paperweight and shadow jar packaging. - `:fabric`: Fabric 26.1.2+ server mod (`DreamVoice-fabric-2.0.1.jar`) built with Fabric Loom 1.17, Fabric API, and Cloud Fabric commands. - **Platform Abstraction Layer (`VoicePlatform`)**: - Implemented `PaperVoicePlatform` and `FabricVoicePlatform` bridging server scheduling (sync/async/timer), entity tracking, block occlusion raycasts, particle dispatches, and loggers. - Native multiplatform coordinates via `VoiceLocation`, allowing services to operate identically regardless of whether Bukkit or Minecraft ServerLevel is running underneath. - **Dual Configuration Directories**: - Automatically loads and saves data in standard platform locations: - **Paper**: `plugins/DreamVoice/` - **Fabric**: `config/dreamvoice/` --- ## 🔌 Unified `DreamVoiceAPI` Service Locator - **Universal API Entrypoint**: - Unified entry point `DreamVoiceAPI.get()` accessible from both Paper plugins and Fabric mods without platform-specific boilerplate. - Direct accessor methods for all acoustic services: - `api.speakerService()`: 3D spatial speakers, dual-channel audio, entity tracking. - `api.wallService()`: VoiceWall raycast occlusion, material decibel loss, diffraction. - `api.roomService()`: Soundproof Cuboid zones and reverberation presets. - `api.recordingService()`: Zero-CPU Opus capture, timeline slicing, interactive cassettes. - `api.radioService()`: Frequency channels, analog band-pass filters, push-to-talk clicks. - `api.wiretapService()`: Covert listening bugs, mobile entity bugs, live eavesdropping. - `api.projectionService()`: Decoupled voice anchors, CCTV feeds, bilateral audio. - `api.transmitterService()`: Point-to-point directional voice transmitters. - `api.broadcastService()`: Server-wide and localized podium/intercom broadcasts. - `api.filterService()`: File-first DSP filters, hot-compilation, and stack management. - `api.speechService()`: Offline Vosk keyword spotting and transcription stations. - `api.playerService()`: Voice player wrappers (`VPlayer`) and connection metadata. - `api.persistenceService()`: Asynchronous disk flushes and auto-save coordination. - `api.voiceService()`: Direct Simple Voice Chat bridge and raw packet dispatch. --- ## 📡 Fabric Network Packet System & Inter-Mod Protocols (`@DreamPacket`) - **Annotation-Driven Networking Pipeline**: - Introduced `@DreamPacket` and `@DreamServerReceiver` with automatic classpath scanning via `PacketAnnotationProcessor` and `ServerPacketAnnotationProcessor`. - Registered all packet codecs with Fabric's `PayloadTypeRegistry` under the `dreamvoice:*` namespace. - **Preshot Server-Bound & Client-Bound Packet Catalog (40+ Packets)**: - **Configuration & Visualizer**: `ServerBoundRequestConfigSyncPacket`, `ClientBoundConfigSyncPacket`, `ServerBoundVisualizerTogglePacket`, `ClientBoundVisualizerSyncPacket`. - **3D Spatial Speakers**: `ServerBoundSpeakerCreatePacket`, `ServerBoundSpeakerDeletePacket`, `ServerBoundSpeakerLinkPacket`, `ServerBoundSpeakerUnlinkPacket`, `ServerBoundSpeakerPlaySoundPacket`, `ServerBoundSpeakerStopSoundPacket`, `ServerBoundSpeakerUpdatePacket`, `ClientBoundSpeakerSyncPacket`. - **Wiretaps & Surveillance**: `ServerBoundWiretapCreatePacket`, `ServerBoundWiretapDeletePacket`, `ServerBoundWiretapSubscribePacket`, `ServerBoundWiretapUnsubscribePacket`, `ClientBoundWiretapSyncPacket`. - **Radios & Walkie-Talkies**: `ServerBoundRadioCreatePacket`, `ServerBoundRadioJoinPacket`, `ServerBoundRadioLeavePacket`, `ClientBoundRadioSyncPacket`. - **Audio Recordings & Cassettes**: `ServerBoundRecordingStartPacket`, `ServerBoundRecordingStopPacket`, `ServerBoundCassetteCreatePacket`, `ServerBoundRecordingPlayPacket`, `ServerBoundRecordingStopPlayPacket`, `ClientBoundRecordingSyncPacket`. - **DSP Voice Filters**: `ServerBoundFilterApplyPacket`, `ServerBoundFilterRemovePacket`, `ServerBoundFilterClearPacket`, `ServerBoundFilterTogglePacket`, `ClientBoundFilterSyncPacket`. - **Acoustic Rooms**: `ServerBoundRoomCreatePacket`, `ServerBoundRoomDeletePacket`, `ServerBoundRoomUpdatePacket`, `ClientBoundRoomSyncPacket`. - **Transmitters & Projections**: `ServerBoundTransmitterCreatePacket`, `ServerBoundTransmitterDeletePacket`, `ServerBoundTransmitterTogglePacket`, `ClientBoundTransmitterSyncPacket`, `ServerBoundProjectionCreatePacket`, `ServerBoundProjectionDeletePacket`, `ClientBoundProjectionSyncPacket`. - **Zero-Dependency Inter-Mod Integration**: - Allows external survival mods (craftable megaphones, spy bugs, walkie-talkies, tape recorders) and client HUD mods to control DreamVoice subsystems via JSON custom payloads without hard compile-time dependencies. --- ## ⚡ Dual-Platform Event Bus (Bukkit & Fabric) - **Unified Voice Events**: - All event classes extend `VoiceEvent` and feature self-dispatching via `.callEvent()`. - **Platform Event Dispatching**: - **Paper**: Dispatched natively through Bukkit's `PluginManager` for `@EventHandler` listeners. - **Fabric**: Dispatched through `DreamVoiceEvents.VOICE_EVENT.register(...)` callback hook. - **Event Coverage**: - Cancellable hooks across all lifecycle actions: `SpeakerLinkPlayerEvent`, `SpeakerPlaySoundEvent`, `RadioChannelJoinEvent`, `CassetteCreateEvent`, `CassettePlayEvent`, `VoiceRecordingStartEvent`, `VoiceFilterApplyEvent`, `VoiceWallOcclusionEvent`, `VoiceKeywordSpokenEvent`, `WiretapSubscribeEvent`, etc. --- ## 👁️ Real-Time 3D Acoustic Visualizer Mode (`/voice visualizer`) - **Interactive Acoustic Raycasting**: - Added `/voice visualizer [toggle|on|off]` (permission: `dreamvoice.visualizer`). - Renders 3D particle rays illustrating line-of-sight paths, wall collision impacts, aperture diffraction bypasses around doors/openings, and speaker audible coverage spheres. - **Performance-Conscious Hand-Held Requirement**: - Particle streams are rendered **only** when the inspecting player has the visualizer tool (default: `COMPASS`) equipped in their main hand, preventing client lag and visual clutter during normal gameplay. - **Synchronized Visualizer State**: - State is automatically synced to Fabric clients via `ServerBoundVisualizerTogglePacket` and `ClientBoundVisualizerSyncPacket`. --- ## 🎙️ VoiceWiretap x VoiceProjection Integration - **Cross-Module Audio Propagation**: - Covert wiretap microphones (`VoiceWiretap`) now dynamically support and intercept voices emitted through active voice projections (`VoiceProjection`). - **Dual-Origin Spatial Audio**: - **Physical Emission (`isEmitVoiceAtPlayer`)**: Microphones in proximity to the player's physical body capture the direct voice as normal. - **Anchor Emission (`isEmitVoiceAtAnchor`)**: Microphones in proximity to the projection's anchor location (`projection.getAnchorLocation()`) intercept the projected voice in real time. - **Acoustic Occlusion & Wall Physics**: Line-of-sight raycasting (`VoiceRayCast`) and material attenuation (`VoiceWall`) are accurately simulated between the anchor coordinates and the wiretap. - **Filter Inheritance**: Voice projections configured with custom filters (e.g., megaphone, radio, disguise) pass their processed audio downstream to wiretap listeners. --- ## 🔌 Public Hearing & Attenuation API (`VoiceService` & `VoiceWallService`) - **Unified Audibility Check (`canHear`)**: - Introduced `voiceService.canHear(speaker, listener)` (with `Player` and `UUID` overloads). - Evaluates whether a listener can hear a speaker across all communication channels: 1. Direct point-to-point audio transmitters (`VoiceTransmitterService`). 2. Shared radio frequency channels (`VoiceRadioService`). 3. Proximity spatial voice chat (`canHearProximity`). - **Full-Condition Proximity Audibility (`canHearProximity`)**: - Introduced `voiceService.canHearProximity(speaker, listener)` (with `Player` and `UUID` overloads). - Validates active Simple Voice Chat connections for both players. - Enforces life states (`ALIVE`, `DEAD`, `SPECTATE`). - Evaluates voice projection constraints (`emitVoiceAtPlayer`, `emitVoiceAtAnchor`, `hearPlayerEnvironment`). - Respects configured distance limits (`Codex.getEffectiveDistance()`). - Computes total dB attenuation across `VoiceWall` materials and isolated `VoiceRoom` cuboids; returns `false` if sound is blocked ($\ge 99.0\text{ dB}$). - **Direct Decibel Attenuation Metrics**: - Added `voiceService.getEffectiveAttenuationDb(speaker, listener)` to measure total acoustic dB loss between two players. - Added `voiceWallService.getAttenuationDb(speaker, listener)` for querying raw wall and room isolation losses. --- ## 📢 Physical Broadcast System (`VoiceBroadcastService`) - **Podium & Intercom Broadcast Points**: - Introduced `VoiceBroadcastService` and `/voice broadcast` command suite. - Players speaking within a configured capture radius around a location or entity automatically have their voice routed to connected speakers. - **Flexible Audio Routing**: - **All Speakers Routing (`allSpeakers = true`)**: Broadcasts to every registered speaker across the server. - **Selective Target Speakers**: Link specific speakers to a broadcast point (`/voice broadcast link <name> <speaker>`). - **On/Off Toggle & Filter Chaining**: - Broadcast points can be toggled on/off on demand (`/voice broadcast toggle <name>`). - Optional custom audio filters can be chained to the broadcast (e.g. intercom distortion, PA megaphone filter). - **Modular Persistence**: - Stored under `modules/broadcast/` with automatic saving on server shutdown. --- ## 🛠️ Interactive Configuration Mode & Tool (`/voice config`) - **Interactive Configuration Tool (`/voice tool`)**: - Added `/voice config` and `/voice tool` commands (using `ECHO_SHARD` as the physical tool to prevent conflicts with WorldEdit wands). - Config tool supports interactive targeting: entities, blocks, or air/gaze fallback. - **Full InvUI Management GUIs Across All Audio Subsystems**: - **Dashboard (`VoiceConfigMainGUI`)**: Visual dashboard covering all audio subsystems with target coordinates/entity indicators. - **Speakers Manager (`SpeakerListGUI`, `SpeakerEditGUI`)**: Browse speakers, adjust distance/range with +/- buttons, toggle mode (GLOBAL / RESTRICTED), teleport, or create new speakers at current target. - **Broadcast Manager (`BroadcastListGUI`, `BroadcastEditGUI`, `BroadcastLinkSpeakersGUI`)**: Browse broadcast points, toggle active state (ON/OFF), adjust radius, toggle all-speakers routing, visually link/unlink individual speakers, cycle filters, or create new points. - **Wiretaps Manager (`WiretapListGUI`, `WiretapEditGUI`)**: Inspect covert bugs, toggle live eavesdropping, teleport, or deploy new bugs. - **Acoustic Rooms Inspector (`RoomListGUI`)**: View room dimensions, reverberation presets, and acoustic isolation percentages. - **Radio Channels Manager (`RadioListGUI`)**: Browse frequencies, view active listener counts, and tune in/disconnect directly. - **Transmitters Manager (`TransmitterListGUI`)**: Toggle transmitter mode, view linked receiver players, unlink or configure receivers. - **Projections Inspector (`ProjectionListGUI`)**: Inspect active player projections, emission modes (anchor/player), and teleport to anchor coordinates. - **Acoustic & Wall Engine (`AcousticInspectGUI`)**: Live toggle for VoiceWall, cycle occlusion modes (Realistic/Strict/Off), toggle air damping, particle raycast debug, and inspect acoustic properties of targeted blocks/materials. --- ## 🌐 Complete Localization & Translation System (`LangService`) - **Adventure Component.translatable Integration**: - All command messages, items (Cassette, Config Tool), and InvUI configuration menus now use `Component.translatable(...)` backed by MiniMessage translation stores. - Eliminated all hardcoded `TextDecoration` (`<!italic>`, `<b>`) and `NamedTextColor` calls across UI classes; all styling is defined directly within language files. - **Bilingual English (Default) & French Support**: - Populated `lang-dreamvoice.json` with comprehensive translation keys, gradients, formatting tags, and arguments. - Configured default plugin language to English (`EN`) with full client-side French (`FR`) fallback. --- ## 📦 Build System & Dependency Centralization - **Centralized `gradle.properties`**: - Consolidated all plugin, toolchain, and dependency versions into `gradle.properties`: - `minecraft_version = 26.1.2` - `paper_api_version = 26.1.2.build.+` - `fabric_api_version = 0.155.0+26.1.2` - `loader_version = 0.19.3` - `loom_version = 1.17-SNAPSHOT` - `shadow_version = 9.4.1` - `voicechat_api_version = 2.6.20` - `vosk_version = 0.3.45` - `cloud_fabric_version = 2.0.0-beta.16` - `java_version = 25` - Streamlined `settings.gradle` and all subproject build files (`api`, `common`, `paper`, `fabric`) to reference properties exclusively. - **CI/CD Workflow Modernization**: - Updated GitHub Actions workflows (`publish.yml`, `javadoc.yml`, `discord-announce.yml`) for dual-platform publishing to GitHub Packages and Modrinth. --- ## 🐛 Bug Fixes & Stability - **Projection Audio Crackling & Transcoding Artifacts**: - Eliminated audio crackling and high-frequency buzzing occurring when speaking while in voice projection: - Removed discontinuous chunk-level 1-pole lowpass smoothing filter that injected 50 Hz boundary discontinuities into audio packets. - Prevented multi-decoding of incoming microphone Opus packets on shared decoders across listeners. - Implemented `encoder.resetState()` on speech pauses (> 400ms) to prevent Opus predictor state corruption upon resuming speech. - Bypassed PCM decoding and lossy Opus transcoding completely when no wall occlusion or voice filters are present, routing raw Opus packets directly to 3D locational audio channels. - **Speech Recognizer Crash on Reload**: - Resolved `kaldi::KaldiFatalError` (`Can't add speaker model to already running recognizer`) triggered during `/voice speech reload` by safely closing and cycling active Vosk recognizer instances before applying updated keyword grammars. - **CI / Discord Webhook Release Workflow**: - Fixed Python variable scope (`brand_color`) in `.github/workflows/discord-announce.yml`. - Added role mention `<@&1546913649308995738>` to automated Discord release broadcasts. --- ## 🧹 Code Quality & Conventions - Removed redundant control-flow braces on single statements (`if`, `else`, `for`) across `fabric`, `paper`, `common`, and `api`. - Cleaned up inline fully-qualified class names in favor of clean header imports. - Standardized `final var` declaration across all local variable scopes.
release

DreamVoice 2.0.0

2.0.0
8 сент. 2026 г.11Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 2.0.0 ## 🚀 Architectural Overhaul & Modular Storage - **Modular Folder & Storage Architecture**: - Transitioned from a monolithic layout to a clean, isolated **per-module** directory structure under `plugins/DreamVoice/modules/`: - `modules/wall/config.json`: Acoustic occlusion, diffraction, and material attenuation properties. - `modules/speaker/data.json`: 3D directional and omni speaker locations and configurations. - `modules/radio/data.json`: Walkie-talkie and radio frequency channels. - `modules/record/`: Dedicated subdirectories for raw capture (`recordings/`) and converted audio files (`exports/`). - `modules/wiretap/data.json`: Wiretapping bugs persistence. - `modules/projection/data.json`: Voice projections. - `modules/transmitter/data.json`: Voice transmitters. - **Preserved Root Audio Library**: - The `plugins/DreamVoice/sounds/` directory remains directly at the root, allowing all modules (Speakers, Radios, Intercoms) to seamlessly share common sound effects, chimes, and alarms without duplicate assets. - **Root `config.json` Dedicated to Modules**: - The root `config.json` is now streamlined to exclusively handle module toggling (`modules: { wall: true, speaker: true, ... }`). - **Per-Module Persistence Configuration (`config.json`)**: - Each persistent module (`speaker`, `radio`, `wiretap`, `projection`, `transmitter`, `room`) includes its own `persistence` block within `modules/<module>/config.json`: - `save_on_stop`: When `false`, ignores saving on server shutdown (`onDreamDisable`). - `auto_save`: Enables or disables background periodic auto-saving. - `auto_save_interval_seconds`: Dedicated interval in seconds for asynchronous persistence per module. - **Zero-Loss Hot Migration**: - Automatic migration on startup: existing data from `data/*.json`, `recordings/`, and `exports/` are moved safely into their respective `modules/` directories with zero administrative intervention and zero downtime. ## 🌍 DreamAPI LangService Integration - **Decoupled Localization Engine**: - Integrated DreamAPI's `LangService` (`fr.dreamin.dreamapi.api.lang.service.LangService`). - DreamVoice explicitly boots `LangServiceImpl` when running with `@EnableServices(mode = LoadMode.NONE)`. - All hardcoded chat, action bar, title, and item lore strings are moved to `plugins/DreamVoice/lang/lang-dreamvoice.json`. - Automatic per-player client locale resolution (`player.locale()`) with seamless fallback to English defaults. ## 🎒 DreamAPI ItemRegistryService Voice Handlers - **`VoiceItemHandler` & `VoiceItemContext`**: - Introduced native voice handlers designed for DreamAPI's `ItemDefinition.builder()`: - `VoiceItemHandler.addFilter("filterId")`: Applies voice filter (e.g. on `ItemAction.SET_ARMOR` or `ItemAction.HELD`). - `VoiceItemHandler.removeFilter("filterId")`: Removes voice filter (e.g. on `ItemAction.REMOVE_ARMOR` or `ItemAction.UNHELD`). - `VoiceItemHandler.toggleFilter("filterId")`: Toggles filter on/off with feedback (e.g. on `ItemAction.RIGHT_CLICK`). - `VoiceItemHandler.timedFilter("filterId", Duration)`: Applies a filter for a typed `java.time.Duration` before auto-reverting. - `VoiceItemHandler.connectRadio("frequency")` & `disconnectRadio()`. - `VoiceItemHandler.of(consumer)`: Exposes an enriched `VoiceItemContext` for custom item logic directly in item builders. ## 🎛️ Custom File Filters & Auto-Registration Engine - **Annotation-Driven Auto-Registration (`@AutoVoiceFilter`)**: - Introduced `@AutoVoiceFilter(priority = ..., enabled = ...)` for automated discovery and registration of third-party or addon filters via `voiceFilterService.registerAnnotatedFilters(Collection<Class<?>>)`. - **Dynamic File Filters (`.yml`, `.json`, `.java`)**: - Removed hardcoded filter implementations from `core` source code in favor of a 100% file-first architecture. - All 13 built-in filters (`AlienVoiceFilter.java`, `CaveVoiceFilter.java`, `DeepVoiceFilter.java`, `DisguiseVoiceFilter.java`, `GasmaskVoiceFilter.java`, `GhostVoiceFilter.java`, `HeliumVoiceFilter.java`, `MegaphoneVoiceFilter.java`, `MuffledVoiceFilter.java`, `RadioVoiceFilter.java`, `RobotVoiceFilter.java`, `TelephoneVoiceFilter.java`, `UnderwaterVoiceFilter.java`) are stored in `core/src/main/resources/modules/filter/filters/` and automatically extracted to `plugins/DreamVoice/modules/filter/filters/` upon first server boot. - Filters can be created, tweaked, or removed on the fly in `plugins/DreamVoice/modules/filter/filters/`. - Declarative DSP pipeline for `.yml` and `.json`: support for `lowpass`, `highpass`, `gain`, `overdrive`, `ring_modulator`, and `delay/echo`. - Hot-compilation of `.java` source files on-the-fly via JDK `JavaCompiler` with custom in-memory classloading and dependency resolution against DreamVoice and DreamAPI. - **Filter Exporter Engine**: - Added API method `voiceFilterService.exportFilter(filterId, format)` supporting `"yml"`, `"json"`, and `"java"`. - Added commands: `/voice filter list`, `/voice filter reload`, and `/voice filter export <filter> <yml|json|java>`. - Allows exporting any active filter into a declarative pipeline file (`.yml` / `.json`) or extracting its full Java source code (`.java`) directly into `modules/filter/filters/`. ## 🏰 Acoustic Zones & Soundproof Rooms (Acoustic Rooms) - **Module `room` (`plugins/DreamVoice/modules/room/`)**: - `modules/room/config.json`: Defines reusable acoustic presets with dedicated sound isolation percentage (`isolation_pct`), spatial reverberation (`reverb`), and automated voice filters (`filters`). Includes module `persistence` configuration. - `modules/room/data.json`: Stores active rooms and their DreamAPI `Cuboid` spatial bounds. - **Soundproofing & Room Attenuation Integration**: - Connected directly to `VoiceWallServiceImpl.processEntitySoundPacket`. - Sound isolation blocks sound transmission completely (100% loss) if either the sender or receiver is inside a fully soundproof room, or if they are in distinct isolated rooms. - Proportional sound attenuation loss is calculated based on effective isolation percentages. - **Dynamic Presence & Filter Stacking**: - Event listeners for DreamAPI `CuboidPlayerEnterEvent` and `CuboidPlayerLeaveEvent` automatically track player room transitions and attach or detach room filters seamlessly. - **Commands & Management**: - Added `/voice room list`, `/voice room info <id>`, `/voice room delete <id>`, and `/voice room reload`. ## 🎙️ Speech-to-Text, Keyword Spotting & Interactive Transcription Stations - **Module `speech` (`plugins/DreamVoice/modules/speech/`)**: - `config.json`: Comprehensive configuration with English default texts, transcription mode selection (`LOCAL` or `SIDECAR`), station parameters, and analysis display settings. - `keywords.json`: Dedicated configuration defining keywords, aliases, confidence thresholds, cooldowns, and required permissions. - `models/`: Dedicated directory storing offline Vosk models, manageable manually or downloaded via command. - **Realtime Keyword Spotting (KWS) with Constrained Vosk Grammar**: - Ultra-lightweight asynchronous background listening per player powered by Vosk. - Utilizes a constrained grammar JSON array containing only registered keywords and `[unk]`, minimizing CPU usage and eliminating dictionary hallucinations. - Instant recognizer reset on keyword trigger to prevent duplicate triggers across consecutive 20ms audio frames. - Configurable audio energy gate (`min_energy_threshold`) preventing microphone hiss and background noise from feeding into the speech decoder. - Automatic phonetic buffer clearance on speech pauses (`silence_reset_ms`), eliminating phantom residue and cross-phrase keyword hallucinations. - Triggers the Bukkit `VoiceKeywordSpokenEvent(player, keyword, matchedWord, confidence)` for game scripting, roleplay spells, secret doors, and voice interactions. - Live debug inspector via `/voice speech debug [player]` or global console logging. - **Interactive Audio Cassette Transcription Stations**: - Right-click with an **Audio Cassette** on a configured block (`LECTERN`, `JUKEBOX`, or custom block materials). - Fully customizable analysis feedback with multiple display types (`ACTION_BAR`, `CHAT`, `TITLE`), default English strings, and `LangService` i18n translation keys. - Configurable sound effects and particle animations during the analysis period. - Generates a formatted **Written Book (`Material.WRITTEN_BOOK`)** containing paginated transcripts, timestamps (`[00:14] Player: Text`), and translatable metadata. - Automatic lectern placement (`put_on_lectern`) when interacting with an empty lectern. - **Hybrid Local (Vosk) & Sidecar (faster-whisper) Transcription Engine**: - `LOCAL` mode: runs directly inside the JVM using `com.alphacephei:vosk`. - `SIDECAR` mode: offloads audio transcription over asynchronous HTTP to an external Whisper instance with automatic fallback to local Vosk (`fallback_to_local`). - Production-ready official Pterodactyl Egg (`egg-dreamvoice-transcription.json`). - **Model Management & Commands**: - `/voice speech download <lang|model>`: Asynchronously downloads and unpacks official Vosk models without server freezes. Supports both lightweight small models (`fr`, `en`, `de`, `es`, `it`, `ja`, `ru`, `pt`, `nl`, `zh`) and high-accuracy big server models (`fr-big`, `en-big`, `de-big`, `es-big`, `it-big`, `ja-big`, `ru-big`, `zh-big`, `hi-big`, `uk-big`). - `/voice speech models` & `/voice speech setmodel <model>`: Inspects and selects the active speech recognition model. - `/voice speech transcribe <id> [book|chat]`: Manual transcription utility for staff, moderators, and storytellers. - `/voice speech keywords`: Displays all active keyword spotting definitions and trigger phrases. - `/voice speech reload`: Hot-reloads speech configuration, keywords, and Vosk grammar definitions.
release

DreamVoice 1.1.2

1.1.2
8 сент. 2026 г.10Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 1.1.2 ## ✨ New Features - **Audio File Export (MP3, OGG, WAV)**: - Added asynchronous audio export to `VoiceRecordingService`: `exportRecording(UUID/VoiceRecording, AudioExportFormat, [fileName])`. - Converts audio into MP3, OGG Vorbis, or standard PCM WAV into `plugins/DreamVoice/exports/`. - Decodes Opus speech stream directly and accurately using sequential stream reconstruction with natural conversational pause detection, eliminating distortion and crackling. - Added command: `/record export <id> <mp3|ogg|wav> [fileName]` with tab-completion, custom destination file naming, and direct file path feedback. ## 🐛 Bug Fixes & Audio Improvements - **Fixed VoiceWallOcclusionEvent Async Dispatch Exception**: - Resolved `java.lang.IllegalStateException: VoiceWallOcclusionEvent may only be triggered synchronously` occurring when `VoiceWallServiceImpl.processEntitySoundPacket` dispatched acoustic occlusion checks on Simple Voice Chat's audio processing thread (`Server$ProcessThread`). - `VoiceWallOcclusionEvent` now explicitly calls `super(true)` in its constructor to mark the Bukkit event as asynchronous, allowing Paper's `PaperEventManager` to dispatch it safely across worker threads without exceptions. - Hardened `EntitySoundPacketEvent` with an explicit asynchronous constructor (`super(true)`) to prevent similar thread check violations. - **Restored Speaker Audio Feedback for Nearby Senders**: - Fixed an issue where players speaking into or next to a 3D speaker could not hear their own voice coming out of the speaker. - Removed sending-player exclusions (`!sp.getUuid().equals(senderUuid)` in `broadcastToDedicatedChannels` and `if (listener.getUniqueId().equals(senderUuid)) return;` in `processSingleListenerStream`). - Players standing within the speaker's acoustic range (`distance`) and line-of-sight now naturally hear their voice projected from the speaker's 3D locational coordinates. - Integrated `speaker.getFilter()` listener validation within `processSingleListenerStream` to ensure custom speaker recipient predicates are consistently respected across both direct streaming and DSP-filtered pipelines. - **Complete DSP Voice Filter Overhaul**: - **Radio (`RadioVoiceFilter`)**: Replaced 10-bit stair-step quantization (which caused harsh clicking/crackling) and 1st-order IIR with a cascaded 4th-order Butterworth bandpass (480 Hz – 2600 Hz, 24 dB/oct), mid-range presence boost (+4 dB at 1.5 kHz), warm hyperbolic tangent ($\tanh$) analog overdrive, and subtle RF carrier hiss (-42 dB). - **Telephone (`TelephoneVoiceFilter`)**: Implemented 2nd-order Butterworth bandpass (350 Hz – 3400 Hz) with vintage carbon capsule asymmetrical saturation. - **Alien (`AlienVoiceFilter`)**: Implemented linear fractional-delay interpolation on the sinus modulation line, eliminating sample-skipping clicks. - **Ghost (`GhostVoiceFilter`)**: Added smooth linear delay interpolation on dual chorusing delay lines with soft-knee limiting to eliminate crackling. - **Helium & Deep (`HeliumVoiceFilter`, `DeepVoiceFilter`)**: Completely redesigned pitch-shifting using 40ms grains with Hann windowing (ensuring constant unity overlap-add gain) and linear interpolation, eliminating the 50 Hz buzz and window boundary clicks. - **Cave (`CaveVoiceFilter`)**: Rebalanced wet/dry mix (0.68/0.32) and added soft limiting to prevent reverb buffer overflow and distortion on loud speech. - **Megaphone (`MegaphoneVoiceFilter`)**: 2nd-order horn bandpass (600 Hz – 3400 Hz) with +5 dB acoustic throat resonance at 1100 Hz, analog saturation, and normalized slapback echo. - **Robot (`RobotVoiceFilter`)**: Normalized carrier synthesis to strictly $\le 1.0$ and tuned ring modulation dry/wet balance. - **Disguise (`DisguiseVoiceFilter`)**: Fixed buffer index clamping bug, isolated states per player UUID to prevent cross-player modulation bleeding, and added linear interpolation.
release

DreamVoice 1.1.1

1.1.1
6 сент. 2026 г.6Minecraft: 26.1.2paper, purpur, spigot
Скачать
Что нового
# Changelog 1.1.1 ## 🐛 Bug Fixes & Network Stability - **Fixed VoiceChat VolumeCategory Packet Overflow (`String too big, max 16`)**: - Resolved Netty serialization crash `EncoderException: String too big (was 24 bytes encoded, max 16)` in `AddCategoryPacket` when players join the server. - Shortened SVC volume category display names to comply with Simple Voice Chat's strict 16-byte network limit (`"Projection / Body Anchor"` → `"Projection"`, `"Wiretap / Bug"` → `"Wiretap"`). - **Fixed VoiceWall Acoustic Diffraction & Attenuation Silence Bug**: - Resolved complete client silence during diffraction (-2 to -6 dB). Fixed the `EntitySoundPacket` reconstruction in `VoiceWallServiceImpl`: `entitySoundPacketBuilder()` automatically copies all original packet metadata (`channelId`, `sender`, `sequenceNumber`, `distance`, `entityUuid`), avoiding packet corruption or null sender overrides in Simple Voice Chat's client mixer. - Added proactive `resetState()` on Concentus Opus decoders and encoders when switching between line-of-sight and obstructed paths (> 400ms stream inactivity), preventing corrupted Linear Predictive Coding (LPC) state and silent dropped packets. - Cleaned up PCM processing to apply mathematically accurate dB gain without waveform distortion. - Fixed client connection validation in `VoiceWallManager.isValidClient()` by looking up active connections via `VoicechatServerApi.getConnectionOf(uuid)` dynamically. - Filtered sound packet handling in `VoiceServiceImpl` to only process `SoundPacketEvent.SOURCE_PROXIMITY`, preventing infinite reflection loops. - Added immediate short-circuiting for 100% blocked walls (`totalDbLoss >= 99.0`), dropping the packet directly and saving unnecessary CPU cycles. - **Fixed Inadvertent Environmental Cave Filter on Speakers**: - Fixed an issue where `autoEnvironment` enabled by default in `VoiceFilterManager` was automatically injecting `CaveVoiceFilter` (multi-tap delay reverb + low-pass filter) on indoor/underground maps (light level 0, Y < 55). - Added `hasExplicitFilters(UUID)` to `VoiceFilterService` (API & Core) to distinguish between manual user-added filters and automatic environmental reverberation. - Updated `VoiceSpeakerServiceImpl` to only check for explicit filters, preventing environmental reverb from being applied when speaking through speakers. - Disabled `autoEnvironment` by default in `VoiceFilterManager`. - **Fixed VoiceWall Diffraction Blocked as 100% Soundproof (`BLOCKED`)**: - Fixed an issue where players with open line-of-sight diffraction apertures (-2 to -6 dB in `/voicewall debug`) were completely blocked with `BLOCKED (100% Soundproof)` when speaking. - Removed incorrect ternary override in `VoiceWallServiceImpl.processPlayerPair`: `VoiceRayCast` already accurately computes diffraction vs solid block attenuation per mode; overriding it forced all diffracted sound through apertures to 100.0 dB (silence) in `STRICT_BLOCK` mode. - Synchronized mode resolution in `VoiceRayCast` with `VoiceWallService.getMode()`. - Stopped polluting `lineOfSightCache` with fake `100.0` dB entries when players exceed voice distance or cross worlds, preventing stale 100% blocked entries when players move closer. - Fixed LOS cache expiration bypass: `processVoiceConnections` now verifies cache expiration so that stationary players (e.g. standing near a door that opens or closes) have their acoustic line-of-sight recalculated automatically every 2 seconds. - Integrated `distance` parameter directly into `voiceWall` configuration (`config.json`), with automatic fallback to root `distance`. - Enhanced `/voicewall info` to display the active max acoustic distance. - Bound `/voicewall debug` target searching to the effective configured distance rather than a hardcoded radius. - **Fixed Speaker Audio Crackling, Robotic Distortion ("Filter" Effect) & Self-Echo**: - **Single Opus Decode Per Packet**: Previously, when `VoiceWall` or filters were active, `VoiceSpeakerServiceImpl.processSingleListenerStream` was calling `voiceService.getDecoder(senderUuid).decode(rawOpus)` repeatedly in an inner loop for every listener on the same `OpusDecoder` instance. This severely corrupted the Opus decoder's adaptive LPC filter state, causing extreme robotic distortion, metallic phasing (sounding like an unwanted filter), and harsh digital crackling. Opus decoding is now performed strictly once per microphone packet and shared across all listeners. - **Excluded Speaker from Self-Broadcast**: Filtered out the sending player (`senderUuid`) from receiving their own voice back through `LocationalAudioChannel` and `broadcastToDedicatedChannels`. Hearing one's own voice delayed by UDP round-trip time was causing severe acoustic comb-filtering, echo, and clipping. - `VoiceSpeakerServiceImpl.broadcastToDedicatedChannels` now streams raw Opus bytes (`channel.send(rawOpus)`) instead of forwarding `MicrophonePacket`. This allows Simple Voice Chat to generate an uninterrupted, strictly linear sequence counter for the speaker channel, preventing client-side OpenAL jitter buffer resets, packet drops, and harsh crackling when speaking near speakers. - Restricted DSP transcoding (decode → filter → gain → limiter → encode) exclusively to listeners who actually require acoustic attenuation or voice filters. - Removed experimental distance-based air damping low-pass filter from `VoiceSpeakerServiceImpl` to ensure clean audio transmission. - **Real-Time Acoustic & VoiceWall Audio Debugger (`/voicewall debug`)**: - Enhanced `/voicewall debug` with clean sound packet inspection: whenever a player receives voice audio, an Action Bar HUD displays the sender, exact dB loss, resulting volume percentage, PCM Root Mean Square (RMS signal strength before and after DSP), and whether the output is audible (`[HEARD]`) or silent (`[SILENT]`). - Displays direct notifications when audio is unattenuated (`DIRECT (0.0 dB, 100% Vol)`) or completely blocked by soundproof walls (`BLOCKED (100% Soundproof, loss=X.XdB)`). - Removed emojis from all debug HUD and command feedback messages for a clean, professional interface. - **Decoder Resource Cleanup**: - Ensured all Concentus Opus decoders are closed in `finally` blocks within `VoiceSpeakerServiceImpl` to avoid memory and resource leaks. --- ## ⚡ Performance Optimizations & Audio Streaming - **Direct Opus Frame Streaming (`OpusAudioPlayer`)**: - Eliminated the double-transcoding bottleneck during playback (previously: pure-Java Opus decoding to PCM, padding silence, then pure-Java Opus re-encoding to channels). - Pre-recorded Opus frames from `VoiceRecording` are now streamed directly to SVC `AudioChannel.send(opusData)` at high precision (10ms scheduler) without Concentus re-encoding. - Dramatically reduces server CPU usage, completely eliminating audio buffer underruns, packet drops, and choppy audio during multi-speaker broadcasts. - Faithful timeline preservation: All silences (initial pauses, intermediate silences between words, and trailing pauses) and total recording duration are preserved naturally according to recorded timestamps with near-zero CPU overhead. - **Optimized Batch Audio Playback**: - Broadcast playback across all speakers (`all`) now streams pre-encoded Opus packets simultaneously across all speaker channels in a single pass. - Playing recordings to multiple player connections (`playRecordingTo(Collection<VoicechatConnection>, VoiceRecording)`) now shares a single static audio channel and an `OpusAudioPlayer`. - **Real-Time Asynchronous Microphone Event Dispatching**: - `MicrophonePacketEvent` is now explicitly asynchronous (`super(true)`) and dispatched directly on the VoiceChat network thread without enqueueing onto Bukkit's 20 TPS (50ms) tick loop. - Removes packet bundling/jitter, eliminating choppy playback and phase stuttering when speaking through speakers. - **Asynchronous Disk Persistence**: - Made `.dv` binary recording file writes asynchronous (`CompletableFuture.runAsync`) during `stopRecording`, `sliceRecording`, and wiretap stops, preventing I/O lag spikes on the main thread. --- ## 📢 Speaker Command Enhancements & Looping - **Recording Loop Support**: - Added optional `[loop]` parameter to voice recording playback: - `/speaker play record <speaker> <recording> [loop]` - `/speaker play record all <recording> [loop]` - Added overloaded methods `playRecording(..., boolean loop)` to `VoiceSpeakerService` and `VoiceSpeakerServiceImpl`. - **Bulk Target `all` in Speaker Commands**: - Added `all` to tab-completion suggestions across all `/speaker` subcommands. - Commands now accept `all` as the `<speaker>` argument to execute actions across every active speaker at once: - `/speaker remove all`: Unregisters and removes all active speakers. - `/speaker info all`: Displays detailed configuration and audio state for every speaker. - `/speaker mode all <global|restricted>`: Sets the playback access mode for all speakers. - `/speaker link all <player>`: Authorizes a player on all speakers. - `/speaker unlink all <player>`: Revokes player speaking authorization on all speakers. - `/speaker play record all <recording> [loop]`: Broadcasts a voice recording across all speakers (with optional looping). - `/speaker play file all <fileName> [loop]`: Plays a local audio file on all speakers simultaneously. - `/speaker play url all <url> [loop]`: Streams an online audio URL on all speakers simultaneously. - `/speaker stop all`: Stops playback on all active speakers. - **Keyword Reservation**: Creating a speaker named `all` is now prohibited to prevent command collisions. --- ## 🔌 Custom Events & Extensibility Suite - **Complete Custom Bukkit Event Catalog**: - Added 21 new strongly-typed Bukkit events extending `ToolsEvent` and `ToolsCancelEvent`: - **Speakers (`speaker.event`)**: `SpeakerRegisterEvent`, `SpeakerUnregisterEvent`, `SpeakerLinkPlayerEvent`, `SpeakerUnlinkPlayerEvent`, `SpeakerPlaySoundEvent`, `SpeakerStopSoundEvent`. - **Wiretaps (`wiretap.event`)**: `WiretapRegisterEvent`, `WiretapRemoveEvent`, `WiretapSubscribeEvent`, `WiretapUnsubscribeEvent`. - **Radios & Transmitters (`radio.event`, `transmitter.event`)**: `RadioChannelJoinEvent`, `RadioChannelLeaveEvent`, `RadioChannelCreateEvent`, `TransmitterToggleEvent`. - **Recordings & Cassettes (`recording.event`)**: `VoiceRecordingStartEvent`, `VoiceRecordingStopEvent`, `CassetteCreateEvent`, `CassettePlayEvent`. - **DSP Filters (`filter.event`)**: `VoiceFilterApplyEvent`, `VoiceFilterRemoveEvent`. - **VoiceWall Occlusion (`wall.event`)**: `VoiceWallOcclusionEvent`. - **Full Action Interceptability**: - Cancellable events allow third-party plugins to enforce gameplay permissions (e.g. requiring a physical walkie-talkie item to join a radio frequency, or checking for detective gadgets before listening to a wiretap). - `VoiceWallOcclusionEvent` allows plugins to modify calculated decibel loss (`lossDb`) or cancel soundproofing entirely for custom powers, spectator modes, or supernatural mechanics. - `CassetteCreateEvent` enables customizing cassette item display names, lores, custom model data, and NBT tags before handing items to players. - `CassettePlayEvent` allows intercepting right-click playback to enforce audio player equipment or cooldowns.