浮叶蓝空的博客
分享学习心得,记录学习笔记
文章:
84
访问:
525914
登录
关于
首页
今天是:
2025年09月09日 星期二
类别
PHP(39)
其他笔记(20)
Java(1)
C++(17)
mysql(2)
JavaScript(4)
近期文章
Linux下Cmake引用第三方静态库示例
Linux下使用Cmake构建静态库示例
Ubuntu设置自动挂载硬盘,挂载U盘
压力测试工具Apache JMeter基本使用
使用PHP脚本借助FFmpeg一键合并视频
Shell中的>、1>、2>、2>&1、&>详解
PHP开启多进程实现异步非阻塞并行执行任务
博主推荐
PHP实现文件下载接口
Qt读写注册表,C++读写注册表
PHP动态修改配置文件,存储为文件
MySql常用语法
Powershell远程连接
PHP从字符串中获取需要的内容部分
封装PHP的HTTP请求
用windows的语音接口封装一个C++库
fuyelk
2021年03月28日
2920
> 简述:用windows的语音接口封装一个C++库 开发工具:Visual Studio 2019 ### 1.创建新项目 #### 选项: 1. 语言:C++ 2. 平台:Windows 3. 项目类型:库 4. 选择:静态库 [](https://www.milinger.com/a229.html "创建新项目") ### 2. 配置新项目 #### 选项:自定义即可,如命名为WinSpeaker [](https://www.milinger.com/a229.html "配置新项目") ### 3. 程序会自动创建一个名为pch的头文件和一个名为WinSpeaker的源文件 **1. 编辑头文件** [](https://www.milinger.com/a229.html "编辑头文件") **代码如下** ```cpp #include <sapi.h> // 导入语音头文件 #include <string> // 字符串 #include <thread> // 线程 #include<iostream> // 输入输出流 #pragma comment(lib, "sapi.lib") // 导入语音头文件库 using namespace std; extern ISpVoice* pVoice; // +---------------------------------------------- // | 语音接口 // | // | 示例: // | #include <thread> // | #include "speaker.h" // | thread th(speak, "Hello World"); // 创建线程 // | th.detach(); // 线程分离出去执行,不阻 // +---------------------------------------------- void speak(string word); ``` **2. 编辑源文件** [](https://www.milinger.com/a229.html "编辑头文件") **代码如下** ```cpp // Speaker.cpp : 定义静态库的函数。 // #include "pch.h" ISpVoice* pVoice = NULL; /** * 将string转换为wstring * @param string str 要转换的字符串 * @return */ std::wstring StringToWString(const std::string& str) { std::wstring wszStr; int nLength = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, NULL); wszStr.resize(nLength); LPWSTR lpwszStr = new wchar_t[nLength]; MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, lpwszStr, nLength); wszStr = lpwszStr; delete[] lpwszStr; return wszStr; } /** * 朗读 * @param string word * @return */ void speak(string word) { wstring str = StringToWString(word); LPCWSTR speakContent = str.c_str(); if (pVoice) { pVoice->Release(); pVoice = NULL; //释放com资源 ::CoUninitialize(); } //初始化COM接口 if (FAILED(::CoInitializeEx(NULL, COINIT_MULTITHREADED))) MessageBox(NULL, (LPCWSTR)L"COM接口初始化失败!", (LPCWSTR)L"提示", MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2); //获取SpVoice接口 HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice); if (SUCCEEDED(hr)) { pVoice->SetVolume((USHORT)100); //设置音量,范围是 0 -100 pVoice->SetRate(0); //设置速度,范围是 -10 - 10 hr = pVoice->Speak(speakContent, 0, NULL); if (pVoice) { pVoice->Release(); } pVoice = NULL; } //释放com资源 ::CoUninitialize(); } ``` ### *4.项目属性设置 **1.设置字符集** 属性->配置属性->高级->字符集->“使用Unicode字符集” [](https://www.milinger.com/a229.html "设置字符集") **2.设置运行库** 属性->配置属性->C/C++->代码生成->运行库->“多线程(/MT)”: MT:静态库,MD:动态库,MTD静态库DEBUG,MDD动态库DEBUG [](https://www.milinger.com/a229.html "设置运行库") ### 5.生成 将项目设置为Release x86然后使用快捷键:Ctrl + B,或 生成->生成,可以看到输出下方显示成功1个 [](https://www.milinger.com/a229.html "生成") ### 生成之后即可在release目录看到WinSpeaker.lib文件至此封装工作已完成 #### 使用类库见这个笔记[测试静态库](https://www.milinger.com/a230.html "测试静态库") #### 编译好的库在这里[fuyelkSpeaker.zip](https://www.milinger.com/upload/202103/fuyelkSpeaker.zip "fuyelkSpeaker.zip") ###
上一篇:
Qt发送http/https请求,解决https让人头疼的问题
下一篇:
测试封装C++Windows下的语音库,调用静态库测试
1人点赞
登录后评论
友情链接
doywb
2018-2025 Copyright© 米灵尔 浮叶蓝空
豫ICP备15007436号-1
豫公网安备 41152302000146号