最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生JavaScript再網(wǎng)頁實(shí)現(xiàn)文本轉(zhuǎn)語音功能

 更新時間:2025年03月17日 15:52:30   作者:bbamx.  
這篇文章主要為大家詳細(xì)介紹了如何通過原生JavaScript再網(wǎng)頁實(shí)現(xiàn)文本轉(zhuǎn)語音功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

1、原理

語音合成 (也被稱作是文本轉(zhuǎn)為語音,英語簡寫是 tts) 包括接收 app 中需要語音合成的文本,再在設(shè)備麥克風(fēng)播放出來這兩個過程。

Web API中對此有一個主要控制接口 SpeechSynthesis,外加一些處理如何表示要被合成的文本 (也被稱為 utterances),用什么聲音來播出 utterances 等工作的相關(guān)接口。同樣的,許多操作系統(tǒng)都有自己的某種語音合成系統(tǒng),在這個任務(wù)中我們調(diào)用可用的 API 來使用語音合成系統(tǒng)。

2、示例

可以直接復(fù)制下面代碼運(yùn)行在瀏覽器中

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/axios.js"></script>
  </head>
  <body>
    <div>
      <input type="text" />
      <button>開始播放語音</button>
    </div>
  </body>
  <script>
    const btn = document.querySelector('button')
    const ipt = document.querySelector('input')
 
    function speak({ text, speechRate, lang, volume, pitch }, endEvent, startEvent) {
      if (!window.SpeechSynthesisUtterance) {
        console.warn('當(dāng)前瀏覽器不支持文字轉(zhuǎn)語音服務(wù)')
        return
      }
      if (!text) {
        return
      }
      const speechUtterance = new SpeechSynthesisUtterance()
      speechUtterance.text = text
      speechUtterance.rate = speechRate || 1
      speechUtterance.lang = lang || 'zh-CN'
      speechUtterance.volume = volume || 1
      speechUtterance.pitch = pitch || 1
      speechUtterance.onstart = function (e) {
        startEvent && startEvent()
      }
      speechUtterance.onend = function (e) {
        endEvent && endEvent()
      }
      speechSynthesis.speak(speechUtterance)
 
      return speechUtterance
    }
 
    btn.addEventListener('click', function () {
      if (!ipt.value) return
      speak(
        {
          text: ipt.value,
        },
        function () {
          console.log('語音播放結(jié)束')
        },
        function () {
          console.log('語音開始播放')
        }
      )
    })
  </script>
</html>

支持的瀏覽器

  • Firefox 桌面版和移動版。
  • Firefox OS 2.5+。
  • Chrome 桌面版和安卓版。

注意:如果效果演示失敗,大概是由于您當(dāng)前使用的瀏覽器不支持語音轉(zhuǎn)文字這個API,請更換瀏覽器后重試!

3、解析speak函數(shù)

接受參數(shù)

  • text:要轉(zhuǎn)換為語音的文本內(nèi)容。
  • speechRate:語音播放速率。
  • lang:語音的語言代碼。
  • volume:語音的音量。
  • pitch:語音的音調(diào)。

1、另外,它還接受兩個回調(diào)函數(shù)作為參數(shù):endEvent 和 startEvent。endEvent 在語音播放結(jié)束時觸發(fā),而 startEvent 在語音播放開始時觸發(fā)。

2、函數(shù)首先檢查瀏覽器是否支持語音合成服務(wù),如果不支持則輸出警告信息并返回。然后它檢查是否傳入了要轉(zhuǎn)換的文本內(nèi)容,如果沒有則直接返回。

3、接著,函數(shù)創(chuàng)建了一個 SpeechSynthesisUtterance 對象,該對象表示一段要朗讀的文本。

4、然后將傳入的參數(shù)賦值給這個對象的相應(yīng)屬性,如文本內(nèi)容、語速、語言、音量和音調(diào)。

在設(shè)置好 SpeechSynthesisUtterance 對象的屬性后,

5、函數(shù)設(shè)置了兩個事件處理程序:onstart 和 onend。onstart 事件處理程序在語音播放開始時觸發(fā) startEvent 回調(diào)函數(shù),onend 事件處理程序在語音播放結(jié)束時觸發(fā) endEvent 回調(diào)函數(shù)。

6、最后,函數(shù)通過 speechSynthesis.speak() 方法來開始語音合成,將 SpeechSynthesisUtterance 對象傳遞給該方法以開始朗讀文本,并返回這個 SpeechSynthesisUtterance 對象。

4、方法補(bǔ)充

下面小編為大家整理了一些其他js實(shí)現(xiàn)文字轉(zhuǎn)語音的方法,希望對大家有所幫助

1.還有Web Speech API

Web Speech API 是一個瀏覽器提供的用于語音識別和語音合成的API

包括 SpeechSynthesis語音合成 和 SpeechRecognition語音識別

https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesis

實(shí)現(xiàn)代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>語音合成功能</title>
</head>

<body>
    <h1>語音合成功能</h1>
    <textarea id="textToSpeak" rows="4" cols="50" placeholder="請輸入要朗讀的文本..."></textarea><br>
    <button id="speakButton">朗讀文本</button>

    <script>
        const textArea = document.getElementById("textToSpeak");
        const speakButton = document.getElementById("speakButton");

        // 檢查瀏覽器是否支持語音合成
        if (!window.speechSynthesis) {
            alert("您的瀏覽器不支持語音合成功能。");
        }

        // 獲取語音列表
        const voices = window.speechSynthesis.getVoices();
        // 朗讀文本
        speakButton.addEventListener("click", function () {
            const text = textArea.value.trim();
            if (text === "") {
                alert("請輸入文本內(nèi)容!");
                return;
            }
            console.log("開始朗讀文本:", text);
            const utterance = new SpeechSynthesisUtterance(text);
            utterance.lang = "zh-CN"; // 設(shè)置語言為中文
            utterance.voice = voices.find(voice => voice.lang === "zh-CN"); // 選擇中文語音
            // 設(shè)置語速,取值范圍通常在 0.1 到 10 之間,這里設(shè)置為 0.8 倍速
            utterance.rate = 0.8;
            // 設(shè)置語調(diào),取值范圍一般在 0 到 2 之間,這里設(shè)為 1.5
            utterance.pitch = 1.5;
            // 設(shè)置音量,取值范圍從 0 到 1,這里設(shè)為 0.5
            utterance.volume = 0.5;
            // 監(jiān)聽朗讀結(jié)束
            utterance.onend = function () {
                console.log("朗讀結(jié)束!");
            };

            // 開始朗讀
            window.speechSynthesis.speak(utterance);
        });
    </script>
</body>

</html>

2.不調(diào)用第三方包

如果不想調(diào)用第三方的語音包,就可以用以下方法實(shí)現(xiàn),只不過原生API生成語音確實(shí)有點(diǎn)僵硬,isIe的方法是判斷當(dāng)前瀏覽器是否有ActiveXObject 對象,ActiveXObject 一般情況下是只有IE瀏覽器才有的,如果有就實(shí)例化一個對象,調(diào)用Speak方法就可以了;如果沒有就用SpeechSynthesisUtterance這個HTML5新增的API來操作。

具體代碼如下,在使用的地方直接調(diào)用playVoice()方法就可以了。

function isIe() {
    if (!!window.ActiveXObject || "ActiveXObject " in window) {
        return true
    } else {
        return false
    }
}
 
function playVoice() {
    let msg = '這是一個文字轉(zhuǎn)語音的demo'
    console.log(isIe())
    if (isIe()) {
        let voiceObj = new ActiveXObject("Sapi.SpVoice")
        voiceObj.Rate = -1
        voiceObj.Volume = 60
        voiceObj.Speak(msg, 1)
    } else {
        let speakMsg = new SpeechSynthesisUtterance(msg)
        speakMsg.rate = 1
        speakMsg.pitch = 1.5
        window.speechSynthesis.speak(speakMsg)
    }
 
}

以上就是原生JavaScript再網(wǎng)頁實(shí)現(xiàn)文本轉(zhuǎn)語音功能的詳細(xì)內(nèi)容,更多關(guān)于JavaScript文本轉(zhuǎn)語音的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • typescript中聲明合并介紹

    typescript中聲明合并介紹

    這篇文章主要介紹了typescript中聲明合并介紹,類型合并表明編譯器將合并兩個分開的并且名稱相同的聲明,合并之后的聲明擁有兩個聲明的特點(diǎn),任意數(shù)量的聲明可以被合并,不僅限兩個,更多相關(guān)內(nèi)容需要的朋友可以參考下面文章內(nèi)容
    2022-09-09
  • 使用JavaScript實(shí)現(xiàn)一個簡單的哈希映射功能

    使用JavaScript實(shí)現(xiàn)一個簡單的哈希映射功能

    哈希表大家應(yīng)該都經(jīng)常用到吧,那么大家有沒有想過哈希表是怎么實(shí)現(xiàn)的呢,本文我們就來從一道簡單的題目來了解一下哈希表的簡單原理和實(shí)現(xiàn)吧
    2024-02-02
  • js仿土豆網(wǎng)帶縮略圖的焦點(diǎn)圖片切換效果實(shí)現(xiàn)方法

    js仿土豆網(wǎng)帶縮略圖的焦點(diǎn)圖片切換效果實(shí)現(xiàn)方法

    這篇文章主要介紹了js仿土豆網(wǎng)帶縮略圖的焦點(diǎn)圖片切換效果實(shí)現(xiàn)方法,涉及javascript操作圖片特效的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問題探討及解決

    為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問題探討及解決

    Array沒有indexOf方法,這樣在一個數(shù)組中查找某個元素的索引時比較麻煩,于是通過prototype原型擴(kuò)展了Array.prototype.indexOf(),在對數(shù)組進(jìn)行遍歷的時候卻出現(xiàn)了問題
    2013-04-04
  • JavaScript中Promise.try() 的用法小結(jié)

    JavaScript中Promise.try() 的用法小結(jié)

    本文主要介紹了JavaScript中Promise.try() 的用法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • 一文帶你深入了解JavaScript中的原型&原型鏈

    一文帶你深入了解JavaScript中的原型&原型鏈

    相信不少同學(xué)在面試的時候經(jīng)常在基礎(chǔ)上就掛掉了,當(dāng)下行情實(shí)屬嚴(yán)峻,如果我們基礎(chǔ)都沒有打牢固的話,實(shí)屬有點(diǎn)面試?yán)速M(fèi)機(jī)會。本文就來和大家聊聊JavaScript中的原型&原型鏈,希望對大家有所幫助
    2023-02-02
  • ECMAScript6新增值比較函數(shù)Object.is

    ECMAScript6新增值比較函數(shù)Object.is

    這篇文章主要介紹了ECMAScript6新增值比較函數(shù)Object.is的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • 如何使用js正則表達(dá)式驗(yàn)證文件夾名是否符合規(guī)范

    如何使用js正則表達(dá)式驗(yàn)證文件夾名是否符合規(guī)范

    眾所周知正則表達(dá)式非常強(qiáng)大,下面這篇文章主要給大家介紹了關(guān)于如何使用js正則表達(dá)式驗(yàn)證文件夾名是否符合規(guī)范的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 微信小程序自定義彈窗實(shí)現(xiàn)詳解(可通用)

    微信小程序自定義彈窗實(shí)現(xiàn)詳解(可通用)

    這篇文章主要介紹了微信小程序自定義彈窗實(shí)現(xiàn)詳解(可通用),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 防止頁面被iframe(兼容IE,Firefox火狐)

    防止頁面被iframe(兼容IE,Firefox火狐)

    以前發(fā)布的防止被iframe的代碼,容易在火狐瀏覽器下, 不斷的刷新頁面。所以從網(wǎng)站找到了這篇文章。
    2010-07-07

最新評論

寻乌县| 黔西| 六枝特区| 偏关县| 荣昌县| 尼木县| 南开区| 屯门区| 兴和县| 巴青县| 舟山市| 策勒县| 定陶县| 武清区| 盈江县| 通许县| 巴马| 栖霞市| 密云县| 高陵县| 镇雄县| 体育| 凤城市| 江西省| 双桥区| 怀安县| 安达市| 东明县| 长乐市| 县级市| 军事| 山丹县| 万州区| 阳谷县| 麻栗坡县| 陆良县| 潼南县| 巴南区| 新昌县| 汪清县| 平利县|