cAddress(m_DLL,"IsSpeaking");
if(IsSpeaking())
{
Pause();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
}
}
7、实现恢复功能:
void CTTSCallView::OnResume()
{
m_DLL=LoadLibrary("Project1.dll");
void (*Resume)();
Resume=(void(*)())::GetProcAddress(m_DLL,"Resume");
BOOL (*IsSpeaking)();
IsSpeaking=(BOOL(*)())::GetProcAddress(m_DLL,"IsSpeaking");
if(!IsSpeaking())
{
Resume();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
}
}
8、实现停止功能:
void CTTSCallView::OnStop()
{
m_DLL=LoadLibrary("Project1.dll");
void (*Stop)();
Stop=(void(*)())::GetProcAddress(m_DLL,"Stop");
Stop();//停止朗读
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
}
9、当编辑框内容发生改变,而又没有进行朗读时,应当处于准备朗读状态:
void CTTSCallView::OnChangeEdit()
{
if(m_bCreated)
{
m_DLL=LoadLibrary("Project1.dll");
BOOL (*IsSpeaking)();
IsSpeaking=(BOOL(*)())::GetProcAddress(m_DLL,"IsSpeaking");
if(!IsSpeaking())
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
}
}
}
10、当
程序退出时应释放加载的动态链接库,添加虚函数DestoryWindow()
BOOL CTTSCallView::DestroyWindow()
{
AfxFreeLibrary(m_DLL);
return CFormView::DestroyWindow();
}
五、运行测试
将由Delphi编制的动态链接库Project1.dll复制到VC的TTSCall 工程的Debug 目录下。编译并运行TTSCall工程,在编辑框上写一端英文,按下"朗读"按钮,就可以听到利用TTS全程化语音技术所发出的抑扬顿挫的声音。
小结:TTS是全程化语音技术,它可以实现英文单词以及短语的准确发音,甚至可以独立完成整篇英文文章的流畅朗读。而且TTS技术是建立在英文阅读规则基础上的语音合成技术,并非将单词一个一个拆开机械得进行朗读,因此在语气的转折和单词的衔接上都非常自然,问句和祈使句的升降调也能很好的表现出来。