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 PlayList2. Outil de Recherche de Mp3 dans l’arborescence
JérOli Media Player
A quoi ça sert ????
1. Gestionnaire de PlayList2. Outil de Recherche de Mp3 dans l’arborescence3. Player
JérOli Media Player
Exemples de fonctionnement
Exemples de fonctionnement
Approche :
« Je cherche tous les morceaux d’Oscar Peterson qui datent de plus de 10 ans »
Exemples de fonctionnement
Approche :
« J’ai entendu parler de Songs in the key of life, je ne sais pas si c’est le nom de l’album ou le titre d’une 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
Gestionnaire : classes principales
C Main : Point de démarrage du programmeC
Gestionnaire : classes principales
CC Application : 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
CC Application : classe principale d'une application
CC
Interface Configuration Player PlayList en
Cours
Méthodes :Ajouter à la PlayListRetirer …Charger une PlayListLook&Feel
Main : Point de démarrage du programme
Gestionnaire : classes principales
CC Application : classe principale d'une application
CC
CC Config : classe qui va gérer les fonctions de configurations
Main : Point de démarrage du programme
Gestionnaire : classes principales
CC Application : classe principale d'une application
CC
CC Config : classe qui va gérer les fonctions de configurations
CC PlayList : Liste de MP3Desc
Main : Point de démarrage du programme
C
Gestionnaire : classes principales
CC Application : classe principale d'une application
CC
CC Config : classe qui va gérer les fonctions de configurations
CC PlayList : Liste de MP3Desc
Méthode : Add, remove …IsPlaying?Déplacement de MP3Navigation (précédent, suivant, stop, play)
Main : Point de démarrage du programme
C
Gestionnaire : classes principales
CC Application : classe principale d'une application
CC
CC Config : classe qui va gérer les fonctions de configurations
CC PlayList : Liste de MP3Desc
Méthode : Add, remove …IsPlaying?Déplacement de MP3Navigation (précédent, suivant, stop, play)
Player
C
Main : Point de démarrage du programme
Gestionnaire : classes principales
CI Interface
Gestion du Splash ScreenMode Quick Play !
Gestionnaire : classes principales
CI Interface
Fenêtre PrincipaleFenêtre Quick Play !
Gestionnaire.repertoireClasses qui gèrent le contenu de l’arborescence
C Répertoire (Arborescence)CVecteur de Données (tableau dynamique de MP3Desc )C
Méthode : FiltrageTriRandom [Debug]
Gestionnaire.repertoireClasses qui gèrent le contenu de l’arborescence
C Répertoire (Arborescence)C
CC MP3Desc (Description d’un 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…
CC WConfig : gère toute la fenêtre de configuration
CC WSplashScreen : gère la fenêtre de chargement
Interface Graphique
Aspect Visuel…
CC WConfig : gère toute la fenêtre de configuration
CC
CC WFenetrePrincipale : gère toute la fenêtre principale
WSplashScreen : gère la fenêtre de chargement
Interface Graphique
Aspect Visuel…
CC WConfig : gère toute la fenêtre de configuration
CC
CC WFenetrePrincipale : gère toute la fenêtre principale
CC WQuickPlay : gère toute la fenêtre Quick Play !
WSplashScreen : gère la fenêtre de chargement
Interface Graphique
Aspect Visuel…
CC WConfig : gère toute la fenêtre de configuration
CC
CC WFenetrePrincipale : gère toute la fenêtre principale
CC WQuickPlay : gère toute la fenêtre Quick Play !
WSplashScreen : gère la fenêtre de chargement
CC WRechecheRapide : 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…
CC CInfos : gère le tableau d’information
CC CCritèreTri : gère le choix des Critères de recherche
Composants
Aspect Visuel…
CC CInfos : gère le tableau d’information
CC
CC CPlaylist : gère la Liste de chansons
CCritèreTri : gère le choix des Critères de recherche
Composants
Aspect Visuel…
CC CInfos : gère le tableau d’information
CC
CC CPlaylist : gère la Liste de chansons
CC CTitreBlock : Affiche le titre de chaque module
CCritèreTri : gère le choix des Critères de recherche
ORGANISATION DE L’ARBORESCENCE
Tri & Filtrage
ETAPE 1 : FILTRAGE
REPERTOIRE MP3DESC Visible ?
FILTRE
Filtrer
ETAPE 1 : FILTRAGEClasse Filtre : Méthode d’exécution du filtre C
ETAPE 1 : FILTRAGE
N x nbFiltres comparaisons à effectuer (nbFiltres << N)
C = o(N)
ETAPE 2 : TRI PAR CRITERES
REPERTOIRE Vector<MP3DESC>
CRITERES Vector
MP3DESC
Sort ( ) Custom COMPARATOR
Custom compareTo ( ) method
Visible ?
ETAPE 2 : TRI PAR CRITERES
Classe Filtre : Méthode d’exécution du filtre C
ETAPE 2 : TRI PAR CRITERES
Classe MP3Desc : méthode de comparaison par critèresC
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 : intrBound : int
Parent : MP3Node
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRepertoireTree ( ~Jtree)
DefaultTreeModel
MP3TreeModel
Repertoire
MP3Node
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
A X 1
A X 2
A Y 1
B X 3
B X 4
B Y 1
B Y 2
C X 1
C X 5
C X 12
C Y 1
C Z 109
C Z 110
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
A X 1
A X 2
A Y 1
B X 3
B X 4
B Y 1
B Y 2
C X 1
C X 5
C X 12
C Y 1
C Z 109
C Z 110
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
A X 1
A X 2
A Y 1
B X 3
B X 4
B Y 1
B Y 2
C X 1
C X 5
C X 12
C Y 1
C Z 109
C Z 110
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
A X 1
A X 2
A Y 1
B X 3
B X 4
B Y 1
B Y 2
C X 1
C X 5
C X 12
C Y 1
C Z 109
C Z 110
Root
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
A X 1
A X 2
A Y 1
B X 3
B X 4
B Y 1
B Y 2
C X 1
C X 5
C X 12
C Y 1
C Z 109
C Z 110
Root
0
1
2
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
X 1
X 2
Y 1
X 3
X 4
Y 1
Y 2
X 1
X 5
X 5
Y 1
Z 109
Z 109
Root
0
1
2
A
B
C
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
X 1
X 2
Y 1
X 3
X 4
Y 1
Y 2
X 1
X 5
X 5
Y 1
Z 109
Z 109
Root
0
1
2
A
B
C
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
X 1
X 2
Y 1
X 3
X 4
Y 1
Y 2
X 1
X 5
X 5
Y 1
Z 109
Z 109
Root
0
1
2
A
B
C
ETAPE 3 : AFFICHAGE HIERARCHIQUE
CRITERE 1 CRITERE 2 CRITERE 3
1
2
1
X 3
X 4
Y 1
Y 2
X 1
X 5
X 5
Y 1
Z 109
Z 109
Root
0
1
2
A
B
C
X
Y
0
1
ETAPE 3 : AFFICHAGE HIERARCHIQUE
Repertoire
1
2
1
3
4
1
2
1
5
5
1
109
109
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 l’indice 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 l’opérationFiltrage + 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 l’interface Graphique
Les points Négatifs…
• Pas de Menu Clic-Droit pourtant implémenter• Après avoir fait « suivant » la chanson d’après ne se joue pas• Pas de lecture de durée
pas d’indication d’avancement dans la lecturepas de bouton « pause » fonctionnel !
• Pas d’interface 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
d’autres 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 d’UML)
• Les Concepteurs de la JAVADOC
Modèle UML de notre projet
interfaceMode (boolean)
Application
thread
Player Interface
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…