Javascript本地语言文本转语音

tim*_*tim 7 javascript jquery html5 text-to-speech google-text-to-speech

我正在为学校做一个项目,我们将教孩子们第一次计算.不幸的是,这些孩子无法阅读,所以他们会用母语向他们讲述任务,在这种情况下是荷兰语.

我一直在环顾四周,大多数文本到语音的javascript库都为英语提供了很好的支持,但对于任何其他语言都没有.此外,HTML5 speechSynthesis不支持Dutch:

Chrome 35目前支持语音合成语音

在进一步的研究中,我遇到了一篇文章,您可以使用Google Translate Voice将任何文本生成语音.

您可以将其作为基本网址:http: //translate.google.com/translate_tts

在我的案例荷兰语中附上您想要的语言

http://translate.google.com/translate_tts?tl=nl

并附上你的文字:

"这是一个测试"翻译成荷兰语

您希望这可以使用更长的文本,但事实并非如此.

文本到语音不起作用

还有其他解决方案吗?谷歌语音很好地说荷兰语,所以我希望链接以某种方式工作.

Jan*_*mer 4

免责声明:这可能是 Google 不允许的。未经 Google 许可,请勿使用此功能。

\n\n

可以将 Google 的文本转语音功能用于任何大小的文本。但它需要一些调整。

\n\n

这是脚本:

\n\n
function textToSpeech(text, language) {\n    if(text === undefined || text === null || text.length === 0)\n        return\n\n    var vid = document.createElement("video")\n    var textParts = []\n\n    text.split(" ").forEach(function(word) {\n        var textPartsIndex = textParts.length - 1\n        var currentStr = textParts[textPartsIndex]\n        if(currentStr !== undefined && currentStr.length + word.length < 100)\n            textParts[textPartsIndex] += " " + word\n        else\n            textParts.push(word)\n    })\n\n    function play(txt) {\n        vid.src = "http://translate.google.com/translate_tts?tl=" + language + "&q=" + txt\n        vid.load()\n        vid.play()\n    }\n\n    var partIndex = 0\n    play(textParts[partIndex])\n\n    vid.addEventListener("ended", function() {\n        var part = textParts[++partIndex]\n        if(part !== undefined)\n            play(part)\n        else\n            vid.removeEventListener("ended")\n    })\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在使用它之前,您必须关闭所有 Chrome 浏览器实例,并在 Windows 计算机上打开“运行”(WIN+R) 并键入“chrome --no-referrers”,不带“

\n\n

在您的页面上,您现在可以编写(我不懂荷兰语,所以这只是我找到的一些示例文本)

\n\n
textToSpeech("Ik ga ervan uit dat de mens een groot vermogen bezit om externe informatie op te slorpen ,\\" legt professor Georges uit . Hij kan zelfs 5 tot 6 maal m\xc3\xa9\xc3\xa9r informatie verwerken dan het debiet van het gesproken woord , 120 woorden per minuut . Teamgeest is voor mij geen ijdel woord . In de tweede plaats komen puur betekenisloze verhaspelingen niet in aanmerking , want die zijn niet ontstaan door verwarring met een ander woord .", "nl")\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您的应用程序仅在本地运行,即未托管,则不必使用 --no-referrers 命令运行 chrome。

\n\n

禁用引荐来源网址的原因是,如果存在引荐来源网址标头,Google 会取消您的请求。

\n\n

不需要 --no-referrers 的 IFRAME 版本

\n\n

http://jsfiddle.net/9tTeg/

\n\n
<body>\n<script>\ntextToSpeech("Ik ga ervan uit dat de mens een groot vermogen bezit om externe informatie op te slorpen ,\\" legt professor Georges uit . Hij kan zelfs 5 tot 6 maal m\xc3\xa9\xc3\xa9r informatie verwerken dan het debiet van het gesproken woord , 120 woorden per minuut . Teamgeest is voor mij geen ijdel woord . In de tweede plaats komen puur betekenisloze verhaspelingen niet in aanmerking , want die zijn niet ontstaan door verwarring met een ander woord .", "nl")\n\nfunction textToSpeech(text, language) {\n    if(text === undefined || text === null || text.length === 0)\n        return\n\n    var vid = document.createElement("iframe")\n    document.body.appendChild(vid)\n    var textParts = []\n\n    text.split(" ").forEach(function(word) {\n        var textPartsIndex = textParts.length - 1\n        var currentStr = textParts[textPartsIndex]\n        if(currentStr !== undefined && currentStr.length + word.length < 100)\n            textParts[textPartsIndex] += " " + word\n        else\n            textParts.push(word)\n    })\n\n    function play(txt) {\n        vid.src = "http://translate.google.com/translate_tts?tl=" + language + "&q=" + txt\n    }\n\n    var partIndex = 0\n    play(textParts[partIndex])\n\n    var intervalId = setInterval(function() {\n        var part = textParts[++partIndex]\n        if(part !== undefined)\n            play(part)\n        else\n            clearInterval(intervalId)       \n    }, 9000)\n}\n</script>\n</body>\n
Run Code Online (Sandbox Code Playgroud)\n\n

改进:不再用单词分隔字符串,而是使用点和逗号,这样停顿更自然。当前每个部分的播放时间为 9 秒,但如果单词按点和逗号分组,您可以通过查看该部分的长度来计算每个部分的时间量,因为 9 秒可能太多了。

\n