做下笔记,通过js播放音频文件。使用方式在注释中。
/**
* 该函数播放一个音频文件,如果你想让它循环播放,你可以指定一个循环间隔时间
* @param {RequestInfo | URL} musicFile - 您要播放的文件
* @param {number} [loopTime] - 循环播放的间隔时间,不传则播放一次(以毫秒为单位)
* @returns 返回音频源(bufferSource)
*/
export async function playAudio(musicFile: RequestInfo | URL, loopTime?: number): Promise<AudioBufferSourceNode> {
//@ts-ignore
const AudioContext = window.AudioContext || window.webkitAudioContext
const audioCtx = new AudioContext()
const source = audioCtx.createBufferSource()
const myRequest = new Request(musicFile)
const response = await fetch(myRequest)
const buffer = await response.arrayBuffer()
await audioCtx.decodeAudioData(buffer, (decodedData) => {
source.buffer = decodedData
source.connect(audioCtx.destination)
})
source.start()
//如果传入了循环间隔时间,则设置循环播放
if (loopTime) {
source.onended = () => {
setTimeout(() => {
playAudio(musicFile, loopTime)
}, loopTime)
}
}
return source
}