MFC中 使用多线程实现语音播放功能

 

在这次项目中,需要实现语音播放功能。但是发现在播放语音时,无法进行其他操作。然后想到了多线程。

可是从没有用过所谓的多线程,故在此记下自己第一次学习使用的多线程。

首先,创建一个线程:

void CLXTDlg::OnBnClickedButtonVoice()
{
    hThread = CreateThread(
                          NULL,                                  // SD
                          0,                                     // initial stack size
                          (LPTHREAD_START_ROUTINE)ThreadProc,    // thread function
                          NULL,                                     // thread argument
                          0,                                         // creation option
                          &threadID                               // thread identifier
                        );
}

 

然后,写下下面这样的全局函数,就是那个线程要执行的操作:

void ThreadProc()
{
    ISpVoice * pVoice = NULL;
    ::CoInitialize(NULL);
    //获取ISpVoice接口:
    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
    {
        CString str;    
        CWnd* h_d = AfxGetApp()->GetMainWnd(); //获取主窗口的句柄
        h_d->GetDlgItem(IDC_APOETRY_EDIT)->GetWindowText(str);  //IDC_APOETRY_EDIT为编辑框的ID
        pVoice->SetRate(-3);//语速
        hr = pVoice->Speak(str,0,NULL);
        pVoice->Release();
        pVoice = NULL;
    }

   ::CoUninitialize();
}

 

要实现上面的语音播放功能还需在文件最上面添加:

#include <sapi.h>


#pragma comment(lib,"ole32.lib") //CoInitialize CoCreateInstance需要调用ole32.dll
#pragma comment(lib,"sapi.lib") //sapi.lib在SDK的lib目录,必需正确配置

 

 

转载于:https://www.cnblogs.com/lxt287994374/archive/2013/06/11/3132084.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值