使用FrameWork,如何将文字转换成声音? 需要将文字转换成声音读出来,不知道FrameWork有没有相应的类库。请高手帮忙,提供个思路也行。谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 至少要装有文字对应的声音文件,不应该是directsound方面的。参看一些阅读软件怎么做的。 http://www.microsoft.com/china/community/program/originalarticles/techdoc/Cnspeech.mspx 应该有声音字典吧,每个词对应一个声音片段.然后用API发音。 directsound我猜的,呵呵你点声音,属性可以测试发声,不知道Windows本身是否有相应的引擎 Windows有发生引擎.有些阅读器软件就有朗读功能.不过这读出来的效果...唉,简直让人无法忍受 text to speech.windows下有一个类库,sapi.dll,我的系统是在这个目录C:\Program Files\Common Files\Microsoft Shared\Speech。在vs里添加进去就可以用。 http://www.cnblogs.com/zmsx/archive/2005/12/10/294603.htmlhttp://zmsx.cnblogs.com/archive/2006/04/09/294517.html sapi.dll 好象只能发英文,如果发汉字的话还要加个补丁的. speech sdk5.1,用这个就行了英文和汉字都没有问题,就是有点慢 HOHO,搂主想翘科大讯飞的饭碗,厉害。 TTS,微软网站上有。我这里有C++版本。不知楼主要不? 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版本。参看微软网站 只知道sapi.dll,没有试过。高难度的问题.只好帮你顶了。 TTSIBM VoiceCOM组件 之用C++调用过 应该一样 用TTS技术.很简单的.俺们只在 PPC 上用过。 先用TTS做了Demo,效果不是很好,读中文很生硬。不过想想,毕竟是免费的东西,而且自己也没出力,先凑合着用了。在这里谢谢大家了!都有分啊!:) 一个简单的问题,如何将这些内容转成数据表? 动态创建label标签。 页面从aa.aspx跳转进bb.aspx后原来能正常显示的列表不能显示,请问怎么修改? 这个问题,怎么找不到变量啊 请教一个线程的问题 DataReceived事件如何正确的得到想要的回复信息 日期和星期要怎么对应呢? this["name"]是叫"索引"吗? 一个英文句子的一个名词不太明白!请指教 将bmp、jpg图片转换成pcx单色图片格式的C#方法 高手请帮我看看 用正则搜索 哪里错了?-------急
windows下有一个类库,sapi.dll,我的系统是在这个目录C:\Program Files\Common Files\Microsoft Shared\Speech。在vs里添加进去就可以用。
http://zmsx.cnblogs.com/archive/2006/04/09/294517.html
英文和汉字都没有问题,就是有点慢
{
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版本。参看微软网站
高难度的问题.
只好帮你顶了。