IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Problème pour jouer un son en boucle


Sujet :

Multimédia Java

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut Problème pour jouer un son en boucle
    Bonjour,
    Je cherche à jouer un son .wav lorsque je lance mon application Java. J'arrive à jouer le son une fois, mais le problème vient quand je cherche à le jouer en boucle... D'après les tutoriels que j'ai pu lire, il me faut passer en utiliser la méthode getData()
    Or celle ci me renvoie une exception :

    java.io.IOException could not create AudioData object
    at sun.audio.Audiostream.getData(Unknow Source)

    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Voici ma classe Audio que j'utilise :
    Remarque: Du fait de l'utilisation dans cette classe de getData, même jouer un son une fois ne fonctionne plus pour la même raison

    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
     
    import java.io.*;
    import sun.audio.*;
     
    public class Audio  {
     
      private AudioData audiodata;
      private AudioStream audiostream;
      private ContinuousAudioDataStream continuousaudiostream;
      //static int length;
     
      public Audio(String filename) throws java.io.IOException {
        FileInputStream fis = new FileInputStream(filename);
        audiostream = new AudioStream(fis);
        audiodata = audiostream.getData();
        //audiostream = null;
        //continuousaudiostream = null;
      }
     
      public void play() {
        AudioPlayer.player.start(audiostream);
      }
     
      public void loop() {
      continuousaudiostream = new ContinuousAudioDataStream(audiodata);
      AudioPlayer.player.start(continuousaudiostream);
      }
     
      public void stop() {
     
          AudioPlayer.player.stop(audiostream);
        //if (continuousaudiostream != null)
        //  AudioPlayer.player.stop(continuousaudiostream);
      }
     
    }

    Et Voici la version qui fonctionne qui me permet de jouer le son une fois

    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
    import java.io.*;
    import sun.audio.*;
     
    public class Audio  {
     
      private AudioData audiodata;
      private AudioStream as;
      private ContinuousAudioDataStream continuousaudiostream;
      //static int length;
     
      public Audio(String filename) throws java.io.IOException {
     
    	FileInputStream in = new FileInputStream(filename);
    	as = new AudioStream(in);         
     
     
     
      }
     
      public void play() {
        AudioPlayer.player.start(as);
      }
     
     
     
      public void stop() {
          AudioPlayer.player.stop(as);
     
      }
     
    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 35
    Par défaut
    import java.io.File;
    import java.io.IOException;
    import javax.sound.sampled.AudioFormat;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.DataLine;
    import javax.sound.sampled.FloatControl;
    import javax.sound.sampled.LineUnavailableException;
    import javax.sound.sampled.SourceDataLine;
    import javax.sound.sampled.UnsupportedAudioFileException;

    class AePlayWave extends Thread
    {

    private String filename;

    private Position curPosition;

    private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb

    enum Position {
    LEFT, RIGHT, NORMAL
    };

    public AePlayWave(String wavfile) {
    filename = wavfile;
    curPosition = Position.NORMAL;
    }

    public AePlayWave(String wavfile, Position p) {
    filename = wavfile;
    curPosition = p;
    }

    public void run() {

    File soundFile = new File(filename);
    if (!soundFile.exists()) {
    System.err.println("Wave file not found: " + filename);
    return;
    }

    // for(int i=0;i<10;i++)
    {
    AudioInputStream audioInputStream = null;
    try {
    audioInputStream = AudioSystem.getAudioInputStream(soundFile);
    } catch (UnsupportedAudioFileException e1) {
    e1.printStackTrace();
    return;
    } catch (IOException e1) {
    e1.printStackTrace();
    return;
    }

    AudioFormat format = audioInputStream.getFormat();
    SourceDataLine auline = null;
    DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

    try {
    auline = (SourceDataLine) AudioSystem.getLine(info);
    auline.open(format);
    } catch (LineUnavailableException e) {
    e.printStackTrace();
    return;
    } catch (Exception e) {
    e.printStackTrace();
    return;
    }

    if (auline.isControlSupported(FloatControl.Type.PAN)) {
    FloatControl pan = (FloatControl) auline
    .getControl(FloatControl.Type.PAN);
    if (curPosition == Position.RIGHT)
    pan.setValue(1.0f);
    else if (curPosition == Position.LEFT)
    pan.setValue(-1.0f);
    }
    auline.start();
    int nBytesRead = 0;
    byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

    try {
    while (nBytesRead != -1) {
    nBytesRead = audioInputStream.read(abData, 0, abData.length);
    if (nBytesRead >= 0)
    auline.write(abData, 0, nBytesRead);
    }
    } catch (IOException e) {
    e.printStackTrace();
    return;
    } finally {
    auline.drain();
    auline.close();
    } }

    }
    }

    ensuite, dans l'exécution:

    public void paint(Graphics g)
    {
    AePlayWave tic;
    tic = new AePlayWave("tic.wav");
    AePlayWave tac;
    tac = new AePlayWave("tac.wav");
    for(int i=000;i<10000;i++)
    {
    if(i%2 == 0)
    tic.run();
    else
    tac.run();
    }
    }

Discussions similaires

  1. problème pour gérer le son avec deux forms
    Par huntermaster dans le forum Composants VCL
    Réponses: 9
    Dernier message: 04/03/2009, 08h52
  2. Problème pour réaliser une macro "de boucles" dans VBA
    Par philou7176 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/12/2008, 15h41
  3. Probleme pour jouer un son
    Par xvid110 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/04/2008, 14h45
  4. [VB6] Jouer un son en boucle
    Par tebonb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/07/2006, 11h57
  5. [VB6]Coder un bouton pour jouer du son [debutant]
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/03/2006, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo