我正在尝试替换一些 web api TTS 代码:
class TextToSpeechService {
private utterances: Record<number, SpeechSynthesisUtterance | undefined> = {};
speak = (message: string): Promise<void> => {
return new Promise<void>((resolve) => {
const utterance = new SpeechSynthesisUtterance(message);
const now = new Date().getMilliseconds();
this.utterances[now] = utterance;
utterance.onend = () => {
resolve();
this.utterances[now] = undefined;
};
使用 Azure TTS 替代方案。我添加了一个功能:
function synthesizeSpeech(message: string) {
const speechConfig = sdk.SpeechConfig.fromSubscription("my_sub_id", "a_region");
const synthesizer = new sdk.SpeechSynthesizer(speechConfig);
synthesizer.speakTextAsync(
message,
result => {
synthesizer.close();
return result.audioData;
},
error => {
console.log(error);
synthesizer.close();
});
}
并更改了这一行:
const utterance: any = synthesizeSpeech(message);
这与以下错误有关:
Error speaking question TypeError: Cannot set property 'onend' of undefined
所以看起来我的新版本没有设置utterance
。我错过了什么?
编辑:所以我认为这是由 Async 函数尚未创建任何语音引起的。我如何在 React 中处理这个问题?