Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-09-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
notiyu de mediaplayer (ya casi es media prayer)

Hola amigos, tengo un pequeño desde hace varios dias que me trae vuelto loco. resulta que supuestamente con el mediaplayer en el evento on notify nos avisa de los cambios en ejecucion del reproductor. Pero hacendo una pequeña prueba en base a la ayuda de delphi, en el siguiente codigo, NO avisa cuando se detiene "sttoped" ( yo quiero saber el momento en que se acaba la cancion) de hecho vuelve a ponerse en 'playing'

en sus propiedades tengo activado el autoopen y el autoenabled pero no el el autorewind.

y la cancion viene predefinida en sus pripiedades.

manejo 2 botones unicamente uno para play y el otro para stop.

Alguien que me pueda ayudar se lo agradeciria mucho!

pd. de hecho si pones un cd normal se sigue con cada uno de los tracks.

Código Delphi [-]
 procedure TForm1.MediaPlayer1Notify(Sender: TObject);
 const
   ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped',
     'Playing', 'Recording', 'Seeking', 'Paused', 'Open');
 begin
   with Sender as TMediaPlayer do
   begin
     if modestr[Mode] = 'Playing' then begin
     Form1.Caption := ModeStr[Mode];
     edit1.text:= 'Tocando';
     notify:= true;
   end;
   if ModeStr[Mode] = 'Stopped' then begin
     Form1.Caption := ModeStr[Mode];
     edit1.text:= 'detenidoe';
     Notify := True;
   end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   mediaplayer1.open;
   mediaplayer1.play;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   mediaplayer1.Notify:= true;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 begin
   mediaplayer1.Stop;
 end;
 
 end.

Última edición por dec fecha: 06-09-2005 a las 23:57:08. Razón: (Encerrar el código fuente en la etiqueta DELPHI)
Responder Con Cita
  #2  
Antiguo 07-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. En el ejemplo que proporciona Delphi sobre el asunto se utilizan cadenas con fines informativos. No sé hasta qué punto no podría hacerse tal como lo intentas, pero, podría ser lo suyo mirar por el valor de la propiedad "Mode" tal que así, por ejemplo:

Código Delphi [-]
   case MediaPlayer.Mode of
     mpOpen: {...} ;
     mpPaused: {...} ;
     mpSeeking: {...} ;
     mpStopped: {...} ;
     mpPlaying: {...} ;
     mpNotReady: {...} ;
     mpRecording: {...} ;
   end;
   MediaPlayer.Notify := true;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 07-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Creo que no estás comprendiendo bien el evento "OnNotify" del MediaPlayer. Este evento de notificación se produce cuando es ejecutado un comando MCI para indicar el éxito o fracaso de la operación (el resultado de la operación es almacenado en la propiedad "NotifyValue"). Es decir, cuando ejecutamos un comando MCI (reproducir un archivo o CD, pararlo, etc.) se genera un evento "OnNotify" y el resultado de la operación es almacenado en "NotifyValue" (aunque el componente te da la posibilidad de que no se produzca el evento poniendo la propiedad "Notify" a "False").

MediaPlayer también te devuelve el estado actual de la reproducción a través de la propiedad "Mode", que es la que estás usando en el evento "OnNotify", pero, teniendo en cuenta lo que te expliqué antes, lo que te está devolviendo en realidad, cuando se termina de reproducir el archivo, es que el comando para reproducir se ejecutó con éxito (por eso siempre te muestra "Tocando" y "Playing").

Como lo único que te interesa saber es el "estado" de la reproducción, lo que yo haría es colocar un componente Timer y comprobar, dentro de su evento "OnTimer", el estado de la reproducción a través de la propiedad anterior "Mode" (es decir, la operación del evento "OnNotify" la pasamos al evento "OnTimer"):

Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
const
  ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped',
    'Playing', 'Recording', 'Seeking', 'Paused', 'Open');
begin
  with MediaPlayer1 do
  begin
    if modestr[Mode] = 'Playing' then
    begin
      Form1.Caption := ModeStr[Mode];
      edit1.text:= 'Tocando';
    end;

    if ModeStr[Mode] = 'Stopped' then
    begin
      Form1.Caption := ModeStr[Mode];
      edit1.text:= 'detenido';
    end;
  end;
end;

(Observa que ya no hace falta poner "Notify" a "True" porque no necesitamos que se ejecute el evento "OnNotify")

Para que el Timer no esté permanentemente ejecutándose podemos desactivarlo una vez que concluya la reproducción y volverlo activar cuando se vuelva a reproducir el archivo (a través de la propiedad "Enabled"). Otra cosa a tener en cuenta es que, por defecto, el Timer nos avisará cada segundo del estado de la reproducción, por lo que puede haber un desfase desde que empieza o termina el archivo hasta que nos informa del estado. Para solucionar este desfase podríamos poner la propiedad "Interval" a 100, en vez de a 1000, lo cual da buen resultado (aunque todo es cuestión de probar).

Saludos!
Responder Con Cita
  #4  
Antiguo 07-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por jmariano
Creo que no estás comprendiendo bien el evento "OnNotify" del MediaPlayer.
Todo pudiera ser... ¡lo raro sería lo contrario!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 07-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
No me refería a tí dec! jeje!

(Es que posteaste justo cuando estaba terminando de mandar el mensaje!)

Saludos!
Responder Con Cita
  #6  
Antiguo 07-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No; si sé que no te referías a mí, directamente, pero, podrías haberlo hecho, perfectamente, porque del uso del "TMediaPlayer" no es que sepa demasiado que digamos... si ya lo he dicho antes, ¿qué sé yo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 08-09-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
Correcto, lo voy a intentar. gracias por su tiempo a ambos!
Responder Con Cita
  #8  
Antiguo 08-09-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
Excelente, funciona tal cual como lo mensionaron, justo lo que requeria.

No cabe duda de que el que sabe... sabe!

pero ahora, abusando de sus conocimientos:

Existe relacion entre la propiedad 'length' y 'position' del media player, supongo que ya saben lo que lo estoy buscando.

conocer el tiempo de duracion de la cancion y referenciar su avance aun etiqueta que me muestre el timpo que resta o que lleva reproduciendo. asi como una track bar.

Se me ha ocurrido hacerlo externamente mientras investigo lo de length y position hacerlo asi:

cuando inicie la reproduccion capturar el "tiempo" (minutos y segundos) actual en una variable, y con un otro timer en cada segundo, la hora actual compararla con la variable que contiene la tiempo de inicio. esto hasta que termine la cancion en reproduccion. Pero asi solo podria obtener el tiempo que transcurre.

Por ello quiero saber como funciona la propiedad length, son milesimas de segundos lo que muestra? tendria que crear un funcion que las convirtiera a minutos? que me sugieren ?


Gracias de antemano.
Responder Con Cita
  #9  
Antiguo 08-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Mira en la ayuda de Delphi la descripción de las propiedades "Length", "Position" y "TimeFormat".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:06:30.


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