Bonjour,

Je dois réaliser un lecteur audio en langage Java sous Eclipse dans le cadre de mes études. Je suis débutante mais j'ai tout de même réussi à cerner quelques aspects du langage Java et pondre un code...

J'ai une classe Music dans laquelle je charge la musique depuis une URL, je récupère son format, sa taille, et j'utilise un buffer pour lire la musique.
J'ai une classe Main où j'appelle la classe Music et je lui indique l'url.
Mais lorsque je compile, j'obtiens l'erreur suivante :

java.io.FileNotFoundException: http:/www.youtube.com/watch?v=62XDnzE0FUk (No such file or directory)
Erreur lors de la lecture...
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at com.sun.media.sound.WaveFileReader.getAudioInputStream(WaveFileReader.java:205)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1162)
at Music.<init>(Music.java:24)
at Main.main(Main.java:12)
Exception in thread "main" java.lang.NullPointerException
at Music.TailleZikMu(Music.java:55)
at Main.main(Main.java:15)
Voici mon code.

J'ai la classe Music qui contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
        }
    }
Et mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.*;
 
public class Main {
    //static ListeMusic listeuh;
 
    public static void main (String [] args)    {
        Music musik = new Music("http://www.youtube.com/watch?v=62XDnzE0FUk");
        InputStream hop = new ByteArrayInputStream(musik.TailleZikMu(null));
        musik.lecture(hop);
 
        System.out.println("On envoie la musique !");
        System.exit(0);
    }
}
Est-ce que quelqu'un aurait une idée d'où ça pourrait venir ?

Merci par avance.