Adjust the audio of any video on any site
// ==UserScript==
// @name Adjust video audio
// @namespace http://tampermonkey.net/
// @version 0.3
// @description Adjust the audio of any video on any site
// @author CoilBlimp
// @match *://*/*
// @grant none
// @exclude https://www.youtube.com/*
// ==/UserScript==
(function() {
'use strict';
const cookieName = "AudioAdjust_hueUkeLIZfdSz674qTym";
let videoElements = [];
let cookie = getCookie(cookieName);
let volumeValue = 10;
let sliderMade = false;
// Initial check
searchAndExcecute();
// Add a listener that checks for new video elements
window.addEventListener('DOMSubtreeModified', function(sliderMade) {
searchAndExcecute();
}, false);
// Main script
function searchAndExcecute(){
videoElements = getVideoElements();
if(videoElements.length > 0){
if(cookie !== null){
volumeValue = cookie;
}
if(!sliderMade){
sliderMade = true;
updateVolume(videoElements, volumeValue);
createSlider();
console.log("Initial volume: " + volumeValue)
}
}
}
// Event when the slider is moved
function sliderChange(event){
let value = event.target.value;
let videoElements = getVideoElements();
updateVolume(videoElements, value);
document.getElementById("volumeAdjusterValue").innerHTML = value;
}
// Gets all video elements
function getVideoElements(){
return document.getElementsByTagName('video');
}
// Updates the volume of all video elements with the given value
function updateVolume(videoElements, value){
console.log("Updating volume of all video elements to " + value)
for(let i = 0; i < videoElements.length; i++){
videoElements[i].volume = (value/100);
}
setCookie(cookieName, value, 365)
}
// Creates the slider used to change volume
function createSlider(){
let volumeAdjusterSlider = Object.assign(document.createElement("input"), {
type: "range",
min: "0",
max: "100",
value: volumeValue
});
volumeAdjusterSlider.style.cssText = "border:0;margin:0;float:right";
volumeAdjusterSlider.addEventListener("input", sliderChange);
let volumeAdjusterValue = Object.assign(document.createElement("div"), {id: "volumeAdjusterValue"});
volumeAdjusterValue.style.cssText = "float:left;width:3em";
volumeAdjusterValue.innerHTML = volumeValue;
let volumeAdjusterDiv = Object.assign(document.createElement("div"));
volumeAdjusterDiv.style.cssText = "position:fixed;top:0;right:0;border:0;margin:0;opacity:0.7;z-index:10000000000";
volumeAdjusterDiv.appendChild(volumeAdjusterValue);
volumeAdjusterDiv.appendChild(volumeAdjusterSlider);
console.log("creating slider")
document.body.appendChild(volumeAdjusterDiv);
}
// Set a cookie to remember the volume for the specific site
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setDate(date.getDate() + days);
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
// Get the cookie for the site
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
})();