【问题标题】:Text-to-Speech speaks in the incorrect language at iOS文本到语音在 iOS 中以不正确的语言说话
【发布时间】:2021-02-21 20:22:24
【问题描述】:

这就是问题所在。 我需要在我的网站上使用法语的文本转语音功能。

这是我使用的代码。

使用https://responsivevoice.org/ API:

responsiveVoice.setDefaultVoice("French Female");
responsiveVoice.speak(text);

使用内置的 SpeechSynthesisUtterance:

let msg = new SpeechSynthesisUtterance();
msg.text = text;
msg.volume = 1;
msg.rate = 1;
msg.pitch = 1;
msg.lang = 'fr-FR';
msg.voice = window.speechSynthesis.getVoices()[9];
window.speechSynthesis.speak(msg);

它可以在 Windows 笔记本电脑上的 Google Chrome 和 iOS 上的 Opera 中正常工作。

但它们都不能在我的 iPhone 上的 Google Chrome 和 Safari 浏览器中正常工作。 它说英语而不是法语。

以前,它工作正常,我没有对其进行任何更改。 我不确定,但似乎这个问题是在最近的 iOS 更新后开始发生的。 也许它会尝试用我的默认语言而不是选择的语言说话。但我不知道如何解决它。

感谢任何帮助!

UPD 默认语言确实存在一些错误。 我已将 iPhone 的语言更改为法语,它开始说法语。 但我仍然不知道如何让它说出我想要的语言。

【问题讨论】:

    标签: javascript text-to-speech


    【解决方案1】:

    我正面临着确切的问题。它在桌面上完美运行,但在 iPhone 上,iOS 以英语阅读德语文本。

    【讨论】:

      【解决方案2】:
      msg.voice = window.speechSynthesis.getVoices()[9];
      

      每个浏览器/操作系统的语音数量和顺序不同,因此要求语音 9 会给出不同的结果。

      如果 msg.voice 和 msg.lang 不匹配,可能会使用默认语音,例如如果您将 lang 设置为 fr-FR 但所选语音的 lang 属性为 es-ES。

      要对此进行测试:

      msg.voice = speechSynthesis.getVoices().find(voice => /fr(-|_)FR/.test(voice.lang));
      

      这将选择它找到的第一个法语/法语语音。

      必须使用 (-|_) 部分,因为某些浏览器使用破折号,而其他浏览器使用下划线。

      (在speechSynthesis之前不必输入window。另外我建议你注释掉音量,速率和音高线,直到你让它工作。)

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 2016-12-13
        • 1970-01-01
        • 2015-07-14
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        相关资源
        最近更新 更多