Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Reproducir sonido sincronizado con un timer (https://www.clubdelphi.com/foros/showthread.php?t=57921)

alquimista 02-07-2008 01:08:03

Reproducir sonido sincronizado con un timer
 
Tengo que emitir un sonido corto en determinados periodos de tiempo que son variables
Como sincronizarlos lo mas exacto posible sin que se produzcan retrasos.

Por ejemplo
5 segundos 32 centésimas-->Sonido
10 segundos 25 centésimas--->Sonido
..
..
20 minutos 20 segundos 34 centesimas->Sonido

El problema radica en que al usar PlaySound de un wav (grabado como un recurso *.res) hay un pequeño desfase con respecto al temporizador que cada vez se va haciendo mas grande. con lo que al final en vez de sonar a 20 minutos 20 sg 34 centésimas lo hace a 20 minutos 22 segundos.

Se emplea un timer para llevar el crono y otro para los tiempos variables y reproducción de sonido.

Alguna sugerencia?
¿Una tarea separada del 2º timer solo para reproducir el sonido ayudaría?
Gracias...

Neftali [Germán.Estévez] 02-07-2008 08:48:24

Hay algunos componentes de Timer que dicen ser "más exactos" que el original de Windows. No he probado ninguno, pero tal vez alguno de estos solvente tu problema.
Otra opción sería que revisaras GetTickCount, a ver si consigues más exactitud.

alquimista 02-07-2008 09:58:37

Uso un timer de las JEDI jvThreadTimer1 que dicen que es un poco mas preciso que el ttimer para el crono y jv..2 para los tiempos. Arranco los 2 a la vez y en el 2º cambio el interval en el evento Ontimer. Antes de reproducir el sonido existia un desfase que era despreciable y al cabo de un rato se compensaba un poco.
Es al utilizar playsound cuando desfasa

Código Delphi [-]
{$R sonidos.res} // recurso: es un solo wav de apenas 100k
procedure TForm1.JvThreadTimer2Timer(Sender: TObject)
begin
PlaySound('sonido', hInstance, SND_RESOURCE or SND_ASYNC);
//cambiar interval del timer
end;
he leido que si se carga en memoria (¿como se haria?) es más rápido ¿un recurso no se carga en memoria o lo carga del exe perdiendo mas tiempo?

Gracias por la respuesta

alquimista 02-07-2008 16:49:55

voy a cambiar a un solo timer ya que en unos 20 minutos se desfasa mas de 2 segundos el sonido del tiempo en que debiera contar.

¿Alguien sabe como puedo comparar el TDateTime con una stringlist con formato "mm:ss:zz", siendo mm=minutos con 2 caracteres, ss=segundos, zz=centesimas, que contiene todos los tiempos a los que tiene que tocar el sonido.


La franja horaria es GMT +2. Ahora son las 04:21:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi