Youtube Music Logarithmic/Exponential volume

Makes the YouTube music volume slider logarithmic.

  1. // ==UserScript==
  2. // @name Youtube Music Logarithmic/Exponential volume
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3.2
  5. // @description Makes the YouTube music volume slider logarithmic.
  6. // @author Andrew Rosiclair <git@arosiclair>
  7. // @match https://music.youtube.com/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. const useExpScale = false; // set to true for exponential scaling
  17. const expScalePower = 2;
  18. const sliderWidth = '200px'; // default: 100px
  19.  
  20. function scaleExp (volume) {
  21. const newVolume = (volume / 1) ** expScalePower;
  22. return newVolume;
  23. }
  24.  
  25. function scaleLog (volume) {
  26. if (volume === 0) {
  27. return 0;
  28. }
  29.  
  30. var minp = 0;
  31. var maxp = 1;
  32.  
  33. // The result should be between 1 an 100
  34. var minv = Math.log(1);
  35. var maxv = Math.log(100);
  36.  
  37. // calculate adjustment factor
  38. var scale = (maxv-minv) / (maxp-minp);
  39.  
  40. const newVolume = Math.exp(minv + scale*(volume-minp)) / 100;
  41. return newVolume;
  42. }
  43.  
  44. const {get, set} = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'volume');
  45. Object.defineProperty(HTMLMediaElement.prototype, 'volume', {
  46. get () {
  47. const volume = get.call(this);
  48. const newVolume = useExpScale ? scaleExp(volume) : scaleLog(volume);
  49. console.log(`[YoutubeMusic Volume Fix] volume: ${volume} newVolume ${newVolume.toFixed(2)}`);
  50. return newVolume;
  51. },
  52. set (volume) {
  53. const newVolume = useExpScale ? scaleExp(volume) : scaleLog(volume);
  54. console.log(`[YoutubeMusic Volume Fix] volume: ${volume} newVolume ${newVolume.toFixed(2)}`);
  55. return set.call(this, newVolume);
  56. }
  57. });
  58.  
  59. const volumeSlider = document.querySelector("#volume-slider");
  60. if (volumeSlider) {
  61. volumeSlider.style.width = sliderWidth;
  62. } else {
  63. console.error("[YoutubeMusic Volume Fix] couldn't find the slider element");
  64. }
  65. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址