| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 476 人关注过本帖
标题:vs2008 speechSDK51的问题。
只看楼主 加入收藏
lfh001001
Rank: 2
等 级:论坛游民
帖 子:11
专家分:10
注 册:2012-2-29
结帖率:100%
收藏
 问题点数:0 回复次数:1 
vs2008 speechSDK51的问题。
帮忙看下代码有什么错误。
void CMyNotePage::OnBnClickedBtnSpeak()
{
// TODO: 在此添加控件通知处理程序代码
ISpVoice * pVoice = NULL;
//COM初始化:
if (FAILED(::CoInitialize(NULL)))
return ;
//获取ISpVoice:
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,  
IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
CComPtr<ISpStream> cpWavStream;
CComPtr<ISpStreamFormat> cpOldStream;
CSpStreamFormat OriginalFmt;
pVoice->GetOutputStream(&cpOldStream );
OriginalFmt.AssignFormat(cpOldStream);

//绑定文件:
hr = SPBindToFile( L"D:\\myRobo\\note\\output.wav",SPFM_CREATE_ALWAYS,
&cpWavStream,&OriginalFmt.FormatId(),
OriginalFmt.WaveFormatExPtr() );

if( SUCCEEDED( hr ) )
{
pVoice->SetOutput(cpWavStream,TRUE);
UpdateData();

ISpObjectToken* pToken = SpGetCurSelComboBoxToken(m_voice.m_hWnd);
ISpObjectToken* pOldToken;
HRESULT hr = pVoice->GetVoice( &pOldToken );
if (pOldToken != pToken)
{  
hr = pVoice->SetVoice( pToken );
hr = pVoice->GetVoice( &pOldToken );
}
//CString WTX = L"<VOICE REQUIRED='NAME=VW Lily'/>" + m_s_note;
pVoice->SetVolume(50);
pVoice->SetRate(5);
hr = pVoice->Speak(m_s_note, SPF_ASYNC | SPF_IS_NOT_XML, 0);
pVoice->WaitUntilDone(INFINITE);
cpWavStream.Release();
pVoice->SetOutput(cpOldStream,FALSE);
pVoice->Release();
pVoice = NULL;
}
}
//释放COM资源:
::CoUninitialize();
}
运行时并没有报错,但是却又两个问题。
1. hr = pVoice->SetVoice( pToken ); (调试时 hr = S_OK)
  hr = pVoice->GetVoice( &pOldToken );
设置语音,先设置,然后在获取。发现 pOldToken 没有任何变化,也就是说语音设置不成功。但是注释部分,通过字符串强行设置有效 //CString WTX = L"<VOICE REQUIRED='NAME=VW Lily'/>" + m_s_note;
2. hr = pVoice->Speak(m_s_note, SPF_ASYNC | SPF_IS_NOT_XML, 0);
  pVoice->WaitUntilDone(INFINITE);
语音开始合成,然后等待合成结束。运行后,保存在L"D:\\myRobo\\note\\output.wav"的wav文件能够播放,但是在Speak运行过程中,却没有任何声音。也就是说语音合成成功了,但是并没有实时播放。


各位大侠,帮帮忙,谢谢了!
搜索更多相关主题的帖子: void return 
2012-03-02 09:15
lufeihong
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-20
收藏
得分:0 
1. hr = pVoice->SetVoice( pToken ); (调试时 hr = S_OK)
是不是驱动没有装好?我试过可以的啊。
2.hr = pVoice->Speak(m_s_note, SPF_ASYNC | SPF_IS_NOT_XML, 0);
保存wav文件和播放不能同时进行,把保存部分注释,就有声音了。
2012-03-20 09:33
快速回复:vs2008 speechSDK51的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017033 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved