跳至主要内容

python 之 文本转语言并保存

资料





        众所周知,由于阅读障碍和其他学习障碍,有些人难以阅读大量文字。 有些人具有基本的文学水平。 他们经常尝试浏览Internet时感到沮丧,因为其中很多都是文本形式的,或者另一方面,某些人更喜欢听或看新闻文章(或类似的东西)而不是阅读。 因此,要解决所有这些问题,就会想到一个概念,即“文本到语音”。

打开电脑自带TTS语音路径
start %windir%\Speech_OneCore\Engines\TTS
注册表
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens


Mac上 https://github.com/andrewp-as-is/mac-say.py

Balabolka

是一个文本到语音 (TTS) 程序。Balabolka可以使用您系统上安装的所有计算机语音屏幕上的文本可以保存为音频文件。该程序可以读取剪贴板内容、从文档中提取文本、自定义字体和背景颜色、从系统托盘或全局热键控制读取。 Balabolka支持文本文件格式:AZW、AZW3、CHM、DjVu、DOC、DOCX、EML、EPUB、FB2、FB3、HTML、LIT、MD、MOBI、ODP、ODS、ODT、PDB、PRC、PDF、PPT、PPTX、 RTF、TCR、WPD、XLS、XLSX。




eSpeak 

http://espeak.sourceforge.net/index.html
eSpeak 是一款小巧的开源软件语音合成器,可以将语音输出生成为 WAV 文件,适用于中文和其他语言,适用于 Linux 和 Windows

中文简体文本需要编码为ANSI

安装界面,中文zh  zh+f5

要使用语言的替代语音,您可以选择其他命令来更改各种语音和发音属性。有关更多信息,请访问http://espeak.sourceforge.net/voices.html通过附加加号 ( + ) 和变体名称,可以将预设语音变体应用于任何语言语音男声的变体是+m1+m2+m3+m4+m5+m6+m7女声的变体是+f1+f2+f3+f4+f5您还可以选择可选的语音效果,例如+croak+whisper



Audacity
一款易于使用的多轨音频编辑器和录音机,适用于 Windows、macOS、GNU/Linux 和其他操作系统。转换语音格式



pyttsx3

pip install pyttsx3
If you recieve errors such as No module named win32com.client, No module named win32, or No module named win32api, you will need to additionally install pypiwin32.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
# https://github.com/nateshmbhat/pyttsx3
# https://pyttsx3.readthedocs.io/en/latest/
# 完全离线文本到语音转换
# 在系统中安装的不同声音中进行选择
# 控制语速/语速
# 调整音量
# 将语音保存为文件
# 简单、强大且直观的 API

import pyttsx3
# Single line usage with speak function with default options
pyttsx3.speak("I will speak this text with speak function with default options")
# 包括 TTS 引擎win-sapi5,mac-nsss,linux-espeak,也可以指定pyttsx3.init('sapi5') 
engine = pyttsx3.init() # object creation 

"""
setProperty(name, value) 将命令排队以设置引擎属性。新属性值会影响此命令后排队的所有话语。
以下属性名称对所有驱动程序都有效
rate    以每分钟字数为单位的整数语速。默认为每分钟 200 个字。
voice   当前语音的字符串标识符。
volume  0.0 到 1.0(含)范围内的浮点量。默认为 1.0。
"""


"""Changing speech rate"""
rate = engine.getProperty('rate')   # getting details of current speaking rate
print (rate)                        # printing current voice rate
engine.setProperty('rate', 200)     # setting up new voice rate
# engine.setProperty('rate', rate+50)


"""Changing volume"""
volume = engine.getProperty('volume')   # getting to know current volume level (min=0 and max=1)
print (volume)                          # printing current volume level
engine.setProperty('volume',1.0)    # setting up volume level  between 0 and 1
# engine.setProperty('volume', volume-0.25)


"""Changing voices"""
"""
print(type(engine.getProperty("voices")))  # <class 'list'>
for item in engine.getProperty("voices"):
    print(item)

<Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0
          name=Microsoft Huihui Desktop - Chinese (Simplified)
          languages=[]
          gender=None
          age=None>
<Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0
          name=Microsoft Zira Desktop - English (United States)
          languages=[]
          gender=None
          age=None>
"""
voices = engine.getProperty('voices')       # getting details of current voice, voices为列表

for voice in voices:                        # voice <class 'pyttsx3.voice.Voice'>
    engine.setProperty('voice', voice.id)
    engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()  # say后面要接runAndWait()
# runAndWait()在处理所有当前排队的命令时阻塞。适当地调用引擎通知的回调。当在此调用之前排队的所有命令都从队列中清空时返回

engine.setProperty('voice', voices[0].id)  # voices[0]为类对象, voices[0].id 类属性id, 0-中文,1-英文
# engine.setProperty('voice', r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0')


"""say(text : unicode, name : string) 将命令排队以说出话语。根据队列中此命令之前设置的属性输出语音"""
engine.say("我会说中文了,开心,开心")
engine.say('My current speaking rate is ' + str(rate))
engine.say('My current speaking volume is ' + str(volume))
engine.runAndWait()
engine.stop() # Stops 停止当前话语并清除命令队列。

"""Saving Voice to a file"""
# On linux make sure that 'espeak' and 'ffmpeg' are installed
engine.save_to_file('Hello World', 'test.mp3')
engine.runAndWait()


"""Saving Voice to a file by reading a txt file"""
with open("test.txt", 'r') as f:
    text = f.readlines()
    engine.save_to_file(text, 'name.mp3')
    engine.runAndWait() # Donot forget to add this line     


"""Running a driver event loop"""
def onStart(name):
    print('starting', name)
def onWord(name, location, length):
    print('word', name, location, length)
def onEnd(name, completed):
    print('finishing', name, completed)
    if name == 'fox':
        engine.say('What a lazy dog!', 'dog')
    elif name == 'dog':
        engine.endLoop()
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop()

win32com

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# https://www.geeksforgeeks.org/convert-text-speech-python-using-win32com-client/
# Python program to convert text to speech

# import the required module from text to speech conversion
import win32com.client

# Calling the Disptach method of the module which
# interact with Microsoft Speech SDK to speak
# the given input from the keyboard
speaker = win32com.client.Dispatch("SAPI.SpVoice")

while True:
    print("Enter the word you want to speak it out by computer")
    s = input()
    speaker.Speak(s)
# To stop the program press CTRL + Z

# ------------------------------------------------------------------
# https://www.programmersought.com/article/75583817444/
# Install pywin32, use com, refer to MS
import win32com.client as client

fileStream = client.Dispatch("SAPI.SpFileStream")
fileStream.Open('d:\\t.wav', 3, False)
spVoice = client.Dispatch("SAPI.SpVoice")
spVoice.AudioOutputStream = fileStream
spVoice.speak ('You have a new work order, please process it in time!')
fileStream.Close()

评论

此博客中的热门博文

学习地址

清华大学计算机系课程攻略 https://github.com/PKUanonym/REKCARC-TSC-UHT 浙江大学课程攻略共享计划 https://github.com/QSCTech/zju-icicles https://home.unicode.org/ 世界上的每个人都应该能够在手机和电脑上使用自己的语言。 http://codecanyon.net   初次看到这个网站,小伙伴们表示都惊呆了。原来代码也可以放在网上卖的?!! 很多coder上传了各种代码,每个代码都明码标价。看了下销售排行,有的19刀的卖了3万多份,额di神啊。可以看到代码的演示效果,真的很漂亮。代码以php、wordpress主题、Javascript、css为主,偏前台。 https://www.lintcode.com/ 算法学习网站,上去每天刷两道算法题,走遍天下都不怕。 https://www.codecademy.com/ 包含在线编程练习和课程视频 https://www.reddit.com/ 包含有趣的编程挑战题,即使不会写,也可以查看他人的解决方法。 https://ideone.com/ 在线编译器,可运行,可查看代码示例。 http://it-ebooks.info/ 大型电子图书馆,可即时免费下载书籍。 刷题 https://github.com/jackfrued/Python-100-Days https://github.com/kenwoodjw/python_interview_question 面试问题 https://github.com/kenwoodjw/python_interview_question https://www.journaldev.com/15490/python-interview-questions#python-interpreter HTTP 身份验证 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication RESTful 架构详解 https://www.runoob.com/w3cnote/restful-architecture.html https://www.rosettacode.org/wiki/Rosetta_C...

PDF处理

虚拟pdf打印机 pdfFactory  https://fineprint.com PDFCreator  https://www.pdfforge.org 开源 cutepdf https://www.cutepdf.com/index.htm Doro PDF Writer http://www.the-sz.com/products/doro PdfScribe  https://github.com/stchan/PdfScribe/releases pdf阅读器 Sumatra PDF https://www.sumatrapdfreader.org/ 为什么 Python 用于 PDF 处理  如您所知,PDF 处理属于文本分析。 大多数文本分析库或框架仅使用 Python 设计。 这为文本分析提供了优势。 还有一件事,您永远无法在现有的机器学习或自然语言处理框架中直接处理 pdf。 除非他们为此证明了显式接口。 我们必须先将pdf转换为文本。 我们可以使用下述任何库轻松实现这一点。 在线转换pdf Sejda https://www.sejda.com/pdf-editor 每个文档 200 页的免费限制 https://www.pdf2go.com/ https://tools.pdfforge.org/extract-text PDF24 Tools https://tools.pdf24.org/zh/ 免费且易于使用的在线PDF工具 FreeOCR http://www.paperfile.net/ 适用于Windows的免费光学字符识别软件,支持大多数Twain扫描仪的扫描,还可以打开大多数扫描的PDF和多页Tiff图像以及流行的图像文件格式,FreeOCR输出纯文本,可以直接导出为Microsoft Word格式。 不支持中文 wkhtmltopdf 和 wkhtmltoimage 是使用 QT Webkit 渲染引擎将 HTML 渲染为 PDF 和各种图像格式的命令行工具。这些完全“无头”运行,不需要显示或显示服务。 https://wkhtmltopdf.org/ django-wkhtmltopdf 允许 Django 站点输出动态 PDF。它利用 wkhtmltopdf 库,允许您使用您知道...

安卓 之 apk下载、ADB、 scrcpy

Apk下载 下载离线安装apk https://www.apkmirror.com/ 免费和安全的Android APK下载 https://apkpure.com/ 被暴雷,有植入 https://apps.evozi.com/apk-downloader/ 可以将Google Play( https://play.google.com )中的apk文件所在网址直接下载到台式机和设备上 https://f-droid.org/zh_Hans/ F-Droid 是一个 Android 平台上 FOSS(Free and Open Source Software,自由开源软件)的目录,并提供下载安装支持。使用客户端可以更轻松地浏览、安装及跟进设备上的应用更新。 https://gitlab.com/AuroraOSS/AuroraStore Aurora商店 是Google Play商店的非官方FOSS客户,设计典雅。 Aurora商店不仅下载,更新和搜索Play商店等应用 https://github.com/OpenTracksApp/OpenTracks OpenTracks是一款运动跟踪应用程序,完全尊重您的隐私。 Tasker https://tasker.joaoapps.com/ 是一款适用于Android的应用程序,它可以根据用户定义的配置文件中的上下文、可点击或定时的主屏幕小部件来执行任务。它无需root或特殊的主屏幕就能控制Android设备。 AsciiCam AsciiCam可以从您的相机指向的任何位置实时生成ASCII图像。选择黑白,原色或全彩,拍照,并将其作为图像或HTML共享。您还可以在库中创建ASCII版本的图片,并且每次使用标准相机应用程序拍摄照片时,也可以选择自动生成ASCII版本。 AsciiCam是完全免费和开源的。 Apk1安装器 优化微信apk文件接收体验。 微信收到apk文件会加 ".1" 后缀导致打不开,必须自己手动找到文件重命名去掉后缀。 使用本安装器就可以在微信内,潇洒地点击直接打开。甚至可以在安装器内浏览apk1文件历史接收记录。 ADB ADB全名是 Android Debug Bridge,是开发或使用Android时很常用的工具。可以从电脑通过USB连线到Android手机上 https:...