浅谈中文文本语音转换技术

现在语音技术应用十分广泛,本人也一直在从事这方面的工作,利用MS TTS开发产品,针对中文发音设置的问题,在这里阐述一下自己的实现方法。

void CIMEInfoAcquisitionDlg::SpeakVoice(LPCTSTR csVoice)
{
   //com初期化
    if (FAILED(CoInitialize(NULL)))
    {
        AfxMessageBox("Error to intiliaze COM");
        return;
    }
 
 //文字変換
 LPOLESTR lpw = new WCHAR [256];
    MultiByteToWideChar(CP_ACP,0,csVoice,-1,lpw,256);

 HRESULT hr = S_OK;
    if( SUCCEEDED( hr ) )
 {
  CComPtr<ISpObjectToken>        cpVoiceToken;
  CComPtr<IEnumSpObjectTokens>   cpEnum;
  CComPtr<ISpVoice>              cpVoice;
  ULONG                          ulCount = 0;

  // 建立

  hr = cpVoice.CoCreateInstance(CLSID_SpVoice);

  LPCSTR name;
    name = "Microsoft Simplified Chinese";

  CString s; s.Format("Name=%s", name);
  WCHAR wName[1024];
  MultiByteToWideChar(CP_ACP, 0, s, -1, wName, sizeof(wName));

  ISpObjectToken* pToken = NULL;
  if(SUCCEEDED(SpFindBestToken(SPCAT_VOICES, NULL, wName, &pToken))){
  cpVoice->SetVoice(pToken); 
  }
  //文读
     if (SUCCEEDED (hr))
  {
     hr = cpVoice->Speak( lpw, SPF_DEFAULT, NULL );
  }

 }

 //com的结束
    delete [] lpw;
    CoUninitialize();
 return;
}

以上利用ISpObjectToken接口实现了对中文的阅读,是不是很简单明了:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值