Tags
Creators
Details
Licensed GPL-3.0-only
Published 6 days ago
Updated 2 days ago
All versions
1.1.2
Release
DreamVoice 1.1.23 weeks ago 1
Uploaded by
Compatibility
Minecraft: Java Edition
26.1.2
Platforms
Paper
Purpur
Spigot
Required content
Changes
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.
- Added asynchronous audio export to
🐛 Bug Fixes & Audio Improvements
-
Fixed VoiceWallOcclusionEvent Async Dispatch Exception:
- Resolved
java.lang.IllegalStateException: VoiceWallOcclusionEvent may only be triggered synchronouslyoccurring whenVoiceWallServiceImpl.processEntitySoundPacketdispatched acoustic occlusion checks on Simple Voice Chat's audio processing thread (Server$ProcessThread). VoiceWallOcclusionEventnow explicitly callssuper(true)in its constructor to mark the Bukkit event as asynchronous, allowing Paper'sPaperEventManagerto dispatch it safely across worker threads without exceptions.- Hardened
EntitySoundPacketEventwith an explicit asynchronous constructor (super(true)) to prevent similar thread check violations.
- Resolved
-
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)inbroadcastToDedicatedChannelsandif (listener.getUniqueId().equals(senderUuid)) return;inprocessSingleListenerStream). - 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 withinprocessSingleListenerStreamto 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.
- Radio (
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:WRYhkDTs:jksi8HWj"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:WRYhkDTs:jksi8HWj"
}

