前言:前段时间和老同学聊天,得知他未来可能踏足直播领域,故心生想法,能否做个程序,实时获取直播间信息,将文字转换成语音实时播报,遂在此记录一下。

在此之前,并没有接触过相关概念的东西,在各个网站以及各大平台搜索了很多关键字:【文字转语音】【语音合成】【TTS】总结了一下包含了以下几种

  1. 百度TTS (支持在线合成和离线合成,收费,虽然有免费额度,但就调试够用,不推荐)
  2. 科大讯飞TTS (支持在线合成和离线合成,也是有免费额度,不推荐)
  3. 小米小爱开放平台 (个人比较喜欢小爱的音色,但需集成AIVS-SDK,较为复杂,不推荐)
  4. say.js 在github上拥有1.1k的星,基于node开发,实测可以使用,但是部分中文总是会读错,而且运行时有延迟,不知道是不是我配置原因(实测可以使用,使用系统自带语音进行合成,可以根据自己情况试试)
  5. 微软AzureTTS 可以在Edge浏览器的大声朗读功能中体验(收费,有免费额度,个人认为Microsoft Xiaoxiao合成的语音是在座的声音中最清晰的,不收费的话肯定极力推荐)
  6. pyttsx3 主角登场了,基于python的TTS文本转语音库(也是使用系统自带语音进行合成,实测比起say.js要快很多,推荐)

介绍

pyttsx3是Python中的文本到语音转换库。与替代库不同,它可以脱机工作,并且与Python 2和3兼容。使用pyttsx3合成语音需要用到系统自带的语音。

安装

  • 安装pyttsx3 bash pip install pyttsx3 如果提示No module named win32com.clientNo module named win32或者No module named win32api之类的错误,则需要另外安装pypiwin32
  • 至少拥有一个语言包(如确认已有可以跳过此操作)
    先确认你的系统中最少有一个中文语音包,打开 设置->时间和语言->语音->选择语音,确认至少有一个中文语言包。 (推荐安装微软的Huihui语音包) 如果没有则进行以下操作:
    • 下载微软系统语言包 ,推荐下载MSSpeech_TTS_zh-CN_HuiHui.msi
    • 安装完语言包后,没有提示,其实已经安装成功了,不过还有后续操作:
      1. win+r 输入regedit 打开注册表
      2. 找到此路径:计算机_LOCAL_MACHINEServer
      3. 找到刚才到处的.reg文件,右键编辑,然后点击ctrl+h替换,将 \Speech Server\v11.0\Speech,保存
      4. 点击注册表编辑器中:菜单—文件-导入,选择刚才编辑完的.reg文件
        至此语音包就已经安装完成了,再次打开 设置->时间和语言->语音->选择语音 便可以看到刚才安装的语音包了。

基础用法

import pyttsx3engine = pyttsx3.init()
engine.say("I will speak this text,listen...卧槽~ 流批!")
engine.runAndWait()

更多用法

import pyttsx3

engine = pyttsx3.init()
# 初始化引擎"""速率"""
rate = engine.getProperty('rate')
# 获取当前说话速率的详细信息
print(rate)
# 打印当前速率
engine.setProperty('rate', 125)

# 设置速率属性"""音量"""
volume = engine.getProperty('volume')
# 获取当前音量(最小=0,最大=1)
print(volume)
# 打印当前音量
engine.setProperty('volume', 1.0)
# 设置0-1之间的音量"""声音"""
voices = engine.getProperty('voices')
# 获取当前声音详情
# engine.setProperty('voice', voices[0].id)
# 更改为voices的第一个声音. o是男
engine.setProperty('voice', voices[1].id)
# 更改为voices的第二个声音. 1是女
engine.say("Hello World!")
engine.say('我当前的说话速度是' + str(rate))
engine.runAndWait()
engine.stop()
# 将声音保存到文件中 在linux上请确保已安装 'espeak' 和 'ffmpeg'
engine.save_to_file('Hello World', 'test.mp3')
engine.runAndWait()

总结

pyttsx3是一个不错的离线语音合成库,既可以用于实时播报,也可以存储为音频文件,简单易用,最主要的不收费~在这里极力推荐大家一试