这是我的Python代码:
import pyttsx3
engine = pyttsx3.init(driverName='sapi5')
f = open("tanjil.txt", 'r')
theText = f.read()
f.close()
engine.say(theText)
engine.runAndWait()
我无法将文件保存为音频文件。
截至 2019 年 7 月 14 日,我可以使用 pyttsx3 库保存到文件(无需使用其他库或互联网连接)。
它似乎没有被记录,但在 github 中查看“engine.py”中 Engine 类的源代码(https://github.com/nateshmbhat/pyttsx3/blob/master/pyttsx3/engine. py),我找到了一个“save_to_file”函数:
def save_to_file(self, text, filename, name=None):
'''
Adds an utterance to speak to the event queue.
@param text: Text to sepak
@type text: unicode
@param filename: the name of file to save.
@param name: Name to associate with this utterance. Included in
notifications about this utterance.
@type name: str
'''
self.proxy.save_to_file(text, filename, name)
我可以这样使用它:
engine.save_to_file('the text I want to save as audio', path_to_save)
不确定格式 - 这是一些原始音频格式(我猜它可能类似于 aiff) - 但我可以在音频播放器中播放它。
如果安装 pydub: https://pypi.org/project/pydub/
然后您可以轻松地将其转换为mp3,例如:
from pydub import AudioSegment
AudioSegment.from_file(path_to_save).export('converted.mp3', format="mp3")
import pyttsx3
engine = pyttsx3.init("sapi5")
voices = engine.getProperty("voices")[0]
engine.setProperty('voice', voices)
text = 'Your Text'
engine.save_to_file(text, 'name.mp3')
engine.runAndWait() # don't forget to use this line
我尝试过@Brian 的解决方案,但它对我不起作用。
我搜索了一下,不知道如何将语音保存到 pyttx3 中的 mp3,但我找到了另一个没有 pyttx3 的解决方案。
它可以获取.txt文件并直接输出.wav文件,
def txt_zu_wav(eingabe, ausgabe, text_aus_datei = True, geschwindigkeit = 2, Stimmenname = "Zira"):
from comtypes.client import CreateObject
engine = CreateObject("SAPI.SpVoice")
engine.rate = geschwindigkeit # von -10 bis 10
for stimme in engine.GetVoices():
if stimme.GetDescription().find(Stimmenname) >= 0:
engine.Voice = stimme
break
else:
print("Fehler Stimme nicht gefunden -> Standard wird benutzt")
if text_aus_datei:
datei = open(eingabe, 'r')
text = datei.read()
datei.close()
else:
text = eingabe
stream = CreateObject("SAPI.SpFileStream")
from comtypes.gen import SpeechLib
stream.Open(ausgabe, SpeechLib.SSFMCreateForWrite)
engine.AudioOutputStream = stream
engine.speak(text)
stream.Close()
txt_zu_wav("test.txt", "test_1.wav")
txt_zu_wav("It also works with a string instead of a file path", "test_2.wav", False)
这是在 Windows 10 上使用 Python 3.7.4 进行测试的。
尝试以下代码片段将文本转换为音频并将其另存为 mp3 文件。
import pyttsx3
from pydub import AudioSegment
# read text content from a file
f = open("tanjil.txt", 'r')
theText = f.read()
f.close()
# create audio file
engine = pyttsx3.init('sapi5')
engine.save_to_file(theText, 'test.mp3') # raw audio file
engine.runAndWait()
AudioSegment.from_file('test.mp3').export('test.mp3', format="mp3") # audio file in mp3 format
NB:
pyttsx3
save_to_file()
方法创建一个原始音频文件,即使我们能够在媒体播放器中播放它,它对于其他应用程序使用也没有用处。 pydub
是一个有用的包,可将原始音频转换为特定格式。