您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Custom volume slider for YouTube videos with increased length and precise control
// ==UserScript== // @name YouTube Volume Booster // @namespace https://github.com/ToLIManl // @version 0.6 // @description:en Custom volume slider for YouTube videos with increased length and precise control // @description:ru Пользовательский ползунок громкости для видео YouTube с увеличенной длиной и точным контролем. // @description Custom volume slider for YouTube videos with increased length and precise control // @author ToLIMan // @match https://www.youtube.com/* // @grant none // @license MIT // @name:ru Увелечитель громкости Ютуб // @name:en Youtube Volume Booster // ==/UserScript== (function() { 'use strict'; // Function to calculate the volume based on slider position function calculateVolume(position, sliderWidth) { // Calculate volume percentage based on slider position const volume = (position / sliderWidth) * 1400; // Increased maximum volume // Return the volume percentage with 3 decimal places return volume.toFixed(3); } // Function to update the volume display at the center of the screen function updateVolumeDisplay(volume) { // Create a div for the volume display const volumeDisplay = document.createElement('div'); volumeDisplay.id = 'customVolumeDisplay'; volumeDisplay.style.position = 'fixed'; volumeDisplay.style.top = '50%'; volumeDisplay.style.left = '50%'; volumeDisplay.style.transform = 'translate(-50%, -50%)'; volumeDisplay.style.background = 'rgba(0, 0, 0, 0.7)'; volumeDisplay.style.color = '#fff'; volumeDisplay.style.padding = '10px'; volumeDisplay.style.borderRadius = '5px'; volumeDisplay.style.zIndex = '9999'; volumeDisplay.innerText = `Volume: ${volume}%`; // Append the volume display to the body document.body.appendChild(volumeDisplay); // Remove the volume display after 1 second setTimeout(() => { volumeDisplay.remove(); }, 1000); } // Wait for the page to fully load window.addEventListener('load', function() { // Find the YouTube video player const videoPlayer = document.querySelector('.video-stream'); // Create a custom volume slider const customVolumeSlider = document.createElement('input'); customVolumeSlider.type = 'range'; customVolumeSlider.min = '0'; customVolumeSlider.max = '1400'; // Increased maximum volume customVolumeSlider.step = '1'; customVolumeSlider.style.width = '700px'; // Set the width customVolumeSlider.style.transform = 'scaleX(-1)'; // Flip the slider horizontally customVolumeSlider.style.display = 'none'; // Hide initially // Create an AudioContext once on page load const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const gainNode = audioContext.createGain(); gainNode.connect(audioContext.destination); // Connect the video player to the gain node const videoSource = audioContext.createMediaElementSource(videoPlayer); videoSource.connect(gainNode); // Add an event listener for the slider input customVolumeSlider.addEventListener('input', function() { // Calculate the volume based on the slider position const volume = calculateVolume(this.value, this.max); // Update the gain node's gain value gainNode.gain.value = volume / 100; // Update the volume display at the center of the screen updateVolumeDisplay(volume); }); // Add an event listener to reset the slider when a new video is opened videoPlayer.addEventListener('timeupdate', function() { if (videoPlayer.currentTime === 0) { resetCustomVolumeSlider(); } }); // Function to reset the custom volume slider function resetCustomVolumeSlider() { customVolumeSlider.value = '100'; // Set default value to 100% const initialVolume = calculateVolume(100, customVolumeSlider.max); gainNode.gain.value = initialVolume / 100; updateVolumeDisplay(initialVolume); } // Function to toggle the visibility of the custom volume slider function toggleCustomVolumeSlider() { const isSliderHidden = customVolumeSlider.style.display === 'none'; customVolumeSlider.style.display = isSliderHidden ? 'block' : 'none'; } // Create a custom button for volume boost const volumeBoostButton = document.createElement('button'); volumeBoostButton.id = 'volumeBoostButton'; volumeBoostButton.style.background = 'none'; volumeBoostButton.style.border = 'none'; volumeBoostButton.style.cursor = 'pointer'; volumeBoostButton.style.marginRight = '10px'; volumeBoostButton.innerText = 'Volume Boost'; volumeBoostButton.style.color = '#fff'; volumeBoostButton.style.fontWeight = 'bold'; // Add an event listener to toggle the slider when the volume boost button is clicked volumeBoostButton.addEventListener('click', function() { toggleCustomVolumeSlider(); resetCustomVolumeSlider(); }); // Insert the custom volume slider and button into the YouTube video player controls const controls = document.querySelector('.ytp-chrome-controls'); if (controls) { controls.insertBefore(volumeBoostButton, controls.firstChild); controls.appendChild(customVolumeSlider); } // Reset the custom volume slider on page load resetCustomVolumeSlider(); }); })();