es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la duración de un archivo multimedia programáticamente usando Java, se puede utilizar la clase javax.sound.sampled.AudioSystem. Sin embargo, esto solo funciona para archivos WAV. Para admitir formatos WAV y MP3, se puede usar una biblioteca como JAudioTagger o JavaZoom JLayer.

    Aquí hay un ejemplo utilizando la biblioteca JavaZoom JLayer:

    import java.io.File;
    import java.io.IOException;
    import java.text.DecimalFormat;
    
    import javazoom.jl.decoder.Bitstream;
    import javazoom.jl.decoder.BitstreamException;
    import javazoom.jl.decoder.Decoder;
    import javazoom.jl.decoder.Header;
    
    public class MediaDuration {
        public static void main(String[] args) throws IOException, BitstreamException {
            File file = new File("example.mp3");
            double duration = getDuration(file);
            System.out.println(formatDuration(duration));
        }
    
        private static double getDuration(File file) throws IOException, BitstreamException {
            Bitstream bitstream = new Bitstream(new java.io.FileInputStream(file));
            Decoder decoder = new Decoder();
            Header header = bitstream.readFrame();
    
            int totalFrames = 0;
            while (header != null) {
                totalFrames += header.framesize;
                try {
                    decoder.decodeFrame(header, bitstream);
                } catch (Exception e) {
                    break;
                }
                header = bitstream.readFrame();
            }
    
            bitstream.close();
    
            return (double) totalFrames / (double) header.sampleRate;
        }
    
        private static String formatDuration(double duration) {
            DecimalFormat df = new DecimalFormat("#.##");
            double minutes = Math.floor(duration / 60);
            double seconds = duration - (minutes * 60);
            return df.format(minutes) + ":" + df.format(seconds);
        }
    }
    

    Este código utiliza la clase Bitstream para analizar el archivo MP3, la clase Decoder para decodificar los cuadros de audio y la clase Header para leer las cabeceras de los cuadros. Luego calcula el número total de cuadros y lo divide por la frecuencia de muestreo para obtener la duración en segundos.

    El método formatDuration formatea la duración como mm:ss. Puede modificarlo para satisfacer sus necesidades.

    Para archivos WAV, se puede usar la clase AudioSystem:

    import javax.sound.sampled.*;
    
    public class MediaDuration {
        public static void main(String[] args) throws UnsupportedAudioFileException, IOException {
            File file = new File("example.wav");
            double duration = getDuration(file);
            System.out.println(formatDuration(duration));
        }
    
        private static double getDuration(File file) throws UnsupportedAudioFileException, IOException {
            AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
            if (fileFormat instanceof TAudioFileFormat) {
                Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
                String key = "duration";
                Long microseconds = (Long) properties.get(key);
                return (double) microseconds / 1000000.0;
            } else {
                AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
                AudioFormat format = audioInputStream.getFormat();
                long frames = audioInputStream.getFrameLength();
                return (double) frames / format.getFrameRate();
            }
        }
    
        private static String formatDuration(double duration) {
            DecimalFormat df = new DecimalFormat("#.##");
            double minutes = Math.floor(duration / 60);
            double seconds = duration - (minutes * 60);
            return df.format(minutes) + ":" + df.format(seconds);
        }
    }
    

    Este código utiliza la clase AudioSystem para leer el archivo WAV y obtener la duración. Si el archivo tiene una propiedad de duración válida, lo usa. De lo contrario, calcula la duración en función del número de cuadros y la velocidad de cuadros.

    Nuevamente, el método formatDuration formatea la duración como mm:ss. Puede modificarlo para satisfacer sus necesidades.

Comments are closed.