如何将pyttsx3的结果保存为MP3或WAV文件?


pyttsx3是一个Python库,它提供了一个简单的接口来使用文本转语音(TTS)合成。文本转语音(TTS)将书面文本转换为语音。它主要用于根据文本生成语音并自定义语音音频的各个方面。pyttsx3库生成的语音输出通常保存为MP3或WAV等常用格式的音频文件。本文将讨论如何将pyttsx3的结果保存为MP3或WAV文件。

算法

将pyttsx3结果保存为mp3或WAV文件的通用算法如下:

  • 导入所需的库:pyttsx3、time和os。

  • 使用pyttsx3.init()初始化pyttsx3引擎。

  • 使用engine.setProperty(property_name, value)设置任何所需的TTS属性。此步骤是可选的。

  • 使用engine.say(text)提供TTS合成的文本输入。

  • 指定临时WAV文件的输出文件路径和名称。

  • 使用engine.save_to_file(text, output_path)将语音保存到临时WAV文件。

  • 运行TTS合成,并使用engine.runAndWait()等待其完成。

  • 使用ffmpeg等音频转换工具将临时WAV文件转换为MP3格式。使用os.system("ffmpeg −i input.wav output.mp3")执行转换。确保ffmpeg已安装并在系统的PATH中。

  • 最终合成的语音现在已保存为指定的MP3或WAV文件格式。

方法一:使用pydub库保存为MP3

pydub库简化了将pyttsx3结果保存为MP3格式的过程。只需几行代码,即可使用export()方法将临时WAV文件转换为MP3。它提供了一种方便的方法来处理音频文件,并提供处理不同格式的灵活性。

语法

audio.export(output_path, format="mp3")

这里,audio.export(output_path, format="mp3")与pydub库一起使用来导出音频文件。它指定输出路径和格式,在本例中,将音频保存为MP3文件。

示例

在下面的示例中,程序使用pyttsx3生成临时WAV文件,然后使用pydub的export()方法将其转换为MP3文件。合成的语音将保存为名为“output.mp3”的MP3文件。pydub库简化了将音频文件导出为不同格式(包括MP3)的过程。

from pydub import AudioSegment
audio = AudioSegment.from_wav("output.wav")
audio.export("output.mp3", format="mp3")

输出

上图显示output.mp3文件已成功保存为当前目录中的output.wav文件。(译者注:原文此处有误,应为成功保存为MP3文件)

方法二:使用wave模块保存为WAV

wave模块是一个内置的Python模块,允许您将pyttsx3结果保存为WAV格式。通过使用wave.open()函数,您可以设置WAV文件的必要参数并将音频帧写入其中。此方法提供了一种基本且直接的方法来处理Python中的WAV文件。

语法

audio_file.setparams(params)

这里,audio_file.setparams(params)与wave模块一起使用来设置WAV文件的参数,例如通道数、采样宽度、帧速率和压缩类型。

audio_file.writeframes(audio_data)

这里,语法audio_file.writeframes(audio_data)用于将音频帧(由audio_data变量表示)写入WAV文件。它根据指定参数将音频数据保存到文件中。

示例

在下面的示例中,程序使用wave模块将pyttsx3生成的WAV音频数据保存到WAV文件中。它打开临时WAV文件,设置输出文件参数(例如通道数、采样宽度、帧速率和压缩类型),并将音频帧写入名为“output_saved.wav”的输出文件。

import wave
audio = open("output.wav", 'rb').read()
params = (2, 2, 44100, 0, 'NONE', 'not compressed')
with wave.open("output_saved.wav", 'wb') as audio_file:
    audio_file.setparams(params)
    audio_file.writeframes(audio)

输出

上图显示output.mp3文件已转换为output_saved.wav文件,然后保存在mp3文件所在的当前目录中。(译者注:原文此处有误,应为直接保存为WAV文件)

方法三:使用soundfile库保存为WAV

soundfile库提供了一个全面的解决方案,用于将pyttsx3结果保存为WAV格式。它提供了一个高级接口来读取和写入各种格式的音频数据。通过使用write()函数,您可以轻松地将pyttsx3生成的音频数据保存到新的WAV文件中。

语法

soundfile.write(output_path, audio_data, sample_rate)

这里,soundfile.write(output_path, audio_data, sample_rate)与soundfile库一起使用来将音频数据保存到文件中。它使用给定的sample_rate将包含音频样本的audio_data数组写入output_path指定的文件。此语法提供了一种方便的方法,可以将音频数据保存到具有所需采样率和文件路径的WAV文件中。

示例

在下面的示例中,我们使用soundfile库从pyttsx3生成的临时WAV文件中读取音频数据和采样率。然后,它使用write()函数将音频数据保存到名为“output_saved.wav”的新WAV文件中。soundfile库提供了一种直接的方法来将音频数据保存到具有可自定义选项的WAV文件中。

import soundfile as sf
audio, sample_rate = sf.read("output.wav")
sf.write("output_saved.wav", audio, sample_rate)

输出

这里,mp3文件被转换为.wav文件,并以output_saved.wav文件的名称保存在mp3文件所在的同一目录中。(译者注:原文此处有误,应为直接保存为WAV文件)

结论

在本文中,我们讨论了如何通过将pyttsx3的结果保存为mp3或WAV文件来进行文本转语音转换。我们介绍了必要的步骤,从安装pyttsx3到初始化引擎、合成语音以及将输出保存到音频文件。通过遵循这些步骤,您可以利用pyttsx3的功能生成高质量的语音,并将其保存为所需的格式,以便在您的应用程序或项目中进一步使用。

更新于:2023年7月18日

2K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告