Bonjour, j'ai trouvé ce code, il marche mais le problème c'est que le son est joué et le programme tourne pendant quelque seconde encore, ce qui fait en sorte que l'on voit ma fenetre, on entend le son, puis un blan, et ma fenetre affiche tous ses composants.
Comment raccourcir le le temps?
MERCI
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 import java.io.*; import javax.sound.sampled.*; public class Sond{ private AudioFormat format; private byte[] samples; public Sond(String filename){ try{ AudioInputStream stream = AudioSystem.getAudioInputStream(new File(filename)); format = stream.getFormat(); samples = getSamples(stream); }catch (UnsupportedAudioFileException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } } public byte[] getSamples(){ return samples; } public byte[] getSamples(AudioInputStream stream){ int length = (int)(stream.getFrameLength() * format.getFrameSize()); byte[] samples = new byte[length]; DataInputStream in = new DataInputStream(stream); try{ in.readFully(samples); }catch (IOException e){ e.printStackTrace(); } return samples; } public void play(InputStream source){ int bufferSize = format.getFrameSize() * Math.round(format.getSampleRate() / 10); byte[] buffer = new byte[bufferSize]; SourceDataLine line; try{ DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); line = (SourceDataLine)AudioSystem.getLine(info); line.open(format, bufferSize); }catch (LineUnavailableException e){ return; } line.start(); try{ int numBytesRead = 0; while (numBytesRead != -1){ numBytesRead = source.read(buffer, 0, buffer.length); if (numBytesRead != -1)line.write(buffer, 0, numBytesRead); } }catch (IOException e){} line.drain(); line.close(); } }
Partager