Lecteur de Fichier Mp3 - Dossier de Projet - Option ISN

La page est créée Philippe Verdier
 
CONTINUER À LIRE
Lecteur de Fichier Mp3 - Dossier de Projet - Option ISN
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