reproducir mp3

Iniciado por cuervo, 8 Junio 2007, 20:30 PM

0 Miembros y 1 Visitante están viendo este tema.

cuervo

hola
pues el asunto es el siguiente estoy programando un juego muy sencillo y megustaria ponerle musica de fondo de unos de mis grupos pero el problema es que java solo manega midis alguien sabe de alguna clase de particulares o que se pa de algun tuto sobre el tema que me pudice informar se lo agradeceria mucho

Casidiablo

Cita de: javaHispano http://www.javahispano.org/news.item.action?id=1911876472
JavaZoom recientemente ha publicado un driver LGPL para MP3, que se une al ya existente Ogg Vorbis.

MP3 SPI (Service Provider Interface) es un driver "enchufable" al sistema JavaSound del J2SE.

JavaZoom es una web especializada en software multimedia open source, un terreno en donde, en mi opinrión, el mundo Java brilla bastante por su ausencia, pese a existir un estándar J2SE de audio y výdeo y una implementacrión open source de referencia de Sun: el Java Media Framework (JMF).

Sobre como incluir MP3 en Java hay un artículo en JavaWorld (http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3.html)

http://today.java.net/pub/n/MP3SPI1.9

cuervo

gracias Casidiablo pero no habra otra forma aparte de esa y del jmf

cuervo

hey Casidiablo con el MP3 SPI no viene nada de codigo o algo que
explique como es posible la reproduccion del mp3 por ejemplo el codigo que que uso para la musica del juego es este

import javax.sound.sampled.*;
import java.io.*;

public class SunTest extends Thread{

/*public static void main(String[] args){
SunTest p = new SunTest();
p.start();
}*/

public SunTest(){

}

public void run(){
testPlay("02_War Of The Universe.wav");
}





public void testPlay(String filename)
{
  try {
    File file = new File(filename);
    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);
    // Play now.
    rawplay(decodedFormat, din);
    in.close();
  } catch (Exception e)
    {System.out.println("SSSSS");
    e.printStackTrace();
        //Handle exception.
    }
}

private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException,                                                                                                LineUnavailableException
{
System.out.println("SSSSS");
  byte[] data = new byte[4096];
  SourceDataLine line = getLine(targetFormat);
  if (line != null)
  {
    // Start
    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);
    }
    // Stop
    line.drain();
    line.stop();
    line.close();
    din.close();
  }
}

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



simplemente reproduce el wav eso es lo que me interesa mas que nada el codigo de como se hace la reproducion no tienes alguna idea de como hacerlo o alguien.

Casidiablo

#4
Se me ocurre que utilices un programa externo y utilizar las clases Procces Y Runtime para ejecutar comandos, por ejemplo si usas linux, puedes hacer lo siguiente para reproducir un mp3:

Process p = Runtime.getRuntime().exec("mpg123 archivo.mp3");

O algo así.

Saludos!!

marioly

Cita de: Casidiablo en 12 Junio 2007, 16:57 PM
Se me ocurre que utilices un programa externo y utilizar las clases Procces Y Runtime para ejecutar comandos, por ejemplo si usas linux, puedes hacer lo siguiente para reproducir un mp3:

Process p = Runtime.getRuntime().exec("mpg123 archivo.mp3");

O algo así.

Saludos!!
Eso no seria tan bueno :P , en Java no se usa tanto la llamada de esa forma a otros procesos por que:
1.- Resta portabilidad
2.- Hace dependiente tu codigo de otras aplicaciones
:P

Si quieres usar mp3 en Java puedes usar plugins, como :
http://java.sun.com/products/java-media/jmf/mp3/download.html

saludos :)

Casidiablo

Cita de: cuervo en  9 Junio 2007, 05:33 AM
gracias Casidiablo pero no habra otra forma aparte de esa y del jmf

marioly

Pero por que lo a preguntado asi? , por que no encontraba codes de ejemplo.., por que no lo puede correr :P , hubiera sido mejor poner un ejemplo  :-X . El exec de tu post no correra la musica de fondo (que es el asunto del post), llamara a otra aplicacion que corra el mp3 lo que no es muy bueno..

Casidiablo

Cita de: marioly en 15 Junio 2007, 17:59 PM
Pero por que lo a preguntado asi? , por que no encontraba codes de ejemplo.., por que no lo puede correr :P , hubiera sido mejor poner un ejemplo  :-X . El exec de tu post no correra la musica de fondo (que es el asunto del post), llamara a otra aplicacion que corra el mp3 lo que no es muy bueno..

Exacto! Y mas aun utiliza un programa externo por lo que, como dices, el programa dejaría de ser portable. No hay duda de que es mejor hacerlo con JMF, como se había citado al principio del post.

Saludos :-*

cuervo

gracias a todos perdon por las tardanza en contestar pero estado ucupado con  la escuela por ahora estoy estudiando el codigo del
aTunes es muy interesante aunque me esta costando trabajo.
bueno gracias