2015-01-13 3 views
1

Может кто-нибудь мне помочь? Я использую SAPI в речь текста, но я не могу установить женский голос, вот код, он говорит мужским голосом, но я хочу, чтобы изменить его, я хочу, женский голостекст в речь голоса SAPI

#include "stdafx.h" 

using namespace std; 

void speack(HRESULT, ISpVoice*, string); 

int main(int argc, char* argv[]) 
{ 
ISpVoice * pVoice = NULL; 

if (FAILED(::CoInitialize(NULL))) 
    return FALSE; 

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); 
if (SUCCEEDED(hr)) 
{ 
    hr = pVoice->Speak(L"Hi my friend", 0, NULL); 
    string text; 
    while (true){ 
     getline(cin, text); 
     speack(hr, pVoice, text); 
     if (text == "Goodbye" || text == "goodbye") 
      break; 
    } 

    speack(hr, pVoice, "Have a good day !!"); 

    pVoice->Release(); 
    pVoice = NULL; 
} 
::CoUninitialize(); 
return TRUE; 

} 

void speack(HRESULT hr, ISpVoice * pVoice, string text){ 
hr = pVoice->Speak(CA2CT(text.c_str()), 0, NULL); 
} 

Пожалуйста, помогите Спасибо

ответ

1

Когда вы звоните

CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); 

SAPI создаст по умолчанию объект голоса. Поскольку вам нужен определенный голос, вам нужно будет использовать одну из вспомогательных функций SAPI - SpCreateBestObject.

hr = SpCreateBestObject(SPCAT_VOICES, L”Gender=Female”, NULL, &pVoice); 

Это создаст лучший объект в категории VOICES, который имеет женский пол (так как это указано в качестве обязательного атрибута).

+0

ОК, я попробовал, но SpCreateBestObject не определен? Нужны ли какие-либо функции для этой функции? \t HRESULT hr = SpCreateBestObject (SPCAT_VOICES, L "Gender = Female", NULL, & pVoice); – Gor

+0

Вам нужно включить sphelper.h, чтобы получить реализацию SpCreateBestObject. –

+0

Хорошо. теперь функция определена, но теперь появляется ошибка c: \ program files (x86) \ windows kits \ 8.1 \ include \ um \ sphelper.h (1319): ошибка C4996: 'GetVersionExW': объявлена ​​устаревшей – Gor

1
// speak.cpp 

#include "stdafx.h" 
#include "speak.h" 

using namespace std; 

bool speak(wchar_t * text, wchar_t * pszReqAttribs) 
{ 
    ISpVoice * pVoice = NULL; 
    HRESULT stInitializing = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); 
    if (SUCCEEDED(stInitializing)) 
    { 
     ISpObjectToken* cpToken(NULL); 
     HRESULT stTokenFinding = SpFindBestToken(SPCAT_VOICES, pszReqAttribs, L"", &cpToken); 
     if (SUCCEEDED(stTokenFinding)) 
     { 
      HRESULT stVoiceSetting = pVoice->SetVoice(cpToken); 
      if (SUCCEEDED(stVoiceSetting)) 
      { 
       HRESULT stSpoken = pVoice->Speak(text, 0, NULL); 
       if (SUCCEEDED(stSpoken)) 
       { 
        cpToken->Release(); 
        cpToken = NULL; 

        pVoice->Release(); 
        pVoice = NULL; 

        return true; 
       } 
       else 
       { 
        cpToken->Release(); 
        cpToken = NULL; 

        pVoice->Release(); 
        pVoice = NULL; 

        wcout << "Error, I couldn't play this text " << text << endl; 
        return false; 
       } 
      } 
      else 
      { 
       cpToken->Release(); 
       cpToken = NULL; 

       pVoice->Release(); 
       pVoice = NULL; 

       wcout << "Error, I can't set this voice " << pszReqAttribs << endl; 
       return false; 
      } 
     } 
     else 
     { 
      pVoice->Release(); 
      pVoice = NULL; 

      wcout << "Error, I can't find this voice " << pszReqAttribs << endl; 
      return false; 
     } 
    } 
    else { 
     wcout << "Error, I can't create Voice instance" << endl; 
     return false; 
    } 
} 


// language.cpp 

//#pragma once 
#include "stdafx.h" 
#include "language.h" 

wchar_t * getLanguage(wchar_t * languageShortcut) throw (wchar_t*) 
{ 
    if (wcscmp(languageShortcut, L"EN") == 0) { 
     return L"Vendor=IVONA Software Sp. z o. o.;Language=809"; 
    } 
    else if(wcscmp(languageShortcut, L"DE") == 0){ 
     return L"Vendor=IVONA Software Sp. z o. o.;Language=407"; 
    } 
    else if (wcscmp(languageShortcut, L"PL") == 0) { 
     return L"Vendor=IVONA Software Sp. z o. o.;Language=415"; 
    } 
    else { 
     throw L"I don't uderstand your language"; 
    } 
} 
Смежные вопросы