Perles de Mongueurs
Signature : | Mis en ligne le : 29/01/2008
Catégorie(s) :
  • GNU/Linux Magazine
  • | Domaine :
    Commentez creative commons

    Retrouverz cet article dans : Linux Magazine 84

    Depuis le numéro 59 les Mongueurs de Perl vous proposent tous les mois de découvrir les scripts jetables qu’ils ont pu coder ou découvrir dans leur utilisation quotidienne de Perl. Bref, des choses trop courtes pour en faire un article, mais suffisament intéressantes pour mériter d’être publiées. Ce sont les perles de Mongueurs.

    Découper des MP3 avec Perl

    Définition du besoin

    Avec la mode des podcasts (" balladodiffusion " en bon français), il est de plus en plus facile et courant d’avoir des émissions sur son baladeur MP3. Certaines de ces émissions valent la peine de définir une politique de stockage, mais d’autres entrent plus dans un registre de consommation. Pourtant, même ces dernières offrent des moments que l’on souhaite conserver. Par exemple, certains podcasts musicaux offrant des sessions acoustiques d’artistes connus, ce serait intéressant de pouvoir extraire ces quelques morceaux du podcast original. Évidemment, ce genre de manipulation est possible avec un grand nombre de logiciels, dont le plus connu est probablement Audacity. Malheureusement, la procédure est manuelle et, au final, assez fastidieuse si vous devez le faire avec plusieurs fichiers par semaine. L’idéal serait d’avoir un script qui se chargerait de l’opération de découpe. Mais appeler le script à chaque fois que nécessaire n’est pas encore suffisant pour ma paresse : ce que je souhaiterais, c’est lancer le script sur un ensemble de fichiers MP3. Le plus simple pour moi est d’utiliser des fichiers CSV ou un tableur (que ce soit Excel ou encore OpenCalc), afin de saisir les informations nécessaires à l’opération de découpage. En effet, le script ne sera pas utilisé uniquement par moi, mais également par des personnes un peu moins geek. Maintenant que j’ai défini mes besoins, voyons ce que le CPAN peut m’offrir :
    • MP3::Splitter se chargera de la découpe des fichiers MP3 ;
    • Spreadsheet::Read se chargera de lire les informations dans mon fichier tableur afin d’opérer les découpes.
    Voyons comment organiser tout cela.

    MP3::Splitter

    Utiliser MP3::Splitter est relativement simple, puisque le module exporte deux fonctions nommées mp3plit() et mp3split_read(). La première permet de découper un fichier MP3 et la seconde offre la même fonctionnalité, mais prend ses données à partir d’un fichier. On pourrait penser que la seconde fonction remplit totalement les besoins décrits plus haut. Malheureusement, les informations prises dans le fichier s’appliquent uniquement au fichier MP3 passé en argument de la fonction. Or dans ce cas, je souhaitais traiter plusieurs fichiers MP3 d’un seul coup. De plus, ces fonctions fonctionnent selon un mode assez peu naturel. Par exemple : va découper le fichier MP3 à partir de la première seconde et va créer un nouveau fichier d’une durée de 23 secondes. J’aurais préféré l’utilisation suivante : c’est-à-dire de donner le début et la fin du morceau souhaité, ainsi la tâche consistant à calculer la durée du morceau échoue à l’ordinateur.

    Spreadsheet::Read

    Concernant ce module, le fonctionnement est également fort simple. Spreadsheet::Read exporte une fonction par défaut qui est ReadData(). Cette fonction prend en argument le nom du fichier, que ce fichier soit au format OpenOffice.org, Excel ou encore CSV. Une autre fonction utile dans le cas présent est la fonction rows(), mais elle n’est pas exportée par défaut, il est donc nécessaire de l’importer lors du chargement du module : J’ai constaté que lorsque j’importais la fonction rows(), il est nécessaire d’importer également la fonction ReadData(). Les fonctions peuvent s’employer de la manière suivante : Ce code affichera le contenu du fichier monfichier.ods ligne par ligne. Comme vous pouvez le constater, l’usage de ce module est fort simple. En ce qui concerne le choix de la structure des fichiers, c’est-à-dire l’ordre des champs, nous avons retenu l’ordre suivant (donné sous forme du fichier CSV) : Voyons maintenant comment lier ces deux modules afin d’obtenir ce que nous souhaitons.

    My::MP3::Splitter

    Pour ajouter les fonctionnalités souhaitées, et les lier de manière simple, j’ai décidé de créer un objet regroupant le tout. Ainsi, avec un simple l’ensemble du traitement serait lancé. Pour cela, il est encore nécessaire de régler quelques détails :
    • Le calcul de la durée afin de pouvoir utiliser mp3split() de la manière souhaitée ;
    • Le renommage de fichier, en effet, par défaut, mp3split() renomme un fichier exemple.mp3 en 01_exemple.mp3.

    Le calcul de la durée

    Pour effectuer ce calcul, il suffit simplement de réduire les expressions de début et de fin de morceau en seconde, et de soustraire la valeur obtenue pour la fin du morceau avec la valeur obtenue pour le début du morceau. De cette manière, l’information souhaitée est obtenue. Pour effectuer la conversion entre l’expression des bornes du morceau, je me suis contenté de lire le code utilisé par MP3::Splitter et je l’ai adapté au besoin de ce script. Cette fonction utilise intensivement des regexps et, donc, peut être assez compliquée à comprendre. Néanmoins, par facilité, je l’ai conservée. C’est sans aucun doute une des choses à améliorer dans une version ultérieure de ce script.

    Le renommage

    Pour le renommage, j’ai d’abord pensé à une solution compliquée, pour me rendre compte finalement que la fonction mp3split() offre également la possibilité de définir une fonction permettant de changer la méthode de nommage des fichiers. Dans le cas présent, il suffit simplement d’utiliser comme valeur de retour le nom du fichier choisi pour le morceau, par exemple :

    Le script final

    Finalement, notre script est assez simple puisqu’il ressemble à ce qui suit :

    Conclusion

    Voilà, j’ai maintenant la possibilité d’extraire des morceaux de mes fichiers MP3. Évidemment, je pourrais encore améliorer les services que peut me rendre ce script. Par exemple, en ajoutant des champs dans le fichier CSV, je pourrais ajouter des informations ID3 aux fichiers MP3 créés, mais je laisse la réalisation de cette idée au lecteur ou à une soirée prochaine.
    Vous souhaitez commenter cet article ?
    Brèves Flux RSS
    Édito : GNU/Linux Magazine 149
    Édito : GNU/Linux Magazine HS N°60
    Édito : Misc 61
    Édito : Linux Pratique 71
    Édito : Linux Essentiel N°25
    Communication RSS Com. RSS Presse
    Lancement de la plateforme de vente en ligne de PDF des Éditions Diamond ! Un...
    Misc N°61 – Communiqué de presse
    GNU/Linux Magazine N°149 – Communiqué de presse
    GNU/Linux Magazine HS N°60 – Communiqué de presse
    Linux Pratique N°71 – Communiqué de presse
    prochainement moteur de recherches des articles
     
    :
    :
    Jours heures minutes secondes
    En kiosque Flux RSS

    Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Essentiel est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...