需要将文字转换成声音读出来,不知道FrameWork有没有相应的类库。请高手帮忙,提供个思路也行。谢谢了!

解决方案 »

  1.   

    至少要装有文字对应的声音文件,不应该是directsound方面的。参看一些阅读软件怎么做的。
      

  2.   

    http://www.microsoft.com/china/community/program/originalarticles/techdoc/Cnspeech.mspx
      

  3.   

    应该有声音字典吧,每个词对应一个声音片段.然后用API发音。
      

  4.   

    directsound我猜的,呵呵你点声音,属性可以测试发声,不知道Windows本身是否有相应的引擎
      

  5.   

    Windows有发生引擎.有些阅读器软件就有朗读功能.不过这读出来的效果...唉,简直让人无法忍受
      

  6.   

    text to speech.
    windows下有一个类库,sapi.dll,我的系统是在这个目录C:\Program Files\Common Files\Microsoft Shared\Speech。在vs里添加进去就可以用。
      

  7.   

    http://www.cnblogs.com/zmsx/archive/2005/12/10/294603.html
    http://zmsx.cnblogs.com/archive/2006/04/09/294517.html
      

  8.   

    sapi.dll 好象只能发英文,如果发汉字的话还要加个补丁的.
      

  9.   

    speech sdk5.1,用这个就行了
    英文和汉字都没有问题,就是有点慢
      

  10.   

    HOHO,搂主想翘科大讯飞的饭碗,厉害。
      

  11.   

    TTS,微软网站上有。我这里有C++版本。不知楼主要不?
      

  12.   

    void CCloseCard::OnButtonClosecard() 
    {
    BOOL bUp = UpdateData(TRUE);
    if(!bUp)
    return ;
    ///////////////////////////////////voice20050203
    GetDlgItem(IDC_BUTTON_EXIT)->EnableWindow(FALSE);
    GetDlgItem(IDC_BUTTON_CLOSECARD)->EnableWindow(FALSE);
    HRESULT                             hrVoice;
    HRESULT                             hrTokens;
    HRESULT                             hrToken;
    CComPtr<IEnumSpObjectTokens>        cpEnum;
    CComPtr<ISpVoice>                   cpVoice;
    ULONG                               ulCount = 0;
    ISpObjectToken *pokeObject;
    WCHAR *pFileName;
    CString strData;
    CString strVoice;
    CString strMoney;
    int nPos =0;
    ULONG ulItem = 0;
    bool bGetVoice = false; ::CoInitialize(NULL);

    USES_CONVERSION; hrVoice = cpVoice.CoCreateInstance( CLSID_SpVoice ); 

    if(SUCCEEDED(hrVoice))
    hrTokens = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);

    if(SUCCEEDED(hrTokens))
    hrTokens = cpEnum->GetCount(&ulCount); for(ULONG i = 0; i < ulCount; i++)
    {
    cpEnum->Item(i, &pokeObject);
    hrToken = pokeObject->GetId(&pFileName);
    strVoice = pFileName;
    nPos = strVoice.ReverseFind('\\');
    strVoice.Delete(0, nPos + 1);
    if("MSSimplifiedChineseVoice" == strVoice)
    {
    ulItem = i;
    bGetVoice = true;
    }
    if(SUCCEEDED(hrToken))
    pokeObject->Release();
    ::CoTaskMemFree(pFileName);
    }
    if(!bGetVoice)
    goto Err;
    if(SUCCEEDED(hrToken))
    hrTokens = cpEnum->Item(ulItem, &pokeObject);

    if(SUCCEEDED(hrTokens))
    hrVoice = cpVoice->SetVoice(pokeObject);
    if(m_dCharge != 0)
    {
    strMoney.Format("%.01f", m_dCharge);
    strData = "找零,";
    strData += strMoney;
    strData += "元";
    }
    else
    {
    strData = "结帐";
    }
    if(SUCCEEDED(hrVoice))
    hrVoice = cpVoice->Speak(T2CW((LPCTSTR)strData), SPF_DEFAULT, 0);  if(SUCCEEDED(hrToken))
    pokeObject->Release();
    Err:if(SUCCEEDED(hrTokens))
    cpEnum.Release();
    if(SUCCEEDED(hrVoice))
    cpVoice.Release();
    ::CoUninitialize();
    /////////////////////////////////////////// MemStream In, Out;
    FUNCTYPE Func = NULL;
    In.wstr("net");In.wstr("SendData");
    Dispatch(&In, &Out);
    Out.rbuf((BYTE *)&Func, sizeof(Func));
    In.renew();Out.renew();
    int nAgentID = 0;
    int nPackageType = 0;
    int nPackageSize = 0;
    CString strModule = "ServerManager";
    CString strFunction = "EndInvokeCard";
    CString strRetModule = "AboutCount";
    CString strRetFunction = "Ret";
    nPackageSize = sizeof(nPackageType) + strModule.GetLength() + 1 + strFunction.GetLength() + 1 +
    strRetModule.GetLength() + 1 + strRetFunction.GetLength() + 1 + m_strUserName.GetLength() + 1 + 
    sizeof(m_dConsume) + sizeof(m_dMoneyLeft) + sizeof(double);
    In.wint(nAgentID);
    In.wint(nPackageSize);
    In.wint(nPackageType);
    In.wstr((LPCSTR)strModule);
    In.wstr((LPCSTR)strFunction);
    In.wstr((LPCSTR)strRetModule);
    In.wstr((LPCSTR)strRetFunction);
    In.wstr((LPCSTR)m_strUserName);
    In.wdouble(m_dConsume);
    In.wdouble(m_dMoneyLeft);
    if(m_dMoneyLeft < m_dConsume)
    In.wdouble(m_dAddMoney);
    else
    In.wdouble(m_dCharge);
    TransmitUI = m_hWnd;
    m_nTransType = 2;
    Func(&In, &Out);}VC版本。参看微软网站
      

  13.   

    只知道sapi.dll,没有试过。
    高难度的问题.
    只好帮你顶了。
      

  14.   

    TTSIBM VoiceCOM组件 之用C++调用过 应该一样
      

  15.   

    用TTS技术.很简单的.俺们只在 PPC 上用过。
      

  16.   

    先用TTS做了Demo,效果不是很好,读中文很生硬。不过想想,毕竟是免费的东西,而且自己也没出力,先凑合着用了。在这里谢谢大家了!都有分啊!:)