如何使用python pyttsx3和sapi5将文本文件转换为mp3文件?

时间:2018-12-26 17:21:06

标签: python

这是我的python代码。

import pyttsx3;
engine = pyttsx3.init(driverName='sapi5')
infile = "tanjil.txt"
f = open(infile, 'r')
theText = f.read()
f.close()
engine.say(theText)
engine.runAndWait()

我无法将文件保存为音频文件

4 个答案:

答案 0 :(得分:1)

我尝试了@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进行了测试。

答案 1 :(得分:0)

安装gTTs模块

首先,安装 gTT 模块。 gTTs 是一个基本的cmd实用程序,可将您的文本输出(语音)保存到mp3。

不确定是使用python3还是python2,但请使用以下命令进行安装:

pip3 install gtts

or(python2)

pip install gtts

将输出文件另存为mp3

安装gTT后,您可以使用以下代码保存输出:

import pyttsx3
from gtts import gTTS

engine = pyttsx3.init(driverName='sapi5')
infile = "tanjil.txt"
f = open(infile, 'r')
theText = f.read()
f.close()

#Saving part starts from here 
tts = gTTS(text=theText, lang='en')
tts.save("saved_file.mp3")
print("File saved!")

请记住,您保存的文件将在当前工作目录中创建。

答案 2 :(得分:0)

截至2019年7月14日,我可以使用pyttsx3库保存文件(无需使用其他库或互联网连接)。

它似乎没有记录,但是在github中“ engine.py”(https://github.com/nateshmbhat/pyttsx3/blob/master/pyttsx3/engine.py)中Engine类的源代码中,我找到了“ save_to_file”函数:< / p>

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

答案 3 :(得分:0)

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