gentoo linux, java, software libre y otras hierbas
jul, 18 2008 - 5:16 pm

[codigo] Cargar y reproducir audio en Java

En esta ocasión explicaré un sencillo ejemplo de reproducción de audio en Java, tomado del libro How-to program in Java de Deitel. La clase que utilizamos para este tipo de propósitos es AudioClip, que posee tres simples métodos:

  • play(), para reproducir una vez el archivo que le tengamos asociado
  • loop(), para reproducir indefinidamente el archivo que le tengamos asociado
  • stop(), para detener el sonido que se está reproduciendo

Para iniciar un objeto AudioClip utilizamos el método getAudioClip, de la clase Applet, de la siguiente manera: getAudioClip(getDocumentBase(),”archivo.wav”).

El resultado…

El código…

// Cargar un clip de audio y reproducirlo.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CargarAudioYReproducir extends JApplet {
   private AudioClip sonido1, sonido2, sonidoActual;
   private JButton reproducirSonido, sonidoContinuo, detenerSonido;
   private JComboBox seleccionarSonido;
   // cargar la imagen cuando el subprograma empiece a ejecutarse
   public void init()
   {
      Container contenedor = getContentPane();
      contenedor.setLayout( new FlowLayout() );
      String opciones[] = { "Welcome", "Hi" };
      seleccionarSonido = new JComboBox( opciones );
      seleccionarSonido.addItemListener(
         new ItemListener() {
            // detener sonido y cambiarlo por el que seleccionó el usuario
            public void itemStateChanged( ItemEvent e )
            {
               sonidoActual.stop();
               sonidoActual =
                  seleccionarSonido.getSelectedIndex() == 0 ? sonido1 : sonido2;
            }
         } // fin de la clase interna anónima
      ); // fin de la llamada al método addItemListener
      contenedor.add( seleccionarSonido );
      // establecer botones y manejador de eventos de botón
      ButtonHandler manejador = new ButtonHandler();
      reproducirSonido = new JButton( "Reproducir" );
      reproducirSonido.addActionListener( manejador );
      contenedor.add( reproducirSonido );
      sonidoContinuo = new JButton( "Continuo" );
      sonidoContinuo.addActionListener( manejador );
      contenedor.add( sonidoContinuo );
      detenerSonido = new JButton( "Detener" );
      detenerSonido.addActionListener( manejador );
      contenedor.add( detenerSonido );
      // cargar sonidos y establecer sonidoActual
      sonido1 = getAudioClip( getDocumentBase(), "welcome.wav" );
      sonido2 = getAudioClip( getDocumentBase(), "hi.au" );
      sonidoActual = sonido1;
   } // fin del método init
   // detener el sonido cuando el usuario cambie de página Web
   public void stop()
   {
      sonidoActual.stop();
   }
   // clase interna privada para manejar eventos de botón
   private class ButtonHandler implements ActionListener {
      // procesar eventos de reproducir, sonido continuo y detener
      public void actionPerformed( ActionEvent eventoAccion )
      {
         if ( eventoAccion.getSource() == reproducirSonido )
            sonidoActual.play();
         else if ( eventoAccion.getSource() == sonidoContinuo )
            sonidoActual.loop();
         else if ( eventoAccion.getSource() == detenerSonido )
            sonidoActual.stop();
      }
   } // fin de la clase ButtonHandler
} // fin de la clase CargarAudioYReproducir

Descargar código fuente

Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

44 Comentarios | deja el tuyo

44 Comentarios en “[codigo] Cargar y reproducir audio en Java”

  1. David dice:

    Oye necesito de tu ayuda, hice un taductor de ingles a español en un arreglo vidimencional, pero necesito que la palabra que arroge la reprodusca, podrias ayudarme, te lo agradeceria.

  2. Cristian dice:

    Hola David…

    En ese caso es mejor usar algún software externo que vocalice cosas… y lo ejecutas desde tu programa.

    Un saludo!

  3. ALLESHA dice:

    hola me parece mas que bueno tu programa…. ahora quiero tu ayuda debo elaborar una tabla de hash (diccionario) y no se como hacerlo

  4. julio dice:

    Por que tu programa funciona con los archivos proporcionado, pero cuando cambie el nombre del archivo por un .vox o por un .mp3 y los recompile el applet no funciona.
    Cuales son los archivos que soporta?

  5. claudio olivares dice:

    hola sabes veo que eres seco,me gustaria saber si me puedes ayudar en una cosa respecto al codigo del mp3, necesito tres cosas, 1 que al seleccionar una cancion y se reproduce aparesca una imagen referente en la interfaz, 2 que al hacer doble click en una cancion se empiece a reproducir y tambien aparesca la imagen referente, 3 que al escribir el tema en una ventanita lo busque y lo reprodusca…. Espero no molestar demaciado pero me imagino para ti debe ser algo no muy dificil..
    ojala respondas

  6. claudio olivares dice:

    si me respondes te envio el archivo del mp3 que tengo y la interfaz grafica relacionada, para ver que puedes hacer .. por fa necesito hacerlo urgente..

  7. JoOose dice:

    tgo problemas kuando dice hi.au y el otro sonido lo pongo en el mismo paquete copio todo y no sale el sonido deberia salir cambio por ejemplo c:\\hi.au primero lo pego en c claro esta y tampoco ayuda porfa graxias por su rpta por si akaso utilizo netbeans 6.8 o 6.5

  8. german dice:

    como hago para agregar mas de 2 sonidos??:S
    getSelectedIndex()==0?sonido1:sonido2

    no me permite agregar un tercero.
    disculpa las molestias que recien me inicio,gracias

  9. mauricio dice:

    Hola, necesito un programa para reproducir música de una memoria o de un iPod (de los que aparecen como volumen estilo disco duro o una memoria flash) en JEE, este mismo me sirve?…gracias
    correo: hernandez_mauricio@comunidad.unam.mx

  10. novatillo dice:

    podrias decirme como reproducir mp3, profa =D

  11. novatillo dice:

    pero mi duda es como conseguir la libreria, ya que la he buscado pero no la encuentro, lo que quiesiera saber es como se llama la libreria, y si pueden, pues como declararla tambien. Gracias =D

    • Mauricio dice:

      No se a qué te refieras, pero si usas Eclipse te sale la opción de importar la librería adecuada, si te refieres al reproductor SWF creo que no se necesita…trata de ser un poco más específico…

  12. antonio dice:

    hola cristian oye yo necesito que me ayudes a crear un reproductor multimedia
    te lo agradeceria con mucho gusto

  13. Jose dice:

    hola amigo muchas gracias por el codigo me ha sido de mucha ayuda pero tengo una pequeña duda es que yo le quiero meter mas de dos pistas de audio para reproducir por ahi lei que le sugerias a alguien con un switch pero no c donde ponerlo por favor podrias pasarme el codigo ya con el switch implementado a este correo inclinednike@gmail.com o si lo publicas aqui pss tambien estaria bien espero y me puedas ayudar y disculpa las molestias

  14. jhonn dice:

    hola amigo necesito que me ayudes a crear un reproductor de video en una aplicacion de java tela agradeceria muchisimo

  15. Omar dice:

    Hola,
    quisiera saber si al momento de llamar la función getAudiocClip, el String del nombre del archivo puede estar compuesto por l dirección completa, es decir, dese el C:/users/…. si es así, como deben ser los separadores de folders? deben ser ‘/’ o ‘\’ o dobles, o algo así? gracias

¡Déjanos tu comentario!