Objectif : programmer une interface pour écouter des fichiers audio au format mp3 avec un grand nombre de possibilités et d'options.
Ce projet d'IHM s'inspire pour l'essentiel des nombreux "front-ends" destinés à cet usage (dont winamp est un bel exemple). Sous Linux, les applications existantes présentent de nombreuses faiblesses (dont celle, qui nous concerne ici, d'une ergonomie déplorable).
Cahier des charges
L'application doit permettre de charger dans une liste tous les fichiers mp3 présents dans un répertoire donné puis d'en assurer la lecture. Concernant la partie fonctionnelle, on utilisera les outils mpg321 et aumix(ce dernier pour contrôler le volume pour l'essentiel). Ceci va permettre de se focaliser sur la partie IHM de l'application, qui constitue l'objectif réel de ce projet.
La commande mpg321
Cette commande peut être lancé en mode "télécommandé" (remote control), ce qui permet de contrôler la lecture d'un fichier mp3 via une interface utilisateur et non en ligne de commande, ce qui est le fonctionnement par défaut de mpg321. Ce fonctionnement particulier se fait par la commande :
mpg321 -o alsa -R abc
Le paramètre "abc" est fictif mais obligatoire (voir documentation).
Dans ce mode, vous avez accès aux instructions suivantes (suivies de la touche <RETURN>) :
- LOAD pour charger et lire un fichier mp3,
- JUMP pour sauter (en avant ou en arrière) plusieurs plages musicales dans le morceau,
- PAUSE pour demander une pause dans la lecture,
- QUIT pour quitter.
Après avoir chargé un fichier mp3 dans le mode "remote control", mpg321 affiche les informations suivantes :
- @R MPG123 : tag d'en-tête,
- @I suivi du nom du fichier sans l'extension,
- @S suivi de nombreuses informations (voir documentation) dont le taux d'échantillonnage en particulier,
- @F suivi des informations courantes durant la lecture (plage courante, nombre de plages restantes, temps écoulé, temps restant),
- @E suivi d'un message d'erreur.
La documentation complète sur l'utilisation de mpg321 en mode "remote control" est disponible ici.
La commande aumix
Cette commande permet de mixer en ligne de commande pour les cartes son utilisant le driver ALSA (Advanced Linux Sound Architecture). Dans le contexte du projet, on l'utilisera pour augmenter ou diminuer le volume (ce que ne permet pas de faire mpg321 en mode remote control ?) grâce à la commande :
aumix -v30
par exemple, afin de régler le volume à 30 % du volume maximal sur les deux voies.
L'interface graphique utilisateur
Elle devra, au minimum, mettre à disposition des contrôles permettant à l'utilisateur de charger une liste de morceaux de musique et d'interagir avec la lecture de la musique. Ces contrôles sont :
- un bouton chargement, symbolisé par un triangle pointe en bas surmonté d'une barre horizontale,
- un bouton lecture, symbolisé par un triangle,
- un bouton pause, symbolisé par deux barres verticales,
- un bouton stop, symbolisé par un carré,
- deux boutons d'avance rapide (en avant et en arrière), symbolisés par deux flèches accolées,
- deux boutons d'accès au morceau précédent et au morceau suivant le morceau actuellement joué, symbolisés par deux flèches accolées terminées par une barre vecticale,
- un contrôle du volume,
- une barre de défilement représentant la progression de la lecture,
- une liste déroulante (playlist) permettant de choisir un morceau parmi une liste de morceaux, d'ajouter et de supprimer des morceaux, de réorganiser l'ordre des morceaux,
- une option de lecture aléatoire, de lecture d'un seul morceau ou de lecture normale,
L'utilisateur aura aussi à sa disposition :
- un affichage du temps écoulé (ou du temps restant) et du temps total de la lecture,
- un affichage des artistes, du titre du morceau, du nom de l'album, de l'année et éventuellement du type de musique (rock, etc.),
- un affichage des informations techniques associées au morceau (taux d'échantilllonnage, etc.),
- une aide en ligne,
- la possibilité de personnaliser l'application (couleurs, positions des contrôles, présence ou non de certains affichages, etc.).
Pour les plus pressés d'entre vous, des images (libres de droit) représentant certains contrôles sont disponibles ci-dessous.
Programmation
L'ensemble du projet devra être écrit en TclTk exclusivement. L'utilisation des namespace est recommandée. De même, il est indispensable de construire ce projet modulairement, seule approche succeptible de garantir au minimum les principes d'encapsulation, de protection et de réutilisabilité. Vous pouvez utiliser tout module disponible sur le net (écrit en TclTk) augmentant l'ergonomie et/ou la présentation de votre application (attention cependantà la surenchère, rarement synonyme de qualité).
Notation
La notation de ce projet prendra en compte le respect du cahier des charges, la qualité de la programmation (robustesse, lisibilité et modularité de votre code) ainsi que les aspects propres à une IHM que sont : cohérence, concision (limitation du nombre d'intervention de l'utilisateur), structuration des activités (décomposition d'une tâche complexe), flexibilité (application personnalisable), retour d'informations et gestion des erreurs, toutes choses qui garantissent une interface ergonomique et intuitive et qui n'apparaissent pas explicitement dans cette présentation. Toute initiative originale et personnelle sera évaluée d'un oeil bienvaillant (par exemple, l'auteur de cette page a commencé à implanter une représentation symbolique d'un disque vinyle, la taille des pistes étant proportionnelle à la durée de chaque morceau, et de sa pochette, comportant le titre de l'album, les titres des morceaux ainsi que leur durée, avec possibilité de positionner la tête de lecture "à la main", etc.), tout en ayant à l'esprit que les possibilités graphiques de TclTk sont limitées.