LineUnavailableException Som

0 respostas
F

Ola galera,

Estou carregando 50 imagens de sons na tela, após a 32º arquivo de som da uma exceção de LineInavailableException, vou mostrar meu código de som:

/* 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;
	
	
	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);
				
				//Ouvindo os eventos do clip
 				clip.addLineListener(this);
				clip.open(stream); // abre o arquivo de som como um clip
				stream.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;
		}

}

vlw,

Criado 27 de junho de 2012
Respostas 0
Participantes 1