JérOli Media Player Auteurs : J.FELLUS & O.NESTY
A quoi ça sert ???? JérOli Media Player
A quoi ça sert ???? 1.Gestionnaire de PlayList JérOli Media Player
A quoi ça sert ???? 1.Gestionnaire de PlayList 2.Outil de Recherche de Mp3 dans larborescence JérOli Media Player
A quoi ça sert ???? 1.Gestionnaire de PlayList 2.Outil de Recherche de Mp3 dans larborescence 3.Player JérOli Media Player
Exemples de fonctionnement
Approche : « Je cherche tous les morceaux dOscar Peterson qui datent de plus de 10 ans »
Exemples de fonctionnement Approche : « Jai entendu parler de Songs in the key of life, je ne sais pas si cest le nom de lalbum ou le titre dune chanson… que me propose le JérOli Media Player ??? »
Exemples de fonctionnement Actions sur la PlayList
Exemples de fonctionnement Ecoute tranquille de musiques tout en faisant autre chose
Dissection du JérOli Media Player Ses aspects Internes
Gestionnaire : classes principales
C Main : Point de démarrage du programme C
Gestionnaire : classes principales CCApplication : classe principale d'une application CC Main : Point de démarrage du programme
Gestionnaire : classes principales CC Application : classe principale d'une application CC Interface Configuration Player PlayList en Cours Main : Point de démarrage du programme
Gestionnaire : classes principales CCApplication : classe principale d'une application CC Interface Configuration Player PlayList en Cours Méthodes : Ajouter à la PlayList Retirer … Charger une PlayList Look&Feel Main : Point de démarrage du programme
Gestionnaire : classes principales CCApplication : classe principale d'une application CC CCConfig : classe qui va gérer les fonctions de configurations Main : Point de démarrage du programme
Gestionnaire : classes principales CCApplication : classe principale d'une application CC CCConfig : classe qui va gérer les fonctions de configurations CCPlayList : Liste de MP3Desc Main : Point de démarrage du programme C
Gestionnaire : classes principales CCApplication : classe principale d'une application CC CCConfig : classe qui va gérer les fonctions de configurations CCPlayList : Liste de MP3Desc Méthode : Add, remove … IsPlaying? Déplacement de MP3 Navigation (précédent, suivant, stop, play) Main : Point de démarrage du programme C
Gestionnaire : classes principales CCApplication : classe principale d'une application CC CCConfig : classe qui va gérer les fonctions de configurations CC PlayList : Liste de MP3Desc Méthode : Add, remove … IsPlaying? Déplacement de MP3 Navigation (précédent, suivant, stop, play) Player C Main : Point de démarrage du programme
Gestionnaire : classes principales CIInterface Interface textuelle Interface Graphique Gestion du Splash Screen Mode Quick Play !
Gestionnaire : classes principales CIInterface Interface textuelle Interface Graphique Fenêtre Principale Fenêtre Quick Play !
Gestionnaire.repertoire Classes qui gèrent le contenu de larborescence C Répertoire (Arborescence) C Vecteur de Données (tableau dynamique de MP3Desc ) C Méthode : Filtrage Tri Random [Debug]
Gestionnaire.repertoire Classes qui gèrent le contenu de larborescence C Répertoire (Arborescence) C CC MP3Desc (Description dun fichier Mp3) * tag ID3 Lire le tag (sous forme compacte « byte[ ] ») via un Tag Reader * Récupérer les champs * Passer à travers des filtres * Comparaison par critères (critère vector)
Aspect Visuel…
Interface Graphique Aspect Visuel…
Interface Graphique Aspect Visuel… CC WSplashScreen : gère la fenêtre de chargement
Interface Graphique Aspect Visuel… CCWConfig : gère toute la fenêtre de configuration CC WSplashScreen : gère la fenêtre de chargement
Interface Graphique Aspect Visuel… CCWConfig : gère toute la fenêtre de configuration CC CCWFenetrePrincipale : gère toute la fenêtre principale WSplashScreen : gère la fenêtre de chargement
Interface Graphique Aspect Visuel… CCWConfig : gère toute la fenêtre de configuration CC CCWFenetrePrincipale : gère toute la fenêtre principale CCWQuickPlay : gère toute la fenêtre Quick Play ! WSplashScreen : gère la fenêtre de chargement
Interface Graphique Aspect Visuel… CCWConfig : gère toute la fenêtre de configuration CC CCWFenetrePrincipale : gère toute la fenêtre principale CCWQuickPlay : gère toute la fenêtre Quick Play ! WSplashScreen : gère la fenêtre de chargement CCWRechecheRapide : Affiche le résultat de la recherche rapide
Aspect Visuel…
Composants Aspect Visuel…
Composants Aspect Visuel… CC CCritèreTri : gère le choix des Critères de recherche
Composants Aspect Visuel… CCCInfos : gère le tableau dinformation CC CCritèreTri : gère le choix des Critères de recherche
Composants Aspect Visuel… CCCInfos : gère le tableau dinformation CC CCCPlaylist : gère la Liste de chansons CCritèreTri : gère le choix des Critères de recherche
Composants Aspect Visuel… CCCInfos : gère le tableau dinformation CC CCCPlaylist : gère la Liste de chansons CCCTitreBlock : Affiche le titre de chaque module CCritèreTri : gère le choix des Critères de recherche
ORGANISATION DE LARBORESCENCE Tri & Filtrage
ETAPE 1 : FILTRAGE REPERTOIREMP3DESC Visible ? FILTRE Filtrer
ETAPE 1 : FILTRAGE Classe Filtre : Méthode dexécution du filtre C
ETAPE 1 : FILTRAGE N x nbFiltres comparaisons à effectuer (nbFiltres << N) C = o(N)
ETAPE 2 : TRI PAR CRITERES REPERTOIREVector CRITERES Vector MP3DESC Sort ( ) Custom COMPARATOR Custom compareTo ( ) method Visible ?
ETAPE 2 : TRI PAR CRITERES Classe Filtre : Méthode dexécution du filtre C
ETAPE 2 : TRI PAR CRITERES Classe MP3Desc : méthode de comparaison par critères C
ETAPE 2 : TRI PAR CRITERES compareTo() : nbCriteres comparaisons à effectuer (dans le pire des cas) sort() : algorithme issu de la bibliothèque de classes standard – complexité en n.log(n) nbCriteres << N C = o(N.log(N))
lBound : int rBound : int Parent : MP3Node ETAPE 3 : AFFICHAGE HIERARCHIQUE CRepertoireTree ( ~Jtree) DefaultTreeModel MP3TreeModel Repertoire MP3Node
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 AX1 AX2 AY1 BX3 BX4 BY1 BY2 CX1 CX5 CX12 CY1 CZ109 CZ110
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 AX1 AX2 AY1 BX3 BX4 BY1 BY2 CX1 CX5 CX12 CY1 CZ109 CZ110
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 AX1 AX2 AY1 BX3 BX4 BY1 BY2 CX1 CX5 CX12 CY1 CZ109 CZ110
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 AX1 AX2 AY1 BX3 BX4 BY1 BY2 CX1 CX5 CX12 CY1 CZ109 CZ110 Root
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 AX1 AX2 AY1 BX3 BX4 BY1 BY2 CX1 CX5 CX12 CY1 CZ109 CZ110 Root 0 1 2
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 X1 X2 Y1 X3 X4 Y1 Y2 X1 X5 X5 Y1 Z109 Z Root A B C
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 X1 X2 Y1 X3 X4 Y1 Y2 X1 X5 X5 Y1 Z109 Z Root A B C
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE 3 X1 X2 Y1 X3 X4 Y1 Y2 X1 X5 X5 Y1 Z109 Z Root A B C
ETAPE 3 : AFFICHAGE HIERARCHIQUE CRITERE 1CRITERE 2CRITERE X3 X4 Y1 Y2 X1 X5 X5 Y1 Z109 Z Root A B C X Y 0 1
ETAPE 3 : AFFICHAGE HIERARCHIQUE Repertoire MP3Node lBound rBound Childs
ETAPE 3 : AFFICHAGE HIERARCHIQUE Repertoire MP3 A MP3 B MP3 C MP3 D MP3 E MP3 F MP3 G MP3 H MP3 I MP3 J MP3 K MP3 L MP3 M MP3Node lBound rBound Childs GetChildCount () Nombre de valeurs différentes dans [ lBound,rBound ] GetChild(int i) Parcours jusquà trouver i valeur différentes et retourne lindice courant GetParent () Chaque nœud garde une trace de son père TreeModel overrides parent
ETAPE 3 : AFFICHAGE HIERARCHIQUE On doit accéder n x nbCriteres fois à un mp3 du répertoire nbCriteres << n C = o(N)
Complexité finale de lopération Filtrage + Tri C = o(N) + o(N.log(N)) + o(N) C ~ o ( N.log(N) )
Les Librairies Externes Jlayer : le player TinyLAF : les thèmes de linterface Graphique
Les points Négatifs… Pas de Menu Clic-Droit pourtant implémenter Après avoir fait « suivant » la chanson daprès ne se joue pas Pas de lecture de durée pas dindication davancement dans la lecture pas de bouton « pause » fonctionnel ! Pas dinterface Textuelle Problème de superposition de fenêtres
Les plus de notre projet… Quick Play ! Recherche Rapide Capacités de Filtrage et Tri avancées Plusieurs thèmes Redimensionnement pratique de chaque module Portabilité des PlayLists générées par notre application vers dautres plus connues comme Real Player, etc.
Les futures mises à jour de notre projet… Tag ID3 v1.1, v2 Edition des tags Durée, avancement Le Drag N Drop
Remerciements P.LAROQUE & JL.BOURDON (pour le cours de JAVA) B.DERDOURI & M.NAÏMI (pour le cours de calcul de la complexité) V.SANS (pour le cours dUML) Les Concepteurs de la JAVADOC
Modèle UML de notre projet interfaceMode (boolean) Application thread PlayerInterface menuPrincipal InterfaceTexte fenetrePrincipale InterfaceGraphique Root (String) Repertoire configData (Map<String,String) Config Tag (byte[]) isVisible (boolean) MP3Desc fromEnd (boolean) tagSize (int) TagReader Name (String) Opération (String) Value (Object) Filtre Criteres (String[]) CriteresVector Name (String) Size (int) Sortable (boolean) Field isPlaying (boolean) Filename (String) Playlist FILTRER
To be continue…