• 【TTS】文本转语音?如何不调用第三方api来实现,使用pyttsx3


    @

    前言

    本次的实现需求有点困难,所以也就记录下来,别到时候都忘了。

    在这里插入图片描述
    首先先不说正题,有兴趣的可以看一看
    1、目标是实现一个可以传一个文本就返回一个语音的接口..

    2、开始的时候,以为可以直接在java后台直接集成就好了,结果找了半天,找到最多的还是jacob实现文本转语音,虽然感觉可行,但是我的这个项目原本就是需要部署到liunx系统上的,可这个jacob貌似只能在window系统上可行,在liunx系统上不行,所以不能因小失大啊。...

    3、所以就想找一个大公司的语言合成的sdk,看行不行...结果像百度、讯飞、华为、阿里等产品,大部分都是在线接口服务,当我满怀喜悦的心情看到了一个叫java SDK的时候,然后兴冲冲的看文档,然后兴冲冲的仰天长望...,后来就是知道了,这个sdk还是去连接第三方api的,只不过可以集成到java中而已。

    4、接下来,我又讯飞的产品中找到了有关离线SDK的信息,只不过还是没得java,只有window、liunx、ios、安卓的一些离线SDK。哎,罢了,罢了,就试一试把,我尝试了liunx系统的SDK,结果还行,只不过得运行shell脚本之类的编译操作(可行)。

    5、最后,决定彻底改变思路,不用java方式集成进原先的项目中了,直接新开辟一个python项目得了。然后就找啊,找啊,结果python使用pyttsx3实现文本转语音还是挺简单的。(可行)

    6、不过,还是那样,因为好像使用的是window中的语言播报功能,所以无法部署到Liunx服务器上,如果实在要部署的话是需要往服务器上部署好一个叫espeak的语言播报驱动,只不过我暂时不在这里说了,因为我暂时也没搞,不过通过查找到了大量资料,安装espeak 的最锲合的系统是"乌班图"的系统,像centos7之类的就很麻烦!(我就是)

    7、为什么说centos7的很麻烦呢,其实跟apt 命令有关,centos7无法使用apt命令,而通过我找到的资料来说espeak 的快捷安装又跟apt有关,如果没有apt的话,像centos7就只能通过手动编译来按照espeak(:因为centos不属于debian系列,所以不能使用,只有乌邦图才能使用。),然后就...所以如果大家有需要可以去尝试,centos7和“乌班图”系统的安装espeak不太一样。

    后面应该还会写如何使用centos7来实现语言播报的吧,要不然我就会之前使用window算了。
    在这里插入图片描述


    安装pyttsx3

    为了给你们省事,源都给你们备好了
    在这里插入图片描述

    pip install pyttsx3 -i http://pypi.douban.com/simple
    

    其实,python下载模块贼简单,他报个啥 啥模块找不到,那找不到就找不到呗,那就install下不就o了
    在这里插入图片描述


    实现TTS接口

    别说了,上代码
    在这里插入图片描述

    from flask import Flask
    
    import pyttsx3
    import time
    from flask import Flask, render_template, redirect, jsonify, send_file,request
    
    app = Flask(__name__)
    
    
    @app.route('/voice')
    def Text_To_Speek():
        str =  request.args['str'];
        t = time.time()
    
        engine = pyttsx3.init()
    
        # 设置新的语音速率
        engine.setProperty('rate', 200)
    
        # 设置新的语音音量,音量最小为 0,最大为 1
        engine.setProperty('volume', 1.0)
        # 获取当前语音声音的详细信息
        voices = engine.getProperty('voices')
    
        print(f'语音声音详细信息:{voices}')
        # # 设置当前语音声音为女性,当前声音不能读中文
        # engine.setProperty('voice', voices[1].id)
        # 设置当前语音声音为男性,当前声音可以读中文
        engine.setProperty('voice', voices[0].id)
    
        # 语音播报内容
        content = str
        # 输出文件格式
        outFile = f'./static/{t}.mp3'
        print(outFile)
    
        engine.save_to_file(content, outFile)
        engine.runAndWait()
        engine.stop()
    
        return send_file(f"./static/{t}.mp3");
    
    @app.route('/')
    def hello_world():
    
        return "hello world";
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000, debug='true')
    
    

    接口参照以下代码:
    参照https://www.cnblogs.com/liumengsong/p/12199017.html

    
    import pyttsx3
    # 创建对象
    engine = pyttsx3.init()
    # 获取当前语音速率
    rate = engine.getProperty('rate')
    print(f'语音速率:{rate}')
    # 设置新的语音速率
    engine.setProperty('rate', 200)
    # 获取当前语音音量
    volume = engine.getProperty('volume')
    print(f'语音音量:{volume}')
    # 设置新的语音音量,音量最小为 0,最大为 1
    engine.setProperty('volume', 1.0)
    # 获取当前语音声音的详细信息
    voices = engine.getProperty('voices')
    
    print(f'语音声音详细信息:{voices}')
    # 设置当前语音声音为女性,当前声音不能读中文
    engine.setProperty('voice', voices[1].id)
    # 设置当前语音声音为男性,当前声音可以读中文
    engine.setProperty('voice', voices[0].id)
    # 获取当前语音声音
    voice = engine.getProperty('voice')
    print(f'语音声音:{voice}')
    
    # 语音播报内容
    content = "你好亚"
    # 输出文件格式
    outFile = './out.mp3'
    
    # # 语音文本
    # path = 'test.txt'
    # with open(path, encoding='utf-8') as f_name:
    #     words = str(f_name.readlines()).replace(r'
    ', '')
    # 将语音文本说出来
    engine.save_to_file(content, outFile)
    engine.say(content)
    engine.runAndWait()
    # 将文字输出为 aiff 格式的文件
    engine.stop()
    

    后言

    在这里插入图片描述
    ok,pyttsx3的使用就结束了,只不过不知道大家有没有发现我的重点嘛~

    我这篇博客也只是把我一路的解决方法记录下来的

    其实现在这个项目确实是可以跑起来的,只不过后续部署上没什么更好的想法。
    一路下来,也翻了很多博客,以后有进展了再写其他的吧。

    不过,如果有更厉害的大佬的话,不妨给我指教指教呗.0-0

    在这里插入图片描述

  • 相关阅读:
    Spark SQL+day04笔记
    Spark 环境搭建
    海量数据处理 算法总结2
    Scala面试题 看过1
    HTML-table、form表单标签的介绍
    Java-CSS美化网页元素
    Java-BOM与DOM对象
    java-CSS盒子模型、浮动、定位
    java-基础面试题(2)
    Java-io流
  • 原文地址:https://www.cnblogs.com/liwangwang/p/13522042.html
Copyright © 2020-2023  润新知