hola a todos, al fin solucione este problema del sonido y es algo que me sorprende que no sea halla tenido en cuenta en tutoriales y que tiene que ver con el lenguaje Java, no con el pc. A que me refiero:
la típica rutina para reproducir un audio:
Código:
try {
Clip sonido = AudioSystem.getClip();
sonido.open(AudioSystem.getAudioInputStream(new File("sonido.wav")));
sonido.start();
// Espera mientras se esté reproduciendo.
while (sonido.isRunning())
Thread.sleep(1000);
sonido.close();
} catch (Exception e) {
}
El problema que encontre, es que a veces el tipico método isRunning devuelve false, aun cuando del sonido ya se halla iniciado con start, y lo mismo ocurre con isActive, entonces acá es mejor tener un do while.
Código:
do{
Thread.sleep(1000);
}while (sonido.isRunning());
o con isActive().
y de seguro que nunca fallará.
y todo esto porque: ni idea no puedo ver el codigo del método "start" de la clase "Clip", pero supongo que tiene que ver con la creación de un hilo que se encarga de tomar el contenido del audio por partes, y hacer un poconon de procesos. Pero lo que si es cierto es que el do-while, da tiempo a que el metodo start haga todo su trabajo, incluido el necesario para que isRunning devuelva lo que tiene que ser.

chao.
me respondi solo pero bueno los foros son para eso: ayudar y compartir.
para el que la necesite:
la clase ideal para reproducir en java es:
código java:
Código PHP:
public class hiloSonido extends Thread{
private Clip sonido;
private boolean seguir;
public hiloSonido(String rutaArchivo){
seguir=true;
try {
sonido = AudioSystem.getClip();
sonido.open(AudioSystem.getAudioInputStream(new File(rutaArchivo)));
} catch (UnsupportedAudioFileException ex) {
Logger.getLogger(ReproduceSonido.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ReproduceSonido.class.getName()).log(Level.SEVERE, null, ex);
} catch (LineUnavailableException ex) {
Logger.getLogger(ReproduceSonido.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run(){
sonido.start();
// Espera mientras se esté reproduciendo.
do{
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(ReproduceSonido.class.getName()).log(Level.SEVERE, null, ex);
}
}while (seguir && sonido.isActive());
if(sonido.isActive()){
sonido.stop();
}
// Se cierra el clip.
sonido.close();
}
public void parar(){
seguir=false;
}
}