Ir al contenido


Foto

Problemas calculando milisegundos en Minutos y Segundos


  • Por favor identifícate para responder
3 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 07:19

Pues eso tengo problemas haciendo esos cálculos, no está cuadrando, una canción que tiene una duración de 3:40 me da 2:45, aquí­ el code (Nota: utilizo la librerí­a BASS):



delphi
  1. procedure TForm1.grListaDblClick(Sender: TObject);
  2. var
  3.   Duracion: DWORD;
  4.   Minutos, Segundos: WORD;
  5. begin
  6. if Not FileExists(cdsLista.Fields[1].AsString) then
  7.   begin
  8.     ShowMessage('Este archivo no existe o fue movido de sitio.');
  9.   end else begin
  10. //obtenemos la información de la canción
  11. ObtenerID3Tag(cdsLista.Fields[1].asstring,Titulo,Artista,Album,Ano,Genero,Comentario,Calidad);
  12.  
  13. //Libramos la canción en memoria
  14. BASS_StreamFree(Channel);
  15. //tocamos la canción
  16. Channel := BASS_StreamCreateFile(False, PChar(cdsLista.Fields[1].asstring), 0, 0, 0);
  17. if Channel = 0 then
  18.   Channel := BASS_MusicLoad(False, PChar(cdsLista.Fields[1].asstring), 0, 0, 0, 0);
  19.   BASS_ChannelPlay(Channel, False);
  20.  
  21. // MOstramos la duración de la cancion
  22. Duracion := BASS_StreamGetFilePosition(Channel, BASS_FILEPOS_END);
  23. Time := BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE));
  24. Minutos  := ((Duracion div 60) div 1000) div 60;
  25. Segundos := (Duracion div 1000) - (((Duracion div 1000) div 60) * 60);
  26. lbTimeTotal.Caption := IntToStr(Round(Minutos))+':'+IntToStr(Segundos);
  27.  
  28. //mostramos la información de la canción
  29. lbTitulo.Caption  := Titulo;
  30. lbArtista.Caption := Artista;
  31. lbAlbum.Caption  := Album;
  32. lbGenero.Caption  := Genero;
  33. end;
  34. end;



El valor en milisegundos de 3:40 es de 8805355 que es lo que lanza la librerí­a BASS.

Saludos.
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 08:36

Bueno debo hacer una corrección ya que el valor 8805553 son los frames, en realidad es:



delphi
  1. Tiempo  := BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE));



Aquí­ saco el tiempo de playback que me da un valor de 220.1338..., los minutos lo puedo sacar así­:



delphi
  1. Minutos  := Round(Tiempo / 60);



y los segundos así­:



delphi
  1. Segundos := Round((Tiempo / 1000)) - Round((((Tiempo / 1000) / 60) * 60));



Pero aún no me cuadra :(

Saludos.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 09:16

Gracias a la ayuda de eduarcol el asunto ha quedado, y que da así­:



delphi
  1. // MOstramos la duración de la cancion
  2. Tiempo  := BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE));
  3. Longitud := BASS_StreamGetFilePosition(Channel, BASS_FILEPOS_END);
  4. Minutos  := Round(Tiempo) div 60;
  5. Segundos := Round(Tiempo) - (Minutos * 60);
  6. lbTimeTotal.Caption := IntToStr(Minutos)+':'+IntToStr(Segundos);



Queda de perlas (y) (b)

Saludos.
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 11 julio 2009 - 09:28

La diferencia estaba es que el codigo anterior era para milisegundos y la funcion retornaba segundos
  • 0




IP.Board spam blocked by CleanTalk.