码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 语音合成(TTS)应用方案一二三


    前言

    语音合成是指将文字转成语音(TextToSpeech)进行播放,本文主要介绍三种实现方案。

    一、web端实现

    通过h5提供的网页语音API来实现,用到speechSynthesis(获取设备上可用的合成声音的信息、控制声音播放、暂停等命令)和SpeechSynthesisUtterance(管理文本声音的属性的实例)。

    1. export default class Speaker {
    2. speaker: SpeechSynthesisUtterance;
    3. constructor(txt = '', volume = 1, lang = 'zh-CN') {
    4. this.speaker = new window.SpeechSynthesisUtterance(txt);
    5. this.speaker.volume = volume;
    6. this.speaker.lang = lang;
    7. }
    8. /* 设置文本 */
    9. setText(txt) {
    10. this.speaker.text = txt;
    11. }
    12. /**
    13. * 设置音量
    14. * @param volume 区间[0, 1]
    15. */
    16. setVolume(volume) {
    17. this.speaker.volume = volume;
    18. }
    19. /* 播放 */
    20. speak() {
    21. window.speechSynthesis.speak(this.speaker);
    22. }
    23. /* 停止播放 */
    24. stop = () => {
    25. window.speechSynthesis.cancel();
    26. };
    27. }

    注意speaker.lang如果不指定中文,在非中文环境下无法播放中文。

    SpeechSynthesisUtterance包括如下属性

    SpeechSynthesisUtterance.lang 语言种类,默认为html里lang的值

    SpeechSynthesisUtterance.pitch 音高,默认为1,取值区间为[0, 2]

    SpeechSynthesisUtterance.rate 速率,默认为1,取值区间为[0.1, 10]

    SpeechSynthesisUtterance.text 文本内容

    SpeechSynthesisUtterance.voice 声音对象,从SpeechSynthesis.getVoices()中选取值进行设定,默认是与lang最匹配的一个

    SpeechSynthesisUtterance.volume 音量 默认为1,取值区间为[0, 1]

    二、node实现

    windows环境中,powershell可以调用系统的语音api

    1. Add-Type -AssemblyName System.speech;
    2. $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer;
    3. $speak.Rate = 0; # 语速 [-10, 10]
    4. $speak.Speak('语音合成')

    只要通过node执行这个指令即可,因为powershell默认是GBK编码,要注意编码转换

    1. const { exec } = require('child_process');
    2. const iconv = require('iconv-lite');
    3. exec(`powershell.exe Add-Type -AssemblyName System.speech; $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer; $speak.Rate = 5; $speak.Speak([Console]::In.ReadLine()); exit`).stdin.end(iconv.encode('语音合成', 'gbk'));

    三、调用第三方SDK

    以上两种方法都是基于系统的支持,声音有明显的机器感,如果需要更加逼真的人声发音,就需要通过第三方服务来完成,BAT及科大讯飞都有提供语音合成的服务,基本都是按调用量收费。

    这些服务基本都会提供web端、node端、移动端、小程序等各个平台的解决方案

    具体实现可参考相应的官方文档,如 接口说明 - 智能语音交互 - 阿里云、语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心

  • 相关阅读:
    FFmpeg入门详解之110:RTSP协议讲解
    0913 理论知识,项目
    Matlab|基于多目标粒子群算法的微电网优化调度(多约束多目标智能算法模板)
    非分布式-多线程事务控制核心代码1
    438. 找到字符串中所有字母异位词
    XUbuntu22.04之查找进程号pidof、pgrep总结(一百九十)
    集合类中的反常规特性
    mysql 事务 及 Spring事务 初论
    Scala开发环境搭建
    判断JS是否加载完成
  • 原文地址:https://blog.csdn.net/cscj2010/article/details/126766102
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号