Add audio playback

This commit is contained in:
Ketchetwahmeegwun T. Southall 2022-01-29 19:41:18 -08:00
parent 00c947b7ed
commit 085e131b3d
2 changed files with 77 additions and 0 deletions

View File

@ -1,3 +1,8 @@
declare module '*.ogg' {
const content: [string, string][]
export default content
}
declare module '*.yaml' {
const content: any
export default content

View File

@ -0,0 +1,72 @@
import assets from 'url:../../../Assets/Audio/**/*.ogg'
export const audio: Record<string, string> = assets
// Preload 'em
for (let [key, value] of (Object.entries(assets) as [string,string][])) {
let audio = new Audio()
audio.addEventListener('canplaythrough', () => {
console.log('preloaded audio', key)
})
audio.preload = ''
audio.src = value
}
let playingSongAudio: HTMLAudioElement
export function playSong(name: string) {
// Replace old audio and start crossfading.
if (playingSongAudio && !playingSongAudio.paused) {
;((playingSongAudio: HTMLAudioElement) => {
let cl = setInterval(() => {
if (Number(playingSongAudio.volume.toFixed(1)) > 0) {
playingSongAudio.volume -= 0.1
} else {
clearInterval(cl)
}
}, 100)
})(playingSongAudio)
}
playingSongAudio = new Audio()
playingSongAudio.autoplay = true
playingSongAudio.preload = ''
playingSongAudio.loop = true
playingSongAudio.volume = 0
// Start fade in.
;((playingSongAudio: HTMLAudioElement) => {
let cl = setInterval(() => {
if (playingSongAudio.paused) {
clearInterval(cl)
return
}
if (Number(playingSongAudio.volume.toFixed(1)) < 1.0) {
playingSongAudio.volume += 0.1
} else {
clearInterval(cl)
}
}, 100)
})(playingSongAudio)
playingSongAudio.src = audio[name]
let promise = playingSongAudio.play()
if (promise !== undefined) {
promise.then(() => {
// ok
}).catch((error: any) => {
//console.error(error)
})
}
}
export function playSound(name: string): HTMLAudioElement {
let s = new Audio()
s.src = audio[name]
s.autoplay = true
s.preload = ''
;(async () => {
await s.play()
})()
return s
}