Discord High-Quality Stereo Audio

Set higher audio quality and stereo in Discord

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Discord High-Quality Stereo Audio
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Set higher audio quality and stereo in Discord
// @author       YourName
// @license      MIT
// @match        https://discord.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const modifyAudioConstraints = (constraints) => {
        if (constraints.audio) {
            // Modify the audio constraints for higher quality and stereo
            constraints.audio = {
                channelCount: 2, // Stereo
                sampleRate: 48000, // 48000 Hz (Standard for Opus codec)
                sampleSize: 16, // 16-bit samples
                volume: 1.0,
                echoCancellation: true,
                noiseSuppression: true,
                autoGainControl: true
            };
        }
        return constraints;
    };

    // Save original getUserMedia function
    const originalGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);

    // Override getUserMedia
    navigator.mediaDevices.getUserMedia = (constraints) => {
        return originalGetUserMedia(modifyAudioConstraints(constraints));
    };

    // Hook into getUserMedia to modify audio constraints in RTCPeerConnection
    const originalRTCPeerConnection = window.RTCPeerConnection;

    function ModifiedRTCPeerConnection(config) {
        const pc = new originalRTCPeerConnection(config);

        const originalAddTrack = pc.addTrack.bind(pc);
        pc.addTrack = function(track, ...streams) {
            if (track.kind === 'audio') {
                const constraints = track.getConstraints();
                track.applyConstraints(modifyAudioConstraints(constraints));
            }
            return originalAddTrack(track, ...streams);
        };

        return pc;
    }

    window.RTCPeerConnection = ModifiedRTCPeerConnection;
})();