如何使用Python的pyttsx3将文本语音直接转换为WAV文件?
使用pyttsx3实现文本转语音并保存为WAV文件
当然可以实现,下面是两种实用的方案:
方案1:Windows平台直接生成(依赖系统SAPI5)
如果你的运行环境是Windows,无需额外依赖录制工具,直接调用系统语音合成接口即可生成WAV文件:
import win32com.client def text_to_wav(text, output_path): voice_engine = win32com.client.Dispatch("SAPI.SpVoice") file_stream = win32com.client.Dispatch("SAPI.SpFileStream") # 以写入模式打开文件流 file_stream.Open(output_path, 3) voice_engine.AudioOutputStream = file_stream voice_engine.Speak(text) file_stream.Close() # 调用示例 text_to_wav("你好,这是生成的语音文件", "output.wav")
方案2:跨平台录制保存(结合PyAudio)
如果需要跨Windows、Linux、macOS使用,可以通过PyAudio捕获pyttsx3的音频输出并保存为WAV文件:
首先安装所需依赖:
pip install pyttsx3 pyaudio wave
然后使用以下代码:
import pyttsx3 import pyaudio import wave import threading import time def tts_to_wav(text, output_path): # 初始化pyttsx3引擎 engine = pyttsx3.init() # 可自定义语音参数,例如: # engine.setProperty('rate', 150) # 语速 # engine.setProperty('volume', 0.8) # 音量 # 音频参数配置 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 22050 CHUNK = 1024 audio = pyaudio.PyAudio() # 打开音频录制流 stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] # 单独线程运行语音合成,避免阻塞录制 def speak_task(): engine.say(text) engine.runAndWait() threading.Thread(target=speak_task).start() # 等待引擎启动后开始录制 time.sleep(0.5) while engine._inLoop: data = stream.read(CHUNK) frames.append(data) # 停止录制并释放资源 stream.stop_stream() stream.close() audio.terminate() # 写入WAV文件 with wave.open(output_path, 'wb') as wf: wf.setnchannels(CHANNELS) wf.setsampwidth(audio.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) # 调用示例 tts_to_wav("这是跨平台生成的语音文件", "cross_platform_output.wav")
注意事项
- 方案1仅适用于Windows,依赖系统自带的SAPI5引擎,无需额外安装第三方库。
- 方案2为跨平台方案,Linux/macOS环境下需先安装portaudio系统依赖(如Ubuntu执行
sudo apt-get install portaudio19-dev)才能正常安装PyAudio。 - 可以通过
engine.setProperty()调整pyttsx3的语速、音量、语音类型等参数,再生成符合需求的WAV文件。
内容的提问来源于stack exchange,提问作者admdev
相关产品推荐
相关产品推荐

