目錄
步驟1:簡單的基礎
簡單的文本到語音
步驟2:國際聲音選擇
多語言文本到語音
步驟3:完整的多面化應用程序
首頁 web前端 css教學 使用網絡語音API進行多語言翻譯

使用網絡語音API進行多語言翻譯

Apr 22, 2025 am 11:23 AM

使用網絡語音API進行多語言翻譯

自科幻小說的早期以來,我們就夢想著與我們交談的機器。今天,這很普遍。但是,使網站“說話”的技術仍然相對較新。

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變量聲明包括: allLanguagesprimaryLanguageslanghashlangcodehashrateFldlanguageMenublurbs 。標誌, initialSetup將控制“語言”菜單設置。

讓SpeakBtn,TXTFLD,SpeakerMenu,AllVoices,langtags,foveindex = 0;
讓Alllanguages,主要語言,Langhash,Langcodehash;
讓Ratefld,Languagemenu,Blurbs;
令pinitialSetup = true;
讓DefaultBlurb =“我喜歡我祖國的傳統音樂。”;
登入後複製

init()函數現在創建blurbs數組, rateFldlanguageMenu ,並為語言查找創建哈希表。

函數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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue團隊完成了完成,我知道這是一項巨大的努力,而且很長時間。所有新文檔也是如此。

在CI/CD上有點 在CI/CD上有點 Apr 02, 2025 pm 06:21 PM

我說的“網站”比“移動應用程序”更合適,但我喜歡Max Lynch的框架:

您可以從瀏覽器獲得有效的CSS屬性值嗎? 您可以從瀏覽器獲得有效的CSS屬性值嗎? Apr 02, 2025 pm 06:17 PM

我有人寫了這個非常合法的問題。 Lea只是在博客上介紹瞭如何從瀏覽器中獲得有效的CSS屬性。那樣的是這樣。

在WordPress塊編輯器中使用Markdown和本地化 在WordPress塊編輯器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我們需要直接在WordPress編輯器中向用戶顯示文檔,那麼最佳方法是什麼?

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

比較瀏覽器的響應式設計 比較瀏覽器的響應式設計 Apr 02, 2025 pm 06:25 PM

這些桌面應用程序中有許多目標是同時在不同的維度上顯示您的網站。因此,例如,您可以寫作

如何將CSS網格用於粘頭和頁腳 如何將CSS網格用於粘頭和頁腳 Apr 02, 2025 pm 06:29 PM

CSS網格是一系列屬性的集合,旨在使佈局比以往任何時候都容易。像任何東西一樣,那裡有一點學習曲線,但是網格是

Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

See all articles