PDA

Ver la Versión Completa : Tocar la Cancion siguiente con el MediaPlayer


pockelsm3
29-11-2007, 17:55:47
Buenas, tengon un inconveniente con una applicacion que estoy desarrollando para tocar musica, videos y peliculas.

mi problema consiste en que cuando quiero avanzar a la siguiente mientras ya esta tocando alguna, me da un el siguiente error

MCIDiviceError with message 'cannot determine the divice type from the given filename extension' :confused:

Este es el codigo que estoy utilizando


procedure TFMain.MPSoundNotify(Sender: TObject);
begin
if MPSound.Mode = mpPlaying then
begin
MPSound.Close;
TCanciones.DisableControls;
TCanciones.First;
TCanciones.Delete;
TCanciones.EnableControls;
MPSound.FileName := TCancionesRUTA.Value;
MPSound.Open;
MPSound.Play;
end;
end;

pockelsm3
29-11-2007, 18:00:30
:eek:Disculpen que el codigo anterior lo utiliza para que pase de una cancion a otra, cuando la que estaba sonando termine.

este es el codigo correcto que estoy utilizando

procedure TFMain.NextClick(Sender: TObject);
begin
MPSound.Stop;
MPSound.Close;
TCanciones.DisableControls;
TCanciones.First;
TCanciones.Delete;
TCanciones.EnableControls;
MPSound.FileName := TCancionesRUTA.Value;
MPSound.Open;
MPSound.Play;
end;

Gracias de antemano

enecumene
29-11-2007, 18:46:57
Hola, una pregunta, cual es la funcion del delete que estas haciendo, borras un dato en la tabla canciones?, no le veo sentido, intenta sin el delete:

procedure TFMain.NextClick(Sender: TObject);
begin
MPSound.Stop;
MPSound.Close;
TCanciones.DisableControls;
TCanciones.First;
TCanciones.EnableControls;
MPSound.FileName := TCancionesRUTA.Value;
MPSound.Open;
MPSound.Play;
end;

Saludos.

pockelsm3
29-11-2007, 23:43:24
Gracias por responder

pero si te fijas en el codigo fuente siempre estoy mandado a tocar el primer registro de la tabla, que por eso mando a posicionarse en el primer registro para poder eliminarlo para luego tocar el nuevo registro posicionado en el primer lugar

Hola_mundo
06-12-2007, 18:27:24
Yo resoloví un problema parecido de la siguiente manera: cree una tabla con el Data Base desktop en donde en uno de los campos guardo como un Tipo Alpha el Path donde se encuentra el tema. Y en el preimero de los dos Campos creados coloco un "ID" para Identificar cada path (El campo "ID" es un numero del tipo Long Integer).
Con este Campo "Id" logre , como veras en la primera parte del codigo, que cuando pulses el boton "siguiente" o "next" y estes parado en el ultimo registro de la tabla, automaticamente pases al primero.

procedure TFormTrack.SpeedButton2Click(Sender: TObject);
begin // En esta parte detecto si es el ultimo registro y paso al primero.
if DBGRID1.Columns.Items[0].Field.ASinteger = 13 then begin //Esta linea apunta a una columna del DBGrid1 donde se encuentra el nuero "ID" del tema o track, el cual convierto del tipo TField a un INTEGER y lo comparo con el ultimo registro de la tabla (en mi caso el N° 13)
query1.First; // Si es el ultimo, paso al primero.
MediaPlayer1.FileName := DBGRID1.Columns.Items[1].Field.ASSTRING; //Esta linea apunta a una columna del DBGrid1 donde se encuentra el path del tema o track, el cual convierto del tipo TField a un String, para que sea compatible con la propiedad MediaPlayer1.FileName
MediaPlayer1.Open;
MediaPlayer1.Play;
end
else //Sino no es el ultimo, paso al sigueinte.
QUERY1.Next;
MediaPlayer1.FileName := DBGRID1.Columns.Items[1].Field.ASSTRING;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;



Espero que te sirva....tiene muchas explicaiones....peroes facil de entender...y no son muhcas lineas de codigo, son solo 9 y contadas.

Hola_mundo
06-12-2007, 18:32:19
Yo resoloví un problema parecido de la siguiente manera: cree una tabla con el Data Base desktop en donde en uno de los campos guardo como un Tipo Alpha el Path donde se encuentra el tema. Y en el preimero de los dos Campos creados coloco un "ID" para Identificar cada path (El campo "ID" es un numero del tipo Long Integer).
Con este Campo "Id" logre , como veras en la primera parte del codigo, que cuando pulses el boton "siguiente" o "next" y estes parado en el ultimo registro de la tabla, automaticamente pases al primero.

procedure TFormTrack.SpeedButton2Click(Sender: TObject);
begin // En esta parte detecto si es el ultimo registro y paso al primero.
if DBGRID1.Columns.Items[0].Field.ASinteger = 13 then begin //Esta linea apunta a una columna del DBGrid1 donde se encuentra el nuero "ID" del tema o track, el cual convierto del tipo TField a un INTEGER y lo comparo con el ultimo registro de la tabla (en mi caso el N° 13)
query1.First; // Si es el ultimo, paso al primero.
MediaPlayer1.FileName := DBGRID1.Columns.Items[1].Field.ASSTRING; //Esta linea apunta a una columna del DBGrid1 donde se encuentra el path del tema o track, el cual convierto del tipo TField a un String, para que sea compatible con la propiedad MediaPlayer1.FileName
MediaPlayer1.Open;
MediaPlayer1.Play;
end
else //Sino no es el ultimo, paso al sigueinte.
QUERY1.Next;
MediaPlayer1.FileName := DBGRID1.Columns.Items[1].Field.ASSTRING;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;


Espero que te sirva....tiene muchas explicaiones....peroes facil de entender...y no son muhcas lineas de codigo, son solo 9 y contadas.