Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • I've found that artwork added to tracks by other programs won't necessarily display in iTunes. I typically add artwork to the OpenBSD theme songs using MusicMatch for Windows but iTunes4 doesn't display it in the album window or the artwork window.

    I also spent some frustrated time trying to use your perl script [perl.org] for extracting artwork before I decided that the ID3 tags must be different. I'm still a Perl noob, how can I use 'keys' with the hash reference get_mp3tag returns so I know what all the keys are? B
    • my $hash_ref   = { Gharlane => 'Eddore', Mentor => 'Arisia' };
      my @nonhumans  = keys %{ $hash_ref };
      • Thanks.

        Key 0: YEAR
        Key 1: ARTIST
        Key 2: COMMENT
        Key 3: ALBUM
        Key 4: TITLE
        Key 5: GENRE
        Key 6: TRACKNUM
        Key 7: TAGVERSION

        I'm interested in using Perl to access the art because I'd really like a script which can remove the art from an mp3. We're using MusicMatch to rip a bunch of CDs and its pretty good but one bug is you can't tell it not to add the album art to a ripped track if it finds some. The problem with album art is when we use Apache::MP3 to steam files containing album art, some clients won't play the t
        • #!/usr/bin/perl -w
          #-------------------------------
          # Artwork: artwork.pl v.1 2007-02-18 14:52:09
          # Pull album art from id3v2 tags
          # Copyright (c) 2007 William Galway. All Rights Reserved.
          #
          #-------------------------------
          $VERSION = '.1';

          use MP3::Tag;
          use File::Find;
          open( LOGF, ">>logfile.txt" ) || die "$!";
          print LOGF `date`;
          print LOGF "The follwing directories are w/o ablum art.\n";

          # MP3 Dirctory
          print "Type the path to your mp3s and press Enter. \n";
          $mp3dir = <STDIN>;
          chomp $mp3dir;
          print "\n";

          # Album Art File Name
          print "Type the name of the album art file you\n";
          print "would like extracted to your mp3 folder and press Enter.\n";
          print "For example cover.jpg\n";
          $cover = <STDIN>;
          chomp $cover;
          print "\n";

          if ( -e $mp3dir ) {
              print "Checking $mp3dir for mp3s.\n";
          }
          else {
              print("MP3 directory does not exist\n");
              exit;
          }

          find( \&ExtractTagInfo, $mp3dir );

          sub ExtractTagInfo {

              if (/\.mp3$/) {

                  my $art;

                  $mp3 = MP3::Tag->new($_);

                  $mp3->get_tags();
                  if ( exists $mp3->{ID3v2} ) {
                      $id3v2_tagdata = $mp3->{ID3v2};
                      $info          = $id3v2_tagdata->get_frame("APIC");
                      $mp3->close();
                      while ( my ( $key, $value ) = each(%$info) ) {
                          if ( $key eq "_Data" ) {
                              $art = $value;
                          }
                      }
                  }
                  if ( -e "$File::Find::dir/$cover" ) {

                      #print "$File::Find::dir/$cover already exists \n";
                  }

                  # write the art to file
                  elsif ($art) {
                      open ARTWORK, ">$cover"
                        or die "Could not open \n$File::Find::dir/$cover\n Check your permissions.\n";
                      binmode(ARTWORK);
                      print ARTWORK $art;
                      print "Pulling Art From $File::Find::name\n";
                      close ARTWORK;
                  }
                  else {
                      print LOGF "$File::Find::dir\n";
                  }
              }
          }
          close(LOGF);
          print(
          "All Done! Open logfile.txt for a list of mp3 directories w/o album art information.\n"
          );
          exit