![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
quizas si reproduces con PlaySound
en C++ builder: Código:
#include <windows.h> #include <mmsystem.h> Código:
uses Windows, MMSystem; formato de PlaySound que yo uso: C++ Builder code: Código:
PlaySound(L".\\music\\PP_BluNotes.wav", NULL, SND_FILENAME || SND_ASYNC); Código:
PlaySound(PChar('.\music\PP_BluNotes.wav'), 0, SND_FILENAME or SND_ASYNC);
si ves que sale todo solapandose o tal, utiliza alguna clase de timer o con la funcion Sleep() para separarlo un poco con algunos milisegundos entre cada sonido Última edición por navbuoy fecha: 14-10-2024 a las 12:07:22. |
|
#2
|
||||
|
||||
|
¿Tal vez digo una tontería, pero y si usas alguno de los SDK especiales para voz, para que te convierta un texto a voz?
Como si quisieras leer un texto escrito, pero con un número; Eso te evitaría tener que ir haciendo play sound de diferentes archivos.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
|||
|
|||
|
navbuoy,
muchas gracias por tu aporte, funciona. Claro parece un robot al decir por ejemplo 16. Como menciona Neftali, no esta mal buscar algún SDK para pasar de texto a voz. Dependerá el tiempo que tarde en convertir. Muchas gracias a ambos. |
|
#4
|
|||
|
|||
|
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. |
|
#5
|
|||
|
|||
|
ten en cuenta que el TextToSpeech de windows depende de que idioma tengas activado en los Settings de sistema, te lo digo por si lo tienes en ingles y ves que la voz tiene un acento de guiri que asusta.....
|
|
#6
|
|||
|
|||
|
navbuoy,
nuevamente gracias por tu aporte. Justo estoy viendo SAPI. Si no te es molesto, podrías pasarme, por favor, en pascal en vez de C++ lo que me aportaste.? |
|
#7
|
|||
|
|||
|
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;
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. |
|
#8
|
||||
|
||||
|
¿Con qué versión y con qué fichero SpeechLib_TLB lo has compilado? ¿Lo acabo de importar con Delphi 12 (la version 5.4) y me da errores al compilar?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Delay en liveBindings | look | FireMonkey | 0 | 01-04-2022 20:57:00 |
| Ayuda con funcion Delay | Novatin | C++ Builder | 2 | 25-06-2013 04:48:50 |
| delay con WinSock | chelox | Internet | 0 | 24-07-2010 06:46:36 |
| Sleep/delay? | nena_yei | OOP | 6 | 22-07-2010 16:41:47 |
| Delay de Pascal | Esau | OOP | 4 | 28-08-2003 21:32:11 |
|