Som em java - SourceDataLine

Ola galera,

Tudo bom?

Estou desenvolvendo um aplicativo em java que utiliza som, usei a linha Clip que somente carrega no máximo 32 arquivos de som e como carrego uns 50 arquivos de som, optei pela linha SourceDataLine, porém na minha maquina e na máquina do meu irmão roda normalmente o som (Windows 7 e Windows Vista), respectivamente, hoje estava na faculdade e fui testar na máquina de dois amigos e som não tocou (Windows 7 e Windows XP), o que pode ser?

Dá uma olhada no Código:


/* Carrega o clipe ao qual pode ser tocado, parado, resumido e loopado
 * 
 * Um objeto implementando a interface SoudWatcher pode ser notificada quando clip
 * loopar ou parar. 
 */


import java.io.*;
import javax.sound.sampled.*;
import javax.sound.sampled.DataLine.Info;
import java.text.DecimalFormat;

public class SomInfo implements LineListener {
	
	private final static String SOUND_DIR = "/Sons/";
	
	private String name, filename;
	private static SourceDataLine clip = null;
	private boolean isLooping = false;
	private SoundsWatcher watcher = null;
	private DecimalFormat df;
	private static AudioInputStream stream;
	
	public SomInfo(String nm, String fnm) {
		name = nm;
		filename = SOUND_DIR  + fnm;
		df = new DecimalFormat("0.#");
		
		//loadClip(filename);
		
		
	} // fim do construtor
	
	private void loadClip(String fnm) {
		
		try {
			// linka o Audio Stream com o arquivo
		    stream = AudioSystem.getAudioInputStream(
										getClass().getResourceAsStream(fnm));
			AudioFormat formato = stream.getFormat();
			
			// converte os formatos ULAW E ALAW para PCM
			if((formato.getEncoding() == AudioFormat.Encoding.ULAW)||
				(formato.getEncoding() == AudioFormat.Encoding.ALAW)){
				AudioFormat novoFormato = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
														  formato.getSampleRate(),
														  formato.getSampleSizeInBits()*2,
														  formato.getChannels(),
														  formato.getFrameSize()*2,
														  formato.getFrameRate(), true);
														   //big_Endian
				//atualiza os streams e os detalhes dos formatos
				stream = AudioSystem.getAudioInputStream(novoFormato, stream);
				System.out.println("Converte o formato de Audio: " + novoFormato);
				formato = novoFormato;
				}
				DataLine.Info info = new DataLine.Info(SourceDataLine.class, formato);
				
				// tenha certeza que o sistema suporta o DataLine
				if(!AudioSystem.isLineSupported(info)) {
					System.out.println("Não suporta no DataLine " + fnm);
					return;
				}
				// pega a linha do clip
				clip = (SourceDataLine)AudioSystem.getLine(info);
				System.out.println("Tamanho: " + clip.available());
				//Ouvindo os eventos do clip
				clip.addLineListener(this);
				clip.open(formato); // abre o arquivo de som como um clip
				//play();
				
		}
		catch(UnsupportedAudioFileException auioException) {
			System.out.println("Não suportado o arquivo de audio: " + fnm);
		}
		catch(LineUnavailableException lineException) {
			System.out.println("Nenhuma linha suportada: " + fnm);
		}
		catch(IOException ioException) {
			System.out.println("Erro de I/O: " + fnm);
		}
		catch(Exception e) {
			System.out.println("Problema com: " + fnm);
		}
	} // fim do método


		public void update(LineEvent lineEvent) {
			/* Chamada quando há a detecção de abertura, fechamento, começo ou a 
			 * paralisação dos eventos. O watcher se há uma saída notificada.
			 */
			
			//Quando o clip é parado/ chegou ao final.
	
			if(lineEvent.getType() == LineEvent.Type.STOP) {
				System.out.println("Atualiza STOP para: " + name); 
				clip.stop();
	
				if(!isLooping) { // não está loopando?
					if(watcher != null) {
						watcher.atSequenceEnd(name, SoundsWatcher.STOPPED);
					}
				}
				
			}
		} // fim do método
		public void close() {
			if(clip != null) {
				clip.stop();
				clip.close();
			}
		}
		 public void play() {
		 /*Carrega o som em tempo real */
			 
		   loadClip(filename);
		  
		    int numRead = 0;
		    byte[] buffer = new byte[clip.getBufferSize()];
		    clip.start();
		    // le e toca os streams de audio
		    try {
		      int offset;
		      while ((numRead = stream.read(buffer,0, buffer.length)) >= 0) {
		        // System.out.println("Lê: " + numRead);
		        offset = 0;
		        while (offset < numRead)
		          offset += clip.write(buffer, offset, numRead-offset);
		      }
		    }
		    catch (IOException e) 
		    {  System.out.println( e.getMessage()); }

		    // Espera até todos os bytes passarem pelo mixer
		    clip.drain();
		    clip.stop();
		    clip.close();
		  } 

		public void stop() {
			// para e reinicia a track
			
			if(clip != null) {
				isLooping = false;
				clip.stop(); 
	
			}
		}
		public void pause() {
			// para o clipe na atual posição
			
			if(clip != null) {
				clip.stop();
			}
		}
		public void resume() {
			if(clip != null) {
				clip.start();
			}
		}
		public void setWatcher(SoundsWatcher sw) {
			watcher = sw;
		}
		// outros métodos de acesso
		public String getName() {
			return name;
		}

}

vlws,