Esportazione suoni nel .jar

di il
1 risposte

Esportazione suoni nel .jar

Finalmente ho quasi finito il programma, ora l'unica cosa che devo mettere a punto è questa!
Finchè eseguo il programma su eclipse tutto ok, ma nel momento in cui lo esporto in un file .jar non viene più riprodotta la musica.
Ecco la classe Suono:
public class Suono implements Runnable{
	File sf;
	AudioFileFormat aff;
	AudioInputStream ais;
	AudioFormat af;
	DataLine.Info info;
	Clip ol;
	Livello liv;
	String titolo;
	
	Suono(Livello l){
		liv=l;
		
		sf=sceltaFile(l.getNumLivello());
		
		try{
			aff=AudioSystem.getAudioFileFormat(sf);
			ais=AudioSystem.getAudioInputStream(sf);
			af=aff.getFormat();
			info = new DataLine.Info(Clip.class, ais.getFormat(), ((int) ais.getFrameLength() * af.getFrameSize()));
			ol = (Clip) AudioSystem.getLine(info);
		}
		catch(UnsupportedAudioFileException ee){}
		catch(IOException ea){}
		catch(LineUnavailableException LUE){};
	}
	
	void stop(){
		try{
			ol.stop();
		}
		catch(Exception e){}
	}
	
	private File sceltaFile(int n){
		
		URL url=null;
		File x=null;
		
		switch(n){
			case(1):
				url = ClassLoader.getSystemResource("musiche/Pretty handsome awkward.wav");
			break;
			
			case(2):
				url = ClassLoader.getSystemResource("musiche/2 minutes to midnight.wav");
			break;
			
			case(3):
				url = ClassLoader.getSystemResource("musiche/Rocket queen.wav");
			break;
			
			case(4):
				url = ClassLoader.getSystemResource("musiche/Metalingus.wav");
			break;
			
			case(5):
				url = ClassLoader.getSystemResource("musiche/The fight song.wav");
			break;
			
			case(6):
				url = ClassLoader.getSystemResource("musiche/Banned from heaven.wav");
			break;
			
			case(7):
				url = ClassLoader.getSystemResource("musiche/Enter sandman.wav");
			break;
			
			case(8):
				url = ClassLoader.getSystemResource("musiche/Lost to apathy.wav");
			break;
			
			case(9):
				url = ClassLoader.getSystemResource("musiche/Falling away from me.wav");
			break;
			
			case(10):
				url = ClassLoader.getSystemResource("musiche/Not falling.wav");
			break;
			
		}
		
		try {
			x = new File(url.toURI());
		} catch(URISyntaxException e) {
			//x = new File(url.getPath());
		}
		
		return x;
		
	}
	
	public void run(){
		Finestra.setCanzone(sf.getName());
		
		try{
			ol.open(ais);
			ol.start();
		}
		catch(IOException ea){}
		catch(LineUnavailableException LUE){};
		
	}
}
Credo che il pezzo determinante di codice sia questo:

try {
			x = new File(url.toURI());
		} catch(URISyntaxException e) {
			//x = new File(url.getPath());
		}
ma non so come sostituirlo perchè funzioni.
Come vedete ho tentato col metodo ClassLoader.getSystemResource(), ma dato che non esiste un costruttore di File con parametro un URL non so davvero dove mettere le mani.

1 Risposte

  • Re: Esportazione suoni nel .jar

    Il file con l'audio è all'interno del jar che crei??

    In linea generale devi sempre usare il getResource o il getResourceAsStream quando importi un file all'interno del tuo programma.
Devi accedere o registrarti per scrivere nel forum
1 risposte