Jouer un son ou de la musique au format wav

La class permet de lire un son à partir d'un fichier wav. La lecture du son est encapsulé dans un thread ce qui permet de l'utiliser dans de nombreuses situations. Par exemple, dans le développement d'un jeu en JAVA, le son est joué à la collision de deux éléments.
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;

/**
 * Jouer un son au format wav
 * @author ???
 * Source sur le web
 */
public 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 void run() {
        File soundFile = new File(filename);
        if (!soundFile.exists()) {
            System.err.println("Wave file not found: " + filename);
            return;
        }

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

    /**
     * Exemple pour jouer le son du tambour
     */
    public static void main(String[] args) {
        Thread playWave=new AePlayWave("C:\\tambour.wav");
        playWave.start();
    }
Commentaire des internautes
avatar
Fobec le 04/07/2011
Bonjour Steev,
un player plus complet est dispo ici: http://www.fobec.com/CMS/java/class/wav-player-avec-bouton-stop-barre-progression_1106.html
avatar
steev le 04/07/2011
Bjr,
je voudrai savoir comment mettre le son en pause?
aussi comment faire qr qu'il tourne tjr?
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour26/11/2010
VisualisationVu 1038 fois
PublicInternaute
CategorieJAVA - Class - Divers
Auteur de l'article
axel axel
connecté le 20/09/2011
28 ans - France Sud-Est
41 articles dans la section
Contacter l'auteur
Partager l'article