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;