Using TTS in VS2005

本文分享了作者使用TTS技术让小程序发声的经验。主要内容包括:下载并配置TTSSDK5.1,解决编译过程中的问题,以及实现声音输出的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写了个小程序需要用TTS来发声,现把心得写下来。

下载TTS SDK5.1 然后设置lib和include的路径。

在程序中
#include <sapi.h>
#include <sphelper.h>

我用的是VS2005,在编译sphelper.h的时候发生了问题,有些地方需要改动。
   SPPHONEID* pphoneId = (SPPHONEID*)((WCHAR *)dsPhoneId);
   pphoneId += wcslen((const wchar_t *)pphoneId) + 1;
   const WCHAR * psz = (const WCHAR *)lParam;
   for (; *psz; psz++) {}

这样才能编译通过。

下面的代码放到一个Button事件里面就可以了。

 //SAPI voice
 ISpVoice * pVoice = NULL;
 //init COM
 if (FAILED(CoInitialize(NULL)))
 {
  MessageBox(_T("Error to intiliaze COM") );
  return FALSE;
 }
 //init SAPI
 HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL,CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
 IEnumSpObjectTokens* cpEnum;
 //Enumerate the available voices
 if(SUCCEEDED(hr))
  //hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);
  hr = SpEnumTokens(SPCAT_VOICES, L"Name=Microsoft Mary", NULL, &cpEnum);
 ISpObjectToken* tok;
 cpEnum->Item(0,&tok);//only need set Mary voic here
 pVoice->SetVoice(tok);
 ULONG ulCount;
 //Get the number of voices
 if(SUCCEEDED(hr))
  hr = cpEnum->GetCount(&ulCount);

 if( SUCCEEDED( hr ) )
 {  
  hr = pVoice->Speak(_T("Test"), 0, NULL);
  pVoice->Release();
  pVoice = NULL;
 }
 //release COM
 CoUninitialize();

### 部署 OpenAI TTS 模型或服务的方法 要在本地环境中部署类似于 OpenAI 的文本转语音(TTS)服务,可以考虑使用 **OpenAI-Edge-TTS** 工具。这是一个基于微软 Edge 在线 TTS 服务的解决方案,允许用户通过本地服务器生成高质量的语音文件[^1]。 以下是关于如何配置和运行此工具的关键要点: #### 1. 环境准备 为了成功部署该工具,需确保满足以下依赖条件: - Python 版本 >= 3.7。 - 安装必要的库,例如 `edge-tts` 和其他可能需要的支持包。 可以通过以下命令安装所需的 Python 库: ```bash pip install edge-tts ``` #### 2. 下载并设置 OpenAI-Edge-TTS 获取最新版本的 **OpenAI-Edge-TTS** 脚本可以从其 GitHub 存储库下载。克隆仓库到本地环境后,按照说明初始化项目结构。 启动脚本前,请确认已正确导入所需模块,并调整默认参数以适配您的需求。具体可参考如下代码片段作为起点: ```python import asyncio from edge_tts import Communicate, VoicesManager async def main(): voices = await VoicesManager.create() voice = [v for v in voices if v.Gender.lower() == 'male' and v.Locale.startswith('en')][0] communicate = Communicate("Your text here", voice.Name) await communicate.save("output.mp3") if __name__ == "__main__": asyncio.run(main()) ``` 上述代码展示了基本功能——指定输入文字以及目标发音人的性别和地区属性,最终保存为 MP3 文件。 #### 3. 扩展至 Web 接口形式的服务端点 如果希望进一步增强可用性,则可通过 Flask 或 FastAPI 架构创建 RESTful API 来封装调用逻辑。这样可以让更多客户端轻松接入这个自定义开发出来的 TTS 功能接口。 例如,在 Flask 中实现简单的 POST 请求处理程序: ```python from flask import Flask, request, send_file app = Flask(__name__) @app.route('/tts', methods=['POST']) def tts_service(): data = request.json input_text = data.get('text') # Call the same function as before but now dynamically based on user inputs. output_filename = generate_audio(input_text) return send_file(output_filename, mimetype="audio/mp3") def generate_audio(text): """Function to handle audio generation.""" pass # Implement actual logic using previous example. if __name__ == '__main__': app.run(debug=True) ``` 以上方法不仅实现了基础功能还增加了灵活性与易用程度。 --- #### 关于 LobeChat 及内网穿透相关内容补充 虽然当前讨论集中于 TTS 技术栈方面,但如果涉及更复杂的 AI 对话系统构建或者希望通过互联网公开访问私有资源的话,《引用[2]》提到的内容提供了详尽指导,比如利用 Cpolar 进行内网穿透从而让外部设备也能连接到内部网络中的应用程序实例[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值