depart_tp4.py

text/x-python depart_tp4.py — 6.0 KB

Contenu du fichier

import operator
import vlc
import time
import numpy as np
from scipy.io import wavfile

G = 0
D = 1
# =========================================================================
#    j o u e r _ m u s i q u e
# =========================================================================
#
#  Cette fonction démarre un lecteur et joue la chanson spécifiée
#  pendant un temps donné.
#
#  Entrée : (paramètre)  nom du fichier contenant la chanson
#           (paramètre)  durée desirée pour l'écoute de la chanson
#
#  Sortie : (haut-parleur) la chanson
#
#  Auteur : Gabriel Girard (9 février 2018)
# -------------------------------------------------------------------------
def jouer_musique(nom_fichier, duree):
    print("Debut de la musique...........")
    instance = vlc.Instance()
    # Creation du lecteur multimédia
    lecteur = instance.media_player_new()

    # Chargement de la chanson
    chanson = instance.media_new(nom_fichier)

    # Ajoute la chansons dans le lecteur
    lecteur.set_media(chanson)

    # Jouer la chanson pour un temps déterminé
    lecteur.play()
    time.sleep(duree)
    lecteur.stop()
    print("Fin de la musique...........")

# =========================================================================
#    l i r e _ C h a n s o n
# =========================================================================
#
#  Fonction permettant de lire le contenu du fichier wav (en stéréo)
#
#  Entrée : (paramètre) nom du fichier contenant la chanson
#
#  Sortie : (retour) la fréquence de la chanson
#           (retour) le son stéréo (matrice (nx2)
#
#  Auteur : Gabriel Girard (9 février 2018)
# -------------------------------------------------------------------------
def lire_chanson(nom_fichier):
    frequence, donnee = wavfile.read(nom_fichier)
    return frequence, donnee

# =========================================================================
#    e c r i r e _ c h a n s o n
# =========================================================================
#  Fonction permettant d'ecrire une chanson dans un fichier wav
#
#  Entree : (paramètre)  la fréquence de la musique
#           (paramètre)  le son stéréo (matrice (nx2)
#           (paramètre)  nom_fichier - nom du fichier contenant la musique
#  Sortie : (fichier)    Fichier musical (non_fichier) contenant la chanson
#
#  Auteur : Gabriel Girard (9 février 2018)
# -----------------------------------------------------------------------
def ecrire_chanson(frequence, donnee, nom_fichier):
    # transformation du son en 16 bits et écriture
    donnee_e = np.asarray(donnee, dtype=np.int16)
    wavfile.write(nom_fichier, frequence, donnee)
# =========================================================================
# =========================================================================
# =========================================================================
# =========================================================================
# =========================================================================
def affichage(liste_chansons):
    rep = input("Voulez-vous trier la liste de chansons? ")
    if rep=="oui" :
        critere = input("critere : ")
        liste_chansons.sort(key=operator.itemgetter(critere))
    print("")
    print (" No  |  Titre          | Interprete            |  Fichier                | modification ")
    print ("----------------------------------------------------------------------------------------")
    i = 0
    for ch in liste_chansons :
        print('{0: <6}'.format(i), '{0: <17}'.format(ch["Titre"]),'{0: <22}'.format(ch["Interprete"]),'{0: <25}'.format(ch["Fichier"]),'{0: <14}'.format(ch["Etat"]))
        i += 1
# =========================================================================
def obtenir_chanson(liste_chansons, veux_demander):
    if veux_demander:
        rep = input("Voulez-vous voir la liste des chansons?")
        if rep=="oui": affichage(liste_chansons)
    indice = int(input("Entrez le numero de la chanson choisie : "))
    return indice
# =========================================================================
def jouer(liste_chansons):
    indice = obtenir_chanson(liste_chansons, True)
    jouer_musique(liste_chansons[indice]["Fichier"], 20)
# =========================================================================
def mixer(liste_chansons):
   indice1 = obtenir_chanson(liste_chansons, True)
   frequence1, donnee1 = lire_chanson(liste_chansons[indice1]["Fichier"])
   indice2 = obtenir_chanson(liste_chansons, False)
   frequence2, donnee2 = lire_chanson(liste_chansons[indice2]["Fichier"])
   nouv_titre = liste_chansons[indice1]["Titre"]
   nouv_fichier = liste_chansons[indice1]["Fichier"] + "-V" + str(liste_chansons[indice1]["Version"])
   liste_chansons[indice1]["Version"] += 1
   interprete = liste_chansons[indice1]["Interprete"]
   chanson = {"Titre":nouv_titre,"Interprete":interprete,"Fichier":nouv_fichier,"Etat":"Mixe","Version":0}
   liste_chansons.append(chanson)
   taille = len(donnee1)
   if len(donnee1) > len(donnee2): taille = len(donnee2)
   nbTraite = 0
   nouv_donnee = np.zeros(shape=(taille,2), dtype=np.int16)
   while nbTraite < taille:
      nouv_donnee[nbTraite][G] = donnee1[nbTraite][G]/2 - donnee2[nbTraite][G]/2
      nouv_donnee[nbTraite][D] = donnee1[nbTraite][D]/2 + donnee2[nbTraite][D]/2
      nbTraite += 1
   ecrire_chanson(frequence1, nouv_donnee, nouv_fichier)
   return liste_chansons
# =========================================================================
def accelere(liste_chansons, facteur):
    indice = obtenir_chanson(liste_chansons, True)
    taux, donnee  = lire_chanson(liste_chansons[indice]["Fichier"])
    nouv_titre = liste_chansons[indice]["Titre"]
    nouv_fichier = liste_chansons[indice]["Fichier"] + "-V" + str(liste_chansons[indice]["Version"])
    interprete = liste_chansons[indice]["Interprete"]
    chanson = {"Titre" : nouv_titre, "Interprete" : interprete, "Fichier" : nouv_fichier,"Etat" : "Mixe", "Version" : 0}
    liste_chansons.append(chanson)
    nouv_taux = int(taux * facteur)
    ecrire_chanson(nouv_taux, donnee, nouv_fichier)
    return liste_chansons