Boost Volume

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

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като 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);
        }
    });
})();