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()
}

总结

上述示例代码只是简单演示TTS基本功能,更多功能开发需要自己啃Windows官方文档了。
更多内容请关注公众号
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xy-Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值