47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
![]() |
class AudioContexthehe {
|
||
|
state = "suspended"
|
||
|
constructor() { }
|
||
|
resume() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
this.state = "running"
|
||
|
resolve()
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
class AudioElementHehe {
|
||
|
constructor() { }
|
||
|
play() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
console.log("playing!")
|
||
|
resolve()
|
||
|
})
|
||
|
}
|
||
|
pause() {
|
||
|
console.log("Pausing!")
|
||
|
}
|
||
|
}
|
||
|
const audio_context = new AudioContexthehe
|
||
|
const audio_element = new AudioElementHehe
|
||
|
let is_playing = false
|
||
|
try_play_toggle_async()
|
||
|
|
||
|
function try_play_toggle_async() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
if (audio_context.state !== "running") {
|
||
|
audio_context.resume().catch((e) => reject(e))
|
||
|
}
|
||
|
if (audio_element.paused) {
|
||
|
audio_element.play().then((s) => {
|
||
|
is_playing = true
|
||
|
resolve(s)
|
||
|
}, (r) => {
|
||
|
is_playing = false
|
||
|
reject(r)
|
||
|
})
|
||
|
} else {
|
||
|
audio_element.pause()
|
||
|
is_playing = false
|
||
|
resolve(null)
|
||
|
}
|
||
|
})
|
||
|
}
|