木马编程DIY之文本语音

本文介绍了如何使用Microsoft Speech SDK 5.1创建一个简单的文本转语音(TTS)系统。该系统包括服务端和客户端两部分,可在不同计算机间实现文本消息的语音播放功能。文章详细解释了开发过程和技术要点。
部署运行你感兴趣的模型镜像
木马编程DIY之文本语音
冷风 德州科技职业学院
在黑防的第2期上天涯衰草(是电脑报上黑客营的老大吧呵呵)对“寿鼠”远程控制程序进行了介绍,其中有一个
功能就是“跟对方讲英语”感觉很有意思,就试着自己做了一个发现也不是太难,效果如图1所示
程序在VC6.0+WIN2000下编写分为服务端(SDK)和客户端两个文件,在其它机器的运行服务端后,就可以通过客户端让它“说话”了,如果目标
地址为空的话,会在自己的电脑上朗读。
关于文本语音
寿鼠的朗读功能就是通过文本语音实现的,文本语音又称为TTS(Text-to-Speech)它的作用就是把文本转化为语音,如果我们想
开发这种程序,需要使用软提供的软件开发包Microsoft Speech SDK,目前使用最为广泛的版本是5.1,这个包大小在65M左右在
天空,军华都可以下载到,它本身带有十分详细的开发资料,和可执行程序如图2图3所示,参考帮助文档提供的例子我们可以
很方便的做出自己的程序了。
准备工作
在开始前应该把Microsoft Speech SDK安装好,装好后进入安装目录把INCLUDE和LIB目录中的头文件与库文件复制到VC的开发目录里面
我这里是C:\Microsoft Visual Studio\VC98\Include跟LIB目录,当然你也可以在VC中设置路径(我喜欢直接复制过去)现在就可
以编写程序了
服务端编写
服务端运行后就一直在5555端口监听,收到数据就读出来,实现代码如下
#include<sapi.h>//TTS所需要的头文件
#include<windows.h>
#include
<winsock.h>
#pragmacomment(lib,"ws2_32")//加载库函数

constintbuffer_len=2048;

intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{

WSADATAwsadata;
SOCKETserver;
SOCKETclient;
SOCKADDR_INserveraddr;
SOCKADDR_INclientaddr;
intport=5555;
charbuffer[buffer_len];
WCHARwbuffer[buffer_len];

memset(wbuffer,
0,sizeof(WCHAR)*buffer_len);
memset(buffer,
0,sizeof(char)*buffer_len);


WORDver
=MAKEWORD(2,2);//判断winsock版本
WSAStartup(ver,&wsadata);//初始SOCKET

server
=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

serveraddr.sin_family
=AF_INET;
serveraddr.sin_port
=htons(port);
serveraddr.sin_addr.S_un.S_addr
=htonl(INADDR_ANY);

bind(server,(SOCKADDR
*)&serveraddr,sizeof(serveraddr));

listen(server,
5);

intlen=sizeof(clientaddr);

while(1)//循环接受连接
{
client
=accept(server,(sockaddr*)&clientaddr,&len);

while(1)//循环接受数据
{
if(recv(client,buffer,buffer_len,0)!=0)//有数据则播放
{
memset(wbuffer,
0,sizeof(WCHAR)*buffer_len);
//必须先转换成宽字符
MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
//character-typeoptions
buffer,//addressofstringtomap
buffer_len,//numberofbytesinstring
wbuffer,//addressofwide-characterbuffer
buffer_len//sizeofbuffer
);


memset(buffer,
0,sizeof(char)*buffer_len);

ISpVoice
*pVoice=NULL;

if(FAILED(CoInitialize(NULL)))//处始化COM接口

{
MessageBox(NULL,
"ERROR","ErrortointiliazeCOM",0);
}
//获取ISpVoice接口
HRESULThr=CoCreateInstance(CLSID_SpVoice,NULL,CLSCTX_ALL,IID_ISpVoice,(void**)&pVoice);

if(SUCCEEDED(hr))
{
hr
=pVoice->Speak(wbuffer,0,NULL);//开始朗读
pVoice->Release();//完成后释放声音对象
pVoice=NULL;
}

CoUninitialize();
//释放
}
else
break;//接受数据为0退出
}
}

closesocket(server);
closesocket(client);
WSACleanup();

return0;
}
实现代码挺简单的,需要注意的是在
pVoice->Speak(const WCHAR *pwcs,DWORD dwFlags,ULONG *pulStreamNumber);中pwcs是WCHAR类型的也就是Unicode编码
所以从网络收到数据后要进行Unicode转换,编码转换可以用MultiByteToWideChar API来实现,这是一个很好用的API看看上文
的代码就会用了。
客户端实现
客户端实现同样很简单,所以我就不再浪费感情了呵呵
voidCMyDlg::OnOK()
...{
UpdateData();

if(m_addr.IsEmpty())//地址为空则本地播放
...{
//实现代码与服务端相差无几
}

else//把数据发送至目标
...{
WSADATAwsadata;
SOCKETclient;
SOCKADDR_INserveraddr;
intport=5555;

WORDver
=MAKEWORD(2,2);//判断winsock版本
WSAStartup(ver,&wsadata);//初始SOCKET

client
=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

serveraddr.sin_family
=AF_INET;
serveraddr.sin_port
=htons(port);
serveraddr.sin_addr.S_un.S_addr
=inet_addr(m_addr.LockBuffer());//m_addr为接受地址的文本控件

connect(client,(SOCKADDR
*)&serveraddr,sizeof(serveraddr));

send(client,m_text.LockBuffer(),m_text.GetLength(),
0);//m_text为接受内容的文本控件

closesocket(client);
WSACleanup();
}

}

需要的话,还可以扩充一下,让它读中文日文什么的,不过你还得专门去下载发声补丁......而且也可以指定男音或女音
朗读不过我感觉女音比较好听嘿嘿,本文实现的功能比较简单,如果想编写功能强大的程序还是请参考Microsoft Speech SDK
的帮助文档,

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

【最优潮流】直流最优潮流(OPF)课设(Matlab代码实现)内容概要:本文档主要围绕“直流最优潮流(OPF)课设”的Matlab代码实现展开,属于电力系统优化领域的教学与科研实践内容。文档介绍了通过Matlab进行电力系统最优潮流计算的基本原理与编程实现方法,重点聚焦于直流最优潮流模型的构建与求解过程,适用于课程设计或科研入门实践。文中提及使用YALMIP等优化工具包进行建模,并提供了相关资源下载链接,便于读者复现与学习。此外,文档还列举了大量与电力系统、智能优化算法、机器学习、路径规划等相关的Matlab仿真案例,体现出其服务于科研仿真辅导的综合性平台性质。; 适合人群:电气工程、自动化、电力系统及相关专业的本科生、研究生,以及从事电力系统优化、智能算法应用研究的科研人员。; 使用场景及目标:①掌握直流最优潮流的基本原理与Matlab实现方法;②完成课程设计或科研项目中的电力系统优化任务;③借助提供的丰富案例资源,拓展在智能优化、状态估计、微电网调度等方向的研究思路与技术手段。; 阅读建议:建议读者结合文档中提供的网盘资源,下载完整代码与工具包,边学习理论边动手实践。重点关注YALMIP工具的使用方法,并通过复现文中提到的多个案例,加深对电力系统优化问题建模与求解的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值