News
Mar 9, 2026 - 21:27

Replaced a Section

Comparison between a lightcord and voice playground has been added.

Mar 7, 2026 - 21:02

Live Chat is Back

Live chat was broken, this issue has been fixed. 🤍

Mar 7, 2026 - 08:38

Reworked Settings

New options have been added to settings as well as XMR donation.

Mar 7, 2026 - 04:43

File Size

Each node download for windows should have it's own file size displayed.

Mar 7, 2026 - 00:41

Theme Settings

Added theme settings button on the page.

Mar 6, 2026 - 21:41

Improved Guide

Windows Installation Guide has been refreshed.

Mar 6, 2026 - 21:07

New Section

A new section has been added.

Mar 6, 2026 - 21:07

Download Link Updates

Users can now choose what bitrate they want to download. Index.js is now downloadable separately.

Mar 5, 2026 - 23:24

New Patches & Bitrate Lock

Repatched current node to lock 512kbps despite packet loss.

Mar 4, 2026 - 17:14

DAVE Protocol Warning

Discord has introduced DAVE protocol. Users will start seeing a warning on their screen. To ignore the warning, restart discord with CTRL + R.

Mar 1, 2026 - 05:18

Website Tweaks

Fixed Footer, theming & added time to news posting. Note that the time is configured to 24HR, not 12HR.

Feb 27, 2026

Live Chat

Live chat has been added for quicker support.

Feb 27, 2026

Link Shortener Provider

Discord-voice is no longer using kutt.it for link shortening. Now using spoo.me

Feb 27, 2026

ffmpeg.dll & openh264

openh264 will no longer be available to download separately.

Feb 27, 2026

Download Issue

Kutt.is is experiencing temporary outage. Join our server to download directly while we work on alternatives.

Feb 26, 2026

Discord Update

app-1.0.9226 stable has been released. Download links have not been changed as it doesn't impact the node.

Feb 26, 2026

MacOS Download

A download link for MacOS has been added and is maintained by MacOS voice devs.

Feb 24, 2026

Open Source Discord Alternative

Based on research, Fluxer has stereo by default. Privacy focused alternatives to Discord with stereo enabled, based on Electron.

Feb 24, 2026

MacOS Patcher

MacOS Patcher is in development and can be found here.

Feb 24, 2026

Website Cleanup

Corrected words and sentences to verified terms.

Feb 19, 2026

Indexless Progression

Further updates will no longer require index.js, However it will be kept up separately to download. It will no longer be bundled after app-1.0.9225.

Feb 19, 2026

Dynamic Site Theme

Seasonal Mode can be enabled in the footer.

Feb 19, 2026

New Patch

app-1.0.9225 patched to support DcReject & HighpasscutoffFilter.

Feb 19, 2026

MacOS Apple Sillicon Confirmed to Work

Apple Sillicon now accepts stereo input. It has been tested and validated.

Feb 18, 2026

Discord Stable Updated

Updated to app-1.0.9225 - no problems found.

Feb 17, 2026

MacOS Support Confirmed

macOS patched discord_voice.node is confirmed to work for MacOS x86 & apple silicon, developers welcome.

Feb 16, 2026

Linux support confirmed to work

Linux support has been confirmed to work, linux version has been published, please overwrite all files.

Feb 16, 2026

Possible Deprecation of openh264 and ffmpeg.dll Fix

openh264-2.2.0-win64 and ffmpeg.dll may no longer be required in future updates but will remain available for download for those wanting to prefer legacy methods.

Feb 16, 2026

Developers Required!

Linux/MacOS Research remains necessary to improve the voice modernisation project.

Feb 14, 2026

Linux Support in Development

Linux is currently in ALPHA STAGES. If you would like to contribute to Linux voice research, join our server.

Feb 13, 2026

MacOS Support in Development

MacOS Support is being worked on actively with our team, big thanks to @HorrorPills and his friends!

United Kingdom --:--:-- -- --- ----
Settings

Analytics: Tracks anonymous pageviews (AnalyticsZ).

Download Tracking: Uses spoo.me for download analytics. Disable for direct links.

Both preferences are saved locally in your browser.

Next-Gen Audio Subsystem for Discord

High-fidelity Studio-Grade Quality Within Discord’s 48kHz Framework. Built with accessibility in mind: simple to install, reliable, and non-corrupting. Based on discord_voice.node (17/02/2026).

Full CTL Interface
High-Quality Bitrate
High-Fidelity 48kHz
Download for Windows Download for Linux Download for MacOS (External)

Mega-Hosted Download • Windows 10/11/Linux/Mac • Open Source

Links not working? Please open live chat or join our Discord server for assistance.

🎉 What's New?
Index.js Date
⚠️ experimental.node is an opus 1.6 experiment, feel free to work with it.

Patched discord_voice.node

New patches: DCReject, HighpasscutoffFilter, BWE_Thr2, BWE_Thr3, CwndPushback

Bitrate Lock

Bitrate cap removed and forced at 512 despite bitrate loss

openh264-2.2.0-win64.dll

This file will no longer be required

Index.js is now optional

For extra enhancements, use index.js optionally

For full update history, join the discord server

Lightcord vs Voice Playground

Why Discord Voice Playground Surpasses Legacy Modifications

⚠️
Lightcord is DEPRECATED

Lightcord project has been officially marked as [DEPRECATED; DO NOT USE] as of 2024. discord_voice.xyz represents the next generation of Discord voice optimization with active maintenance and full offset coverage.

Feature Lightcord Voice Playground
Last Build Date Dec 09, 2024 Feb 17, 2026
Offset Coverage 37% (7/19) 100% (21/21)
Stereo Support ❌ Partial ✅ Full
Bitrate Control ❌ Limited ✅ 384/512 kbps Lock
48kHz Emulation ❌ Not Found ✅ Implemented
Audio Filters ❌ 2/5 ✅ 5/5
Network Stability ❌ None ✅ BWE + CwndPushback
Platform Support Windows Only Win/Linux/Mac
Maintenance Status ❌ Abandoned ✅ Active
🔧

Complete Offset Coverage

All critical voice module offsets discovered and patched with 100% success rate vs Lightcord's 37%

📡

Enhanced Stability

BWE_Thr2/3 and CwndPushback prevent audio degradation during network fluctuations

🔄

Future-Proof

Regularly updated for new Discord versions (app-1.0.9226+) with active development

📖

Open Source

MIT Licensed, transparent codebase on Codeberg with community contributions

⚠️ Important Considerations

  • Discord ToS: Using modified voice modules may violate Discord's Terms of Service
  • Update Compatibility: Future Discord updates may overwrite these files, requiring reapplication
  • DAVE Protocol: Discord has introduced DAVE protocol which may show warnings (restart with CTRL + R to ignore)
  • No Ban History: No previous bans have been recorded

Built for Audiophiles & Producers

Opus configuration has been tuned to input/output the highest quality

Audio Quality Comparison
Opus HD 2.0 Mb/s / Multichannel
Opus Legacy 510 Kb/s / Stereo
Stock 96 Kb/s / Mono
Fixed bitrates delivered with: CPU ≥ 3.0 GHz quad-core with AVX2 support,
and stable network (≥5 Mbps upload).
Audio Samples
Opus HD 2.0 Mb/s / Multichannel
448kbps, 16-bit/44.1kHz
Opus Legacy 510 Kb/s / Stereo
384kbps, 16-bit/44.1kHz
Stock 96 Kb/s / Mono
224kbps, 16-bit/44.1kHz
Samples are streamed in FLAC format - Source: 24-bit/48kHz - Input: A2DP SBC | Output: VC Audio
Source Audio 24-bit/48kHz
1326kbps, 24-bit/48kHz
For fair-use educational and technical evaluation purposes only.
✅ Windows 10/11 ✅ Linux ✅ MacOS ✅ Discord Stable, PTB & Canary

Windows Installation Guide

Enable near-lossless HD audio in Discord with custom voice modules

1

Download Required Files

Download the following files from the official repository:

  • index.js (now, optional)
  • discord_voice.node (required)
  • ffmpeg.dll (legacy clients)

BETA OPTION: You may also try experimental.node to test cutting-edge audio enhancements.

⚠️ Note: Discord may completely ignore this file. It is not officially supported and could be bypassed by future updates.

Download Files Here
2

Locate Your Discord Installation

Press ⊞ Win + R, paste the path below, and press Enter:

%LocalAppData%\Discord

This opens the main Discord folder where app versions are stored.

3

Identify the Active Voice Module

Navigate into the latest app folder (e.g., app-1.0.x), then go to:

app-x.x.xmodulesdiscord_voice-1 or discord_voice-2

Fully quit Discord before proceeding:

  • Right-click the Discord icon in the system tray → Exit Discord
4

Replace Module Files

  • index.js
  • discord_voice.node

5

Launch & Use

Reopen Discord and join a voice channel as usual.

⚠️ Future Discord updates may overwrite these files. Reapply after each major update.

experimental.node
C++ Source Code
Download
#include <napi.h>
#include <opus/opus.h>
#include <opus/opus_projection.h>
#include <vector>
#include <string>
#include <cmath>

class OpusHDEncoder : public Napi::ObjectWrap<OpusHDEncoder> {
public:
    static Napi::Object Init(Napi::Env env, Napi::Object exports);
    OpusHDEncoder(const Napi::CallbackInfo& info);
    ~OpusHDEncoder();

private:
    OpusProjectionEncoder* proj_enc_ = nullptr;
    int sample_rate_ = 48000; 
    int channels_ = 225;
    int frame_size_ = 11520;
    bool int24_ = false;

    Napi::Value Encode(const Napi::CallbackInfo& info);
    Napi::Value Encode24(const Napi::CallbackInfo& info);
    Napi::Value Destroy(const Napi::CallbackInfo& info);
    Napi::Value CTL(const Napi::CallbackInfo& info);
    Napi::Value GetVersion(const Napi::CallbackInfo& info);
};

static bool valid_frame(int sr, int fs) {
    static const int base[] = {120, 240, 480, 960, 1920, 2880, 5760, 11520};
    for (int v : base) {
        if (fs == v) return true;
        if (sr == 48000 && fs == v * 2) return true; 
    }
    return false;
}

static int get_application(const std::string& app) {
    if (app == "voip") return OPUS_APPLICATION_VOIP;
    if (app == "lowdelay") return OPUS_APPLICATION_RESTRICTED_LOWDELAY;
    return OPUS_APPLICATION_AUDIO;
}

OpusHDEncoder::OpusHDEncoder(const Napi::CallbackInfo& info)
    : Napi::ObjectWrap<OpusHDEncoder>(info) {
    Napi::Env env = info.Env();
    if (info.Length() < 1 || !info[0].IsObject()) {
        Napi::TypeError::New(env, "Options object required").ThrowAsJavaScriptException();
        return;
    }

    Napi::Object opts = info[0].As<Napi::Object>();
    sample_rate_ = opts.Get("sampleRate").As<Napi::Number>().Int32Value();
    channels_ = opts.Get("channels").As<Napi::Number>().Int32Value();
    frame_size_ = opts.Get("frameSize").As<Napi::Number>().Int32Value();
    int24_ = opts.Get("int24").As<Napi::Boolean>().Value();
    std::string app = opts.Get("application").As<Napi::String>().Utf8Value();
    int application = get_application(app);

    if (channels_ < 1 || channels_ > 255) {
        Napi::RangeError::New(env, "Channels must be 1–255").ThrowAsJavaScriptException();
        return;
    }
    if (!valid_frame(48000, frame_size_)) {
        Napi::RangeError::New(env, "Invalid frame size for Opus (must be 120–11520, multiples allowed)").ThrowAsJavaScriptException();
        return;
    }

    const int opus_sample_rate = 48000;

    int order = static_cast<int>(std::sqrt(channels_) - 1);
    if ((order + 1) * (order + 1) != channels_) {
        Napi::RangeError::New(env, "Channel count must be a perfect square (e.g., 225 = (14+1)^2)").ThrowAsJavaScriptException();
        return;
    }

    int streams = 0;
    int coupled_streams = 0;
    int error = OPUS_OK;

    proj_enc_ = opus_projection_ambisonics_encoder_create(
        opus_sample_rate,     
        channels_,            
        order,                
        &streams,             
        &coupled_streams,     
        application,          
        &error                
    );

    if (!proj_enc_ || error != OPUS_OK) {
        Napi::Error::New(env, std::string("Projection encoder creation failed: ") + opus_strerror(error)).ThrowAsJavaScriptException();
        return;
    }

    // Configure high-quality settings
    opus_projection_encoder_ctl(proj_enc_, OPUS_SET_BITRATE(2000000));    
    opus_projection_encoder_ctl(proj_enc_, OPUS_SET_COMPLEXITY(10));       
    opus_projection_encoder_ctl(proj_enc_, OPUS_SET_LSB_DEPTH(int24_ ? 24 : 16));
    opus_projection_encoder_ctl(proj_enc_, OPUS_SET_SIGNAL(OPUS_SIGNAL_MUSIC));
}

OpusHDEncoder::~OpusHDEncoder() {
    if (proj_enc_) {
        opus_projection_encoder_destroy(proj_enc_);
        proj_enc_ = nullptr;
    }
}

Napi::Value OpusHDEncoder::Encode(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();
    if (info.Length() < 1 || !info[0].IsTypedArray()) {
        Napi::TypeError::New(env, "Float32Array required").ThrowAsJavaScriptException();
        return env.Null();
    }

    auto pcm = info[0].As<Napi::Float32Array>();
    size_t expected_length = static_cast<size_t>(frame_size_ * channels_);
    if (pcm.ElementLength() != expected_length) {
        Napi::RangeError::New(env, "PCM buffer length mismatch").ThrowAsJavaScriptException();
        return env.Null();
    }

    std::vector<unsigned char> out(65536);
    int ret = opus_projection_encode_float(
        proj_enc_,
        pcm.Data(),
        frame_size_,
        out.data(),
        static_cast<opus_int32>(out.size())
    );

    if (ret < 0) {
        Napi::Error::New(env, std::string("Encode failed: ") + opus_strerror(ret)).ThrowAsJavaScriptException();
        return env.Null();
    }
    return Napi::Buffer<unsigned char>::Copy(env, out.data(), ret);
}

Napi::Value OpusHDEncoder::Encode24(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();
    if (info.Length() < 1 || !info[0].IsTypedArray()) {
        Napi::TypeError::New(env, "Int32Array required for 24-bit PCM").ThrowAsJavaScriptException();
        return env.Null();
    }

    auto pcm = info[0].As<Napi::Int32Array>();
    size_t expected_length = static_cast<size_t>(frame_size_ * channels_);
    if (pcm.ElementLength() != expected_length) {
        Napi::RangeError::New(env, "PCM buffer length mismatch").ThrowAsJavaScriptException();
        return env.Null();
    }

    std::vector<unsigned char> out(65536);
    int ret = opus_projection_encode24(
        proj_enc_,
        reinterpret_cast<const opus_int32*>(pcm.Data()),
        frame_size_,
        out.data(),
        static_cast<opus_int32>(out.size())
    );

    if (ret < 0) {
        Napi::Error::New(env, std::string("Encode24 failed: ") + opus_strerror(ret)).ThrowAsJavaScriptException();
        return env.Null();
    }
    return Napi::Buffer<unsigned char>::Copy(env, out.data(), ret);
}

Napi::Value OpusHDEncoder::CTL(const Napi::CallbackInfo& info) {
    Napi::Env env = info.Env();
    if (info.Length() < 2 || !info[0].IsString()) {
        Napi::TypeError::New(env, "CTL name (string) and value (number) required").ThrowAsJavaScriptException();
        return env.Null();
    }

    std::string ctl = info[0].As<Napi::String>().Utf8Value();
    int val = info[1].As<Napi::Number>().Int32Value();
    int ret = OPUS_OK;

    if (ctl == "SET_BITRATE") {
        ret = opus_projection_encoder_ctl(proj_enc_, OPUS_SET_BITRATE(val));
    } else if (ctl == "SET_COMPLEXITY") {
        ret = opus_projection_encoder_ctl(proj_enc_, OPUS_SET_COMPLEXITY(val));
    } else if (ctl == "SET_LSB_DEPTH") {
        ret = opus_projection_encoder_ctl(proj_enc_, OPUS_SET_LSB_DEPTH(val));
    } else if (ctl == "SET_SIGNAL") {
        ret = opus_projection_encoder_ctl(proj_enc_, OPUS_SET_SIGNAL(val));
    } else {
        Napi::TypeError::New(env, "Unsupported CTL command").ThrowAsJavaScriptException();
        return env.Null();
    }

    if (ret != OPUS_OK) {
        Napi::Error::New(env, std::string("CTL failed: ") + opus_strerror(ret)).ThrowAsJavaScriptException();
        return env.Null();
    }
    return Napi::Boolean::New(env, true);
}

Napi::Value OpusHDEncoder::GetVersion(const Napi::CallbackInfo& info) {
    return Napi::String::New(info.Env(), opus_get_version_string());
}

Napi::Value OpusHDEncoder::Destroy(const Napi::CallbackInfo& info) {
    if (proj_enc_) {
        opus_projection_encoder_destroy(proj_enc_);
        proj_enc_ = nullptr;
    }
    return info.Env().Undefined();
}

Napi::Object OpusHDEncoder::Init(Napi::Env env, Napi::Object exports) {
    Napi::Function func = DefineClass(env, "OpusHDEncoder", {
        InstanceMethod("encode", &OpusHDEncoder::Encode),
        InstanceMethod("encode24", &OpusHDEncoder::Encode24),
        InstanceMethod("ctl", &OpusHDEncoder::CTL),
        InstanceMethod("getVersion", &OpusHDEncoder::GetVersion),
        InstanceMethod("destroy", &OpusHDEncoder::Destroy)
    });

    exports.Set("OpusHDEncoder", func);
    exports.Set("OPUS_APPLICATION_AUDIO", Napi::Number::New(env, OPUS_APPLICATION_AUDIO));
    exports.Set("OPUS_APPLICATION_VOIP", Napi::Number::New(env, OPUS_APPLICATION_VOIP));
    exports.Set("OPUS_APPLICATION_RESTRICTED_LOWDELAY", Napi::Number::New(env, OPUS_APPLICATION_RESTRICTED_LOWDELAY));
    exports.Set("OPUS_OK", Napi::Number::New(env, OPUS_OK));
    return exports;
}

Napi::Object InitAll(Napi::Env env, Napi::Object exports) {
    return OpusHDEncoder::Init(env, exports);
}

NODE_API_MODULE(experimental, InitAll)

Technical Targets

High-Performance Fidelity

End-to-end 24-bit/96kHz float32 audio processing with near-lossless Opus HD encoding at 2.0 Mbps - preserving studio-grade dynamic range, ultrasonic detail, and spatial nuance without clipping or compression artifacts.

24-bit API badge

DRED v2

DRED V2 greatly improves robustness to packet loss by embedding very low-bitrate redundancy into the Opus stream, letting lost audio be better recovered with minimal extra data.

DRED v2 badge

Spatial Audio

225-channel Ambisonics (14th-order) with ACN/SN3D encoding.

Spatial Audio badge

Regular Updates

Continuously improved with new features, optimizations, and compatibility refinements.

Actively Maintained badge

ML-Based BWE

Neural reconstruction of high-frequency speech (8–20 kHz) from wideband input.

ML BWE badge

Backwards Compatible

Legacy clients receive high-quality 48kHz/510kbps streams.

Compatibility badge

Platform Constraints

Discord enforces a hard 48kHz sample rate cap and mono/stereo channel limits.
Opus 1.6+ HD encoding (up to 2 Mbps) is supported, but end-to-end fidelity is limited by Discord's infrastructure.
This is an optimization within official boundaries.

Research Partners


🔬 A community dedicated to analyzing and improving multi-channel voice handling across Windows, macOS, and Linux. Focused on signal integrity, channel behavior, and real-time media experimentation

Contribution

Open-source research framework & cross-platform compatibility testing

Collaborators


Platform
🍎 macOS Voice Engine
Contribution

macOS-specific voice module optimization & native integration


Platform
🪟 Windows Voice Engine
Contribution

Windows voice module engineering & performance optimization


Platform
🪟 Windows Voice Engine | Web Maintainer
Contribution

Enhancing index.js architecture & Maximising limits

Privacy & Data

The audio mod itself contains zero telemetry. All processing occurs locally. Your voice, metadata, and network activity are never transmitted, logged, or stored by this project.

This website uses two privacy-respecting services for operational insights:

  • spoo.me - for link shortening and anonymised click analytics (e.g. device or location insights, no personal data).
  • AnalyticsZ - a cookieless, GDPR-compliant analytics tool that tracks anonymous pageviews and traffic sources (<1KB script, no IP logging).

Neither service collects personally identifiable information. You remain anonymous.

DMCA

✉️ DMCA Email
ℹ️
DMCA Agent: This service designates dmca@discord-voice.xyz as its copyright agent under 17 U.S.C. §512(c).

Open Source

MIT License - free to use, modify, distribute.

Contributions welcome: bug reports, PRs, documentation.

Copyright © 2026 UNP Beats UK

Permission is hereby granted, free of charge, to any person obtaining a copy of the
accompanying source files (including index.js, build scripts, documentation, and
experimental.node C++ bindings) — collectively referred to as "the Software" —
to deal in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

⚠️ This license applies ONLY to the open-source components provided by this project.
It does NOT extend to Discord's proprietary voice modules, binaries, or infrastructure.
No Discord-owned code is distributed herein. Use of this script is at your own risk
and must comply with Discord's Terms of Service. No previous bans have been recorded.
The source code in this repository (e.g., index.js, build scripts, docs) is licensed under MIT.
This project interfaces with Discord's proprietary voice module.
No Discord-owned binaries are distributed herein.