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 :

Pas de son joué


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut Pas de son joué
    Bonsoir.

    Je programme (pour une activité avec des enfants) un programme qui lorsqu'on appuie sur une touche précise joue un son.
    (NDLR : je programme sur Eclispe)

    Voici le code :
    https://gist.github.com/stk3702/99b5...c471f4c7a8acf6
    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
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.Clip;
    import javax.swing.ImageIcon;
    import java.applet.Applet;
    import java.applet.AudioClip;
    import java.net.URL;
    import java.io.File;
     
    class Buzzer extends Thread
    {
        private URL url;
        private AudioClip sound;
        private File f;
     
        public Buzzer()
        {
            f=new File("f.wav");
            if(f.exists()) {
            	System.out.println("pouet");
            }
    	    try
    	    {
    	        url = f.toURI().toURL();
    	        sound = Applet.newAudioClip(url);
    	        System.out.println("sound");
    	      } catch (Exception e) {
    	        System.out.println(e);
    	      }
        }
     
        public void jouer()
        {
        	System.out.println("in");
            sound.play();
            System.out.println("out");
        }
    }
     
    class FenetreQuizz extends JFrame implements KeyListener{
    	JLabel label;
    	JPanel panel;
    	JDialog dg;
    	Buzzer bz;
    	String ficelle;
    	public FenetreQuizz () {
    		super();
    		ficelle="";
    		bz=new Buzzer();
    		setTitle("Quizz");
    		setSize(200,200);
    		setExtendedState(JFrame.MAXIMIZED_BOTH);
    		panel=new JPanel();
    		label=new JLabel();
    		panel.add(label);
    		setContentPane(panel);
    		setVisible(true);
    		addKeyListener(this);
    	}
     
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if(e.getKeyCode()==KeyEvent.VK_A) {
    			ficelle=ficelle+"1";
    			bz.jouer();
    		}
    	}
    	@Override
    	public void keyTyped(KeyEvent e) {}
     
    	@Override
    	public void keyReleased(KeyEvent e) {}
    }
     
    public class Quizz{
    	public Quizz() {}
     
    	public static void main(String [] args) {
    		FenetreQuizz fq=new FenetreQuizz();
    		fq.setVisible(true);
    	}
    }
    C'est censé jouer un son quand on appuie sur 'A' mais ça ne fonctionne pas et pourtant tout a l'air correct (détection du fichier, entrée et sortie des appels de jouer(), ... ).

    Auriez-vous une idée s'il vous plaît ?

  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
    Sous JDK 16, aucun soucis pour moi. Es-tu sur que bien appuyer sur la touche A pour que ta méthode jouer() soit invoquée.

    Et j'en profite pour rappeler que toute l'API Applet est en voie d'extinction dans les futures version.
    il est possible de remplacer le code qui fait la lecture par :

    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
        private URL url;
        private Clip clip;
        private final File f;
     
        public Buzzer2() {
            f = new File("f.wav");
            if (f.exists()) {
                System.out.println("pouet");
            }
            try {
                final var audioInputStream = AudioSystem.getAudioInputStream(f.getAbsoluteFile());
                clip = AudioSystem.getClip();
                clip.open(audioInputStream);
            } catch (IOException | LineUnavailableException | UnsupportedAudioFileException ex) {
                System.out.println(ex);
            }
        }
     
        public void jouer() {
            System.out.println("in");
            Optional.ofNullable(clip)
                    .ifPresent(c -> c.loop(1));
            System.out.println("out");
        }

    Un défaut de conception dans ton code : Buzz est un Thread mais a aucun moment tu l'utilises en tant que tel.
    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
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut
    Bonsoir.

    Oui je suis certain que j'ai bien appuyé sur A (je ne l'ai pas mis car cette partie ne bugge pas mais le programme affiche aussi la lettre sur laquelle on appuie)

    Je vais essayer ce bout de code et je reviens vers vous.

    Un défaut de conception dans ton code : Buzz est un Thread mais a aucun moment tu l'utilises en tant que tel.
    Ah bon ? C'est grave ?

  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
    En l’état non car tu en utilises qu'une seule instance et qu'en plus ni Clip.loop() ni AudioClip.play() ne sont des méthodes bloquantes (c'est a dire qu'elles retournent immédiatement et que le le son se joue sans bloquer toute ton interface graphique). C'est juste que ta classe hérite de tout un baguage de sa classe mère... qui lui sert strictement a rien en l’état (donc sur-consommation mémoire, potentielles ressources natives, etc.). Mais bon ici rien de bien critique.
    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
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut
    Alors j'ai voulu tester votre solution cependant j'ai un aussi avec le "final var". Eclipse me met une erreur (var cannot be resolved to a type) mais je ne sais pas comment la régler.

  6. #6
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut
    Alors Eclipse m'a indiqué que je devais passer à Java 10 pour pouvoir utiliser var mais du coup ça m'a ajouté 8724522 erreurs partout.

    J'ai essayé d'esquiver le problème en écrivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                clip.open(AudioSystem.getAudioInputStream(f.getAbsoluteFile()));
    Mais ça me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file

Discussions similaires

  1. [PB ODBC] Ce serveur n'existe pas ou son accès est refusé
    Par meufeu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/12/2015, 18h02
  2. ShellExecute qui veut pas faire son boulot...
    Par giloutho dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/08/2005, 11h49
  3. [J2ME]pas de son
    Par Arkan dans le forum Java ME
    Réponses: 2
    Dernier message: 04/04/2005, 15h32
  4. Réponses: 8
    Dernier message: 20/12/2004, 17h42
  5. [FLASH MX] Son joué au survol d'un bouton !
    Par ExSter dans le forum Flash
    Réponses: 8
    Dernier message: 17/12/2004, 15h28

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