Ver Mensaje Individual
  #8  
Antiguo 15-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Reputación: 2
navbuoy Va por buen camino
Text to speech funcion Delphi:

Código:
uses
  ComObj, ActiveX;

procedure SpeakText(const text: string);
var
  Voice: Variant;
begin
  // Inicializar COM
  CoInitialize(nil);
  try
    // Crear el objeto de voz (SAPI.SpVoice)
    Voice := CreateOleObject('SAPI.SpVoice');

    // Pronunciar el texto
    Voice.Speak(text);

  finally
    // Finalizar COM
    CoUninitialize();
  end;
end;

Enumerar las Voces:

Código:
uses
  ComObj, ActiveX, SpeechLib_TLB, Variants;

procedure ListVoices;
var
  SpVoice: ISpeechObjectTokens;
  VoiceToken: ISpeechObjectToken;
  TokenEnum: IEnumVariant;
  VoiceID, VoiceName: OleVariant;
  i: Integer;
begin
  // Inicializar COM
  CoInitialize(nil);
  try
    // Crear el objeto de voz para obtener la enumeración de voces
    SpVoice := CreateOleObject('SAPI.SpVoice') as ISpeechObjectTokens;
    SpVoice := CreateOleObject('SAPI.SpObjectTokenCategory').GetTokens('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices', '', '');

    // Enumerar las voces
    TokenEnum := (SpVoice._NewEnum as IEnumVariant);
    i := 0;
    while TokenEnum.Next(1, VoiceID, nil) = S_OK do
    begin
      VoiceToken := IDispatch(VoiceID) as ISpeechObjectToken;
      VoiceName := VoiceToken.GetDescription(0);
      Writeln('Voz ID: ', i, ', Nombre: ', VoiceName);
      Inc(i);
    end;
  finally
    // Finalizar COM
    CoUninitialize();
  end;
end;
Cambiar la Voz:

Código:
uses
  ComObj, ActiveX, SpeechLib_TLB;

procedure SpeakText(const text, voiceId: string);
var
  Voice: ISpeechVoice;
  Token: ISpeechObjectToken;
  SpObjectTokenCategory: ISpeechObjectTokenCategory;
begin
  // Inicializar COM
  CoInitialize(nil);
  
  try
    // Crear el objeto de voz
    Voice := CoSpVoice.Create;

    // Obtener la categoría de las voces
    SpObjectTokenCategory := CoSpObjectTokenCategory.Create;
    SpObjectTokenCategory.SetId(SPCAT_VOICES, False);

    // Seleccionar la voz por ID
    Token := SpObjectTokenCategory.GetTokenFromId(voiceId);
    if Token <> nil then
      Voice.Voice := Token;

    // Pronunciar el texto
    Voice.Speak(text, 0);
  finally
    // Finalizar COM
    CoUninitialize;
  end;
end;

Última edición por navbuoy fecha: 15-10-2024 a las 17:13:20.
Responder Con Cita