3

我尝试构建一个函数来读取彼此之间具有定义延迟的数字。

{
...
play : function (digits, delay = 500) {
  if (digits && digits.length > 0) {
    responsiveVoice.speak(digits[0], "Czech Female", {
      rate: 0.7,
      onend: () => setTimeout(() => {
        this.play(digits.splice(1), delay);
      }, delay)
    });
  }
}

digits是一个数字数组和数字delay之间的毫秒延迟。

该功能可以正常工作一段时间,但随机失败,控制台中出现以下错误:

从源“http://”访问“https://texttospeech.responsivevoice.org/v1/text:synthesize?text=0&lang=cs&engine=g1&name=&pitch=0.5&rate=0.35&volume=1&key=XXXXXXXX&gender=female”的 XMLHttpRequest localhost:8080' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。无法加载 ResponsiveVoice 音频。将您的浏览器连接到 API 端点时出现问题。获取https://texttospeech.responsivevoice.org/v1/text:synthesize?text=0&lang=cs&engine=g1&name=&pitch=0.5&rate=0.35&volume=1&key=XXXXXXXX&gender=female net::ERR_FAILED

谁能给我一个提示有什么问题?

4

1 回答 1

3

您使用的库在角色方面似乎表现不佳0(至少)。我测试了您的代码,它适用于任何其他输入。

不知何故,当输入0到这个库时,它会将请求发送到 API,XMLHttpRequest而不是HTMLAudioElement(用于每个工作语音)。

安慰

XMLHttpRequest在涉及跨域请求时有一些限制(有关更多信息,您可以阅读有关CORS的信息),并且 API 似乎不支持XMLHttpRequest调用。

这是库和 API 之间的不一致,我怀疑库中存在与真/假检查相关的错误。

您应该联系他们的支持并报告此错误。

编辑:

正如评论中所写,似乎有一种解决方法是在数字前添加一个空格。

于 2020-08-02T19:19:40.437 回答