使用FrameWork,如何将文字转换成声音?

mmens 2006-08-29 04:01:55
需要将文字转换成声音读出来,不知道FrameWork有没有相应的类库。

请高手帮忙,提供个思路也行。谢谢了!
...全文
2174 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
windflow 2006-08-30
  • 打赏
  • 举报
回复
这个问题不是这么简单的,科大讯飞做了多少年,花了多少人力,语音效果才基本过得去。这里面有词句判断,中英文识别,断句。很复杂啊,主要是发出来的声音要和人的语音接近。否则就是一堆垃圾。劝楼主放弃。
andylaus 2006-08-30
  • 打赏
  • 举报
回复
没接触过,应该是个高难度的问题,帮你顶了,呵呵
szc21 2006-08-30
  • 打赏
  • 举报
回复
mark
没了解过
pretty_soft 2006-08-30
  • 打赏
  • 举报
回复
用类库简单
也可以自己对应啊,弄些片断
terryghz 2006-08-30
  • 打赏
  • 举报
回复
见世面了~~~
jedliu 2006-08-30
  • 打赏
  • 举报
回复
类库,你要自己编吧,否则直接出来的声音...当然,如果你想膈应死人的话!
hy_lihuan 2006-08-30
  • 打赏
  • 举报
回复
不清楚是否有这样的类库,能否知道lz要用来解决什么问题。
因为像很多软件都是提供语音库,不过最主要的问题是说话的语态不是一般的程序可以解决的。非常专业的问题啊
doitnow2000 2006-08-30
  • 打赏
  • 举报
回复
只知道sapi.dll,没有试过。
高难度的问题.
只好帮你顶了。
Avoid 2006-08-30
  • 打赏
  • 举报
回复
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版本。参看微软网站
GXY2005 2006-08-30
  • 打赏
  • 举报
回复
jf
Avoid 2006-08-30
  • 打赏
  • 举报
回复
TTS,微软网站上有。我这里有C++版本。不知楼主要不?
lih163 2006-08-30
  • 打赏
  • 举报
回复
学习
songlife33 2006-08-30
  • 打赏
  • 举报
回复
HOHO,搂主想翘科大讯飞的饭碗,厉害。
ilovechao1314 2006-08-30
  • 打赏
  • 举报
回复
speech sdk5.1,用这个就行了
英文和汉字都没有问题,就是有点慢
wls12342004 2006-08-30
  • 打赏
  • 举报
回复
sapi.dll 好象只能发英文,如果发汉字的话还要加个补丁的.
mmens 2006-08-30
  • 打赏
  • 举报
回复
先用TTS做了Demo,效果不是很好,读中文很生硬。

不过想想,毕竟是免费的东西,而且自己也没出力,先凑合着用了。

在这里谢谢大家了!都有分啊!:)
airon2002 2006-08-30
  • 打赏
  • 举报
回复
用TTS技术.很简单的.

俺们只在 PPC 上用过。
-渔民- 2006-08-30
  • 打赏
  • 举报
回复
学习
CodeProject-Jerry 2006-08-30
  • 打赏
  • 举报
回复
TTS

IBM Voice

COM组件 之用C++调用过 应该一样
MyLf 2006-08-29
  • 打赏
  • 举报
回复
高难度的问题.
加载更多回复(15)

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧