Bonjour
J ai fait un programme ecouter un ficher wav .mon probleme c est que sa ne fonctionne pas et le message d erreur est :
could not get audio input stream from input file
Pouvez vous M aider à résoudre ce problème ?
Merci d'avance avance
Version imprimable
Bonjour
J ai fait un programme ecouter un ficher wav .mon probleme c est que sa ne fonctionne pas et le message d erreur est :
could not get audio input stream from input file
Pouvez vous M aider à résoudre ce problème ?
Merci d'avance avance
Qu'est-ce que tu utilises pour lire ton fichier WAV ? Java Sound ? JavaFX ? Java Media Framework ?
Es-tu sur que ton fichier utilise un codec qui soit supporté par la lib Java que tu tentes d’utiliser ?
Est-il endommagé ? (peux-tu lire son contenu dans un lecteur audio autre ?)
WAV c'est comme AVI, c'est un conteneur (une manière de stocker les données), ce qui est dedans peut être encodé avec des formats différents. Voir JMF 2.1.1 - Supported Formats pour les encodages supportés par JMF. Voir également la page JavaSound sur StackOverflow.
merci de ta réponse pour faire simple .
mon fichier ce lit bien sur windows
voici mon code :
Dans main :
Dans audioCode:
1
2
3
4
5
6
7
8 public class Main { public static void main(String[] args) { Audio audio = new Audio("sample.wav"); audio.run(); } }
merci d'avance pour vos réponse et résoudre mon problemeCode:
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 public void run(){ if(isSet){ SourceDataLine line; File file; final AudioInputStream audioInputStream; AudioFormat audioFormat; file = new File(path); try{ audioInputStream = AudioSystem.getAudioInputStream(file);} catch (UnsupportedAudioFileException e) { e.printStackTrace(); return;} catch (IOException e) { e.printStackTrace(); return;} audioFormat = audioInputStream.getFormat(); DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); try{ line = (SourceDataLine) AudioSystem.getLine(info);} catch (LineUnavailableException e){ e.printStackTrace(); return;} try{line.open(audioFormat);} catch (LineUnavailableException e) { e.printStackTrace(); return;} line.start(); try { byte bytes[] = new byte[5]; int bytesRead=0; while ((bytesRead = audioInputStream.read(bytes, 0, bytes.length)) !=-1) { line.write(bytes, 0, bytesRead);}} catch (IOException io){ io.printStackTrace(); return;} line.close(); } } }
Pour être précis, avec le fichier de test que j'ai utilise, on se tape une javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file, et donc l'exception indique bien que le format n'est pas supporté par JavaSound. L'exception donne d'ailleurs un message un peu plus precis quand on tente d'utiliser JavaFX* pour lire le fichier : MediaException: MEDIA_UNSUPPORTED : Compressed WAVE is not supported! qui survient des la création du média.
Donc pour arriver a le lire, vu que je ne sais pas comment ajouter des format dans JavaSound (ni meme si c'est possible**), il faut utiliser le Java Media Framework
JMF -> Downloads -> Download -> accept -> j'ai pris la version Cross-platform Java -> ajouter lib/jmf.jar dans les dépendances du projet.
*Pour lire avec JavaFX :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void runJMF() { if (isSet) { try { final File file = new File(path); //System.out.println(file.exists()); final MediaLocator mediaLocator = new MediaLocator(file.toURI().toURL()); final Player player = Manager.createRealizedPlayer(mediaLocator); player.prefetch(); player.start(); } catch (IOException | NoPlayerException | CannotRealizeException ex) { Logger.getLogger(Audio.class.getName()).log(Level.SEVERE, null, ex); } } }
**EDIT - En théorie, il semble que oui, par contre du coup il faut trouver qqun qui mettrai a disposition ces filtres ou codec... Voir peut-être musicg (pas testé). Voir également Java Wav File IO.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public void runFX() { if (isSet) { try { final File file = new File(path); System.out.println(file.exists()); final Media media = new Media(file.toURI().toURL().toExternalForm()); // La MediaException est levée ici. final MediaPlayer player = new MediaPlayer(media); player.play(); } catch (Throwable ex) { Logger.getLogger(Audio.class.getName()).log(Level.SEVERE, null, ex); } } }