Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1725 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Thread de son et menu d'une interface

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Thread de son et menu d'une interface

n°1396728
l3eleg
cosmik connection
Posté le 28-06-2006 à 17:18:00  profilanswer
 

Bonjour a tous,
je travaille sur un mini sudoku avec un binome, bon au niveau du jeu tout fonctionne, mais on a essayé d'intégrer une gestion du son cet après midi, et je peche un peu au niveau de la gestion de la configuration.  
Je m'explique, lorsque l'utilisation lance une nouvelle partie, le thread lit le son en boucle, le probleme c'est qu'on a voulu faire un menu pour activer/desactiver le thread, ca fonctionne, mais lorsqu'on remet le son apres l'avoir désactivé, l'utilisation processeur monte a 100% !
Quelqu'un aurait il une piste ou une autre methode pour procéder ?
 
classe ThreadSound :

Code :
  1. import java.io.ByteArrayInputStream;
  2. import java.io.InputStream;
  3. import javax.sound.sampled.*;
  4. import java.io.*;
  5. public class ThreadSound  extends Thread
  6. {
  7.   private AudioFormat format;
  8.      private byte[] samples;
  9.         public int stopbit;
  10. public void run()
  11.      {
  12.    sound("test.wav" );
  13.    InputStream stream = new ByteArrayInputStream(getSamples());
  14.    stopbit = 0;
  15.    play(stream);
  16.    while(stopbit != 1) {run();}//
  17.      }
  18. public void  test()
  19.   {
  20.    System.out.println("Arret :"+this.isAlive()+"val stopbit : "+stopbit);
  21.   }
  22. public void  arret()
  23.   {
  24.    stopbit = 1;
  25.    //player=null;
  26.    //System.gc();
  27.   }
  28.     public void sound(String filename){
  29.         stopbit = 0;
  30.            try{
  31.                AudioInputStream stream = AudioSystem.getAudioInputStream(new File(filename));
  32.                format = stream.getFormat();
  33.                samples = getSamples(stream);
  34.            }
  35.            catch (UnsupportedAudioFileException e){
  36.                e.printStackTrace();
  37.        }
  38.        catch (IOException e){
  39.                e.printStackTrace();
  40.            }
  41.        }
  42.        public byte[] getSamples(){
  43.            return samples;
  44.        }
  45.        public byte[] getSamples(AudioInputStream stream){
  46.            int length = (int)(stream.getFrameLength() * format.getFrameSize());
  47.            byte[] samples = new byte[length];
  48.            DataInputStream in = new DataInputStream(stream);
  49.            try{
  50.                in.readFully(samples);
  51.            }
  52.            catch (IOException e){
  53.                e.printStackTrace();
  54.            }
  55.            return samples;
  56.        }
  57.        public void play(InputStream source){
  58.         // 100 ms buffer for real time change to the sound stream
  59.            int bufferSize = format.getFrameSize() * Math.round(format.getSampleRate() / 10);
  60.            byte[] buffer = new byte[bufferSize];
  61.            SourceDataLine line;
  62.            try{
  63.                DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
  64.                line = (SourceDataLine)AudioSystem.getLine(info);
  65.                line.open(format, bufferSize);
  66.            }
  67.            catch (LineUnavailableException e){
  68.                e.printStackTrace();
  69.                return;
  70.            }
  71.            line.start();
  72.            try{
  73.                int numBytesRead = 0;
  74.                while (numBytesRead != -1){
  75.                    numBytesRead = source.read(buffer, 0, buffer.length);
  76.                    if (numBytesRead != -1)
  77.                        line.write(buffer, 0, numBytesRead);
  78.                    if (stopbit==1)
  79.                        {
  80.         line.stop();
  81.         line.write(buffer, 0, numBytesRead);
  82.                         numBytesRead=-1;
  83.                        }
  84.                        // arrêt de la lecture du fichier conditioné par le bit stopbit
  85.                }
  86.            }
  87.            catch (IOException e){
  88.               e.printStackTrace();
  89.           }
  90.          line.drain();
  91.          line.close();
  92.          }
  93. }


 
Fichier du menu :

Code :
  1. // Instanciation du son
  2. ThreadSound playbaby;
  3.         [...............]
  4.                   // partie du menu qui gere le stop/lecture
  5.    else if(evt.getSource()==m431){
  6.    playbaby.arret();
  7.    playbaby=null;
  8.    System.gc();
  9.    }
  10.    else if(evt.getSource()==m432){
  11.           playbaby = new ThreadSound();
  12.           playbaby.start();
  13.          playbaby.test();
  14.    }


on a essayé aussi d'autres methodes mais sans succès ... j'avoue que la, on pêche :d


Message édité par l3eleg le 28-06-2006 à 17:20:08
mood
Publicité
Posté le 28-06-2006 à 17:18:00  profilanswer
 

n°1396741
l3eleg
cosmik connection
Posté le 28-06-2006 à 17:32:14  profilanswer
 

hmmm je viens de lire sur le forum que l'utilisation du gc sur un thread de reference null ne l'arretait pas. Jen conclus donc qu'on se retrouve avec plusieurs threads en // d'ou le taux d'utilisation cpu, ma question sera donc un peu différent, comment forcer un thread à finir son traitement ?
l'utilisation du stopbit ne semblant pas fonctionner (enfin elle fonctionne mais j'ai une erreur IllegalStateThread lorsque je tente de relancer la lecture du son)

n°1397169
wapcamer
Posté le 29-06-2006 à 13:24:08  profilanswer
 

Citation :

Code :
  1. while(stopbit != 1) {run();}//



 
Ca fait une boulce infinie ça, pas étonnant que le CPU soit à 100%.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1397413
breizhbugs
Posté le 29-06-2006 à 18:55:45  profilanswer
 

:hello:
Et, en plus c'est recursif!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Thread de son et menu d'une interface

 

Sujets relatifs
probleme menu deroulant cssPar rapport à une interface WEB
[SDL] Affichage dans un threadMAJ via un menu (Access)
Thread ou pas Thread ?menu javascript bloqué
menu ongletsInterface graphique programme en SDL ???
Creation d'un menudimension interface
Plus de sujets relatifs à : Thread de son et menu d'une interface


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR