资料
众所周知,由于阅读障碍和其他学习障碍,有些人难以阅读大量文字。 有些人具有基本的文学水平。 他们经常尝试浏览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
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.htmleSpeak 是一款小巧的开源软件语音合成器,可以将语音输出生成为 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.
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() |
评论
发表评论