自科幻小说的早期以来,我们就梦想着与我们交谈的机器。今天,这很普遍。但是,使网站“说话”的技术仍然相对较新。
Web语音API的语音合成组件使我们能够创建会说话的网页。尽管仍然被认为是实验性的,但它在最新的Chrome,Safari和Firefox版本中拥有出色的支持。
一个特别令人兴奋的方面是它用于多种语言。 MAC OSX和大多数Windows系统都提供强大的跨浏览器支持。 Chrome动态加载声音,因此,即使您的操作系统缺乏国际声音,Chrome也会为它们提供。我们将构建一个三步的页面,以各种语言说相同的文本。核心代码从现有文档进行了调整,但是我们的最终版本添加了增强功能,并且可以在我的Polyglot Codepen上查看。
步骤1:简单的基础
让我们从一个基本页面开始,其中包含语音内容的文本输入和一个按钮以触发语音。
<div> <h1 id="简单的文本到语音">简单的文本到语音</h1> <p id="warning">抱歉,您的浏览器不支持网络演讲API。</p> <textarea id="txtFld" placeholder="Type text here..."></textarea><br> <button id="speakBtn">说话</button><br> <p>注意:要获得最佳的Mac性能,请使用最新的Chrome,Safari或Firefox。在Windows上,使用Chrome。</p> </div>
仅当JavaScript检测到Web语音API不兼容时,带有ID“警告”的段落才会出现。注意Textarea和按钮的ID;我们将在JavaScript中使用它们。
随意自定义HTML样式。您也可以将我的演示作为起点。
建议对禁用按钮状态进行样式设计,以避免对使用不兼容的浏览器的用户(例如过时的Internet Explorer)混淆。我们还将最初使用CSS隐藏警告:
按钮:禁用{ 光标:不允许; 不透明度:0.3; } #警告 { 颜色:红色; 显示:无; 字体大小:1.4REM; }
现在为JavaScript!我们将定义引用“说话”按钮和Textarea的变量。事件侦听器可确保DOM加载后init()
函数执行。我使用辅助功能“ QS”(下面定义)作为document.querySelector
的快捷方式。 speakBtn
上的事件侦听器将talk()
函数称为。
talk()
函数创建了一个SpeechSynthesisUtterance
对象(Web语音API的一部分),将文本方面的文本分配给其text
属性,然后使用speechSynthesis.speak()
播放音频。声音取决于浏览器和操作系统。在我的Mac上,默认值为Alex(美国英语)。在步骤2中,我们将添加一个语音选择菜单。
让我们说话,txtfld; 函数init(){ speakbtn = qs(“#speak btn”); txtfld = qs(“#txtfld”); speakbtn.addeventlistener(“ click”,talk,false); if(!window.speechynthesis){ speakbtn.disabled = true; QS(“#警告”)。style.display =“ block”; } } 函数谈话(){ 让u =新的SpeechSynthessutterance(); u.text = txtfld.value; specysynthesis.speak(u); } //可重复使用的实用程序功能 函数QS(selectOrtext){ 返回document.queryselector(selectOrtext); } document.AddeventListener('domcontentloaded',init);
步骤2:国际声音选择
要使用默认的语言,我们需要其他代码。让我们为语音选项添加选择元素:
<h1 id="多语言文本到语音">多语言文本到语音</h1> <div> <label for="speakerMenu">嗓音:</label> <select id="speakerMenu"></select> </div>
在填充菜单之前,我们将将语言代码映射到名称。每种语言都有两个字母的代码(例如,英语的“ en”,“ ES”为西班牙语)。我们将创建一个对象数组,例如{"code": "pt", "name": "Portuguese"}
。辅助功能将搜索此数组以获取特定的属性值。我们将使用它查找与所选语音代码相匹配的语言名称。添加以下功能:
函数getlanguagetags(){ // ...(与之前相同)... } 函数searchObjects(数组,prop,term,casesIntive = false){ // ...(与之前相同)... }
现在,让我们使用JavaScript填充选择元素的选项。我们将声明#speakerMenu
Select元素的变量,语言显示的占位符(稍后删除),声音数组( allVoices
),一系列语言代码( langtags
)和一个跟踪所选语音( voiceIndex
)的变量。
让SpeakBtn,TXTFLD,SpeakerMenu,AllVoices,langtags,foveindex = 0;
如果支持Web语音API,则更新的init()
函数将引用添加到#speakerMenu
和Call setUpVoices()
。对于Chrome,我们聆听语音更改并重新运行设置。 Chrome会异步处理声音,需要此额外的步骤。
函数init(){ // ...(如上所述修改的初始功能)... }
setUpVoices()
函数使用speechSynthesis.getVoices()
检索SpeechSynthesisVoice
对象。我们使用getAllVoices()
来处理潜在的重复声音。将一个唯一的ID添加到每个语音对象中以进行以后过滤。 allVoices
将包含类似的对象:
{id:48,Voiceuri:“ Paulina”,名称:“ Paulina”,Lang:“ ES-MX”,localservice:true}, {id:52,Voiceuri:“ samantha”,名称:“ samantha”,lang:“ en-us”,localservice:true}, {ID:72,Voiceuri:“ Google Deutsch”,名称:“ Google Deutsch”,Lang:“ De-de”,localservice:false}
setUpVoices()
的最后一行调用一个函数来创建扬声器菜单选项。语音ID用作选项的值,并显示名称和语言。
函数setupvoices(){ allVoices = getAllvoices(); CreateSpeakerMenu(allvoices); } 函数getAllvoices(){ // ...(与之前相同)... } 函数createSpeakerMenu(声音){ // ...(与之前相同)... }
selectSpeaker()
函数( speakerMenu
更改时称为称呼)存储所选索引,检索选定的语音,提取语言代码,搜索langtags
为语言名称,并更新显示。
功能SelectSpeaker(){ // ...(与之前相同)... }
最后,更新talk()
使用选定的语音和语言,并允许设置语音率:
函数谈话(){ // ...(如上所述修改的谈话功能)... }
这完成了步骤2。尝试不同的声音和语言!
步骤3:完整的多面化应用程序
最后一步完善了UI并添加了功能:
- 语言选择菜单
- 用户调整的语音速度
- 根据语言选择翻译的默认短语
这是更新的HTML:
<div> <label for="languageMenu">语言:</label> <select id="languageMenu"></select> </div> <div> <label for="rateFld">速度:</label> <input type="number" id="rateFld" min="0.5" max="2" step="0.1" value="0.8"> </div>
我们将修改JavaScript变量声明包括: allLanguages
, primaryLanguages
, langhash
, langcodehash
, rateFld
, languageMenu
和blurbs
。标志, initialSetup
将控制“语言”菜单设置。
让SpeakBtn,TXTFLD,SpeakerMenu,AllVoices,langtags,foveindex = 0; 让Alllanguages,主要语言,Langhash,Langcodehash; 让Ratefld,Languagemenu,Blurbs; 令pinitialSetup = true; 让DefaultBlurb =“我喜欢我祖国的传统音乐。”;
init()
函数现在创建blurbs
数组, rateFld
和languageMenu
,并为语言查找创建哈希表。
函数init(){ // ...(如上所述修改的初始功能)... }
setUpVoices()
现在调用getAllLanguages()
, getPrimaryLanguages()
, filterVoices()
和createLanguageMenu()
。 getAllLanguages()
从allVoices
提取独特的语言,而getPrimaryLanguages()
提取主要语言代码。
函数setupvoices(){ // ...(修改的设置UPVOICES函数如上所述)... } 函数getallanguages(声音){ // ...(与之前相同)... } 函数getPrimaryLanguages(langlist){ // ...(与之前相同)... }
filterVoices()
根据选定的语言过滤allVoices
,填充speakerMenu
,并使用适当的Blurb更新Textarea。 createLanguageMenu()
创建语言菜单选项。当更改语言,触发filterVoices()
并重置语音选择时, selectLanguage()
将调用。
功能filterVoices(){ // ...(与之前相同)... } 函数createLanguageMenu(){ // ...(与之前相同)... } 函数selectlanguage(){ // ...(与之前相同)... }
添加getLookupTable()
实用程序函数:
函数get lookuptable(objectsArray,prepname){ // ...(与之前相同)... }
添加blurbs
数组:
函数createblurbs(){ // ...(与之前相同)... }
最后,更新talk()
使用rateFld
的语音率:
函数谈话(){ // ...(如上所述修改的谈话功能)... }
这完成了Polyglot应用程序。用户现在可以选择一种语言,选择语音,调整语音速度,并以所选语言的方式听到所选文本。这证明了Web语音API在创建多语言Web应用程序中的功能和灵活性。
以上是使用网络语音API进行多语言翻译的详细内容。更多信息请关注PHP中文网其他相关文章!

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具