文字转语音
edge-tts 库
最近(2023年3月)发现一个 Python 的 edge-tts
库, 可以用来实现文本转语音操作。
这个库使用的是: 微软 edge 浏览器使用的 文字转语音引擎
安装
执行如下命令即可安装 edge-tts python 库
使用
安装好后,就可以调用 命令 执行语音转化,比如
edge-tts --text "自动化测试第2步,需要您手机微信扫码登录,成功后,请按回车继续" --write-media d:\byhy\1.mp3 --voice zh-CN-YunxiNeural
其中
--text 参数
指明保存的mp3文件路径。
--write-media 参数
指明保存的mp3文件路径。
--voice zh-CN-YunjianNeural
指明了使用哪种 语言和风格的 发音人
。
系统中可以使用的 发音人
可以通过命令 edge-tts --list-voices
查看。
如果我们要转化的文本内容很长,通常是保存内容到文件,然后通过 -f
参数 指明转换文件
可以通过参数 --rate
来调整语速,比如
这里, --rate=-50%
让语速变慢了 50%
如果想加快语速可以使用加号,比如 --rate=+50%
开发批量转化程序
我们可以使用这个功能开发 批量转化文件 为mp3,实现听书功能。
参考代码如下
VOICE = "zh-CN-YunjianNeural"
from PySide2 import QtWidgets
import os
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
btn_chooseFolder = QtWidgets.QPushButton('选择目录', self)
btn_chooseFolder.setFixedSize(100,25)
self.label_path = QtWidgets.QLabel('', self)
self.folderPath = ''
btn_run = QtWidgets.QPushButton('开始', self)
btn_run.setFixedSize(60,25)
# 创建一个水平layout作为内部layout
hl = QtWidgets.QHBoxLayout()
hl.addWidget(btn_chooseFolder)
hl.addWidget(self.label_path)
hl.addWidget(btn_run)
self.textEdit = QtWidgets.QPlainTextEdit(self)
# 创建上级layout
layout = QtWidgets.QVBoxLayout()
# 添加 子layout
layout.addLayout(hl)
# 添加内部控件
layout.addWidget(self.textEdit)
# 指定容器控件自身使用的layout
self.setLayout(layout)
# 注册按钮点击处理
btn_chooseFolder.clicked.connect(self.chooseFolder)
btn_run.clicked.connect(self.run)
def chooseFolder(self):
filePath = QtWidgets.QFileDialog.getExistingDirectory(self, "选择文件所在目录")
self.label_path.setText(filePath)
self.folderPath = filePath
def run(self):
for (dirpath, dirnames, filenames) in os.walk(self.folderPath):
for fn in filenames:
# 把 dirpath 和 每个文件名拼接起来 就是全路径
fpath = os.path.join(dirpath, fn)
self.textEdit.appendPlainText(fpath+'\n')
mp3Path = os.path.join(dirpath, fn.replace('.txt','.mp3'))
cmd = f'edge-tts --voice {VOICE} -f "{fpath}" --write-media "{mp3Path}"'
print(cmd)
os.system(cmd)
app = QtWidgets.QApplication([])
window = Window()
window.resize(400, 200)
window.show()
app.exec_()