1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| import java.io.*;
import javax.sound.sampled.*;
public class Music {
// Champs
public String path ; //Chemin internet du fichier qu'on veut lire
private boolean stop ; // =vrai ou faux, s'arrête quand =vrai
private AudioFormat format; //format du fichier audio
private byte[] size; //taille du fichier
private SourceDataLine line; //ligne pour écrire la musique
// On récupère le chemin d'une musique avec son url
public void Audio(String path){
this.path=path;
stop=false;
System.out.println("[" + path + "]");
}
public Music(String path){
// On ouvre l'url de la musique grâce à un objte inputstream
try {
AudioInputStream music=AudioSystem.getAudioInputStream(new File(path));
System.out.println("[" + path + "]");
format=music.getFormat();
// On récupère sa taille
size = TailleZik(music);
// Exception si le format n'est pas supporté
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
System.out.println("Fichier audio non supporté !");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Erreur lors de la lecture...");
}
}
// Méthode pour récupérer le format
private byte[] TailleZik(AudioInputStream music) {
// TODO Auto-generated method stub
return null;
}
public byte[]getTaille() {
return size;
}
// Méthode pour récupérer la taille de la musique
public byte[] TailleZikMu(AudioInputStream musique){
int longueur=(int)(musique.getFrameLength() *format.getFrameSize());
size = new byte[longueur];
DataInputStream is = new DataInputStream(musique);
try {
is.readFully(size);
}
catch (IOException ex) {
ex.printStackTrace();
System.out.println("Erreur : taille du fichier incorrecte !");
}
return size;
}
public void lecture(InputStream source ){
// Mise en mémoire tampon
int tampompon = format.getFrameSize() *Math.round(format.getSampleRate() / 10);
byte[]buffer=new byte[tampompon];
// On créée une ligne où on définit le format et le tampon
try{
DataLine.Info info =new DataLine.Info(SourceDataLine.class, format);
line = (SourceDataLine)AudioSystem.getLine(info);
line.open(format, tampompon);
}
catch (LineUnavailableException ex) {
ex.printStackTrace();
System.out.println("Erreur lors de la mise en mémoire tampon !");
return;
}
line.start();
// On copie ensuite sur la ligne pour lire la musique
try {
int numBytesRead = 0;
while (numBytesRead != -1 && !stop) {
numBytesRead =source.read(buffer, 0, buffer.length);
if (numBytesRead != -1) {
line.write(buffer, 0, numBytesRead);
}
}
}
catch (IOException ex) {
ex.printStackTrace();
System.out.println("Erreur lors de la lecture !");
}
line.drain();
line.close();
}
// Lorsque la copie est finit, on arrête la musique
public void stop(){
stop=true;
}
} |