Reproduzir .wav

4 respostas
toninhocell

Pessoal estou com uma problema estranho em um aplicativo que executa .wav, seguinte, durante o momento que estou editando o código do aplicativo seja no Debug ou execução normal ele funciona corretamente, porem ao criar o arquivo .jar do aplicativo ele não mais executa o arquivo de áudio .wav e também não apresenta nenhum erro de execução.

O está ocorrendo?

Um abraço a todos e até mais!

4 Respostas

Tomassoni

Cara como vc esta pegando o arquivo de som?!

Marky.Vasconcelos

Esse arquivo de som está dentro do jar?

Como você carrega ele?

URL fileUrl = Object.class.getClassLoader().getResource("dir/name.ext");
File file = new File(fileUrl.getFile());
toninhocell

Ele está dentro do jar.

Seguinte estou utilizando javax.sound.*; para executar o audio.

Com AePlayWave extends Thread eu faço a chamada da execução do meu aplicativo e o danado só executa durante o momento em que estou trabalhando no código.

package alarme;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.FloatControl;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.UnsupportedAudioFileException;

public class AePlayWave extends Thread {

private String filename;

private Position curPosition;

private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb

enum Position {
	LEFT, RIGHT, NORMAL
};

public AePlayWave(String wavfile) {
	filename = wavfile;
	curPosition = Position.NORMAL;
}

public AePlayWave(String wavfile, Position p) {
	filename = wavfile;
	curPosition = p;
}

public void run() {

	File soundFile = new File(filename);
	if (!soundFile.exists()) {
		System.err.println("Wave file not found: " + filename);
		return;
	}

	AudioInputStream audioInputStream = null;
	try {
		audioInputStream = AudioSystem.getAudioInputStream(soundFile);
	} catch (UnsupportedAudioFileException e1) {
		e1.printStackTrace();
		return;
	} catch (IOException e1) {
		e1.printStackTrace();
		return;
	}

	AudioFormat format = audioInputStream.getFormat();
	SourceDataLine auline = null;
	DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

	try {
		auline = (SourceDataLine) AudioSystem.getLine(info);
		auline.open(format);
	} catch (LineUnavailableException e) {
		e.printStackTrace();
		return;
	} catch (Exception e) {
		e.printStackTrace();
		return;
	}

	if (auline.isControlSupported(FloatControl.Type.PAN)) {
		FloatControl pan = (FloatControl) auline
				.getControl(FloatControl.Type.PAN);
		if (curPosition == Position.RIGHT)
			pan.setValue(1.0f);
		else if (curPosition == Position.LEFT)
			pan.setValue(-1.0f);
	} 

	auline.start();
	int nBytesRead = 0;
	byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

	try {
		while (nBytesRead != -1) {
			nBytesRead = audioInputStream.read(abData, 0, abData.length);
			if (nBytesRead >= 0)
				auline.write(abData, 0, nBytesRead);
		}
	} catch (IOException e) {
		e.printStackTrace();
		return;
	} finally {
		auline.drain();
		auline.close();
	}

}

}

A execução e feita.

new AePlayWave( "alarme.wav" ).start(); // executa

toninhocell

Pessoal creio que resolvi o problema.

Coloque meu arquivo de áudio em um diretório externo a minha aplicação e no Manifest eu alterei o Class-Path indicando o caminho para o arquivo, da seguinte forma: Class-Path: audio/, com isso é só colocar a na pasta audio o arquivo .wav que eu quero executar e pronto. Contanto que o nome dele seja o mesmo que coloquei na aplicação.

Galera um GRANDE ABRAÇO a todos do fórum e muitíssimo obrigado pela ajuda!

PS: Posta ia como eu faço para colocar código no forum de maneira mais organizada! :smiley:

Até mais…

Criado 27 de março de 2008
Ultima resposta 28 de mar. de 2008
Respostas 4
Participantes 3