Bonjour,
Après avoir parcouru les faqs et forums, j'ai trouvé comment lire un fichier audio
J'utilise ça : (je l'ai trouvé quelque part sur ce site mais je ne sais plus où )
Que j'utilise ainsi :
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 import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.DataLine.Info; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.AudioSystem; import java.io.File; public class Sound { /** * Read an audio file in wav format. * @param fileName the path of the file you want to read. */ public static void readWavFile(final String fileName) { class SoundRunnable implements Runnable { public void run() { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File(fileName)); AudioFormat format = ais.getFormat(); Info info = new Info(SourceDataLine.class, format); SourceDataLine source = (SourceDataLine)AudioSystem.getLine(info); source.open(format); source.start(); int read = 0; byte[] audioData = new byte[16384]; while(read > -1) { read = ais.read(audioData, 0 , audioData.length); if(read >= 0) source.write(audioData, 0, read); } source.drain(); source.close(); } catch(Exception e) { e.printStackTrace(); } } } Runnable r = new SoundRunnable(); Thread t = new Thread(r); t.start(); } }
Premier problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Sound.readWavFile("sons/unSon.wav");
Mais... personne ne semble avoir avoir eu le problème que j'ai.
A chaque première lecture d'un fichier .wav le son est complètement déformé, je qualifierais cet effet d'"effet cathédrale" puis quand le son est rejoué à nouveau il est normal.
J'ai plusieurs sons dans mon application que je déclenche les uns après les autres et c'est pour chacun pareil.
Second problème :
J'ai un second effet qui me parait un peu surréaliste mais qui ne doit pas l'être, lorsque j'appuie sur une des flèches du clavier cela déclenche l'affichage d'une image gif ainsi que le lecture d'un son wav qui dit "en haut", "en bas", etc. selon la flèche sur laquelle on appuie.
Comme ceci (dans la méthode paintComponent) :
et le son se retrouve être joué à répétition tant que l'animation du gif n'est pas finie, si j'utilise une image fixe, il n'y a pas de répétition.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Image img1 = Toolkit.getDefaultToolkit().getImage("images/ahaut.gif"); g2.drawImage(img1, (this.getWidth()/2)-(img1.getWidth(null)/2), (this.getHeight()/2)-(img1.getHeight(null)/2), this); Sound.readWavFile("sons/haut.wav");
C'est un peu comme un écho mais différent de l'"effet cathédrale" décrit plus haut.
J'espère que je ne suis pas trop brouillonne dans mes descriptions.
Merci d'avance pour votre aide.
Partager