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

来源:互联网 发布:椰族部落永久域名新址 编辑:程序博客网 时间:2024/04/30 11:13

现在语音技术应用十分广泛,本人也一直在从事这方面的工作,利用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接口实现了对中文的阅读,是不是很简单明了:)