Java - Reproducir audio con Java "sin latencia"

 
Vista:

Reproducir audio con Java "sin latencia"

Publicado por Josep M Andrés Moscardó (3 intervenciones) el 23/09/2011 23:15:23
Hola, me presento. Soy Josep Manel, estudiante de informática. Estoy poniendo en marcha un proyecto que consiste en un disparador de samples (trozos de audio) usando Java. Para ello utilizo la libreria JMF. El problema es que obtengo un retraso entre que puso el jBotton y cuando empieza a escucharse el sonido.

Supongo que para obtener una latencia razonable no deberia de codificarlo con Java. ¿Que opinais?

1a pregunta. ¿Es la mejor opción utilizar JMF?
2a pregunata ¿Deberia cargar el player cuando se pulsa el botón?


Declaro el codec en el constructor:

public Principal() {
initComponents();
/////////////////////////////

//Agrupem els botons
butGroupTot.add(rdbCurta);
butGroupTot.add(rdbLlarga);
////////////////////////////////////////////////////////////
Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
Format input2 = new AudioFormat(AudioFormat.MPEG);
Format output = new AudioFormat(AudioFormat.LINEAR);
PlugInManager.addPlugIn(
"com.sun.media.codec.audio.mp3.JavaDecoder",
new Format[]{input1, input2},
new Format[]{output},
PlugInManager.CODEC
);
}

Y cargo el Player quando se pulsa el boton.

private void jButVivaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
Player player = Manager.createPlayer(getClass().getResource("/Audios/corte1.mp3"));
player.start();
}
catch(Exception ex){
ex.printStackTrace();
}

}


Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Reproducir audio con Java

Publicado por Tom (1831 intervenciones) el 25/09/2011 19:04:38
Yo no he "jugado" mucho con el audio en java, pero creo que si tienes memoria suficiente (seguro que sí :)) podrías intentar cargar los ficheros lo antes posible para evitar ese retraso (supongo que por el acceso a disco y predecodificación del fichero) en el evento del botón. Si tienes varios samples ¿has probado si funciona tener varios player ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reproducir audio con Java

Publicado por Josep Manel (3 intervenciones) el 27/09/2011 00:25:34
He creado dos players y no me da buen resultado. Cuando reproduzco una vez cada sonido, no me deja reproducirlo mas.

public class Principal extends javax.swing.JFrame {
//
public String totOpcio = "Llarga";
Player player, player1;
/** Creates new form Principal */
public Principal() {
initComponents();
try {
/////////////////////////////
player = Manager.createPlayer(getClass().getResource("/Audios/viva-el-vino-tall.mp3"));
player1 = Manager.createPlayer(getClass().getResource("/Audios/to-los-anys-tall-curt.mp3"));

} catch (IOException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
}
//Agrupem els botons
butGroupTot.add(rdbCurta);
butGroupTot.add(rdbLlarga);
////////////////////////////////////////////////////////////
Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
Format input2 = new AudioFormat(AudioFormat.MPEG);
Format output = new AudioFormat(AudioFormat.LINEAR);
PlugInManager.addPlugIn(
"com.sun.media.codec.audio.mp3.JavaDecoder",
new Format[]{input1, input2},
new Format[]{output},
PlugInManager.CODEC
);


}

Luego disparo los samples al pulsar el boton.


private void jButVivaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{

player.start();
}
catch(Exception ex){
ex.printStackTrace();
}

}


Gracias por todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reproducir audio con Java

Publicado por Facundo (1 intervención) el 26/11/2012 19:44:46
Estoy interesado tambien en minimzar la latencia en java.. pudiste lograrlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar