Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

Jouer de la musique


Sujet :

Multimédia Java

  1. #1
    Futur Membre du Club
    Jouer de la musique
    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

  2. #2
    Rédacteur/Modérateur

    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 penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Futur Membre du Club
    merci de ta réponse pour faire simple .

    mon fichier ce lit bien sur windows

    voici mon code :

    Dans main :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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();
     
    	}
     
    }


    Dans audio


    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
    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();   	    	  
        	  }
        }
    }


    merci d'avance pour vos réponse et résoudre mon probleme

  4. #4
    Rédacteur/Modérateur

    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.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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);
            }
        }
    }


    *Pour lire avec JavaFX :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    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);
            }
        }
    }


    **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.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

###raw>template_hook.ano_emploi###