智能语音处理+1.3用SpeechLib实现文本转语音(100%教会)

        欢迎来到智能语音处理系列的第三篇文章(用SpeechLib实现文本转语音)

这是前两篇文章的地址:

        第一篇:智能语音处理+1.1下载需要的库(100%实现)-CSDN博客

        第二篇:智能语音识别+1.2用SAPI实现文本转语音(100%教会)-CSDN博客

不好意思啊,各位读者,没把握好力度,原本预设的3篇文章,预计会多出两章.

请大家见谅,

一.简单介绍使用的库

        comtypes 是另一个 Python 库,用于操作 Windows COM 对象,与 pywin32 类似,但实现方式不同。

        SpeechLib 是 comtypes 自动生成的类型库(Type Library)用于访问 Windows 语音接口(如语音合成或识别)

pip install comtypes

二.介绍导入的方法

CreateObject 的作用

    • 创建 COM 对象实例:类似 win32com 的 Dispatch,但 comtypes 更强调静态类型绑定​(需预先生成类型库)。
# CreateObject创建语音合成对象
from comtypes.client import CreateObject
# 创建语音合成引擎
voice = CreateObject("SAPI.SpVoice")
voice.Speak("Hello, world!")  # 朗读文本

        这代码,我没试过,你们可以试着运行一下.(这里只是想介绍作用而已,并非为了实现效果)

SpeechLib 的作用

  • 预生成的类型库comtypes 需要先通过 GetModule 生成 COM 组件的 Python 接口定义,才能使用具体接口(如 ISpVoice)。
from comtypes.client import GetModule
# 生成 SpeechLib 类型库(通常只需一次)
GetModule("SpeechLib.dll")  # 生成后可从 comtypes.gen 导入

         这代码,我也没试过,你们可以试着运行一下.(这里只是想介绍作用而已,并非为了实现效果)  

三.comtypes和win32对比

特性 comtypes win32com (pywin32)
类型绑定 静态类型(需生成类型库) 动态调度(无需预生成)
性能 更高(类型已知) 较低(动态解析)
接口支持 适合复杂接口(如自定义 COM 组件) 适合简单自动化(如 Office)
代码复杂度 较复杂(需生成类型库) 较简单

四.正式的来实现效果(使用SpeechLib技术)

        首先导入方法和库,并实例化engine类(调用语音转文本你的技术)和stream类(调用语音文件流的技术)

# 导入能调用复杂接口的方法CreateObject
from comtypes.client import CreateObject
# SpeechLib(此方法通过接口定义,才能使用具体的接口功能)
from comtypes.gen import SpeechLib
engine = CreateObject("SAPI.SpVoice")
stream = CreateObject('SAPI.SpFileStream')

五.完整程序及代码注释

        圆满结束,呜呼~

智能语音处理+1.3用SpeechLib实现文本转语音(100%教会)_第1张图片

# 导入必要的 COM 类型库和生成接口
from comtypes.client import CreateObject
from comtypes.gen import SpeechLib  # 使用预生成的 SpeechLib 类型库

# ----------------------------- 初始化 COM 对象 -----------------------------
# 创建语音合成引擎实例(使用 Windows 自带的 SAPI.SpVoice 接口)
engine = CreateObject("SAPI.SpVoice")
# 创建音频流对象(用于将语音输出到文件,接口为 SAPI.SpFileStream)
stream = CreateObject("SAPI.SpFileStream")

# ----------------------------- 文件路径配置 -----------------------------
# 指定要读取的文本文件路径(需要确保文件存在)
infile = 'demo.txt'
# 指定要输出的音频文件路径(格式通常为 .wav)
outfile = 'demo_audio.wav'

# ----------------------------- 配置音频输出流 -----------------------------
# 打开音频文件流,模式为写入(SpeechLib.SSFMCreateForWrite 表示创建新文件)
# SSFMCreateForWrite 是 SpeechLib 中定义的常量,值为 0x3(创建并写入)
stream.Open(outfile, SpeechLib.SSFMCreateForWrite)
# 将语音引擎的音频输出重定向到文件流(而不是默认的扬声器)
engine.AudioOutputStream = stream

# ----------------------------- 读取文本并合成语音 -----------------------------
# 打开文本文件并读取内容(假设文件编码为 utf-8)
with open(infile, 'r', encoding='utf-8') as f:
    text = f.read()

# 调用语音引擎合成语音并输出到文件流
# Speak 方法的第二个参数指定标志位(SpeechLib.SPFDFactory 表示默认行为)
engine.Speak(text, SpeechLib.SPFD_Default)  # SPFD_Default = 0

# ----------------------------- 清理资源 -----------------------------
# 关闭文件流(确保数据写入磁盘)
stream.Close()
# 释放 COM 对象(避免内存泄漏)
del engine
del stream

你可能感兴趣的:(智能语音处理,语音识别,人工智能,python,机器学习)