YouTube Music Exponential Volume

Makes YouTube Music volume exponential instead of linear, this makes it easier to control volume.

// ==UserScript==
// @name         YouTube Music Exponential Volume
// @license      MIT
// @version      1.0
// @description  Makes YouTube Music volume exponential instead of linear, this makes it easier to control volume.
// @match        https://music.youtube.com/*
// @grant        none
// @namespace https://greasyfork.org/users/1173187
// ==/UserScript==

(function() {
    'use strict';

    const exponent = 3; // change this: 2 = mild curve, 3 = stronger exponential
    let lastSet = -1;

    const observer = new MutationObserver(() => {
        const video = document.querySelector('video');
        if (video && video.volume !== undefined) {
            if (lastSet === -1) lastSet = video.volume;
            Object.defineProperty(video, 'volume', {
                set(value) {
                    lastSet = Math.pow(value, exponent);
                    video.setAttribute('data-real-volume', value);
                    video._setVolume(lastSet);
                },
                get() {
                    return Math.pow(lastSet, 1 / exponent);
                }
            });
            video._setVolume = function(v) {
                HTMLMediaElement.prototype.__lookupSetter__('volume').call(this, v);
            };
            observer.disconnect();
        }
    });
    observer.observe(document.body, { childList: true, subtree: true });
})();