Script Perl Edition de ID3 massive

Je le met là comme mémo, même si il ne sert jamais à personne dans son intégralité. C’est un script Perl qui m’a servit à renommé toute ma playlist d’XMMS, dont les fichiers étaient sous forme nn_cccc_cccc_ccc.mp3 (où nn est un nombre et ccc_cccc_ccc le titre de la chanson). Le nom de l’auteur et l’album sont des données fixes. Bien sûr, il y a sûrement mieux comme méthode pour effectuer cette tâche, mais cela m’a permis d’en apprendre un peu plus sur la programmation en langage Perl. La prochaine fois, j’essayerais en Python ;)

#!/usr/bin/perl
use Xmms::Remote;
use MP3::Tag;

sub set_tag { my $file = shift @; my $tag = shift @; my $mp3 = MP3::Tag->new($file); print Dumper $tag; my $tags = $mp3->get_tags(); my $id3v2;

if (ref $tags eq ''HASH'' && exists $tags->{ID3v2}) {
    $id3v2 = $tags->{ID3v2};
}
else {
    $id3v2 = $mp3->new_tag("ID3v2");
}

my %old_frames = %{$id3v2->get_frame_ids()};
foreach my $fname (keys %$tag) {
    $id3v2->remove_frame($fname)
    if exists $old_frames{$fname};
    if ($fname eq ''WXXX''){
        $id3v2->add_frame(''WXXX'', ''ENG'', ''FreeDB URL'', $tag->{WXXX}) ;
    }
    elsif ($fname eq ''COMM'') {
        $id3v2->add_frame(''COMM'', ''ENG'', ''Comment'', $tag->{COMM}) ;
    }
    else {
        $id3v2->add_frame($fname, $tag->{$fname});
    }
}

$id3v2->write_tag();
return 0;

}

$xmms_remote = Xmms::Remote->new(); @list = @{$xmms_remote->get_playlist_files}; foreach $el (@list){ $orig = $el; $file_mp3 = MP3::Tag->new($el); $file_mp3->get_tags(); if(!exists $file_mp3->{ID3v1}){ #On prend que les fichiers qui n''ont pas de tags } if($el =~ /^[\/[a-z0-9_]+\/]*([0-9_]){2}(.+).mp3$/i){ $track_num = $1; $name = $2; @tmp = split(//,$name); $counter = 0; foreach $mot (@tmp){ @tmp[$counter] = ucfirst($mot); $counter++; } $name = join(" ",@tmp); print $name . "\n"; $artist = "Nobuo Uematsu"; $album = "Final Fantasy X"; $tags = {}; $tags->{TIT2} = $name; $tags->{TPE1} = $artist; $tags->{TALB} = $album; $tags->{TRCK} = $track_num; set_tag($orig,$tags); }

$count++;

}

Posted in None at November 21st, 2008. Comments.

Xchat : Votre musique XMMS v0.2 !

Alors voila. J’me suis rendu compte que le script que j”ai écrit dans le post précédent n’est pas compatible avec les ID3v2. Voici la nouvelle version du script. Lien : Télécharger.

Posted in None at November 21st, 2008. Comments.

Xchat : Votre musique XMMS !

Voici un petit script écrit en Perl qui affiche en tant qu’emote (/me) votre musique en cours de lecture sur XMMS. Pour l’installer, téléchargez-le (lien en bas de la page), placez le dans un répertoire (genre ~/.xchat2/ chez moi), lancez Xchat. Allez dans Fenêtre -> Greffons et scripts. Cliquez sur Charger, puis sélectionnez votre script. C”est bon =). Pour l’utiliser, tapez /kxmms dans le canal où vous souhaitez afficher votre musique. Voici le lien de téléchargement.

use POSIX qw(ceil floor);
use Xmms::Remote;
use MP3::Tag;

------------- XCHAT VARIABLES

$script_name = "KXMMS"; $script_version = "0.1"; $script_creator = "Kizlum"; $script_homepage = "http://devellinux.free.fr"; $script_command = "kxmms";

------------- XCHAT LOAD UP

Xchat::register($script_name, $script_version); Xchat::hook_command($script_command, "kxmms_handler"); Xchat::printf($script_name . "v" . $script_version . " by " . $script_creator . " successfully loaded. Use /" . $script_command . ".");

------------- FUNCTIONS

sub get_xmms_tags{ $xmms_remote = Xmms::Remote->new(); $position = $xmms_remote->get_playlist_pos; #On recupere le nom de fichier correspondant $file_name = $xmms_remote->get_playlist_file($position);

#On creer un nouveau fichier mp3
$file_mp3 = MP3::Tag->new($file_name);

#On charge les tags presents dans le fichier MP3
$file_mp3->get_tags();

#Creation d''un tableau qui va contenir les tags $tags = {};

#Si il existe des infos ID3V1, alors on les exploites if(exists $file_mp3->{ID3v1}){ my $id3v1 = $file_mp3->{ID3v1}; #On recupere les tags dans la variable id3v1 #On remplit la variable $tags avec les infos des tags $tags->{COMM} = $id3v1->comment(); $tags->{TIT2} = $id3v1->song(); $tags->{TPE1} = $id3v1->artist(); $tags->{TALB} = $id3v1->album(); $tags->{TYER} = $id3v1->year(); $tags->{TRCK} = $id3v1->track(); $tags->{TIT1} = $id3v1->genre(); } return $tags; }

sub get_avancement{ $xmms_remote = Xmms::Remote->new(); $position = $xmms_remote->get_playlist_pos; #On recupere le temps et l''avancement, on met le tout en pourcentages $current_time = $xmms_remote->get_output_time(); $total_time = $xmms_remote->get_playlist_time($position); $avancement_percent = floor(($current_time*100)/$total_time); return $avancement_percent; }

sub kxmms_handler{ #On recupere les tags avec notre fonction $xmms_tags = get_xmms_tags();

#On recupere l'avancement
$xmms_avan = get_avancement();

#On creer la chaine qui va etre ecrite
$output_string = "ecoute [" . $xmms_tags->{TIT2} . "] interprete par [" . $xmms_tags->{TPE1} . "] extrait de l''album [" . $xmms_tags->{TALB} . "]. Avancement : [" . $xmms_avan . "%].";

#On l''affiche en emote
Xchat::commandf("me %s", $output_string);

}

Posted in None at November 21st, 2008. Comments.