| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > Visual C++教程 > 文章正文 用户登录
ad4all.net美通网
Flash声音高级篇:
像素字体 pixel f
FlashMX2004的事件
V2组件事件模型pa
再探FlashCom的HT
[手机游戏]:关于t
关于scrollPane滚
创建个性化TextFi
修改ListBox组件(

Hello World by Microsoft Speech SDK 5.1           

Hello World by Microsoft Speech SDK 5.1

作者:佚名 来源:CSDN 作者: In355Hz 更新:2006-8-25 21:05:35 错误报告 我要投稿

Hello World by Microsoft Speech SDK 5.1

    刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁,参考 Speech SDK文档写了几个小程序,尽管我也是刚刚接触 Speech若干小时的初学者,还是拿出来共享吧:

 

Speech SDK 采用 COM 的形式封装,和大多数COM对象一样,下面是一个似曾相识的初始化:

 

    CoInitialize(NULL);

 

    CLSIDFromProgID(L"SAPI.SpVoice", &CLSID_SpVoice);

 

    ISpVoice * pSpVoice = NULL;

 

    if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,

        CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice)))

    {

        cout << "Failed to create instance of ISpVoice!" << endl;

        return -1;

    }

 

    现在我们用它来说 “Hello World”,非常简单:

 

pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

最后,清除这一切

 

pSpVoice->Release();

 

CoUninitialize();

 

很容易,是不是?下面我们稍微改变一下:

 

IEnumSpObjectTokens *pSpEnumTokens = NULL;

if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, L"language=409", NULL, &pSpEnumTokens)))

{

       ISpObjectToken *pSpToken = NULL;

 

       while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) &&

              pSpToken != NULL)

       {

              pSpVoice->SetVoice(pSpToken);

              pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

              pSpToken->Release();

       }

 

       pSpEnumTokens->Release();

}

 

如果只需要一种 Voice,SpFindBestToken 更加方便:

 

ISpObjectToken * pSpObjectToken = NULL;

 

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"gender=female",

       NULL, &pSpObjectToken)))

{

       pSpVoice->SetVoice(pSpObjectToken);

 

       pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);

 

       pSpObjectToken->Release();

}

 

现在改为使用中文:

 

ISpObjectToken * pSpObjectToken = NULL;

 

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804",

       NULL, &pSpObjectToken)))

{

       pSpVoice->SetVoice(pSpObjectToken);

 

       pSpVoice->Speak(L"世界你好!", SPF_DEFAULT, NULL);

 

       pSpObjectToken->Release();

}

 

ISpVoice::Speak 可以允许朗读的句子中包含 XML 标记,其实以上这一切用 XML 标记将变得十分简单:

 

pSpVoice->Speak(L"<lang langid=\"804\">世界你好!</lang>", SPF_DEFAULT, NULL);

 

    pSpVoice->Speak(L"<voice required=\"gender=female\">Hello World!</voice>", SPF_DEFAULT, NULL);

 

最后,以一段简单的报时结束这篇文章:

 

SYSTEMTIME st;

GetLocalTime(&st);

 

ISpObjectToken * pSpObjectToken = NULL;

if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804", NULL, &pSpObjectToken)))

{

       pSpVoice->SetVoice(pSpObjectToken);

 

       WCHAR wsz[128];

       swprintf(wsz,

              L"现在是<context ID = \"CHS_Date_ymdhm\">%.4d-%.02d-%.2d %.2d:%.02d</context>",

              st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute);

 

       pSpVoice->Speak(wsz, SPF_IS_XML, NULL);

 

       pSpObjectToken->Release();

}

 

    ■ 到此为止,希望这篇文章能带给初学者一点启发。

 

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。