目录
- 前言
- 安装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')
接口参照以下代码:
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