yo creo que el tema de texto a voz es mucho jaleo para lo que quieres hacer
pero algo asi es:
Código:
#include <sapi.h>
Código:
void SpeakText(const String& text) {
// Inicializar COM
CoInitialize(NULL);
// Crear el objeto de voz
ISpVoice *pVoice = NULL;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if (SUCCEEDED(hr)) {
// Pronunciar el texto
pVoice->Speak(text.w_str(), 0, NULL);
pVoice->Release(); // Liberar el objeto
}
// Finalizar COM
CoUninitialize();
}
Enumerar las voces disponibles:
Código:
#include <sapi.h>
#include <sphelper.h>
#include <iostream>
#include <vector>
#pragma hdrstop
void ListVoices() {
// Inicializar COM
CoInitialize(NULL);
// Crear el objeto de voz
ISpVoice *pVoice = NULL;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if (SUCCEEDED(hr)) {
ISpObjectTokenEnumerator *pEnum = NULL;
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pEnum);
if (SUCCEEDED(hr)) {
ISpObjectToken *pToken = NULL;
while (pEnum->Next(1, &pToken, NULL) == S_OK) {
LPWSTR pwszId;
pToken->GetId(&pwszId);
// Obtener el nombre de la voz
LPWSTR pwszVoiceName;
pToken->GetStringValue(L"Name", &pwszVoiceName);
std::wcout << L"Voice ID: " << pwszId << L", Voice Name: " << pwszVoiceName << std::endl;
CoTaskMemFree(pwszVoiceName);
CoTaskMemFree(pwszId);
pToken->Release();
}
pEnum->Release();
}
pVoice->Release(); // Liberar el objeto de voz
}
// Finalizar COM
CoUninitialize();
}
Cambiar la Voz:
Código:
void SpeakText(const String& text, const String& voiceId) {
// Inicializar COM
CoInitialize(NULL);
// Crear el objeto de voz
ISpVoice *pVoice = NULL;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if (SUCCEEDED(hr)) {
// Seleccionar la voz por ID
ISpObjectToken *pToken = NULL;
hr = SpGetTokenFromId(voiceId.w_str(), &pToken);
if (SUCCEEDED(hr)) {
pVoice->SetVoice(pToken);
pToken->Release(); // Liberar el objeto token
}
// Pronunciar el texto
pVoice->Speak(text.w_str(), 0, NULL);
pVoice->Release(); // Liberar el objeto de voz
}
// Finalizar COM
CoUninitialize();
}