61 lines
1.7 KiB
JavaScript
Executable File
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
|
|
}
|