Mensajes [1] - Enviado el Viernes 25 de Julio de 2008 a las 06:24hs
Hola a todos. La funci?n mciSendString de la API MCI no devuelve el tiempo real del archivo MP3.
S?lo sucede con el 5% de los MP3 que he probado y no s? porqu?.
Sin embargo con el mismo MP3 en un reproductor como WinApm, si muestran el tiempo correcto.
SO: Win XP
CODIGO:
// Declaraci?n al principio de la clase
[DllImport("winmm.dll")]
private static extern int mciSendString(string lpstrCommand,
StringBuilder lpstrReturnString, int uReturnLengh, int hwndCallback);
///
/// Calcula el tama?o del archivo abierto para reproduccion.
///
/// Determina si devuelve el tama?o en milesimas o segundos
public long CalcularTamanyo(bool milisegundos)
{
// El archivo ya est? abierto con formato type MPEGVIDEO.
int MAX_PATH = 260;
StringBuilder sbBuffer = new StringBuilder(MAX_PATH);
mciSendString("set ArchivoMp3 time format milliseconds", null, 0, 0);
// Obtenemos el largo del archivo, en millisegundos.
mciSendString("status ArchivoMp3 length", sbBuffer, MAX_PATH, 0);
// Si el buffer contiene informaci?n...
if (sbBuffer.ToString() != "")
{
if (milisegundos)
{
return long.Parse(sbBuffer.ToString());
}
else
{
// la devolvemos, formateando la salida a entero largo;
return long.Parse(sbBuffer.ToString()) / 1000;
}
}
else // si no, devolvemos cero.
{
return 0L;
}
}