Ver Mensaje Individual
  #5  
Antiguo 14-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Reputación: 2
navbuoy Va por buen camino
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();
}

Última edición por navbuoy fecha: 15-10-2024 a las 00:06:01.
Responder Con Cita