跳至主要内容

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()

评论

此博客中的热门博文

Mongo 入门

https://pymongo.readthedocs.io/en/stable/tutorial.html https://www.mongodb.com/languages/python https://zhuanlan.zhihu.com/p/51171906 https://www.runoob.com/python3/python-mongodb.html https://blog.baoshuo.ren/post/luogu-spider/ https://hub.docker.com/_/mongo 安装 MongoDB $ docker search mongo 启动一个mongo服务器实例 $ docker run --name some-mongo -d mongo:tag some-mongo是您要分配给容器的名称,tag是指定您想要的 MongoDB 版本的标签 MongoDB 的默认数据目录路径是/data/db 如下: $ docker run -it -v mongodata:/data/db -p 27017:27017 --name mongodb --restart unless-stopped -d mongo 你应该让 MongoDB 在端口 27017 上运行,并且可以通过localhostWindows 和 Ubuntu 20.04 上的URL访问 http://localhost:27017/ -p 是 HOST_PORT:CLIENT_PORT  -P 随机端口 -p 27017:27017 :将容器的27017 端口映射到主机的27017 端口 -v mongodata:/data/db :将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录 从另一个 Docker 容器连接到 MongoDB 镜像中的 MongoDB 服务器侦听标准 MongoDB 端口27017,因此通过 Docker 网络连接将与连接到远程mongod. 以下示例启动另一个 MongoDB 容器实例,并mongo针对上述示例中的原始 MongoDB 容器运行命令行客户端,从而允许您针对数据库实例执行 MongoDB 语句: $ docker run -it --network some-network --...

端口映射 公网访问内网

https://portforward.com/ Holer 通过安全隧道将位于NAT和防火墙之后的本地服务器暴露给公共Internet。 Holer是一个将原型中的应用映射到公网访问的端口映射软件,支持转发基于TCP协议的报文 https://github.com/wisdom-projects/holer 方式一:使用(公告)的holer映射或者开通holer服务,通过holer客户端软件经 holer服务器实现公网访问。 公开的holer映射详情如下: 访问密钥 访问域名 公网地址 本地地址 使用场景 HOLER_CLIENT-2F8D8B78B3C2A0AE holer65530.wdom.net holer.org:65530 127.0.0.1:8080 网页 HOLER_CLIENT-3C07CDFD1BF99BF2 holer65531.wdom.net holer.org:65531 127.0.0.1:8088 网页 HOLER_CLIENT-2A623FCB6E2A7D1D holer65532.wdom.net holer.org:65532 127.0.0.1:80 网页 HOLER_CLIENT-AF3E6391525F70E4 不适用 holer.org:65533 127.0.0.1:3389 远程桌面 HOLER_CLIENT-822404317F9D8ADD 不适用 holer.org:65534 127.0.0.1:22 SSH协议 HOLER_CLIENT-27DD1389DF1D4DBC 不适用 holer.org:65535 127.0.0.1:3306 数据库 使用Java版本的holer客户端 ①java 1.7或者更高版本 ②下载holer-client.zip 修改配置文件C:\holer-client\conf\holer.conf HOLER_ACCESS_KEY=HOLER_CLIENT-2A623FCB6E2A7D1D HOLER_SERVER_HOST=holer65532.wdom.net ③建议先双击运行C:\holer-client\bin\shutdown.bat,再双击运行C:\holer-client\bin\startup.bat...

安装和卸载软件(msi\exe)

如何判断一个软件是64位的还是32位的? 情况1、 未安装--右键安装程序查看属性,兼容性,勾选兼容模式查看最低适配是vista的是64位,反之32位, 不太准确 情况2、 已安装--运行软件,64位操作系统打开任务管理器看进程后缀名,带*32就是32位,反之64位 https://www.joci.net/xxbk/126251/ FileMon 和 Regmon 不再可供下载。从Windows 2000 SP4,Windows XP SP2,Windows Server 2003 SP1和Windows Vista开始的Windows版本上,它们已被 Process Monitor 取代 https://adamtheautomator.com/procmon/ Process Monitor 是Windows的高级监视工具,它显示实时文件系统,注册表和进程/线程活动。 它结合了两个旧的Sysinternals实用程序 Filemon 和  Regmon的功能 ,并添加了广泛的增强功能列表,包括丰富的和非破坏性的过滤,全面的事件属性(例如会话ID和用户名),可靠的过程信息,带有集成符号的完整线程堆栈支持每个操作,同时记录到文件等。 它独特的强大功能将使Process Monitor成为您的系统故障排除和恶意软件搜索工具包中的核心实用程序。 https://wikileaks.org/ciav7p1/cms/page_42991626.html HKLM\Software\Microsoft\Cryptography\MachineGuid Machine GUID/Cryptography GUID---该密钥通常用作机器的唯一标识符。它也已用于将两台计算机链接在一起-在某些情况下,计算机GUID是与设备(MP3播放器等)一起传递的。 Machine GUID不是唯一 https://docs.microsoft.com/zh-cn/windows/win32/properties/props-system-identity-uniqueid?redirectedfrom=MSDN UniqueID才是唯一 注册表 是存储系统和应用程序的设置信息 打开注册表的方式很简单:cmd中输入regedit 卸载路径只有一个 已安装32位的程序,如果是系统是32位...