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

基于JS實現(xiàn)文字轉(zhuǎn)語音即文本朗讀

 更新時間:2023年10月20日 10:32:34   作者:itclanCoder  
這篇文章主要為大家詳細介紹了JavaScript如何利用SpeechSynthesis實現(xiàn)文字轉(zhuǎn)語音即文本朗讀的功能,感興趣的小伙伴可以跟隨小編一起學習一下

前言

平時在做項目的過程中,有遇到場景是客戶要求播放語音的場景,比如:無障礙朗讀,整篇文章實現(xiàn)朗讀,文字轉(zhuǎn)語音,文字轉(zhuǎn)語音播放等等。

在不使用第三方API接口的情況下,這里需要js來實現(xiàn)文字轉(zhuǎn)語音播放的功能。能想到的也就是利用html5的個APISpeechSynthesis。

SpeechSynthesis用于將指定文字合成為對應的語音.也包含一些配置項,指定如何去閱讀(語言,音量,音調(diào))等等

SpeechSynthesis實例對象屬性

  • lang 獲取并設置話語的語言
  • pitch 獲取并設置話語的音調(diào)(值越大越尖銳,越低越低沉)
  • rate 獲取并設置說話的速度(值越大語速越快,越小語速越慢)
  • text 獲取并設置說話時的文本
  • voice 獲取并設置說話的聲音
  • volume 獲取并設置說話的音量

SpeechSynthesis方法

  • speak() 將對應的實例添加到語音隊列中
  • cancel() 刪除隊列中所有的語音.如果正在播放,則直接停止
  • pause()暫停語音
  • resume() 恢復暫停的語音
  • getVoices 獲取支持的語言數(shù)組. 注意:必須添加在voiceschanged事件中才能生效

實例對象中的方法

  • onstart – 語音合成開始時候的回調(diào)。
  • onpause – 語音合成暫停時候的回調(diào)。
  • onresume – 語音合成重新開始時候的回調(diào)。
  • onend – 語音合成結(jié)束時候的回調(diào)

簡單實現(xiàn)

如果想讓瀏覽器讀出“書以啟智,技于謀生,活出斜杠”的聲音,可以下面的js代碼:

let utterThis = new SpeechSynthesisUtterance('書以啟智,技于謀生,活出斜杠');
speechSynthesis.speak(utterThis);

實現(xiàn)這個語音朗讀,需要用構(gòu)造器函數(shù)SpeechSynthesisUtterance方法,實例對象下,調(diào)用speak方法,即可實現(xiàn)語音的播報

除了使用speak方法,我們還可以實例對象屬性text,因此上面的代碼也可以寫成

let utterThis = new SpeechSynthesisUtterance();
utterThis.text = '書以啟智,技于謀生,活出斜杠';
utterThis.lang = 'en-US';//漢語
utterThis.rate = 0.7;//語速
speechSynthesis.speak(utterThis);

具體實例代碼

<template>
    <div class="speech-wrap">
       <div>
            <span class="demonstration">音量</span>
            <el-slider @input="handleVoinceInput" v-model="voinceValue"  vertical height="200px"></el-slider>
       </div>
       <div>
             <el-input class="inseret-input" clearable placeholder="請輸入內(nèi)容" v-model="input"></el-input>
             <el-select @change="handleSelectChange" v-model="selectVal" slot="prepend" placeholder="請選擇語言">
                 <el-option label="zh-CN" value="zh-CN"></el-option>
                 <el-option label="en-US" value="en-US"></el-option>
            </el-select>
            <el-button slot="append" @click="handleTransYuYin">轉(zhuǎn)語音</el-button>
            <el-button  @click="handleStopYuYin">暫停</el-button>
            <el-button  @click="handleHuiFuYuYin">恢復</el-button>
       </div>  
    </div>
 </template>
 <script>
 export default {
     name: 'speechSynthesisUtterance',
     data() {
         return {
             input: '書以啟智,技于謀生,活出斜杠',
             voinceValue: 30,
             selectVal: 'zh-CN',
         }
     },
 
     methods: {
         handleTransYuYin() {
            if(this.input) {
                let msg = new SpeechSynthesisUtterance(this.input);
                msg.volume = this.voinceValue;
                msg.rate = this.voinceValue;
                msg.pitch = this.voinceValue;
                this.throttle(window.speechSynthesis.speak(msg),2000);
            }else {
                this.$message.error('輸入框內(nèi)容不能為空');
            }
           
         },

 
         handleVoinceInput(val) {
             this.voinceValue = val;
         },
 
          handleSelectChange(val) {
             this.selectVal = val;
          },
 
          handleStopYuYin() {
              window.speechSynthesis.pause();
          },

          handleHuiFuYuYin() {
            window.speechSynthesis.resume();
          },
 
          throttle(fn,delay) {
             let last = 0
             return function() {
                 const now = new Date()
                 if(now - last > delay) {
                     fn.apply(this,arguments)
                     last = now
                 }
             }
         }  
         
     }
 }
 </script>
 <style scoped>
 .speech-wrap {
    display:flex;
    justify-content:start;
    align-items: center;
    
 }

 .speech-wrap .inseret-input {
    width: 400px;
 }
 </style>

window.speechSynthesis來創(chuàng)建語音,xxx.volume 獲取并設置說話的音量,xxx.rate 獲取并設置說話的速度(值越大語速越快,越小語速越慢),xxx.pitch 獲取并設置話語的音調(diào)(值越大越尖銳,越低越低沉)

window.speechSynthesis.speak(msg) 播放語音,msg 是一個SpeechSynthesisUtterance對象,msg.text 設置要播放的話, msg.lang 設置語言,msg.volume 設置音量,msg.rate 設置語速,msg.pitch 設置音調(diào)

上面使用了throttle函數(shù)來限制播放的頻率,防止播放過快,導致瀏覽器卡頓

如果不使用接口的方式,在項目中加入文本轉(zhuǎn)語音,可以用這種方式實現(xiàn),但是要注意兼容性問題,這個API是不兼容IE瀏覽器的

到此這篇關(guān)于基于JS實現(xiàn)文字轉(zhuǎn)語音即文本朗讀的文章就介紹到這了,更多相關(guān)JS文字轉(zhuǎn)語音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 網(wǎng)站頁面自動跳轉(zhuǎn)實現(xiàn)方法PHP、JSP(下)

    網(wǎng)站頁面自動跳轉(zhuǎn)實現(xiàn)方法PHP、JSP(下)

    很多時候我們需要Web頁具備有自動跳轉(zhuǎn)功能,例如,論壇中的用戶登錄、發(fā)帖及回復或留言簿中的留言和回復等操作成功后,若用戶沒有任何鼠標點擊操作,過了一定的時間,頁面自動跳轉(zhuǎn)到預設的頁面。
    2010-08-08
  • 在多個頁面使用同一個HTML片段的代碼

    在多個頁面使用同一個HTML片段的代碼

    有一個比較復雜的HTML片段(A),如果把這個HTML片段嵌入到其他頁面中(B,C,D....)。 問題的關(guān)鍵是在HTML片段中有大量的JavaScript邏輯需要處理,比如說分頁,點擊事件響應等。
    2011-03-03
  • three.js設置物體的縮放和旋轉(zhuǎn)代碼示例

    three.js設置物體的縮放和旋轉(zhuǎn)代碼示例

    最近在用three.js做三維模型的時候,需要通過鼠標滑輪向前來控制視角朝鼠標的位置放大,然后通過鼠標滑輪向后將視角復原,這篇文章主要給大家介紹了關(guān)于three.js如何設置物體的縮放和旋轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • js左側(cè)多級菜單動態(tài)的解決方案

    js左側(cè)多級菜單動態(tài)的解決方案

    實現(xiàn)的效果很簡單,就是點一下顯示,再點一下就隱藏,只不過是多了幾級的問題。好,現(xiàn)在來說說我的設計思路,首先從第一級別開始,添加如下代碼
    2010-02-02
  • 可自定義速度的js圖片無縫滾動示例分享

    可自定義速度的js圖片無縫滾動示例分享

    這篇文章主要介紹了非常平滑的JS圖片滾動特效代碼,無縫循環(huán),速度可自定義,大家參考使用吧
    2014-01-01
  • 微信小程序從注冊賬號到上架(圖文詳解)

    微信小程序從注冊賬號到上架(圖文詳解)

    這篇文章主要介紹了微信小程序從注冊賬號到上架詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 前端導出PDF的組件及方法實際例子

    前端導出PDF的組件及方法實際例子

    這篇文章主要介紹了三種流行的前端導出PDF的組件和方法,分別是jsPDF、pdfMake和Print.js,每個庫都有其特點和適用場景,可以根據(jù)具體需求選擇合適的庫,需要的朋友可以參考下
    2025-02-02
  • 原生js ActiveXObject獲取execl里面的值

    原生js ActiveXObject獲取execl里面的值

    使用原生js獲取execl里面的值,想必有很多的朋友都不會吧,下面有個不錯的方法主要是使用ActiveXObject來實現(xiàn),感興趣的朋友可不要錯過
    2013-11-11
  • JS中setInterval、setTimeout不能傳遞帶參數(shù)的函數(shù)的解決方案

    JS中setInterval、setTimeout不能傳遞帶參數(shù)的函數(shù)的解決方案

    在JS中無論是setTimeout還是setInterval,在使用函數(shù)名作為調(diào)用句柄時都不能帶參數(shù),而在許多場合必須要帶參數(shù),接下來為大家介紹具體的解決方法
    2013-04-04
  • JavaScript詳細分析數(shù)據(jù)類型和運算符

    JavaScript詳細分析數(shù)據(jù)類型和運算符

    這篇文章主要介紹了JavaScript數(shù)據(jù)類型和運算符案例,結(jié)合實例形式分析了JavaScript數(shù)據(jù)類型和運算符特性與相關(guān)操作技巧,需要的朋友可以參考下
    2022-07-07

最新評論

镇赉县| 安平县| 田阳县| 丽水市| 博客| 鄄城县| 巴里| 马关县| 涟源市| 绥阳县| 太和县| 循化| 大邑县| 明溪县| 离岛区| 乐至县| 当涂县| 丹棱县| 北京市| 茂名市| 莱西市| 红原县| 天祝| 定南县| 靖边县| 类乌齐县| 奉新县| 普宁市| 海兴县| 丰县| 临湘市| 施秉县| 河东区| 鄯善县| 武义县| 闵行区| 晋城| 论坛| 平塘县| 通江县| 濮阳县|