View Full Version : [java] qualcuno mi sa dire come inserire un file da suonare in questo programma?
australopiteci
20-07-2005, 20:40
Salve a tutti
ho trovato questo codice su google ma non riesco a far suonare nessun file
non capisco cosa si debba mettere in input.. ho provato a mettere il nome del file ad es. "prova.wav" ma mi da un errore.. poi ho provato anche a mettere il percorso completo, ad es. "c:\prova.wav" ma niente lo stesso..
Qualcuno mi saprebbe dire come si faccia?
import javax.swing.*;
import javax.sound.sampled.*;
import java.io.*;
public class SoundClass extends JFrame {
File sf = null;
Clip ol = null;
public void stop() { if (ol != null) ol.stop();}
public SoundClass() { }
public void play (String filename) {
AudioFileFormat aff;
AudioInputStream ais;
sf = new File(filename);
if (sf.exists()) {
try {
aff=AudioSystem.getAudioFileFormat(sf);
ais=AudioSystem.getAudioInputStream(sf);
AudioFormat af=aff.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class,ais.getFormat(),((int)ais.getFrameLength()*af.getFrameSize()));
ol = (Clip) AudioSystem.getLine(info);
ol.open(ais);
if (ol != null) {
ol.setFramePosition(0);
ol.loop(0); //ol.loop(Clip.LOOP_CONTINUOUSLY);
}
}
catch(UnsupportedAudioFileException ee){}
catch(IOException ea){}
catch(LineUnavailableException LUE){};
}
else System.out.println("errore lettura " + filename);
}
}
Alvaro Vitali
20-07-2005, 21:42
Se ti interessa io ho realizzato una classe che realizza il tuo proposito, se vuoi te la mando...
australopiteci
20-07-2005, 22:02
mi faresti davvero un grosso favore!
a me mi serve una classe per riprodurre midi e wav, non questa in particolare.. quindi va benissimo.. l'importante è che funzioni :p
Alvaro Vitali
20-07-2005, 22:06
mi dispiace la mia è solo per wav e aiff :mad:
australopiteci
20-07-2005, 22:11
va bene.. almeno i wav.. meglio di nulla.. ;)
Alvaro Vitali
20-07-2005, 22:34
Ok eccoti il tutto:
waveplayer (http://www.code4fun.org/public/waveplayer.zip)
ci sono i sorgenti della classe in questione (WAVE.java) ed un main minimale (WavePlayer.java) che ti fa vedere come usare la classe.
Inoltre puoi vedere subito come funziona lanciando il jar...
In generale cmq è molto semplice:
// crei un oggetto WAVE
WAVE wave = new WAVE();
// "carichi" il file da suonare tramite la sua path e se tutto è andato ok lo suoni con play
if (wave.init("path")) wave.play();
// qualcosa è andato storto visualizza l'errore
else System.out.println(wave.error);
Per stoppare: wave.stop();
Per settare in loop : wave.setLoop(true/false);
e poi ci sono altri metodi vari, spero ti possa aiutare...Ciao! ;)
australopiteci
20-07-2005, 22:44
grazie 1000, lo provo subito :)
australopiteci
20-07-2005, 22:56
funziona!!!
ma l'hai fatto tu?
p.s. in caso non trovi altri programmi simili mi converto i midi in wav e sono ok, giusto?
ora provo ad adattare il codice al mio..
Alvaro Vitali
20-07-2005, 23:15
Si l'ho fatto io studiando vari esempi (da cui ho preso i commenti come puoi notare :D ) presenti sul sito http://www.jsresources.org/, dedicato proprio alla Java Sound API.
Cosa intendi per convertire i midi in wav?
Sono due cose nettamente diverse, diciamo come un vettoriale sta ad una bitmap... :D
australopiteci
20-07-2005, 23:20
intendo dire che in caso non riesca a trovare un progr che riproduca i midi, uso un programma che converta files da midi a wav.. impossiile che non ne esista uno che faccia questo.. dopo che ho visto che è possibile convertire un pdf in .doc ho capito che non c'è nulla d'impossibile al mondo :D
p.s. ti metto tra i credits allora, ok? ;)
.. e do un occhiata al sito.. magari trovo qualcosa d'interessante...
fbcyborg
21-07-2005, 08:48
intendo dire che in caso non riesca a trovare un progr che riproduca i midi, uso un programma che converta files da midi a wav.. impossiile che non ne esista uno che faccia questo.. dopo che ho visto che è possibile convertire un pdf in .doc ho capito che non c'è nulla d'impossibile al mondo :D
p.s. ti metto tra i credits allora, ok? ;)
.. e do un occhiata al sito.. magari trovo qualcosa d'interessante...
Per favore, mi indichi il programma che hai usato per la conversione pdf->doc??
eventualmente, esiste anche per convertire i pdf in .ppt???
australopiteci
21-07-2005, 10:03
ora sono in un altro pc e quindi non ho il nome esatto, comunque è un programma commerciale, prova a cercare su google qualcosa del tipo pdf to doc converter... se magari mi viene il nome ti faccio sapere..
non era il massimo quel programma comunque l ho usato..
fbcyborg
21-07-2005, 10:32
Ok, ti ringrazio
Savio3000+
23-09-2007, 18:50
ragazzi mi date per favore quel file per far partire i wave? :|
Ti faccio un esempio stringato:
import javax.sound.sampled.*;
import java.io.*;
public class SimplePlayer {
public static void main(String[] args) throws Throwable {
File audioFile = new File(args[0]);
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(audioFile));
clip.start();
Thread.sleep(5000);
clip.close();
}
}
Quel Thread.sleep andrebbe sostituito con un'attesa per un evento LineEvent di tipo LineEvent.Type.STOP, "beccato" da un LineEventListener aggiunto al clip. Nota che se vuoi riprodurre degli mp3 o degli ogg (tramite i plug-in per JavaSound che trovi in rete) Clip non funziona più e devi passare al modo complicato.
Savio3000+
23-09-2007, 19:58
Ti faccio un esempio stringato:
import javax.sound.sampled.*;
import java.io.*;
public class SimplePlayer {
public static void main(String[] args) throws Throwable {
File audioFile = new File(args[0]);
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(audioFile));
clip.start();
Thread.sleep(5000);
clip.close();
}
}
Quel Thread.sleep andrebbe sostituito con un'attesa per un evento LineEvent di tipo LineEvent.Type.STOP, "beccato" da un LineEventListener aggiunto al clip. Nota che se vuoi riprodurre degli mp3 o degli ogg (tramite i plug-in per JavaSound che trovi in rete) Clip non funziona più e devi passare al modo complicato.
hai msn? ti vorrei chiedere una cosa..
Savio3000+
23-09-2007, 20:00
hai msn? ti vorrei chiedere una cosa..
Exception in thread "main" java.io.FileNotFoundException: Immagini\Suoni\uccelliverde.wav (Impossibile trovare il percorso specificato)
Ecco ... il problema è
1) se voglio passarlo in quel modo l' url e non con c:\etc.. senno' nel .jar poi non me lo vede, come fare?
2) come faccio a farlo andare in loop?
Non uso msn nè icq. Se vuoi puoi mandarmi una mail: pierluigi@tukano.it ma se chiedi sul forum ci sono più persone che possono risponderti o più persone che possono giovarsi della risposta :).
Savio3000+
23-09-2007, 20:04
Non uso msn nè icq. Se vuoi puoi mandarmi una mail: pierluigi@tukano.it ma se chiedi sul forum ci sono più persone che possono risponderti o più persone che possono giovarsi della risposta :).
ti volevo chiedere quello che hos critto su!
C'è un getAudioInputStream di AudioSystem che accetta un URL. Ad esempio puoi provare con:
URL url = Main.class.getResource("/immagini/suoni/uccelliverde.wav");
Qui il percorso che salta fuori dipende dai percorsi letti dal ClassLoader e include gli eventuali JAR che fanno parte del programma.
Per farlo andare in loop:
clip.loop(Clip.LOOP_CONTINUOSLY);
Ricorda che c'è sempre il "problema Thread": il suono viene eseguito in un Thread demone, cioè un Thread che schiatta quando la JVM termina. E' una cosa poco problematica nel caso di un programma "normale" perchè o c'è il Thread EDT (quello che gestisce la GUI) o un thread diverso che mantiene in vita il programma.
EDIT: ci vuole uno slash davanti a "immagini"
Savio3000+
23-09-2007, 20:16
C'è un getAudioInputStream di AudioSystem che accetta un URL. Ad esempio puoi provare con:
URL url = Main.class.getResource("/immagini/suoni/uccelliverde.wav");
Qui il percorso che salta fuori dipende dai percorsi letti dal ClassLoader e include gli eventuali JAR che fanno parte del programma.
Per farlo andare in loop:
clip.loop(Clip.LOOP_CONTINUOSLY);
Ricorda che c'è sempre il "problema Thread": il suono viene eseguito in un Thread demone, cioè un Thread che schiatta quando la JVM termina. E' una cosa poco problematica nel caso di un programma "normale" perchè o c'è il Thread EDT (quello che gestisce la GUI) o un thread diverso che mantiene in vita il programma.
EDIT: ci vuole uno slash davanti a "immagini"
File audioFile = new File("C:/Documents and Settings/Silvio/Documenti/isworkspacejava/TrafficFlowSystem/src/Immagini/Suoni/uccelliverde.wav");
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(audioFile));
//clip.start();
clip.loop( Clip.LOOP_CONTINUOUSLY );
//clip.start();
Thread.sleep(5000);
clip.close();
quindi inserito questo in un main il loop non mi serve a nulla giusto?
Savio3000+
23-09-2007, 20:19
Il problema viene al loop :|
Savio3000+
23-09-2007, 20:49
Il problema viene al loop :|
Io sto cercando di farlo andare in loop perchè apre il file in esecuzione quando va in un metodo... come fare? grr :>|
Savio3000+
23-09-2007, 21:14
mi spiegate perchè quando faccio stop lui in realtà non stoppa niente!?!?!?!? Come faccio a fermare sto loop ho provato in tutti i modi!
public void updateSemafori(String nord, String sud, String est, String ovest, String nonvedentinord, String nonvedentisud)
{
Clip clip;
Clip clips;
URL url = Main.class.getResource("/immagini/suoni/uccelliverde.wav");
URL urls = Main.class.getResource("/immagini/suoni/uccellogiallo.wav");
try {
clip = AudioSystem.getClip();
clips = AudioSystem.getClip();
if (est.equals("Verde") && ovest.equals("Verde"))
{
quadranteest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/sneverde.jpg")));
quadranteovest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/ssoverde.jpg")));
}
if (est.equals("Giallo") && ovest.equals("Giallo"))
{
quadranteest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/snegiallo.jpg")));
quadranteovest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/ssogiallo.jpg")));
}
if (est.equals("Rosso") && ovest.equals("Rosso"))
{
quadranteest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/nordestrosso.jpg")));
quadranteovest.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/sudovestrosso.jpg")));
}
if (nord.equals("Verde") && sud.equals("Verde"))
{
quadrantenord.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/snoverde.jpg")));
quadrantesud.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/sseverde.jpg")));
try
{
clip.open(AudioSystem.getAudioInputStream(url));
//clip.start();
clip.loop( Clip.LOOP_CONTINUOUSLY );
//clip.start();
//Thread.sleep(5000);
//clip.close();
}
catch (Exception e){}
}
if (nord.equals("Giallo") && sud.equals("Giallo"))
{
quadrantenord.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/snogiallo.jpg")));
quadrantesud.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/ssegiallo.jpg")));
try
{
clip.stop();
clip.close();
clips.open(AudioSystem.getAudioInputStream(url));
//clip.start();
clips.loop( Clip.LOOP_CONTINUOUSLY );
//clip.start();
//Thread.sleep(5000);
//clip.close();
}
catch (Exception e){}
}
if (nord.toString().equals("Rosso") && sud.equals("Rosso"))
{
quadrantenord.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/nordovestrosso.jpg")));
quadrantesud.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Immagini/Semafori/sudestrosso.jpg")));
clips.stop();
clips.close();
}
}
catch (Exception e) {}
}
Savio3000+
23-09-2007, 22:20
Risolto tutto per ora, grazie comunque :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.