我有一个Base64编码的音频数组,我正在尝试逐一复制。问题是所有要素都在同时复制。以下是我的代码。
您可以下载audios.json
async sayChunks() {
const ttsResponses = await this.getTestJson();
console.log("ttsResponses:", ttsResponses);
for (const ttsResponse of ttsResponses)
{
console.log("playing audio chunk");
const encodedAudio = ttsResponse.base64Audio.replace(/['"]+/g, '')
await this.playAudio(encodedAudio);
console.log("stopped playing audio chunk");
}
}
async playAudio(encodedAudio: string) {
return new Promise<void>((resolve) => {
const audio = new Audio("data:audio/wav;base64," + encodedAudio);
audio.onended = () => resolve();
audio.play();
})
}
当编写返回Promise
的async
函数时,返回时必须await
和Promise
。或者,您可以直接返回Promise
,而不制作函数async
。
任一:
async playAudio(encodedAudio: string) {
return await new Promise<void>((resolve) => {
const audio = new Audio("data:audio/wav;base64," + encodedAudio);
audio.onended = () => resolve();
audio.play();
})
}
或者简单地说:
playAudio(encodedAudio: string) {
return new Promise<void>((resolve) => {
const audio = new Audio("data:audio/wav;base64," + encodedAudio);
audio.onended = () => resolve();
audio.play();
})
}