Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2011, 15:04
Avatar de calichecal
calichecal
 
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 6 meses
Puntos: 12
En la busqueda de la clase perfecta para audio en java

hola a todos, siguo buscando la clase ideal, es decir una que me permita reproducir sonido de forma instantanea en una aplicacion de escritorio java:

despues de mucho bregar, encontré una librería(BasicPlayer) que me facilita mucho las cosas pero ahora el problema es la demora en la reproducción:


codigo java:

Código PHP:

import Gui
.MarcoPrincipal;
import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;



public class 
ReproduceSonido {
    
   
     
     private 
boolean sonido;
   
     
     private 
String directorio;
     private 
BasicPlayer player;
     private 
File[] vAudios;
     
  public 
ReproduceSonido(){
    
     
sonido=true;
   
     
vAudios=new File[7];
     
     
     
               
String carpetaAudio;
                        if(
MarcoPrincipal.getSo().equals("Linux")){
                        
carpetaAudio="/Audio/";
                        }else{
                        
carpetaAudio=String.valueOf((char)(92))+"Audio"+String.valueOf((char)(92)); 
                        }

     
directorio=MarcoPrincipal.getDirectorioAplicacion()+carpetaAudio;

     
vAudios[0]=new File(this.directorio+"Acierto.wav");
     
vAudios[1]=new File(this.directorio+"Error.wav");
     
vAudios[2]=new File(this.directorio+"Introduccion.wav");
     
vAudios[3]=new File(this.directorio+"PulsaBoton.wav");
     
vAudios[4]=new File(this.directorio+"Contestarprimero.wav");
     
vAudios[5]=new File(this.directorio+"Inicioprueba.wav");
     
vAudios[6]=new File(this.directorio+"Pocotiempo.wav");
  }
  
  

    public 
boolean isSonido() {
        return 
sonido;
    }

    public 
void setSonido(boolean sonido) {
        
this.sonido sonido;
    }
  
  
  
  public 
void start(int indice){
      
    


 if (
sonido) {

            
player = new BasicPlayer();
            try {
                
player.open(this.vAudios[indice]);
                
player.play();
            } catch (
BasicPlayerException ex) { }
            
       
      }
    
  }



En el programa que utiliza esta clase, solo crea una instancia de esta clase, y entonces esta se encarga de cargar en un vector de objetos “File” los 7 audios que utilizo. La clase BasicPlayer crea un hilo para cada audio cade vez que llamo a start(int indice).


El problema es que se demora un segundo en reproducir y teniendo en cuenta que uno de los audios es para cada vez que se haga clip en un JButton necesito que el audio sea casi instantáneo.

Pensé que la demora de un segundo se presentaba por tener que cargar los archivos en objetos “File”, por eso inicializo todo eso en el constructor, pero no es así, todavía se presenta esta demora...

agradezco sus recomendaciones y aportes...

PD: En otros intentos de crear una clase Audio, utilizando la clase Clip ,siempre tuve el inconveniente de que no reproduce todas las veces.
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Última edición por calichecal; 25/11/2011 a las 15:14