Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Optimización de un simple sampler (https://www.clubdelphi.com/foros/showthread.php?t=65743)

HombreGordo 10-01-2010 23:41:05

Optimización de un simple sampler
 
Saludos, tengo una pequeña duda en cuánto a la optimización de un sampler que hice para una radio. Sin embargo, presenta ciertos retrasos (1 o 2 segundos) para lanzar un sonido, entonces es problemático porque los sonidos deberían lanzarse al momento. El código es el siguiente:

El sampler consta de una rejilla de varios TButton y cada uno de ellos se les asignó un evento "OnMouseDown" y otro "OnMouseUp" (para controlar la reproducción del sonido, OnClick no serviría porque el sonido seguiría sonando aún después y no sería adecuado agregar otro para detenerlo, cuando esa modalidad estilo "Push to talk" es ideal).

OnMouseDown:
Código Delphi [-]
if FileExists('Sonidos\01.mp3') then begin
MediaPlayer1.FileName:='Sonidos\01.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
OnMouseUp:
Código Delphi [-]
MediaPlayer1.Stop;
MediaPlayer1.Rewind;

Mi pregunta en la que por favor les pido que me ayuden, es ¿Cómo haría para optimizar ese código para cada botón de tal forma que la reproducción sea mucho más rápida? Creo que sería pre-cargarlos en la RAM, pero no sé como sería eso... Gracias de antemano por su ayuda. :)

Neftali [Germán.Estévez] 11-01-2010 10:07:18

¿Has probado a tener hasta el Open abierto y en el botón sólo realizar el
PLAY?
Habría que ver de todas formas si funciona y qué memoria llega a consumir...

HombreGordo 11-01-2010 12:06:35

Bueno, eso funcionaría si yo tuviera un solo botón, pero tengo varios y cada uno con un sonido diferente, y todos comparten el mismo MediaPlayer, habría que ver que tal si los 50 botones tuvieran su propio MediaPlayer. :) Pero busco una solución eficiente en cuánto a uso de memoria. :)

coso 11-01-2010 19:59:02

Hola,
evidentemente el error te viene de tener que cargar el archivo en el momento. Tendras que tenerlos precargados. No se bien bien como se haria, probablemente puedas usar el archivo .res o bien usar streams o, tal como dice neftali, usando un mediaplayer para cada uno. Un saludo.

cocute 11-01-2010 20:38:31

los componentes Jedi tienen un componente que se llama TJvWavePlayer,
que tiene la propiedad SourceType donde puedes escoger:
File
Ram
Resource

quizas te pueda servir

y si quieres añadir mas opciones tambien puedes echar un vistazo a estos componentes, aunque son de pago:
http://www.swiftsoft.de/mmwave.html
y
http://www.swiftsoft.de/mmeffekt.html


otros componentes gratuitos que les puedes echar un vistazo, tienen buena pinta
http://www.delphiarea.com/?dl_id=28

y otros más gratis y buenos
http://symmetrica.net/newac/
estos los he probado y tienen un ejemplo que se llama MP3Player que me reproduce los mp3 al instante de cargarlos sin demora,
creo que tira de DirectX para ello.
te pego el programa reciencompilado para que lo veas:
http://rapidshare.com/files/33383334...layer.rar.html

HombreGordo 12-01-2010 05:14:39

¡Muchas gracias por su ayuda! Ya guardé la página para luego probar bien esos componentes, de todas formas ya lo probé en la máquina 'target' y sí, depende mucho de las capacidades de la máquina, ya vi que en esa sí funciona instantáneamente como debería ser, es la mía que no es tan potente como esa. :)


La franja horaria es GMT +2. Ahora son las 16:48:23.

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