2024-12-19 18:49:09 -06:00

61 lines
1.7 KiB
JavaScript
Executable File

export default modules => {
let self
self = {
currentVolume: 0.5,
setVolume: amount => {
modules.globals.video.volume = Math.min(Math.max(amount, 0), 1)
self.currentVolume = modules.globals.video.volume
}
}
modules.globals.video.volume = self.currentVolume
modules.controls.updateVolume(self.currentVolume)
try {
self.context = new(window.AudioContext || window.webkitAudioContext)
self.result = {
context: self.context,
source: self.context.createMediaElementSource(modules.globals.video),
gain: self.context.createGain(),
media: modules.globals.video,
amplify: m => self.result.gain.gain.value = m
}
self.result.source.connect(self.result.gain)
self.result.gain.connect(self.context.destination)
self.result.amplify(1)
self.setVolume = amount => {
amount = Math.max(amount, 0)
amount = Math.min(amount, modules.controls.volumeBar.getAttribute("max"))
self.currentVolume = amount
modules.globals.video.volume = Math.min(amount, 1)
if (amount > 1) {
self.result.amplify(amount)
modules.controls.volumeBar.value = self.currentVolume
modules.controls.volumeText.innerHTML = `${Math.round(self.currentVolume * 100)}%`
} else
self.result.amplify(1)
}
// Raise max volume
modules.controls.volumeBar.setAttribute("max", 3)
// Stylize bar
modules.controls.volumePopout.classList.add("boost")
modules.controls.volumeBar.classList.add("boost")
document.addEventListener("click", () => self.context.resume())
// Force mono audio
self.setNumChannels = num => self.context.destination.channelCount = num
self.getNumChannels = () => self.context.destination.channelCount
} catch (e) {
console.error(`Volume boosting not allowed.\n${e}`)
}
return self
}