Bonjour,

J'utilise un thread pour traiter un son.

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
    try {
    	labsave.setText("Capture");
      final AudioFormat format = getFormat();
      DataLine.Info info = new DataLine.Info(
        TargetDataLine.class, format);
      final TargetDataLine line = (TargetDataLine)
        AudioSystem.getLine(info);
      line.open(format);
      line.start();
 
      Runnable runner = new Runnable() {
        int bufferSize = (int)format.getSampleRate() 
          * format.getFrameSize();
        byte buffer[] = new byte[bufferSize];
 
        public void run() {
          out = new ByteArrayOutputStream();
          running = true;
          try {
            while (running) {
              int count = 
                line.read(buffer, 0, buffer.length);
              if (count > 0) {
            	 long seconds = (long) (line.getMicrosecondPosition() / 1000);
            	 lab.setText(TimetoHMS(seconds));
                 out.write(buffer, 0, count);
              }
            }
            out.close();
          } catch (IOException e) {
            System.err.println("I/O problems: " + e);
            System.exit(-1);
          }
        }
      };
      captureThread = new Thread(runner);
      captureThread.start();
    } catch (LineUnavailableException e) {
      System.err.println("Line unavailable: " + e);
      System.exit(-2);
    }
lab est un JLabel qui décompte le nombre de microsecondes écoulés.

Cependant, il apparait que la mise à jour des microsecondes se fait toutes les secondes révolues !!!!!!

Est-ce que les threads sont soumis à un lapse de temps de boucle ou à un sleep dissimulé ? Ou est_ce simplement dû à la durée de traitement des données audio qui, pour les fichiers wave, sont lourds ?

Merci