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

Multimédia Java Discussion :

Lier un fichier son à un objet graphique


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut Lier un fichier son à un objet graphique
    Bonjour,

    Le code ci-joint permet d'afficher sous forme d'applet un certain nombre de rectangles colorés dans une fenêtre. A chaque rectangle doit correspondre un signe (ou lettre) et un son du français. Par exemple, au premier rectangle de la partie supérieure du tableau, de couleur blanche, correspondront le signe et le son "a". Au second rectangle, en rouge, correspondront le signe et le son "o" et au troisième rectangle (en vert), le son et le signe "i". Le cinquième rectangle (en jaune) correspond au son et au signe "r" (et ainsi de suite). Au rectangle de couleur magenta, dans la partie inférieure du tableau, correspondront le signe et le son "m".

    En cliquant successivement sur les rectangles blanc, magenta et vert, on obtient le mot "ami". La combination des rectangles magenta, blanc et vert produira le mot "mai". Si l'on introduit la consonne "r" on pourra produire le mot "miroir", et ainsi de suite jusqu'à épuisement des possibilités du tableau.

    A titre d'exemple,voici le code qui permet de produire le son "a", également dans un applet (les fichiers .class et .html ne sont pas inclus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.applet.*;
    import java.awt.*;
     
    public class aApplet extends Applet {
     
    	public void init() { 
     
    		AudioClip a=getAudioClip(getDocumentBase(),"a.wav"); 
     
    		a.play(); 
    	}
    }
    Première question:

    Comment lier chaque rectangle à son fichier son correspondant et activer celui-ci par une action de la souris tout en faisant apparaître le signe "a" à l'intérieur du rectangle?

    Deuxième question:

    Comment afficher le mot produit par une combinaison particulière des rectangles dans une zone texte au bas du tableau?

    Merci d'avance pour toute suggestion de réponse à ces deux questions.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 911
    Billets dans le blog
    54
    Par défaut
    Par exemple en utilisant une Map<Rectangle, AudioClip> et une Map<Rectange, Character> (ou une Map qui contient un Rectangle en cle et une structure de stockage simple en valeur referencant l'AudioClip et le char associe histoire d'eviter d'avoir trop de Map differentes dans ton code).

    Pour jouer le son il suffit dans le MouseListener qui recupere les evenements de click de verifier si le curseur est dans un Rectangle donne (via sa methode contains()), puis quand tu as trouve le bon Rectangle de recupere l'AudioClip via la Map et de joueur le son.

    Pour la chaine de texte, il te suffit de conserver tous les Rectangle precedement cliques dans une java.util.List<Rectangle>, de rajoute le nouveau rectangle clique dans cette liste et de recreer la chaine associee puis de l'afficher dans un TextField (note que cette methode te permet de facilement rejouer le morceaux compose).
    Sinon tu peux ne pas conserver la liste des formes mais ajouter directement le character dans un StringBuilder/StringBuffer dont tu conserve la reference et que tu affiche dans le TextField.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    Débutant en Java, après avoir consulté la documentation, le forum et les FAQ disponibles en ligne je ne suis toujours pas certain d'avoir bien compris comment écrire un "MAP". Je serais donc heureux de recevoir quelques instructions à ce sujet. En particulier, comment instancier la clé "Rectangle" et la valeur "AudioClip"?

    Merci d'avance.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 911
    Billets dans le blog
    54
    Par défaut
    Facile :
    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
    import java.util.*
    import java.awt.*
    import java.awt.event.*
    import java.awt.geom.*
     
    public class MyApplet extends Applet implements MouseListener{
    ...
      /** Map that indexes clips by shapes.
      */
      private Map<Rectangle, AudioClip> rectSoundMap = new HashMap<Rectangle, AudioClip>();
     
      /** Creates a new instance.
      */
      public MyApplet() {
        super();
        addMouseListener(this);
      }
     
    ...
      // Creates a rectangle.
      Rectangle rect = new Rectangle(0, 0, 100, 50);
      // Gets a clip. See Applet documentation for parameter info.
      AudioClip clip = getAudioClip(.......);
      // Associate the rectangle to the map.
      rectSoundMap.put(rect, sound);
     
    ...
     
     /** @inheritDoc
     */
     public void mouseClicked(MouseEvent event) {
       // Iterate through all available rectangles.
       for (Rectangle rect : rectSoundMap.keys()) {
         // Verify we're inside.
         if (rect.contains(event.getX(), event.getY()) {
           // Get clip associated to this rectagle.
           AudioClip clip = rectSoundMap.get(rect);
           // And play it.
           clip.play();
           // Exit loop.
           break;
         }
       }
     }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 49
    Par défaut
    Merci. Malheureusement, le code génère une vingtaine d'erreurs, dont je n'ai réussi à éliminer qu'un tiers environ. Voici les messages d'erreurs restant:

    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
     
    MyApplet.java:12: <identifier> expected
      private Map<Rectangle, AudioClip> rectSoundMap = new HashMap<Rectangle, AudioC
    lip>();
                 ^
    MyApplet.java:28: <identifier> expected
        rectSoundMap.put(rect, sound);
                        ^
    MyApplet.java:35: ';' expected
            for (Rectangle rect : rectSoundMap.keys()) {
                                ^
    MyApplet.java:46: illegal start of expression
        }
        ^
    MyApplet.java:45: ';' expected
            }
             ^
    MyApplet.java:6: cannot resolve symbol
    symbol  : class Applet
    location: class MyApplet
    public class MyApplet extends Applet implements MouseListener {
                                  ^
    MyApplet.java:26: cannot resolve symbol
    symbol  : class AudioClip
    location: class MyApplet
        AudioClip clip = getAudioClip("a.wav");
        ^
    MyApplet.java:28: cannot resolve symbol
    symbol  : class put
    location: package rectSoundMap
        rectSoundMap.put(rect, sound);
                    ^
    MyApplet.java:6: MyApplet should be declared abstract; it does not define mouseP
    ressed(java.awt.event.MouseEvent) in MyApplet
    public class MyApplet extends Applet implements MouseListener {
           ^
    MyApplet.java:20: cannot resolve symbol
    symbol  : method addMouseListener  (MyApplet)
    location: class MyApplet
          addMouseListener(this);
          ^
    MyApplet.java:26: cannot resolve symbol
    symbol  : method getAudioClip  (java.lang.String)
    location: class MyApplet
        AudioClip clip = getAudioClip("a.wav");
                         ^
    11 errors
    Merci d'avance de bien vouloir m'aider à éliminer ces erreurs.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est simple remplace ton java 1.4 par une version 1.5 au minimum

Discussions similaires

  1. Créer son propre objet graphique sous Android
    Par ram-0000 dans le forum Android
    Réponses: 4
    Dernier message: 11/12/2012, 12h37
  2. Lier un fichier son à une image graphique
    Par dreanlin dans le forum Tcl/Tk
    Réponses: 5
    Dernier message: 05/07/2007, 16h51
  3. Lier un fichier son à un objet graphique avec XPCE
    Par dreanlin dans le forum Prolog
    Réponses: 40
    Dernier message: 19/11/2006, 19h11

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