Boost Volume

Boost video volume on any site. Shortcuts: Alt-Shift-[+/-]

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         Boost Volume
// @namespace    http://greasyfork.org/
// @version      0.3
// @description  Boost video volume on any site. Shortcuts: Alt-Shift-[+/-]
// @author       rix
// @match        *://*/*
// @grant        none
// ==/UserScript==

(() => {
    const boostVolume = (() => {
        const sources = {};
        const context = new AudioContext();
        return (gain) => {
            for (let video of document.querySelectorAll('video')) {
                try {
                    const source = context.createMediaElementSource(video);
                    const gainNode = context.createGain(source);
                    source.connect(gainNode);
                    gainNode.connect(context.destination);
                    sources[video] = gainNode;
                } catch(e) {}
            }
            for (let [video, gainNode] of Object.entries(sources)) {
                try {
                    gainNode.gain.value = gain;
                } catch(e) {}
            }
        };
    })();
    let gain = 1;
    document.body.addEventListener('keyup', e => {
        if (!(e instanceof KeyboardEvent && e.type === 'keyup')) return;
        if (e.composed && e.altKey && !e.ctrlKey && !e.metaKey && e.shiftKey) {
            if (e.keyCode === 187) { // +
                gain++;
            }
            else if (e.keyCode === 189) { // -
                gain = Math.max(gain - 1, 1);
            }
            else return;
            boostVolume(gain);
        }
    });
})();