Bonjour,

Voici le code que je tente de créer pour charger un fichier wav, transformer ses données dans un tableau byte[] (pour traiter ses valeurs plus tard) et faire jouer le morceau.

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
 
import javax.sound.sampled.*;
 
public class Capture extends JFrame {
 
  AudioFormat format;
  AudioInputStream ais;
  DataLine.Info info;
  byte[] buffer;
  ByteArrayOutputStream baos;
  Clip klip;
 
  public Capture() {
    super("Sound Demo");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Container content = getContentPane();
 
    final JButton capture = new JButton("Load wave");
    final JButton play = new JButton("Play");
 
    ActionListener captureListener = 
        new ActionListener() {
      public void actionPerformed(ActionEvent e) {
         try {
            captureAudio(new URL("http://pscode.org/media/leftright.wav"));
        } catch (UnsupportedAudioFileException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
      }
    };
    capture.addActionListener(captureListener);
    content.add(capture, BorderLayout.NORTH);
 
    ActionListener playListener = 
        new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        playAudio();
      }
    };
    play.addActionListener(playListener);
    content.add(play, BorderLayout.SOUTH);
  }
 
  private void captureAudio(URL fichier) throws UnsupportedAudioFileException, IOException {
    try {
      ais = AudioSystem.getAudioInputStream(fichier);
      format = ais.getFormat();
      ais = AudioSystem.getAudioInputStream(format, ais);
      baos = new ByteArrayOutputStream();
     int bufferSize = 2^32;
     buffer = new byte[bufferSize];
     int iCount = 0;
     int iTotal = 0;
 
     iCount = ais.read(buffer, 0, buffer.length);
     while (iCount>0) {
         baos.write(buffer, 0, iCount);
         iTotal += iCount;
         System.out.println("read " + iCount + " \ttotal " + iTotal );
         iCount = ais.read(buffer, 0, buffer.length);
    }
    ais.close();
     } catch (Exception e) {
      e.printStackTrace();
      System.exit(-2);
    }
  }
 
  private void playAudio(){
	  InputStream byteArrayInputStream = new ByteArrayInputStream(buffer);
	  AudioInputStream ais2 = new AudioInputStream(byteArrayInputStream, 
			  					format, buffer.length/format.getFrameSize());
	  DataLine.Info dataLineInfo = new DataLine.Info( Clip.class, format);
	  Clip klip = null;
	try {
		klip = (Clip)AudioSystem.getLine(dataLineInfo);
		klip.open(ais2);
	} catch (LineUnavailableException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	  klip.start();
 
  }
 
  public static void main(String args[]) {    
    JFrame frame = new Capture();
    frame.pack();
    frame.setVisible(true);
  }
}
La partie pour transformer les données fichier dans le tableau byte[] semble fonctionner (quoique je ne suis plus sûr de rien!).
Mais lorsque je clique sur le bouton "Play", seul un son d'un centième de secondes se produit et plus rien ensuite.

Selon vous, d'où peut provenir le problème ?

Merci