HTML5新特性之文字转语音

摘要:
*speaker.start();//播放时间*setTimeout(()=>{speaker.pause();{speakeer.resume();{speaker.cancel();默认值为1 this.utter.rate=rate;默认值是1 this.outer.volume=volume;
/**
 * 文字转语音,利用H5的新特性SpeechSynthesisUtterance,speechSynthesis实现
 * eg.
 *    const speaker = new Speaker({ text: '这是一条神奇的天路啊' });
 *    speaker.start(); // 开时播放
 *    setTimeout(() => { speaker.pause(); }, 1000); // 一秒钟之后暂停,根据实际情况来
 *    setTimeout(() => { speaker.resume(); }, 2000); // 两秒秒钟之后暂停,根据实际情况来
 *    setTimeout(() => { speaker.change('我坐上火车就去拉萨,去看那神奇的唐古拉。'); }, 3000); // 三秒钟之后切换内容,根据实际情况来
 *    setTimeout(() => { speaker.cancel(); }, 10000); // 十秒钟之后暂停,根据实际情况来
 */
class Speaker {

  constructor(option) {
    const {
      lang = 'zh-CN',
      pitch = 1,
      rate = 1,
      volume = 1,
      text = ''
    } = option;
    this.utter = new window.SpeechSynthesisUtterance();
    this.utter.lang = lang; // 设置语言环境
    this.utter.pitch = pitch; // 设置语音的音调,默认为1
    this.utter.rate = rate; // 设置语音的语速,默认为1
    this.utter.volume = volume; // 设置语音的音量,0-1之间
    this.utter.text = text;
    this.getVoices(); // 获取所有声音的集合
  }

  // 获取当前可用的声音集合
  getVoices() {
    window.speechSynthesis.onvoiceschanged = () => {
      this.voices = window.speechSynthesis.getVoices();
      if(this.voices.length > 0) {
        this.utter.voice = this.voices[0]; // 设置声音来源
      }
    };
  }

  // 开始播放当前的语音
  start() {
    window.speechSynthesis.speak(this.utter);
  }

  // 暂停播放
  pause() {
    window.speechSynthesis.pause();
  }

  // 暂停之后继续播放
  resume() {
    window.speechSynthesis.resume();
  }

  // 清空所有播放
  cancel() {
    window.speechSynthesis.cancel();
  }

  // 切换语音的内容
  change(text) {
    this.utter.text = text;
    window.speechSynthesis.speak(this.utter);
  }
}

程序员之间不需要多说话,自己看代码,基本把相关的属性都写上去了,拿去可以直接用。觉得有用处就点个赞,留个言。

兼容性问题,看了一下MDN的介绍,除了IE不支持,其它的浏览器基本属性和方法都是支持的。

免责声明:文章转载自《HTML5新特性之文字转语音》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况人大金仓(jdbc)8.6.0,8.2.0jar下载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

通过form上传文件(php)

 前段代码 //提交form表单,包含file //方法1:使用jquery-form.js插件 /* $("form").ajaxSubmit(function (resp_img_url) { //直接返回图片的url $("#btn_titlepic").html(str_old); $("#img_titlepic").attr("src"...

NLog使用方法

一、软件网站:http://www.nlog-project.org/下载:http://sourceforge.net/project/showfiles.php?group_id=116456说明:如果是.Net 2.0使用, 请下载nlog-1.0-net-2.0.zip      里面的bin目录下有多个,c# 使用nlog.dll文件:nlog....

调试lua代码

lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样: 【例子程序】 -- debug.luagvar1 = 100 function foo() local var2 = 10 function bar()...

C# CheckedListBox控件的用法大全

checklistbox控件  1.添加项 checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checkedListBox1.Items.Add("黄色"); 2. 判断第i项是否选中,选中为true,否则为false if(checkedListBox1.GetItemC...

解决jQuery多个版本,与其他js库冲突方法

jQuery多个版本或和其他js库冲突主要是常用的$符号的问题,这个问题 jquery早早就有给我们预留处理方法了,下面一起来看看解决办法。 1.同一页面jQuery多个版本或冲突解决方法。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="...

easyui treegrid 动态展开数据(暂记)

 ClassifyAdminSynMsgSvr.GetCLFLList("<%=CurUTag %>", 1, "", function (ret) {                    //console.log(ret);                    //console.log(ret._Items);            ...