• Golang实现Windows的TTS实现文本转语音


    TTS那些事

    TTS语音合成技术是实现人机语音通信关键技术之一。使电脑具有类似于人一样的说话能力,是当今时代信息产业的重要竞争市场。和语音识别ASR相比,语音合成的技术相对说来要成熟一些,是应用范围较广的技术。
    TTS看上去很高大上,但其实这不是什么新技术,当然如果想语言合成更加智能,人物语音更加丰富,语音感情丰富的话就另当别论了。
    最简单的TTS是使用Windows自带的语音系统,对于Python来说,语音合成可以直接使用第三库pyttsx3实现,而且用法简单,具体可以查看官方文档

    如果要使用Golang实现文字合成语音,目前还没有比较好的第三库,大多数是播放音频文件,例如htgo-ttsoto等等。

    如果要实现文字合成语音,可以使用Windows自带的语音功能,Golang通过底层调用即可实现,其原理和Python的pyttsx3相同。

    文本转语音

    实现Windows自带的语音功能,我们还是使用第三库go-ole实现,其说明可以参考上一篇文章:Golang 实现word和Excel处理
    万变不离其宗,想通过程序使用Windows功能,必须按照Windows开发文档去写代码,否则就无从下手,特别在网上资料比较缺乏的情况下,更让人着急。
    打开Windows文档,本次实现文字合成语音需要使用下图的属性和方法:
    在这里插入图片描述
    下面代码实现以下功能:设置语速、设置音量、文字播放语音、等待播放结束、保存wav文件,代码如下:

    package main
    
    import (
    	"github.com/go-ole/go-ole"
    	"github.com/go-ole/go-ole/oleutil"
    )
    
    func main() {
    	ole.CoInitialize(0)
    	unknown, _ := oleutil.CreateObject("SAPI.SpVoice")
    	voice, _ := unknown.QueryInterface(ole.IID_IDispatch)
    	saveFile, _ := oleutil.CreateObject("SAPI.SpFileStream")
    	ff, _ := saveFile.QueryInterface(ole.IID_IDispatch)
    	// 打开wav文件
    	oleutil.CallMethod(ff, "Open", "E:\\mygo\\aa.wav", 3, true)
    	// 设置voice的AudioOutputStream属性,必须是PutPropertyRef,如果是PutProperty就无法生效
    	oleutil.PutPropertyRef(voice, "AudioOutputStream", ff)
    	// 设置语速
    	oleutil.PutProperty(voice, "Rate", -3)
    	// 设置音量
    	oleutil.PutProperty(voice, "Volume", 200)
    	// 说话
    	oleutil.CallMethod(voice, "Speak", "您有新工单,请及时处理!")
    	oleutil.CallMethod(voice, "Speak", "bb", 1)
    	// 停止说话
    	//oleutil.CallMethod(voice, "Pause")
    	// 恢复说话
    	//oleutil.CallMethod(voice, "Resume")
    	// 等待结束
    	oleutil.CallMethod(voice, "WaitUntilDone", 1000000)
    	// 关闭文件
    	oleutil.CallMethod(ff, "Close")
    	ff.Release()
    	voice.Release()
    	ole.CoUninitialize()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    open方法是打开文件,其参数设置可以参考:open参数说明

    Speak方法是播放语音,其参数设置可以参考:Speak参数说明

    总结

    上述示例代码只是简单演示TTS基本功能,更多功能开发需要自己啃Windows官方文档了。

  • 相关阅读:
    每天一道算法题(五)——判断一组数字是否连续,出现连续数字的时候以‘-’输出
    MySQL表单的修改与删除
    Pandas常用操作命令(四)——数据切片、筛选
    Jenkins介绍与部署
    vue的vantUI引入外部图标
    jenkins学习-安装配置
    软件项目管理判断题
    滤波算法_扩展卡尔曼滤波(EKF, Extended Kalman filter)_全网最详细的数学推导_Part1
    牛客NC314 体育课测验(一)【中等 图,BFS,拓扑排序 Java,Go、PHP】
    视频转高清gif动态图片(Python代码实现)
  • 原文地址:https://blog.csdn.net/HuangZhang_123/article/details/126485195