IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Débutant] Problème d'URL dans AudioClip


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut [Débutant] Problème d'URL dans AudioClip
    Bonjours, j'utilise AudioClip pour jouer des sons wav dans mon application, Tous fonctionne trés bien. Sauf que je suis obligé d'utliser une URL pour pointer mon fichier son, par conséquence lorsque je lance mon application sur un autre OS ou une autre machine je n'entend plus les sons wav! (le chemin :
    "file:///home/kayzra/NetBeansProjects/ClicImages/src/ImagesEtSons/notify.wav" n'est plus valide!)

    je voudrai savoir s'il est possible de faire en sorte que l'URL pointe toujours les fichiers wav contenus dans les sources de mon application...

    Merci d'avance de m'éclairer sur la facont de faire.

    Voici mon code :
    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
     
     /*
     * LireUnWav.java
     * 
     * Created on 17 juil. 2007, 22:16:52
     * 
     * Class permettant de lire un wav a une URL
     * donnee
    *
     * @package ImagesEtSons est un package contenant les .jpg et
     * .wav utilisees dans l'application
     */
     
    /**
     *
     * @author kayzra
     */
     
    import java.net.*;
    import java.applet.AudioClip;
    class LireUnWav extends java.applet.Applet {
     
            // création des 3 objets AudioClip
            AudioClip ok;
            AudioClip bad;
            AudioClip victoire;
     
     
            /**************************************************************************************************
             * joue un son quand l'action demandee
             * est reussie.
             */
    	public void OK() {
            // on indique quels sont les fichiers à lire dans une URL
                try{
     
                    URL emplacement = 
                            new URL("file:///home/kayzra/NetBeansProjects/ClicImages/src/ImagesEtSons/chimes.wav");
     
                    ok = newAudioClip(emplacement);
     
                    ok.play();                          //lit une fois le wav
                    Thread.sleep(500);                  //pause pour lire entierement le wav 0.5 secondes
     
                }catch(Exception ex)
                {   
                    ex.printStackTrace();
                }
            }
     
     
            /**************************************************************************************************
             * joue un son quand l'action demandee
             * a echoue.
             */
            public void Bad() {
            // on indique quels sont les fichiers à lire dans une URL
                try{
     
                    URL emplacement1 = 
                            new URL("file:///home/kayzra/NetBeansProjects/ClicImages/src/ImagesEtSons/notify.wav");
     
                    bad = newAudioClip(emplacement1);
     
                    bad.play();                         //lit 1 fois
                    Thread.sleep(500);                  //pause pour lire entierement le wav 0.5 secondes
     
                }catch(Exception ex)
                {   
                    ex.printStackTrace();
                }
            }
     
     
            /**************************************************************************************************
             * joue un son quand l'application s'acheve
             * avec succee
             */
            public void Victoire() {
            // on indique quels sont les fichiers à lire dans une URL
                try{
     
                    URL emplacement2 = 
                            new URL("file:///home/kayzra/NetBeansProjects/ClicImages/src/ImagesEtSons/tada.wav");
     
                    victoire = newAudioClip(emplacement2);
     
                    victoire.play();                    //lit 1 fois
                    Thread.sleep(2000);                 //pause pour lire entierement le wav 2 secondes
     
                }catch(Exception ex)
                {   
                    ex.printStackTrace();
                }
            }
      	 /*public static void main(String[] arg) {
                 
    		 LireUnWav jouerSon = new LireUnWav();
                     jouerSon.OK();
                     jouerSon.Bad();
                     jouerSon.Victory();
              }*/
     
    }

  2. #2
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    j'ai trouvé une solution en tirant partie de la FAQ Developpez.com. Je recupére le chemin du repertoire (String path) où se trouve mon jar que j'utilise comme URL et je met mes fichiers wav à lire dans le même dossiers .C'est pas trés pro mais mon code est portable.

    http://java.developpez.com/faq/java/...YSTEME_dir_jar

    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
    public String ouEstLeJar() {
     
     
            String path = getClass().getName() + ".class";
            URL url = getClass().getResource(path);
     
            try{
                path = URLDecoder.decode(url.toString(), "UTF-8");
            }catch(Exception ex) { ex.printStackTrace();}
     
            // suppression de  la classe ou du jar du path de l'url
            int index = path.lastIndexOf("/");
            path = path.substring(0, index);
     
            if (path.startsWith("jar:file:"))
            {
                // suppression de jar:file: de l'url d'un jar
                // ainsi que du path de la classe dans le jar
                index = path.indexOf("!");
                path = path.substring(9, index);
            }
            else
            {
                // suppresion du file: de l'url si c'est une classe en dehors d'un jar
                // et suppression du path du package si il est présent.
                path = path.substring(5, path.length());
                Package pack = getClass().getPackage();
                System.out.println(getClass().getPackage());
                if (null != pack)
                {
                    String packPath = pack.toString().replace('.', '/');
                    if (path.endsWith(packPath))
                    {
                        path = path.substring(0, (path.length() - packPath.length()));
                    }
                }
            }
     
             /***********  ******************  ********************  ********************
            *JE VIRE LE NOM DE MON JAR A LA FIN DU path POUR QUE MON
            * .wav SOIT POINTE.  JE COMPTE AMELIORER CE CODE AFIN 
            * DE POUVOIR LE REUTILISER
            */
     
            String tmp = "";
            String adresse = "";
     
            StringBuffer monUrl = new StringBuffer(path);
            int x = monUrl.lastIndexOf("/");
            monUrl.delete(x+1, path.length());
            tmp = monUrl.toString();
            adresse = "file://"+tmp;//
     
            return adresse;
     
            }
     
     /****************************************************************
     *J'UTILISE CETTE METHODE DANS CETTE CLASSE
     */
     
     
    class LireUnWav extends java.applet.Applet {
     
            // création des 3 objets AudioClip
            AudioClip ok;
            AudioClip bad;
            AudioClip victoire;
            AudioClip supVictoire;
     
     
            /************************************************************************
             * joue un son quand l'action demandee
             * est reussie.
             */
    	public void OK() {
            // on indique quels sont les fichiers à lire dans une URL
                try{
                    System.out.println("Le Jar se trouve "+ouEstLeJar());
                    URL emplacement = 
                            new URL(ouEstLeJar()+"chimes.wav");//<-<-<-<-<-<-<-<-<-<-
     
                    ok = newAudioClip(emplacement);
     
                    ok.play();                          //lit une fois le wav
                    Thread.sleep(500);                  //pause pour lire entierement le wav 0.5sc
     
                }catch(Exception ex)
                {   
                    ex.printStackTrace();
                }
            }.........
    AudioClip c'est quand même la façont la plus simple pour jouer du son en java!!!

    Si quelqu'un a un autre moyens de récuperer plus facilement l'URL d'un fichier ou de jouer facilement un wav, je suis preneur!

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je ne connais pas ta classe AudioClip... Mais prend-t'elle uniquement des URL en entrée? Si tu peux lui fournir un flux de données (audio) à la place, tu as un moyen beaucoup plus simple de récupérer ton WAV dans un jar de ton application (à condition bien sûr que celui-ci soit dans ton classPath): le "getRessourceAsStream"

  4. #4
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    AudioClip est une interface appartenant à java.applet et dans une application le constructeur ( newAudioClip() )n'accepte qu'une URL c'est bien dommage mais cohérent avec java.applet !

    pour une aplication :
    on crée un Objet: AudioClip monAudioClip = newAudioClip(URL url)

    pour une applet :
    AudioClip monAudioClip = getAudioClip(getCodeBase(),"leFichier.wav");

    il y a que 3 méthodes:
    - loop(): pour jouer le son en boucle
    - play(): pour jouer une fois le son
    - stop()


    Y aurrait il un moyen de parser un File() en une URL() ? Si cela était possible cela simplifirai le code de mon appli.

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par kayzra
    Y aurrait il un moyen de parser un File() en une URL() ? Si cela était possible cela simplifirai le code de mon appli.
    Et la javadoc?... Elle sert à quoi? Méthode toURL() de la classe File

  6. #6
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    J'avais pas remarqué cette méthode

    merci!

    Voici comment j'ai modifier ma classe LireUnWav :

    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
    //import java.net.*;
    //import java.applet.AudioClip;
    class LireUnWav extends java.applet.Applet {
     
            // création des 3 objets AudioClip
            AudioClip ok;
            AudioClip bad;
            AudioClip victoire;
            AudioClip supVictoire;
     
     
            /**************************************************************************************************
             * joue un son quand l'action demandee
             * est reussie.
             */
    	public void OK() {
            // on indique quels sont les fichiers à lire dans une URL
                try{
     
                    //!!!REMPLACE!!!  System.out.println("Le Jar se trouve "+ouEstLeJar());
                    //!!!REMPLACE!!!  URL emplacement = 
                            //!!!REMPLACE!!!  new URL(ouEstLeJar()+"chimes.wav")
     
                    File fSon = new File("chimes.wav");
     
                    URL emplacement = fSon.toURL();
     
                    System.out.println("Emplacement ->"+emplacement);
                    ok = newAudioClip(emplacement);
     
                    ok.play();                          //lit une fois le wav
                    Thread.sleep(500);                  //pause pour lire entierement le wav 0.5 secondes
     
                }catch(Exception ex)
                {   
                    ex.printStackTrace();
                }
            }
    Il n'y a qu'un probleme, il apparait que la méthode toURL() est " deprecated "

    1- Elle a donc due être remplacée?

    2- Oui, mais par quoi?

    3- Ou c'est peut être moi qui l'utilise mal?

    Le 3- est le plus plausible!!! Please HELP!!!

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je n'avais pas remarqué que la méthode était deprecated... (J'ai dû aller voir dans la Javadoc 1.4 que j'utilise pour le boulot)

    Ceci dit, même si elle est deprecated, elle doit fonctionner, donc pas de panique
    Ensuite, si elle est marquée comme ça, la Javadoc (de la version de Java que tu utilises) de la méthode indique très certainement la méthode de remplacement. Va donc y faire un tour

  8. #8
    Membre du Club Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 68
    Points
    68
    Par défaut
    J'ai regardé dans JavaSearch la méthode n'y était pas deprecated (utilise encore java1.4).

    Dans la doc java1.6 j'ai trouvé ça :

    toURL() Deprecated. This method does not automatically escape characters that are illegal in URLs. It is recommended that new code convert an abstract pathname into a URL by first converting it into a URI, via the toURI method, and then converting the URI into a URL via the URI.toURL method.
    Il faut donc passer par toURI() puis URI.toURL().

    En tout cas merci pour ton aide CyberChouan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème pour écrire dans un bouton
    Par Paulinho dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 06/01/2006, 11h45
  2. Réponses: 4
    Dernier message: 16/12/2005, 16h25
  3. Réponses: 3
    Dernier message: 18/08/2005, 11h57
  4. [débutant]problèmes d'affichage dans un tableau
    Par Hastur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/08/2005, 12h00
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo