Publié le 26/11/2010
Auteur axel
Réseaux sociaux
0 partages
0 tweets
0 plus
3 commentaires

Jouer un son ou de la musique au format wav

Dans une application JAVA, jouer des sons sur une action de l'utilisateur ou lors d'une erreur améliore l'interface homme machine. Nativement, le langage JAVA sait jouer une mélodie à partir du format Wav.

Lire un fichier musique

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

A chaque fois que AePlayWave est instancé, le fichier est lu puis jouer sur l'ordinateur. La class peut etre améliorée en mettant en cache le contenu de la mélodie, d'autant plus que le format wav ne pese pas lourd.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar steev

Publié par steev

le 04/07/2011 à 13:35:38

Bjr,
je voudrai savoir comment mettre le son en pause?
aussi comment faire qr qu'il tourne tjr?

avatar Fobec

Publié par Fobec

le 12/06/2013 à 15:55:52

Bonjour Steev,
un player plus complet est dispo ici: http://www.fobec.com/java/1106/wav-player-avec-bouton-stop-barre-progression.html

avatar arthur

Publié par arthur

le 01/06/2012 à 16:02:16

essaye avec une while, cela devrais marcher. mais après je ne sais pas comment paramétrer. c'est toi qui voit

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
26/11/2010
Visualisation
vu 9167 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par tactictoe dans CMS

Erreur ligne 8 et 26:
Lire : Reg.OpenKey('\Software\Microsoft\Internet Explorer\Main\', false);
et non pas Reg.OpenKey('SoftwareMicrosoftInternet ExplorerMain', false);

Publié par olibul dans CMS

var
fn: string;

begin

Result:= False;
if strFont <> \'\' then begin

// Tester le nom: si affectation directe à TFont, modifications aléatoires...

Publié par jmc dans CMS

Autre lien de chargement : http://www.fobec.com/protec/logiciels2/encadre.php3?id_log=217&cat=VBureautique

Publié par Fobec dans java

oups quelques lignes manquent sur ce code ! ... l'exemple est corrige et complet
Merci Tom

Publié par Tchatche dans news

Salut a tous,
@ Outsourcing je suis tout a fait d'accord avec toi que le Pagerank d'un site (ou page) n'est pas un gage de bonnes positions sur Google,on peut tous citer des sites ay...