#include "Speak.h"
//#pragma comment(lib,"C:\\Program Files (x86)\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\x86\\sapi.lib") //导入语音头文件库
Speak::~Speak()
{
}
bool Speak::InitSpeak()
{
if (FAILED(::CoInitialize(NULL)))//FAILED
{
return false;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice);
if (SUCCEEDED(hr))
{
byte VoiceValue = GetPrivateProfileInt(L"VOICE", L"VoiceValue", 0, L"./setting.ini");
if (VoiceValue == 0)
{
pVoice->SetVolume((USHORT)100);
}
else
{
pVoice->SetVolume((USHORT)VoiceValue); //设置音量,范围是 0 -100
}
pVoice->SetRate(0); //设置速度,范围是 -10 - 10
if (GetPrivateProfileInt(L"LANGUAGE", L"language", 0, L"./setting.ini") == 0)
{
int i = GetVoice();
SetLanguage(SP_CHINESE);
if (GetVoice() == 1)
pVoice->Speak(L"启动软件", 0, NULL);
}
else
{
SetLanguage(SP_ENGLISH);
if (GetVoice() == 1)
pVoice->Speak(L"system start", 0, NULL);
}
return true;
}
return false;
}
void Speak::SetLanguage(const DWORD dwLanguage)
{
switch (dwLanguage)
{
case SP_CHINESE:
SpFindBestToken(SPCAT_VOICES, L"language=804",NULL, &pSpToken);
pVoice->SetVoice(pSpToken);
break;
case SP_ENGLISH:
SpFindBestToken(SPCAT_VOICES, L"language=409",NULL, &pSpToken);
pVoice->SetVoice(pSpToken);
break;
default:break;
}
}
void Speak::Release()
{
if (pVoice)
{
pVoice->Release();
pVoice = NULL;
::CoUninitialize();
}
if (pSpToken)
{
pSpToken->Release();
pSpToken = NULL;
}
}
void Speak::SpeakVoice(LPCTSTR speakContent)
{
if (pVoice)
{
if (GetVoice() == 1)
{
pVoice->Resume();
pVoice->Speak(speakContent, SPF_DEFAULT, NULL);
}
}
}
void Speak::SetVolume(int value)
{
if (pVoice)
{
pVoice->SetVolume((USHORT)value); //设置音量,范围是 0 -100
}
}
int Speak::GetVoice()
{
return GetPrivateProfileInt(L"VOICE", L"IsVoice", 0, L"./setting.ini");
}
void Speak::PauseOrResume(bool voice)
{
if (pVoice)
{
if (voice == false)
{
pVoice->Pause();
}
else
{
pVoice->Resume();
}
}
}