Youtube Music fix volume ratio

Makes the YouTube music volume slider exponential so it's easier to select lower volumes.

目前為 2021-03-25 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Youtube Music fix volume ratio
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Makes the YouTube music volume slider exponential so it's easier to select lower volumes.
// @author       Marco Pfeiffer <[email protected]>
// @match        https://music.youtube.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const EXPONENT = 1.8; // manipulation exponent, higher value = lower volume

    tryManipulate(100);

    function tryManipulate(retries) {
        const success = manipulate();
        if (!success && retries > 0) {
            setTimeout(() => tryManipulate(retries - 1), 10);
        }
    }

    function manipulate () {
        // if the element wasn't found, try again
        const player = document.querySelector('ytmusic-player-bar');
        if (!player) {
            return false;
        }

        // if the player isn't ready yet, try again
        const {setVolume, getVolume} = player.playerApi_;
        if (!setVolume || !getVolume) {
            return false;
        }

        player.playerApi_.setVolume = function (volume) {
            const newVolume = Math.ceil((volume / 100) ** EXPONENT * 100);
            console.log('manipulated setVolume to  ', newVolume, 'from', volume);
            return setVolume.call(this, newVolume);
        };

        player.playerApi_.getVolume = function () {
            const volume = getVolume.call(this);
            const newVolume = Math.floor((volume / 100) ** (1 / EXPONENT) * 100);
            console.log('manipulated getVolume from', volume, 'to  ', newVolume);
            return newVolume;
        };

        return true;
    }
})();