Le multimédia avec Java
Java simplifie beaucoup de choses en programmation et surtout en multimédia. Il possède de plus beaucoup de plug-in qui permette de faire presque tout ce que l'on veut. Si la solution n'est pas dans le jdk, elle sera sans doute dans un plug-in Sun ou sur le Net.
Avec java vous avez une gestion immédiate des formats d'images JPEG, GIF , et sonore AU, ce qui n'est pas énorme mais avec le plug-in Java Media Framework ou aussi JAI, vous accédez à la quasi totalité des formats graphiques, aux fichiers vidéo AVI, MOV et aux fichiers sonores ( dans la dernière versions, on a accès aux MP3 ).
Je traiterai ici de méthodes générales de traitement multimédia, affichage d'image, lecture de fichier sonore et bientôt des vidéos.
Graphisme
Comment visualiser une image ( GIF ou JPEG ) :
Tout ce qui concerne le graphisme devra se faire dans les fonctions "paint" et "update" ( voir applet )
méthode simple ( pour une applet ):
Image tete = getImage( getCodeBase(), "tete.gif" );
g.drawImage(tete, 10, 10, tete.getWidth(this), tete.getHeight(this), this);
//g est l'objet sur lequel vous dessinez,
//il est passé en paramètre aux méthode "paint" et "update".
La méthode simple est en générale suffisante, cependant il arrive que l'on est besoin de contrôler le chargement, on doit alors appliquer une méthode plus lourdes.
Exemple, si l'image est trop lourde l'attente sera longue et la personne risque de croire que l'application est plantée et partir. Pour remédier à cela on peut utiliser soit:
-
un ImageObserver charger de suivre le chargement de l'image , dans l'exemple précédent c'est l'applet qui joue ce rôle ( c'est le "this" passé en paramétre )
-
un MediaTracker, plus généraliste il joue le même rôle mais avec les images, les fichiers sonores et vidéos. C'est lui qui est le plus souvent employé.
méthode avec une instance de MediaTracker :
vous devez rajouter en import : import java.awt.MediaTracker;
puis dans votre fonction le code suivant :
Image dessin = getImage( getCodeBase(), "tete.gif" );
MediaTracker mt = new MediaTracker(new ImageReader());
mt.addImage(dessin,0);
//on lie l'image dessin au mediatracker avec l'ID 0
try
{
mt.waitForID(0);
//attente que l'objet d'ID 0 soit chargé, ici dessin.
//car un mediatracker peut suivre plusieurs objets.
j = dessin.getWidth(new ImageReader());
}catch(InterruptedException e){}
//juste là pour rendre plus clair
class ImageReader extends Component
{
public ImageReader()
{
super();
}
}
|
Si vous faite une application, vous devez remplacer getImage de la classe Applet par la méthode getImage présente dans la classe Toolkit :
Toolkit.getDefaultToolkit().getImage(name);
//name est le nom de l'image avec son emplacement |
Pour cela vous rajouter dans les import :
import java.awt.Toolkit;
Avec JAVA2, de nouvelles méthodes de traitement d'images ont été implémentées, plus particulièrement l'appel de la fonction getImage de la classe ImageIcon. Cette fonction est bloquante, elle ne rend la main que quand l'image a été totalement est donc utilisable.
Utilisation :
import javax.swing.ImageIcon;
Image image = new ImageIcon("test.gif").getImage();
Son
Lecture de son :
pour simplement jouer le fichier utiliser la méthode play de la classe Applet comme ceci :
play(getCodeBase(), "son.au");
si maintenant vous avez besoin de pouvoir contrôler la lecture, il vous faudra créer un objet AudioClip avec la méthode getAudioClip :
AudioClip clip = getAudioClip(getCodeBase(), "son.au");
pour le jouer faite appel à la méthode play, pour l'arrêt à stop et pour faire une lecture en boucle à loop :
clip.play();
clip.stop();
clip.loop();
|
Si vous voulez aller plus loin en lisant des mp3, des vidéos ... utilisez donc JMF et JAI ( voir page plug-in ) |