Reproducir mp3 en Java con Java Sound Api

Reproducir mp3 en Java con Java Sound Api

Recientemente para un proyecto de un software para un cliente he tenido la necesidad de reproducir un sonido cada que recibe una notificación por lo cual aprovecho y hoy te muestro una forma bastante eficiente de reproducir mp3 en Java mediante el api de Java Sound y un sencillo y práctico ejemplo en el que reproducimos este tipo de archivos de audio tan común en estos dias, te muestro el codigo fuente completo.

Como te comente al principio de este post, tuve la necesidad de implementar esta funcionalidad en un sistema donde recibian actualizaciones y se debian de notificar a los usuarios mediante un sonido de alerta.

Hay varias opciones para reproducir mp3 en java pero en esta ocasion vamos a revisar como hacerlo con Java Sound Api.

Para utilizar esta api de Java Sound necesitaremos importar unas cuantas clases.


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;

Todo inicia llamando a nuestro metodo para reproducir el sonido cuando queremos reproducir este sonido.

reproducirNotificacion();

Esta funcion luce como sigue.

public void reproducirNotificacion(){
        AudioInputStream audioInputStream;
        try {
            String ruta = getClass().getResource("/resources/sound/notification.mp3").getPath();
            URI uri = new URI(ruta);
            ruta = uri.getPath();
            
            File file = new File(ruta);
            AudioInputStream in= AudioSystem.getAudioInputStream(file);
            AudioInputStream din = null;
            AudioFormat baseFormat = in.getFormat();
            AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
                                                        baseFormat.getSampleRate(),
                                                        16,
                                                        baseFormat.getChannels(),
                                                        baseFormat.getChannels() * 2,
                                                        baseFormat.getSampleRate(),
                                                        false);
            din = AudioSystem.getAudioInputStream(decodedFormat, in);
            rawplay(decodedFormat, din);
            in.close();
        } catch (Exception ex) {
            Logger.getLogger(Monitor.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }

En esta funcion encontramos la funcion rawplay que luce asi.

private void rawplay(AudioFormat targetFormat,AudioInputStream din) throws IOException, LineUnavailableException
    {
        byte[] data = new byte[4096];
        SourceDataLine line = getLine(targetFormat);
        if (line != null)
        {
          line.start();
          int nBytesRead = 0, nBytesWritten = 0;
          while (nBytesRead != -1)
          {
              nBytesRead = din.read(data, 0, data.length);
              if (nBytesRead != -1)
                  nBytesWritten = line.write(data, 0, nBytesRead);
          }
          line.drain();
          line.stop();
          line.close();
          din.close();
        }
    }

y por ultimo dentra de esta la funcion getLine que es como sigue,

private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
    {
      SourceDataLine res = null;
      DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
      res = (SourceDataLine) AudioSystem.getLine(info);
      res.open(audioFormat);
      return res;
    }

Y ahora se reproduce el sonido mp3 que queremos en nuestro sistema.

Para más informacion de java sound api visita su web o para más ejemplos con esta api visita jsresources.

Saludos!

Clic para valorar esta información
[Total: 1 Promedio: 5]