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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| class LanceSon implements LineListener {
AudioInputStream fluxSonore;// Flux d'entrÈe audio.
Clip clip; // Ligne pour les clips.
File fichierSonore;// Fichier sonore.
FloatControl sampleRateControl;//Autres
public boolean rejouer = false;// Valeur boolean indiquant une reprise du fichier audio.
/* Constructeur de LecteurDeClip.*/
public LanceSon (File fichierSonore){
this.fichierSonore = fichierSonore;
}
/* Ouvrir le fichier et renvoyer true si succËs.*/
public boolean ouvrirFichier(){
// Obtenir le flux audio du fichier.
try {
fluxSonore =
AudioSystem.getAudioInputStream( fichierSonore );
}
// Ex si fichier audio non supportÈ par JavaSound.
catch ( UnsupportedAudioFileException audioException ) {
System.out.println("Exception1");//par exemple
return false;
}
// Si erreur d'entrÈe-sortie lors de l'obtention du flux.
catch ( IOException ioException ) {
System.out.println("Exception2");//par exemple
return false;
}
// Invoquer chargerClip et renvoie true si le chargement rÈussit.
return chargerClip();
} /*fin de la mÈthode ouvrirFichier*/
/* Charger le clip sonore.*/
public boolean chargerClip () {
// Obtenir la ligne de clip pour le fichier.
try {
// Obtenir le format audio du fichier sonore.
AudioFormat formatAudio = fluxSonore.getFormat();
// DÈfinir les informations de ligne selon le type de ligne,
// le codage et la taille en trames du fichier audio.
DataLine.Info infosLigneDonnees = new DataLine.Info(
Clip.class, AudioSystem.getTargetFormats(
AudioFormat.Encoding.PCM_SIGNED, formatAudio ),
formatAudio.getFrameSize(),
formatAudio.getFrameSize() * 2 );
// S'assurer que le systËme supporte la ligne des donnÈes.
if ( !AudioSystem.isLineSupported( infosLigneDonnees ) ) {
System.out.println("Fichier audio non supportÇ!");
return false;
}
// Obtenir les ressources de la ligne de clip.
clip = ( Clip ) AudioSystem.getLine( infosLigneDonnees );
//
couter les ÈvÈnements sur la ligne de clip.
clip.addLineListener( this );
// Ouvrir clip audio et obtenir ressources systËme requises.
clip.open( fluxSonore );
} // fin du try
// Si ressources de la ligne non disponibles.
catch ( LineUnavailableException noLineException ) {
System.out.println("Exception3");
return false;
}
// Si erreur d'entrÈe-sortie durant l'interprÈtation des donnÈes audio.
catch ( IOException ioException ) {
System.out.println("Exception4");
return false;
}
// Si fichier audio chargÈ avec succËs.
return true;
} // fin de la mÈthode chargerClip
/* DÈmarrer la lecture du clip audio.*/
public void lecture() {
clip.start();
}/*appelle cette méthode pour lancer la lecture, une fois le clip audio chargé.*/
/*Ecouteur de ligne qui permet d'arreter ou de rejouer a la fin du clip.*/
public void update( LineEvent lineEvent ) {
// Si le clip est terminÈ, fermer le clip.
if ( lineEvent.getType() == LineEvent.Type.STOP &&
!rejouer )
close();
// Si le mode rejouer est en marche, rejouer le clip continuellement.
else
if ( lineEvent.getType() == LineEvent.Type.STOP &&
rejouer ) {
// Rejouer le clip continuellement.
clip.loop( Clip.LOOP_CONTINUOUSLY );
}
}
/*Accord du sample, pour le transposer dans le grave, valeurs inferieures a 48 000*/
public void accord(float ValeurSampleRate){
float sampleRate = ValeurSampleRate;
FloatControl sampleRateControl = (FloatControl) clip
.getControl(FloatControl.Type.SAMPLE_RATE);
sampleRateControl.setValue(sampleRate);
}
/*Volume du sample*/
public void volume(float ValeurVolume){
float ContVol = ValeurVolume;
FloatControl VolumeControl = (FloatControl) clip
.getControl(FloatControl.Type.MASTER_GAIN);
VolumeControl.setValue(ContVol);
}
/*Panoramique*/
public void pan(float ValeurPan){
float ContPan = ValeurPan;
FloatControl PanControl = (FloatControl) clip
.getControl(FloatControl.Type.PAN);
PanControl.setValue(ContPan);
//Les valeurs de panoramique vont de -1 1.
}
/*DÈfinir si le clip doit Ítre rejouÈ.*/
public void setRejouer( boolean valeur ){
rejouer = valeur;
}
/*ArrÍter et fermer le clip, puis libÈrer les ressources systËme.*/
public void close() {
if ( clip != null ) {
clip.stop();
clip.close();
}
}
} /*fin de la classe LanceSon*/ |
Partager