如何用pyttsx3将转换成语音?

摘要:@(目录) 前言 本次的实现需求有点困难,所以也就记录下来,别到时候都忘了。 首先先不说正题,有兴趣的可以看一看: 1、目标是实现一个可以传一个文本就返回一个语音的接口.. 2、开始的时候,以为可以直接在java后台直接集成就好了,结果找了
@ 目录前言安装pyttsx3实现TTS接口后言 前言 本次的实现需求有点困难,所以也就记录下来,别到时候都忘了。 首先先不说正题,有兴趣的可以看一看: 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'\n', '') # 将语音文本说出来 engine.save_to_file(content, outFile) engine.say(content) engine.runAndWait() # 将文字输出为 aiff 格式的文件 engine.stop() 后言 ok,pyttsx3的使用就结束了,只不过不知道大家有没有发现我的重点嘛~ 我这篇博客也只是把我一路的解决方法记录下来的 其实现在这个项目确实是可以跑起来的,只不过后续部署上没什么更好的想法。 一路下来,也翻了很多博客,以后有进展了再写其他的吧。 不过,如果有更厉害的大佬的话,不妨给我指教指教呗.0-0