国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
>
什么是語音合成API,它是如何工作的?
我如何在Web應(yīng)用程序中實現(xiàn)語音合成API?
我可以自定義語音輸出的語音和語言嗎?
語音合成API的局限性是什么?
如何在使用語音合成API時處理錯誤?
我可以暫停和恢復(fù)語音輸出嗎?
語音合成API在所有瀏覽器中都受支持嗎?
我可以在移動應(yīng)用程序中使用語音合成API嗎?
如何測試語音合成API?
在哪里可以找到有關(guān)語音合成API的更多信息?
首頁 web前端 js教程 說話的網(wǎng)頁和語音綜合API

說話的網(wǎng)頁和語音綜合API

Feb 22, 2025 am 09:23 AM

Talking Web Pages and the Speech Synthesis API

核心要點

  • 語音合成API允許網(wǎng)站通過朗讀文本為用戶提供信息,這可以極大地幫助視障用戶和多任務(wù)處理的用戶。
  • 語音合成API提供多種方法和屬性來自定義語音輸出,例如語言、語速和音調(diào)。此API還包括啟動、暫停、恢復(fù)和停止語音合成過程的方法。
  • 目前,語音合成API僅被Chrome 33完全支持,并且部分支持iOS 7的Safari瀏覽器。該API需要更廣泛的瀏覽器支持才能在網(wǎng)站上實際應(yīng)用。

幾周前,我簡要討論了NLP及其相關(guān)技術(shù)。在處理自然語言時,需要考慮兩個不同但互補的方面:自動語音識別 (ASR) 和文本轉(zhuǎn)語音 (TTS)。在介紹Web語音API的文章中,我討論了Web語音API,這是一個在Web瀏覽器中提供語音輸入和文本轉(zhuǎn)語音輸出功能的API。您可能已經(jīng)注意到,我只介紹了如何在網(wǎng)站上實現(xiàn)語音識別,而不是語音合成。在本文中,我們將填補這一空白,描述語音合成API。語音識別為用戶,特別是殘疾用戶,提供了向網(wǎng)站提供信息的機會?;叵胍幌挛覐娬{(diào)的用例:> 在網(wǎng)站上,用戶可以使用語音導(dǎo)航頁面或填充表單字段。用戶也可以在駕駛時與頁面交互,而無需將視線從道路上移開。這些都不是微不足道的用例。

因此,我們可以將其視為從用戶到網(wǎng)站的通道。語音合成則相反,它使網(wǎng)站能夠通過朗讀文本為用戶提供信息。這對于盲人以及通常視力障礙的人特別有用。語音合成的用例與語音識別一樣多。想想一些新車中實現(xiàn)的系統(tǒng),它們可以朗讀您的文本或電子郵件,這樣您就不必將視線從道路上移開。使用計算機的視障人士熟悉像JAWS這樣的軟件,這些軟件可以朗讀桌面上顯示的任何內(nèi)容,從而允許他們執(zhí)行任務(wù)。這些應(yīng)用程序很棒,但它們價格昂貴。借助語音合成API,我們可以幫助使用我們網(wǎng)站的人們,無論他們是否有殘疾。例如,假設(shè)您正在撰寫博客文章(就像我現(xiàn)在正在做的那樣),為了提高其可讀性,您將其分成幾個段落。這不是使用語音合成API的好機會嗎?事實上,我們可以對我們的網(wǎng)站進行編程,以便一旦用戶將鼠標(biāo)懸停在(或聚焦于)文本上,揚聲器的圖標(biāo)就會出現(xiàn)在屏幕上。如果用戶單擊該圖標(biāo),我們將調(diào)用一個函數(shù)來合成給定段落的文本。這是一個非微不足道的改進。更好的是,它對我們作為開發(fā)人員的開銷非常低,對我們的用戶沒有任何開銷。下面顯示了此概念的基本實現(xiàn)。語音合成API演示現(xiàn)在我們對該API的用例有了更多了解,讓我們了解其方法和屬性。方法和屬性語音合成API定義了一個名為SpeechSynthesis的接口,其結(jié)構(gòu)在此處顯示。與上一篇文章一樣,本文不會涵蓋規(guī)范中描述的所有屬性和方法。原因是它太復(fù)雜,無法在一篇文章中涵蓋。但是,我們將解釋足夠的元素,讓您輕松理解未涵蓋的元素。### SpeechSynthesisUtterance 對象我們需要了解的第一個對象是SpeechSynthesisUtterance對象。它表示合成器將朗讀的語音(即文本)。此對象非常靈活,并且可以通過多種方式進行自定義。除了文本之外,我們還可以設(shè)置用于發(fā)音文本的語言、語速甚至音調(diào)。以下是其屬性列表:- text – 指定要合成的語音(文本)的字符串。- lang – 表示語音合成語言的字符串(例如“en-GB”或“it-IT”)。- voiceURI – 指定語音合成語音和Web應(yīng)用程序希望使用的語音合成服務(wù)的地址的字符串。- volume – 表示文本音量的數(shù)字。其范圍從0(最小)到1(最大)(包括),默認值為1。- rate – 表示語音語速的數(shù)字。它相對于語音的默認速率而言。默認值為1。值為2表示語音將以默認速度的兩倍朗讀。不允許使用低于0.1或高于10的值。- pitch – 表示語音音調(diào)的數(shù)字。其范圍從0(最?。┑?(最大)(包括)。默認值為1。要實例化此對象,我們可以將要合成的文本作為構(gòu)造函數(shù)參數(shù)傳遞,或者省略文本并在稍后設(shè)置它。以下代碼是第一種情況的示例。// 創(chuàng)建語音對象var utterance = new SpeechSynthesisUtterance('My name is Aurelio De Rosa');第二種情況是構(gòu)造SpeechSynthesisUtterance然后分配參數(shù),如下所示。// 創(chuàng)建語音對象var utterance = new SpeechSynthesisUtterance();utterance.text = 'My name is Aurelio De Rosa';utterance.lang = 'it-IT';utterance.rate = 1.2;此對象公開的一些方法是:- onstart – 設(shè)置在合成開始時觸發(fā)的回調(diào)。- onpause – 設(shè)置在語音合成暫停時觸發(fā)的回調(diào)。- onresume – 設(shè)置在合成恢復(fù)時觸發(fā)的回調(diào)。- onend – 設(shè)置在合成結(jié)束時觸發(fā)的回調(diào)。SpeechSynthesisUtterance對象允許我們設(shè)置要朗讀的文本以及配置其朗讀方式。目前,我們只創(chuàng)建了表示語音的對象。我們?nèi)匀恍枰獙⑵渑c合成器綁定。### SpeechSynthesis 對象SpeechSynthesis對象不需要實例化。它屬于window對象,可以直接使用。此對象公開了一些方法,例如:- speak() – 接受SpeechSynthesisUtterance對象作為其唯一參數(shù)。此方法用于合成語音。- stop() – 立即終止合成過程。- pause() – 暫停合成過程。- resume() – 恢復(fù)合成過程。另一個有趣的方法是getVoices()。它不接受任何參數(shù),用于檢索特定瀏覽器可用的語音列表(數(shù)組)。列表中的每個條目都提供信息,例如名稱、助記符名稱(為開發(fā)人員提供語音提示,例如“Google US English”)、lang(語音的語言,例如it-IT)和voiceURI(此語音的語音合成服務(wù)的地址)。重要說明:在Chrome和Safari中,voiceURI屬性名為voice。因此,我們將在本文中構(gòu)建的演示使用voice而不是voiceURI。瀏覽器兼容性不幸的是,在撰寫本文時,唯一支持語音合成API的瀏覽器是Chrome 33(完全支持)和iOS 7的Safari(部分支持)。演示本節(jié)提供了語音合成API的簡單演示。此頁面允許您輸入一些文本并將其合成。此外,還可以設(shè)置您想要使用的速率、音調(diào)和語言。您還可以隨時使用提供的相應(yīng)按鈕停止、暫?;蚧謴?fù)文本的合成。在將偵聽器附加到按鈕之前,因為對該API的支持非常有限,所以我們對實現(xiàn)進行測試。通常,測試非常簡單,包括以下代碼:if (window.SpeechSynthesisUtterance === undefined) { // 不支持} else { // 讀取我的文本}如果測試失敗,我們將向用戶顯示消息“API不支持”。一旦驗證了支持,我們就會在標(biāo)記中放入的特定選擇框中動態(tài)加載可用的語音。請注意,Chrome中的getVoices()方法存在問題(#340160)。因此,我使用setInterval()為此創(chuàng)建了一個解決方法。然后,我們?yōu)槊總€按鈕附加一個處理程序,以便它們可以調(diào)用其特定操作(播放、停止等)。此處提供了代碼的實時演示。此外,此演示以及我迄今為止構(gòu)建的所有其他演示都可以在我的HTML5 API演示存儲庫中找到。```

charset="UTF-8"> name="viewport" content="width=device-width, initial-scale=1.0"/>

>Speech Synthesis API Demo>
  • { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
<code>  body
  {
    max-width: 500px;
    margin: 2em auto;
    padding: 0 0.5em;
    font-size: 20px;
  }

  h1,
  .buttons-wrapper
  {
    text-align: center;
  }

  .hidden
  {
    display: none;
  }

  #text,
  #log
  {
    display: block;
    width: 100%;
    height: 5em;
    overflow-y: scroll;
    border: 1px solid #333333;
    line-height: 1.3em;
  }

  .field-wrapper
  {
    margin-top: 0.2em;
  }

  .button-demo
  {
    padding: 0.5em;
    display: inline-block;
    margin: 1em auto;
  }
></code>

>

Speech Synthesis API>
<code><h3>></h3>Play area>
 action="" method="get">
  <label> for="text"></label>Text:>
   id="text">>
  <div> class="field-wrapper">
    <label> for="voice"></label>Voice:>
     id="voice">>
  </div>>
  <div> class="field-wrapper">
    <label> for="rate"></label>Rate (0.1 - 10):>
     type="number" id="rate" min="0.1" max="10" value="1" step="any" />
  </div>>
  <div> class="field-wrapper">
    <label> for="pitch"></label>Pitch (0.1 - 2):>
     type="number" id="pitch" min="0.1" max="2" value="1" step="any" />
  </div>>
  <div> class="buttons-wrapper">
     id="button-speak-ss" class="button-demo">Speak>
     id="button-stop-ss" class="button-demo">Stop>
     id="button-pause-ss" class="button-demo">Pause>
     id="button-resume-ss" class="button-demo">Resume>
  </div>>
>

 id="ss-unsupported" class="hidden">API not supported>

<h3>></h3>Log>
<div> id="log"></div>>
 id="clear-all" class="button-demo">Clear all>

>
  // Test browser support
  if (window.SpeechSynthesisUtterance === undefined) {
    document.getElementById('ss-unsupported').classList.remove('hidden');
    ['button-speak-ss', 'button-stop-ss', 'button-pause-ss', 'button-resume-ss'].forEach(function(elementId) {
      document.getElementById(elementId).setAttribute('disabled', 'disabled');
    });
  } else {
    var text = document.getElementById('text');
    var voices = document.getElementById('voice');
    var rate = document.getElementById('rate');
    var pitch = document.getElementById('pitch');
    var log = document.getElementById('log');

    // Workaround for a Chrome issue (#340160 - https://code.google.com/p/chromium/issues/detail?id=340160)
    var watch = setInterval(function() {
      // Load all voices available
      var voicesAvailable = speechSynthesis.getVoices();

      if (voicesAvailable.length !== 0) {
        for(var i = 0; i               voices.innerHTML += '                                  'data-voice-uri="' + voicesAvailable[i].voiceURI + '">' +
                              voicesAvailable[i].name +
                              (voicesAvailable[i].default ? ' (default)' : '') + '';
        }

        clearInterval(watch);
      }
    }, 1);

    document.getElementById('button-speak-ss').addEventListener('click', function(event) {
      event.preventDefault();

      var selectedVoice = voices.options[voices.selectedIndex];

      // Create the utterance object setting the chosen parameters
      var utterance = new SpeechSynthesisUtterance();

      utterance.text = text.value;
      utterance.voice = selectedVoice.getAttribute('data-voice-uri');
      utterance.lang = selectedVoice.value;
      utterance.rate = rate.value;
      utterance.pitch = pitch.value;

      utterance.onstart = function() {
        log.innerHTML = 'Speaker started' + '<br>' + log.innerHTML;
      };

      utterance.onend = function() {
        log.innerHTML = 'Speaker finished' + '<br>' + log.innerHTML;
      };

      window.speechSynthesis.speak(utterance);
    });

    document.getElementById('button-stop-ss').addEventListener('click', function(event) {
      event.preventDefault();

      window.speechSynthesis.cancel();
      log.innerHTML = 'Speaker stopped' + '<br>' + log.innerHTML;
    });

    document.getElementById('button-pause-ss').addEventListener('click', function(event) {
      event.preventDefault();

      window.speechSynthesis.pause();
      log.innerHTML = 'Speaker paused' + '<br>' + log.innerHTML;
    });

    document.getElementById('button-resume-ss').addEventListener('click', function(event) {
      event.preventDefault();

      if (window.speechSynthesis.paused === true) {
        window.speechSynthesis.resume();
        log.innerHTML = 'Speaker resumed' + '<br>' + log.innerHTML;
      } else {
        log.innerHTML = 'Unable to resume. Speaker is not paused.' + '<br>' + log.innerHTML;
      }
    });

    document.getElementById('clear-all').addEventListener('click', function() {
      log.textContent = '';
    });
  }
></code>

結(jié)論

本文介紹了語音合成API。這是一個合成文本并改善我們網(wǎng)站用戶(尤其是視障用戶)整體體驗的API。正如我們所看到的,此API公開了多個對象、方法和屬性,但使用起來并不困難。不幸的是,目前其瀏覽器支持非常差,Chrome和Safari是唯一支持它的瀏覽器。希望更多瀏覽器會效仿,讓您能夠?qū)嶋H考慮在您的網(wǎng)站上使用它。我已經(jīng)決定這么做了。別忘了玩演示,如果您喜歡這篇文章,請發(fā)表評論。我真的很想聽聽您的意見。關(guān)于網(wǎng)頁和語音合成API的常見問題 (FAQ)

什么是語音合成API,它是如何工作的?

語音合成API是一個基于Web的接口,允許開發(fā)人員將文本轉(zhuǎn)語音功能集成到他們的應(yīng)用程序中。它的工作原理是使用計算機生成的語音將書面文本轉(zhuǎn)換為口語單詞。這是通過將文本分解成語音成分,然后將這些成分合成成語音來實現(xiàn)的。該API提供了一系列語音和語言供選擇,允許開發(fā)人員自定義語音輸出以滿足他們的需求。

我如何在Web應(yīng)用程序中實現(xiàn)語音合成API?

在您的Web應(yīng)用程序中實現(xiàn)語音合成API涉及幾個步驟。首先,您需要創(chuàng)建一個新的SpeechSynthesisUtterance實例,并將其text屬性設(shè)置為要朗讀的文本。然后,您可以設(shè)置其他屬性,例如語音、音調(diào)和速率,來自定義語音輸出。最后,調(diào)用SpeechSynthesis接口的speak方法來啟動語音合成。

我可以自定義語音輸出的語音和語言嗎?

是的,語音合成API提供了一系列您可以選擇的語音和語言。您可以通過設(shè)置SpeechSynthesisUtterance實例的voice和lang屬性來設(shè)置語音和語言。該API還允許您調(diào)整語音的音調(diào)和速率以進一步自定義輸出。

語音合成API的局限性是什么?

雖然語音合成API是一個強大的工具,但它確實有一些局限性。例如,語音和語言的可用性可能因瀏覽器和操作系統(tǒng)而異。此外,語音輸出的質(zhì)量可能會有所不同,并且可能并不總是聽起來很自然。此外,該API不提供對特定單詞或短語的發(fā)音的控制。

如何在使用語音合成API時處理錯誤?

語音合成API提供了一個錯誤事件,您可以監(jiān)聽該事件。在語音合成過程中發(fā)生錯誤時,將觸發(fā)此事件。您可以通過向SpeechSynthesisUtterance實例添加事件偵聽器并提供將在觸發(fā)事件時調(diào)用的回調(diào)函數(shù)來處理此事件。

我可以暫停和恢復(fù)語音輸出嗎?

是的,語音合成API提供了暫停和恢復(fù)方法,您可以使用這些方法來控制語音輸出。您可以調(diào)用SpeechSynthesis接口上的這些方法來暫停和恢復(fù)語音。

語音合成API在所有瀏覽器中都受支持嗎?

語音合成API在大多數(shù)現(xiàn)代瀏覽器中都受支持,包括Chrome、Firefox、Safari和Edge。但是,語音和語言的可用性可能因瀏覽器和操作系統(tǒng)而異。

我可以在移動應(yīng)用程序中使用語音合成API嗎?

是的,語音合成API可以在移動應(yīng)用程序中使用。但是,語音和語言的可用性可能因移動操作系統(tǒng)而異。

如何測試語音合成API?

您可以通過創(chuàng)建一個使用API將書面文本轉(zhuǎn)換為語音的簡單網(wǎng)頁來測試語音合成API。然后,您可以嘗試不同的語音、語言、音調(diào)和速率,看看它們?nèi)绾斡绊懻Z音輸出。

在哪里可以找到有關(guān)語音合成API的更多信息?

您可以在萬維網(wǎng)聯(lián)盟 (W3C) 提供的官方文檔中找到有關(guān)語音合成API的更多信息。還有許多在線教程和文章提供了有關(guān)如何使用該API的詳細解釋和示例。

以上是說話的網(wǎng)頁和語音綜合API的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

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集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應(yīng)用場景。Java用于大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用于網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯誤處理。了解這兩個階段有助于精確控制JavaScript響應(yīng)用戶操作的時機和方式。

Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。1.Java是靜態(tài)類型、編譯型語言,適用于企業(yè)應(yīng)用和大型系統(tǒng)。2.JavaScript是動態(tài)類型、解釋型語言,主要用于網(wǎng)頁交互和前端開發(fā)。

See all articles