欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

SpeechSynthesis實(shí)例對(duì)象屬性

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

SpeechSynthesis方法

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

實(shí)例對(duì)象中的方法

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

簡(jiǎn)單實(shí)現(xiàn)

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

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

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

除了使用speak方法,我們還可以實(shí)例對(duì)象屬性text,因此上面的代碼也可以寫(xiě)成

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

具體實(shí)例代碼

<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="請(qǐng)輸入內(nèi)容" v-model="input"></el-input>
             <el-select @change="handleSelectChange" v-model="selectVal" slot="prepend" placeholder="請(qǐng)選擇語(yǔ)言">
                 <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)語(yǔ)音</el-button>
            <el-button  @click="handleStopYuYin">暫停</el-button>
            <el-button  @click="handleHuiFuYuYin">恢復(fù)</el-button>
       </div>  
    </div>
 </template>
 <script>
 export default {
     name: 'speechSynthesisUtterance',
     data() {
         return {
             input: '書(shū)以啟智,技于謀生,活出斜杠',
             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來(lái)創(chuàng)建語(yǔ)音,xxx.volume 獲取并設(shè)置說(shuō)話的音量,xxx.rate 獲取并設(shè)置說(shuō)話的速度(值越大語(yǔ)速越快,越小語(yǔ)速越慢),xxx.pitch 獲取并設(shè)置話語(yǔ)的音調(diào)(值越大越尖銳,越低越低沉)

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

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

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

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

相關(guān)文章

  • HTML5開(kāi)發(fā)Kinect體感游戲的實(shí)例應(yīng)用

    HTML5開(kāi)發(fā)Kinect體感游戲的實(shí)例應(yīng)用

    這篇文章主要介紹了HTML5開(kāi)發(fā)Kinect體感游戲的實(shí)例應(yīng)用的相關(guān)資料,希望通過(guò)本文能夠幫助到大家,需要的朋友可以參考下
    2017-09-09
  • jscript之Read an Excel Spreadsheet

    jscript之Read an Excel Spreadsheet

    jscript之Read an Excel Spreadsheet...
    2007-06-06
  • 微信小程序視圖層莫名出現(xiàn)豎線的解決方法

    微信小程序視圖層莫名出現(xiàn)豎線的解決方法

    本文主要介紹了微信小程序視圖層莫名出現(xiàn)豎線的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼

    JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼

    這篇文章分享了JS組件Bootstrap Table表格行拖拽效果實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 利用canvas實(shí)現(xiàn)的加載動(dòng)畫(huà)效果實(shí)例代碼

    利用canvas實(shí)現(xiàn)的加載動(dòng)畫(huà)效果實(shí)例代碼

    之前看到一個(gè)Android的加載效果不錯(cuò),一直想自己動(dòng)手做一個(gè),正好這段時(shí)間重溫了一個(gè)Canvas,所以就嘗試了一下。下面這篇文章主要給大家介紹了關(guān)于利用canvas實(shí)現(xiàn)加載效果的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • javascript中的鏈?zhǔn)秸{(diào)用

    javascript中的鏈?zhǔn)秸{(diào)用

    鏈?zhǔn)秸{(diào)用就是調(diào)用對(duì)象的方法后返回到該對(duì)象,嚴(yán)格來(lái)講它并不屬于語(yǔ)法,而只是一種語(yǔ)法技巧,js令人著迷的一點(diǎn)就是這里。
    2010-02-02
  • layui表單驗(yàn)證select下拉框?qū)崿F(xiàn)驗(yàn)證的方法

    layui表單驗(yàn)證select下拉框?qū)崿F(xiàn)驗(yàn)證的方法

    今天小編就為大家分享一篇layui表單驗(yàn)證select下拉框?qū)崿F(xiàn)驗(yàn)證的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • JS實(shí)現(xiàn)將對(duì)象轉(zhuǎn)化為數(shù)組的方法分析

    JS實(shí)現(xiàn)將對(duì)象轉(zhuǎn)化為數(shù)組的方法分析

    這篇文章主要介紹了JS實(shí)現(xiàn)將對(duì)象轉(zhuǎn)化為數(shù)組的方法,結(jié)合實(shí)例形式分析了javascript操作及轉(zhuǎn)換json數(shù)組相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • Jquery把獲取到的input值轉(zhuǎn)換成json

    Jquery把獲取到的input值轉(zhuǎn)換成json

    本篇文章主要介紹了Jquery把獲取到的input值轉(zhuǎn)換成json的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • ejs v9 javascript模板系統(tǒng)

    ejs v9 javascript模板系統(tǒng)

    我的模板系統(tǒng)升一下級(jí), 繼續(xù)在新公司里面用。 現(xiàn)在幾在互聯(lián)網(wǎng)公司沒(méi)有不用javascript模板了, 什么TX, 百度, 新浪, 360什么的, 最后瀑布流的流行, 里面又有許多用到模板
    2012-03-03

最新評(píng)論