Bonjour,
J'utilise un thread pour traiter un son.
lab est un JLabel qui décompte le nombre de microsecondes écoulés.
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); }
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
Partager