Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Remplir son baladeur (lecteur mp3) avec des musiques aléatoires

Si comme moi vous avez une large bibliothèque audio, alors peut-être voudrez vous laisser le hasard décider de ce que vous écouterez.

Suite à la lecture de plusieurs scripts sur le net qui ne me convenaient pas, j'ai écrit un script en python (le python3), qui n'est QUE python et ne mélange pas les appels de commandes externes, perl, bash et compagnie.

Le script en question choisit des chansons au hasard dans votre bibliothèque, puis les copie sur votre baladeur, jusqu'à ce que ce dernier soit plein.

Configuration

Il vous faudra éditer les variables suivntes au début du script, et remplacer par votre situation et désirs :

musicBib = '/home/xavier/Musique'   # Votre bibilothèque musicale
baladDir = '/tmp/balad/'             # Là où on copie les musiques

Ensuite, assurez-vous que le script est éxécutable : chmod +x rdmzic.py, puis lancez-le!

Vous observerez alors une barre de progression :

On copie /home/xavier/Musique/Elton_John-Greatest_Hits_1970-2002/CD2/16_Elton_John-This_Train_Don_t_Stop_There_Anymore.ogg.mp3


======>---------------------------------------------------------------------------------------------

et un message lorsque c'est fini!

Le script

#!/usr/bin/env python
# -*- coding:Utf-8 -*-
# Fichier: rdmzic.py
# Cree le 19 juil. 2012 20:55:03

"""

Auteur :      thuban (thuban@singularity.fr)
licence :     GNU General Public Licence

Description :
    Script copiant des musiques sur un baladeur en
    choisissant aléatoirement parmis touts les
    fichiers musicaux présents dans un répertoire.

    /!\ Editez les variables correspondant à vos /!\
    /!\ dossiers sources et cibles.              /!\
"""

import sys, os, random, shutil

musicBib = '/home/xavier/Musique'   # Votre bibilothèque musicale
baladDir = '/media/baladeur/Music'             # Là où on copie les musiques

extensions = ['.ogg','.mp3','.flac','.wma']

#----------------------------------------------------------------#
def dirOk():
    if not os.path.isdir(musicBib):
        print('On dirait qu\'il y a une erreur, le dossier {0} \
n\'existe pas ou n\'est pas accessible'\
              .format(musicBib))
        print('Veuillez préciser l\'emplacement de votre \
bibliothèque musicale dans le script, \
dans la variable musicBib au début du fichier.')
        sys.exit(1)
    elif not os.path.isdir(baladDir):
        print('On dirait qu\'il y a une erreur, le dossier {0} \
n\'existe pas ou n\'est pas accessible'\
              .format(baladDir))
        print('Veuillez préciser l\'emplacement de votre \
du dossier où sera copié les musiques, \
dans la variable baladDir au début du script.')
        sys.exit(1)

def restePlace(chanson):
    '''Vérifie s'il reste de la place pour mettre la chanson
    sur le baladeur
    '''
    infos = os.statvfs(baladDir)
    libre = infos.f_bavail * infos.f_frsize
    taille = os.stat(chanson).st_size

    if (libre - taille) > 0:
        return(True)
    else:
        return(False)

def progressBar():
    '''affiche une barre de progression
    basée sur la place restante sur le
    media de destination
    '''
    infos = os.statvfs(baladDir)
    libre = infos.f_bavail * infos.f_frsize
    total = infos.f_frsize * infos.f_blocks

    bar = '=' * int((float(total - libre) / float(total) * 100))
    bar += '>'
    while len(bar) < 100:
        bar += '-'

    print(bar)

def main():

    dirOk()

    # On vide le répertoire cible
    for f in os.listdir(baladDir):
        os.remove(os.path.join(baladDir,f))

    # création de la liste des musiques disponibles
    musList = []
    for dirpath, dirnames, filenames in os.walk(musicBib):
        for f in filenames:
            if os.path.splitext(f)[1].lower() in extensions:
                m = os.path.join(dirpath,f)
                musList.append(m)

    # début de la copie
    while len(musList) != 0:
        # Choix d'une chanson au hasard
        chanson = random.choice(musList)
        musList.remove(chanson)
        if restePlace(chanson):

            print('On copie {0}\n'.format(chanson))
            progressBar()
            shutil.copy(chanson,baladDir)
            # pour un affichage plus chouette
            #print(chr(27) + "[2J")
            sys.stderr.write("\x1b[2J\x1b[H")

    print('\n')
    print('Et voilà, le dossier de destination est rempli de musiques!')
    print('\o/')

    return 0

if __name__ == '__main__':
    main()

# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4