2024-04-27 21:18:28 +02:00

60 lines
1.3 KiB
JavaScript

/**
* Audio handler object
* Inspired by https://github.com/rainner/soma-fm-player
* (released under MIT licence)
*/
export default {
audio: new Audio(),
context: null,
// Play audio source url
play(source) {
this.stop()
this.context.resume().then(() => {
this.audio.src = `${String(source || '')}?x=${Date.now()}`
this.audio.crossOrigin = 'anonymous'
this.audio.load()
})
},
// Set audio volume
setVolume(volume) {
if (this.audio) {
this.audio.volume = Math.min(1, Math.max(0, parseFloat(volume) || 0.0))
}
},
// Setup audio routing
setup() {
this.context = new (window.AudioContext || window.webkitAudioContext)()
const source = this.context.createMediaElementSource(this.audio)
source.connect(this.context.destination)
this.audio.addEventListener('canplaythrough', () => {
this.audio.play()
})
this.audio.addEventListener('canplay', () => {
this.audio.play()
})
return this.audio
},
// Stop playing audio
stop() {
try {
this.audio.pause()
} catch (error) {
// Continue regardless of error
}
try {
this.audio.stop()
} catch (error) {
// Continue regardless of error
}
try {
this.audio.close()
} catch (error) {
// Continue regardless of error
}
}
}