智能语音处理+1.4语音合成之输出英文音频文件(100%教会)
欢迎来到智能语音处理系列第四篇文章,后面只剩一篇文章了,就可以完结了.
你如果着手与本节的内容,请你先拥有之前的基础:
第一篇:智能语音处理+1.1下载需要的库(100%实现)-CSDN博客
第二篇:智能语音识别+1.2用SAPI实现文本转语音(100%教会)-CSDN博客
第三篇:智能语音处理+1.3用SpeechLib实现文本转语音(100%教会)-CSDN博客
有了 前面三篇的基础,咱们可以直接加快速度了.
简单介绍代码结构
首先,要导入库和方法 + 并实例化engine类和stream类(什么意思?前面的几篇文章里面有)
第二步骤,定义两个文件,一个是要读取的文本文件,还有一个是输出的音频文件.
第三步骤,调用方法,打开文本文件,读取,读取完后,放入speak流(让文本变成语音)
完整的程序及代码注释
ok,废话不多说,你们去运行代码吧,报错了,就很有生活了.......
# 导入COM组件操作库:comtypes.client用于创建COM对象,comtypes.gen包含预生成的类型库接口
from comtypes.client import CreateObject
from comtypes.gen import SpeechLib # 此模块包含Windows语音API的常量定义# 创建语音合成引擎实例(SAPI.SpVoice是Windows语音接口的COM对象)
# 该对象提供文本转语音的核心功能,如调整语速、音量、选择发音人等
engine = CreateObject("SAPI.SpVoice")# 创建音频文件流对象(SAPI.SpFileStream是用于文件输出的COM对象)
# 此对象负责将生成的语音数据写入磁盘文件
stream = CreateObject('SAPI.SpFileStream')# 定义输入文件路径(需确保demo.txt存在且为UTF-8编码的文本文件)
infile = 'demo.txt'
# 定义输出音频文件路径(默认生成WAV格式,若需MP3需系统安装编码器)
outfile = 'demo_audio.wav'# 以写入模式打开音频文件流(SpeechLib.SSFMCreateForWrite表示创建新文件)
# 参数说明:
# - outfile: 输出文件路径
# - SpeechLib.SSFMCreateForWrite: 文件模式常量(0x3),等效于"wb"模式
# 若文件已存在,此操作会覆盖原有内容
stream.Open(outfile, SpeechLib.SSFMCreateForWrite)# 将语音引擎的输出重定向到文件流(默认输出到系统扬声器)
# 此赋值操作后,所有语音输出将写入指定文件而非播放声音
engine.AudioOutputStream = stream# 打开文本文件(注意:此处未处理文件不存在或编码错误的异常)
# 建议使用with语句自动管理资源:with open(infile, 'r', encoding='utf-8') as f:
f = open(infile, 'r', encoding='utf-8')
# 读取全部文本内容(适合小文件,大文件建议分段读取)
theText = f.read()
# 显式关闭文件(若使用with语句可省略此步骤)
f.close()# 执行语音合成操作(注意方法名为Speak而非speak,严格区分大小写)
# 第二个参数SpeechLib.SPFD_Default表示同步生成(默认值为0)
# 等价于:engine.Speak(theText, 0)
engine.Speak(theText) # 此处隐含使用SpeechLib.SPFD_Default标志# 关闭音频文件流(确保缓冲区数据写入磁盘)
# 注意:必须先关闭流再释放对象,否则可能导致文件损坏
stream.Close()# 最佳实践:显式释放COM对象(虽然Python垃圾回收会自动处理,但提前释放更安全)
del engine
del stream