-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.js
87 lines (75 loc) · 3.15 KB
/
content.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Wait until the video element is available
function applyEnhancements() {
let video = document.querySelector("video");
if (!video) {
setTimeout(applyEnhancements, 500); // Retry if video isn't found yet
return;
}
// Ensure video controls remain visible
video.controls = true;
// Web Audio API for Volume Boost
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
let source = audioCtx.createMediaElementSource(video);
let gainNode = audioCtx.createGain();
let bassFilter = audioCtx.createBiquadFilter();
let voiceFilter = audioCtx.createBiquadFilter();
bassFilter.type = "lowshelf";
bassFilter.frequency.value = 100;
bassFilter.gain.value = 0;
voiceFilter.type = "highshelf";
voiceFilter.frequency.value = 3000;
voiceFilter.gain.value = 0;
source.connect(gainNode);
gainNode.connect(bassFilter);
bassFilter.connect(voiceFilter);
voiceFilter.connect(audioCtx.destination);
// Function to load and apply settings
function loadAndApplySettings() {
chrome.storage.sync.get(["speed", "volume", "bass", "voice"], function(data) {
if (data.speed) video.playbackRate = parseFloat(data.speed);
if (data.volume) gainNode.gain.value = parseFloat(data.volume) / 100;
if (data.bass !== undefined) bassFilter.gain.value = data.bass ? 15 : 0;
if (data.voice !== undefined) voiceFilter.gain.value = data.voice ? 10 : 0;
});
}
// Listen for messages from popup.js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "applySettings") {
video.playbackRate = parseFloat(request.speed);
gainNode.gain.value = parseFloat(request.volume) / 100;
bassFilter.gain.value = request.bass ? 15 : 0;
voiceFilter.gain.value = request.voice ? 10 : 0;
}
});
// Handle player control clicks
controlsContainer.addEventListener('click', (e) => {
const action = e.target.dataset.action;
if (!action) return;
switch(action) {
case 'speed-down':
video.playbackRate = Math.max(0.5, video.playbackRate - 0.25);
break;
case 'speed-up':
video.playbackRate = Math.min(4, video.playbackRate + 0.25);
break;
case 'volume-down':
gainNode.gain.value = Math.max(0.1, gainNode.gain.value - 0.1);
break;
case 'volume-up':
gainNode.gain.value = Math.min(7, gainNode.gain.value + 0.1);
break;
case 'bass-toggle':
bassFilter.gain.value = bassFilter.gain.value ? 0 : 15;
break;
case 'voice-toggle':
voiceFilter.gain.value = voiceFilter.gain.value ? 0 : 10;
break;
}
});
// Apply settings when video source changes (for playlists)
video.addEventListener('loadeddata', loadAndApplySettings);
loadAndApplySettings();
console.log("Video Enhancer Applied!");
}
// Run the function to apply enhancements
applyEnhancements();