512; 默认,加入播放队列末尾。}
end;
procedure Pause;
begin
TTS.AudioPause; {暂停朗读}
end;
procedure Stop;
begin
TTS.StopSpeaking;{终止朗读}
end;
procedure Resume;
begin
TTS.AudioResume;{恢复朗读}
end;
function IsSpeaking:Boolean;
var
Check:Boolean;
begin
if TTS.IsSpeaking then {判断当前状态}
begin
Check:=TRUE;{当前正在朗读}
end
else
begin
Check:=FALSE;{当前没有朗读}
end;
Result:=Check;{返回状态值}
end;
procedure Destory;
begin
TTS:=nil;{释放对象}
end;
end.
5、在Project1.dpr的begin前面添加如下待导出过程函数列表:
exports
Create index 1,
Read index 2,
Pause index 3,
Resume index 4,
Stop index 5,
IsSpeaking index 6,
Destory index 7;
编译通过后即可得到封装有TTS语音接口的动态链接库: Project1.dll。
四、在VC 中调用TTS动态链接库
1、选"File","New…"新建一MFC AppWizard(exe)工程TTSCall。最后一步选择基类为CformView。其余可取缺省设置。
2、在Form上添加四个按钮,分别为:IDC_BUTTON1"朗读";IDC_BUTTON2"暂停";IDC_BUTTON4"恢复";IDC_BUTTON3"停止",以及一编辑框IDC_EDIT1。并添加四个按钮的处理函数:OnRead、OnPause、OnResume、OnStop和编辑框EN_CHANGE事件的响应函数:OnChangeEdit。通过ClassWizard为编辑框同一变量m_Text绑定。
3、为CTTSCallView类添加两个变量: BOOL m_bCreated; HINSTANCE m_DLL;并在构造函数中初始化之。
CTTSCallView::CTTSCallView() : CFormView(CTTSCallView::IDD)
{
//{{AFX_DATA_INIT(CTTSCallView)
m_Text = _T("Hello! Welcome to use this software developed by LangRui.");
//}}AFX_DATA_INIT
m_DLL = NULL;
m_bCreated=FALSE;
}
4、在视类中的初始化函数中添加代码:
void CTTSCallView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
}
5、实现朗读功能:
void CTTSCallView::OnRead()
{
m_DLL=LoadLibrary("Project1.dll"); //动态加载动态连接库
void (*Create)(void);
//取得DLL中的Create函数
Create=(void(*)(void))::GetProcAddress(m_DLL,"Create");
Create();
m_bCreated=TRUE;
void (*Read)(char*);
//取得DLL 中的Read函数
Read=(void(*)(char*))::GetProcAddress(m_DLL,"Read");
//获取编辑框内容
UpdateData(TRUE);
char buf[10000];
::strcpy(buf,m_Text);
Read(buf);//朗读编辑框的内容。
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);//"朗读"按钮不可用
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); //"暂停"按钮可用
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);//"恢复"按钮不可用
GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); //"停止"按钮可用
}
6、实现暂停功能:
void CTTSCallView::OnPause()
{
m_DLL=LoadLibrary("Project1.dll");
void (*Pause)();
Pause=(void(*)())::GetProcAddress(m_DLL,"Pause");
BOOL (*IsSpeaking)();
//判断是否正在朗读
IsSpeaking=(BOOL(*)())::GetPro