Java som - Clip

Ola galera,

Estou trabalhando com a Classe Clip como tipo de linha e existe uma forma de vc configurar o tamanho do buffer de cada linha, nesse método open:

void open(AudioFormat format, byte[] data, int offset, int bufferSize).

Porém eu gostaria de ver um exemplo na prática utilizando esse método, o array de byte data, eu tenho que criar e colocar na programação cada som, como funciona?!

abraço,

da uma olhada no google numa pesquisadinha rapida achei muida coisa se tiver duvidas em algum codigo ai volte a postar

http://www3.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html
http://www.java2s.com/Code/Java/Development-Class/ASwingcomponentthatcanloadandplayasoundclipdisplayingprogressandcontrols.htm
http://www.java2s.com/Code/Java/Development-Class/AnexampleofloadingandplayingasoundusingaClip.htm

De uma olhada vou postar o 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 Clip clip = null;
	private boolean isLooping = false;
	private SoundsWatcher watcher = null;
	private DecimalFormat df;
	private TargetDataLine linha;
	private byte dados[] = new byte[50];
	
	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
			AudioInputStream 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(Clip.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 = (Clip)AudioSystem.getLine(info);
				System.out.println("Clip: " + clip.toString());
				//Ouvindo os eventos do clip
 				clip.addLineListener(this);
				clip.open(formato,dados,500,1000); // abre o arquivo de som como um clip
				clip.close();
				checkDuration();
				
		}
		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
	
			 
		private void checkDuration() {
		// duração em segundos do clipe ----- duração > 1 segundo
			double duracao = clip.getMicrosecondLength()/1000000.0; // novo
			
				if(duracao <= 1.0) {
					System.out.println("Aviso. duração < 1: " + df.format(duracao) +
										" segundos");
					System.out.println("O arquivo do clipe não pode tocar em J2SE 1.5" +
										"fazendo-o maior");
					
				}
				else {
					System.out.println(filename + ": Duração " + df.format(duracao) +
										" segundos.");
				}
		} // fim do método
		
		public void update(LineEvent lineEvent){System.out.println("som fail");}
		
		//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();
				clip.setFramePosition(0); // novo
				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(boolean toLoop) {
			if(clip != null) {
				isLooping = toLoop;
				clip.start(); // começa a tocar
			}
		}
		public void stop() {
			// para e reinicia a track
			
			if(clip != null) {
				isLooping = false;
				clip.stop(); 
				clip.setFramePosition(0); 
			}
		}
		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;
		}

}

Eu gostaria aumentar o buffersize da linha, to usando a linha clip que carrega todos os sons antes para depois tocar, somente isso, eu li na documentação que vc pode configurar o tamanho do buffer nesse método.

clip.open(formato,dados,500,1000); // abre o arquivo de som como um clip

Como apareceu na linha 71, só que quando eu coloco os argumentos do metodo open(), ele não toca nenhum som, vc saberia o porque!?

abraço,