Lecteur de Fichier Mp3 - Dossier de Projet - Option ISN
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
OPTION ISN Lecteur de Fichier Mp3 Dossier de Projet – Option ISN Tristan PERRET Terminale S SI Terminale S SI - Lycée Jules Algoud – Option ISN - Année Scolaire 2012-2013
Table des Matières I- Le projet de Lecteur de fichier mp3 .............................................................................2 a) Les raisons du choix de ce projet et ses objectifs..............................................................2 b) Les moyens choisis pour ce projet et les raisons...............................................................2 II- Conception du lecteur ...................................................................................................3 a) La mise en place des commandes principales...................................................................3 b) Création des fonctions « secondaires » ............................................................................4 c) Interface graphique ..........................................................................................................5 III- Bilan et observations ..................................................................................................8 a) Les Points positifs ...........................................................................................................8 b) Les Points négatifs...........................................................................................................8 Conclusion ............................................................................................................................8 Annexe ..................................................................................................................................9 1
I- Le projet de Lecteur de fichier mp3 a) Les raisons du choix de ce projet et ses objectifs Avec mon camarade, ARMATOL Simon, nous avons eu l’idée de concevoir un lecteur de fichier mp3. En effet, étant amateur de musique, je trouvais intéressant d’aborder ce thème et cet aspect de la programmation pour comprendre au mieux ce qui se cache dans les lecteurs type Windows Media que l’on a l’habitude d’utiliser sans pour autant chercher à comprendre comment ils sont conçus. Nous nous sommes également rendu compte que les utilisateurs de ces logiciels multimédia utilisaient régulièrement les mêmes fonctions malgré le nombre incroyable de possibilités et d’options que l’on trouve sur ces logiciels. Après avoir défini ce que nous voulions faire lors des séances d’ISN, notre objectif fut donc de concevoir un programme permettant de lire des fichiers musicaux tout en jouissant d’une interface agréable, réduite à l’essentiel et simple d’utilisation. Ce lecteur doit donc être avant tout un lecteur d’appoint permettant de tester des fichiers mp3 ou de simplement écouter de la musique, ce qui explique que nous n’avons pas essayé de créer un lecteur média de type VLC. b) Les moyens choisis pour ce projet et les raisons Pour créer notre lecteur nous avons fait le choix d’utiliser le langage Python, qui est le langage que nous avons le plus étudié tout au long de l’année. Ce lecteur étant mon premier projet en programmation, je ne préférais donc pas partir sur un langage trop complexe, comme par exemple le langage C, et me concentrer sur une forme de langage plus accessible pour moi. En complément de Python, nous avons utilisé des modules comme l’interface Tkinter qui nous a permis de gérer l’interface graphique de notre logiciel et de créer notre fenêtre. Concernant le lecteur audio, nous avons utilisé le module Pygame, module qui nous a été conseillé par notre professeur et qui est, à l’origine, utilisé pour créer des jeux vidéo, et notamment la fonction « Mixer » qui nous a permis de gérer toutes les commandes nous permettant de gérer la lecture audio (boutons « Lecture », « Stop », « Reprise » et « Volume »). 2
II- Conception du lecteur a) La mise en place des commandes principales Il va de soi que pour un lecteur audio, il est nécessaire de pouvoir transférer notre musique sur le lecteur ce qui est donc notre commande principale. Pour la réaliser, nous utilisons la fonction : pygame.mixer.music.load('xxx.mp3') Cette fonction nous permet de charger, dans le lecteur, la musique qui porte le nom ‘xxx’ qui est un fichier en format ‘.mp3’. Il faut cependant que ce premier fichier se trouve dans le même dossier que le programme. Cette fonction est utilisée au démarrage du programme. Il faut ensuite lire le fichier que l’on a importé dans le programme, pour cela on utilise : pygame.mixer.music.play() Cette fonction a pour but de lire le fichier chargé précédemment. Afin de compléter la lecture et l’utilisation du logiciel, nous rajouterons une fonction pause permettant d’interrompre le fichier audio et pour cela on utilise : pygame.mixer.music.pause() Cette fonction nous permet de stopper la lecture en cours Néanmoins, la fonction pause nous pose un problème puisque lorsque l’on relance la lecture du fichier, celui-ci reprendra au début. Pour remédier à ce problème on utilise la fonction reprise qui est la suivante : pygame.mixer.music.unpause() Cette fonction nous permet de reprendre la musique mise en pause à l’endroit exacte où l’on s’est arrêté. Chacune de ces trois fonctions doivent être définies et reliées à un bouton pour pouvoir les manipuler aisément. C’est ce que nous verrons dans notre partie concernant l’interface graphique. 3
b) Création des fonctions « secondaires » Comme fonction secondaire, nous avons créé une fonction permettant d’ouvrir un fichier mp3 à partir de nos documents : fichier_music=tkFileDialog.askopenfile (title='Choisissez un fichier', filetypes=[('mp3 files', '.mp3')]) pygame.mixer.music.load(fichier_music.name) Cette fonction nous permet, quand on clique sur le bouton prévu à cet effet, d’ouvrir une boite de dialogue avec nos documents, il suffit alors de circuler dans nos documents, où seuls les fichiers mp3 apparaissent, et de choisir un fichier pour l’ouvrir dans le lecteur. Si une musique est en cours à ce moment, elle s’interrompt et il suffit d’appuyer sur lecture pour lancer le nouveau fichier. Nous avons aussi modifié la fonction précédente pour pouvoir créer une liste de lecture: fichier_music = tkFileDialog.askopenfile(title='Choisissez un fichier',filetypes=[('mp3 files', '.mp3')]) pygame.mixer.music.queue(fichier_music.name) Cette fonction a le même objectif que la fonction précédente mais à la place de stopper la musique en cours, elle place le fichier à sa suite et le lancera automatiquement à sa fin. Pour avoir une plus grande marge de manœuvre suivant l’utilisateur du lecteur, nous avons créé un système permettant de changer le volume du fichier audio à l’aide d’un curseur : Mafenetre.after(100,Vol) vol1 = Boutonvolume.get() pygame.mixer.music.set_volume(vol1*.01) Grace a cette partie la position du curseur est actualisée toute les 100 ms et le volume prend la valeur du curseur. Nous avons aussi programmé un bouton « Mute » avec la fonction : Boutonvolume.set(0) Ce qui donne au curseur de volume la valeur 0 et donc permet de couper le son. Nous avons remarqué que lorsque l’on quitte l’application sans avoir stoppé la musique au préalable, la lecture continuait pendant un petit moment 4
avant de s’arrêter. Nous avons donc créé un bouton « Fermer » qui permet de stopper la musique et de fermer la page : Mafenetre.destroy() pygame.mixer.music.pause() c) Interface graphique Après avoir établi toutes les fonctions citées précédemment, il fallait bien entendu les intégrer dans notre logiciel. Pour ce faire nous avons utilisé Tkinter. Dans un premier temps il fallait créer la page, pour cela : Mafenetre = Tk() Mafenetre.geometry('600x500+400+400') Mafenetre.configure(bg='black') Mafenetre.title('Lecteur audio') Mafenetre.iconbitmap('effet.ico') Ce code nous a permis de créer une page nommée « Lecteur Audio » avec une icône, un fond noir et des dimensions pré-définies. Nous avons ensuite fait apparaître nous trois boutons comprenant les commandes principales, voici l’exemple du bouton lecture : play = PhotoImage(file="PlayBleu.gif") BoutonLecture = Button(Mafenetre, text ='Lecture', command = Lecture, fg='blue', bg='black, image=play) BoutonLecture.pack(side = LEFT, padx = 10, pady = 10) Cet exemple nous permet de montrer qu’il nous a fallu définir pour ce bouton, à savoir la couleur, le texte, la position, la taille et la commande. Nous avons aussi intégrer une icône à la place du Bouton standard que nous avons dû définir et importer auparavant. Nous reproduirons cet exemple pour les deux autres. Le curseur du volume se présente sous cette forme : Boutonvolume = Scale(Mafenetre, from_=100, to=0,fg='yellow', bg='black') Boutonvolume.set(50) Boutonvolume.pack(side = LEFT, padx = 15, pady = 15) 5
Encore une fois on y définit les couleurs, les dimensions et la commande, mais l’on voit aussi la plage des valeurs comprises entre 100 et 0 ainsi que la valeur au démarrage qui est de 50. Nous décidons que le mode « Mute » se présentera sous la forme d’une case à cocher : var1 = IntVar() tonBouton1 = Checkbutton(Mafenetre, text = "MUTE", command = Mute, variable = var1,fg='yellow', bg='black') tonBouton1.pack() tonBouton1.select() var1.set(0) Nous avons aussi rajouté un menu déroulant pour les fonctions « Fermer », « Ouvrir » et « Ajouter dans playlist » : menubar = Menu(Mafenetre) Mafenetre.config(menu=menubar) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Ouvrir", command=ouvrir) filemenu.add_command(label="Ajouter dans playlist", command=Liste) filemenu.add_separator() filemenu.add_command(label="Fermer", command=Exit) menubar.add_cascade(label="Fichier", menu=filemenu) Avec ce code, on peut voir tous les boutons qui sont présent dans notre menu déroulant, la séparation entre « Fermer » et les autres commandes, ainsi que le nom du menu déroulant « Fichier ». Nous avons ensuite placé un cadre de liste qui permet de faire apparaitre le titre des morceaux que l’on demande au lecteur de lire : listbox = Listbox(Mafenetre,width=40) listbox.insert(0, "PLAYLIST: ") listbox.pack(side = RIGHT, padx = 10, pady = 10) 6
Pour afficher le nom du fichier dans notre cadre à son ouverture dans le lecteur on a rajouté à ce code : listbox.insert(END, fichier_music.name) Ainsi le nom du fichier est écrit dans la listbox. Le « .name » permet de réduire la longueur de l’adresse. Lorsque l’on utilise la fonction « ouvrir un fichier », cela efface la playlist en cours et en créé une autre, pour ce faire, nous avons rajouté le code suivant : listbox.delete (1, END) Pour rendre le tout plus esthétique, nous avons décidé de rajouter une image sur le fond de notre page : photo = PhotoImage(file="Affiche.gif") Largeur = 500 Hauteur = 300 Canevas = Canvas(Mafenetre,width = Largeur, height =Hauteur) item = Canevas.create_image(0,0,anchor=NW, image=photo) Canevas.pack() Pour ce faire, il nous a fallu créer une zone de dessin avec « Canevas » avant d’y intégrer l’image désirée. 7
III- Bilan et observations a) Les Points positifs Pour conclure, j’ai trouvé cette année très intéressante car nous avons pu toucher du doigt l’univers très fermé et complexe de la programmation informatique grâce à la réalisation d’un projet concret, qui fonctionne et qui peut être, à ce jour, utilisé par n’importe qu’elle personne. Le travail en équipe a été réalisé avec une réelle collaboration permise par des échanges d’idées et une entraide lorsque des problèmes se posaient et s’est également ce qui a permis au projet de se concrétiser. Mais chacun de notre côté nous avons également contribué à améliorer notre logiciel par un travail personnel de recherche et d’investigations de solutions aux différentes problématiques posées par notre projet. Et c’est grâce à cela que nous avons pu créer le logiciel qui vous est présenté. b) Les Points négatifs Il se peut que notre projet ait été un peu ambitieux mais, pour ma part, j’ai trouvé fastidieux de sortir un projet concluant après seulement quelques cours de programmation, mais aussi en raison du fait que les techniques apprises tout au long de l’année ne correspondaient pas forcément tout le temps avec notre projet. Nous avions décidé de créer un projet différent des autres qui vous ont été présentés, sortant de l’ordinaire et même si les bases sont présentes dans le logiciel qui vous est présenté, nous aurions voulu le rendre encore plus complet, en créant une barre d’avancement de la musique et un système mp4, fonctionnalités complexes malheureusement non exploitables avec le module Pygame. Conclusion En conclusion, malgré quelques difficultés, nous sommes tout de même fiers de vous présenter notre travail qui, bien qu’améliorable, correspond à notre idée de départ, qui était de réaliser un lecteur de fichier mp3 concret et basique, permettant à l’utilisateur de ne plus se perdre dans les différentes options de son logiciel, mais de se concentrer sur ce qu’il attend d’un lecteur de fichier mp3 : écouter de la musique. 8
Annexe Ci-joint l’interface de notre lecteur audio, décomposé en cadres de couleurs qui correspondent chacun à une partie du code (de même couleur que les cadres) qui vous est détaillé ci-dessous, pages 10 à 11. 9
import pygame from Tkinter import * Modules importés pour le import tkFileDialog programme from pygame import mixer def ouvrir(): fichier_music = tkFileDialog.askopenfile(title='Choisissez un fichier',filetypes=[('mp3 files', '.mp3')]) pygame.mixer.music.load(fichier_music.name) listbox.delete (1, END) Réinitialisation de la listbox listbox.insert(END, fichier_music.name) def Liste(): fichier_music = tkFileDialog.askopenfile(title='Choisissez un fichier',filetypes=[('mp3 files', '.mp3')]) pygame.mixer.music.queue(fichier_music.name) listbox.insert(END, fichier_music.name) def Exit(): Mafenetre.destroy() Ferme la page pygame.mixer.music.pause() Stop la musique def Lecture(): pygame.mixer.music.play() def Pause(): pygame.mixer.music.pause() def Reprise(): pygame.mixer.music.unpause() def Vol() : Mafenetre.after(100,Vol) 100 ms temps d'actualisation de la valeur du son vol1 = Boutonvolume.get() Prendre la valeur du Volume pygame.mixer.music.set_volume(vol1*.01) Donne une valeur a la variable « vol » def Mute(): Boutonvolume.set(0) Mafenetre = Tk() Mafenetre.geometry('600x500+400+400') Mafenetre.configure(bg='black') Couleur du fond de la page Mafenetre.title('Lecteur audio') Mafenetre.iconbitmap('effet.ico') Mafenetre.after(100,Vol) Rafraichissement de la valeur du volume 10
photo = PhotoImage(file="Affiche.gif") Largeur = 500 Hauteur = 300 Canevas = Canvas(Mafenetre,width = Largeur, height =Hauteur) item = Canevas.create_image(0,0,anchor=NW, image=photo) Zone de dessin rectangulaire Canevas.pack() menubar = Menu(Mafenetre) Mafenetre.config(menu=menubar) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="Ouvrir", command=ouvrir) filemenu.add_command(label="Ajouter dans playlist", command=Liste) filemenu.add_separator() filemenu.add_command(label="Fermer", command=Exit) menubar.add_cascade(label="Fichier", menu=filemenu) pygame.init() Initialisation du module Boutonvolume = Scale(Mafenetre, from_=100, to=0,fg='yellow', bg='black') Boutonvolume.set(50) Boutonvolume.pack(side = LEFT, padx = 15, pady = 15) var1 = IntVar() tonBouton1 = Checkbutton(Mafenetre, text = "MUTE", command = Mute, variable = var1,fg='yellow', bg='black') tonBouton1.pack() tonBouton1.select() var1.set(0) Chargement de la musique pygame.mixer.music.load('Eiffel 65 - Blue.mp3') d’ouverture (ici Eiffel 65) play = PhotoImage(file="PlayBleu.gif") BoutonLecture = Button(Mafenetre, text ='Lecture', command = Lecture, fg='blue', bg='black', image=play) BoutonLecture.pack(side = LEFT, padx = 10, pady = 10) Importation de l’icône pour le bouton pause = PhotoImage(file="PauseBleu.gif") BoutonPause = Button(Mafenetre, text ='Pause', command = Pause, fg='blue', bg='black’, image=pause) BoutonPause.pack(side = LEFT, padx = 10, pady = 10) reprise = PhotoImage(file="RepriseBleu.gif") BoutonUnpause = Button(Mafenetre, text ='Reprise', command = Reprise, fg='blue', bg='black', image=reprise) BoutonUnpause.pack(side = LEFT, padx = 10, pady =10) listbox = Listbox(Mafenetre,width=40) listbox.insert(0, "PLAYLIST: ") listbox.pack(side = RIGHT, padx = 10, pady = 10) Mafenetre.mainloop() Fin de la page 11
Vous pouvez aussi lire