Advertisement
sakuya-inu-izayoi

cuetag2.pl

Oct 4th, 2015
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.37 KB | None | 0 0
  1. #!/bin/env perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. print "[INFO] CUE file tagger v2\n";
  7.  
  8. my $cue_file = shift @ARGV;
  9.  
  10. open( my $cue_fh , "<" , $cue_file ) or die ( "Cannot open CUE file: $cue_file $!" );
  11.  
  12. my $part = 0;
  13. my $meta = {};
  14. my %static_meta;
  15. my @list;
  16.  
  17. if($cue_file =~ /([0-9xX]{4})\.([0-9xX]{2})\.([0-9xX]{2})/)
  18. {
  19.   print "Found date in filename: $1-$2-$3";
  20.   $static_meta{"date"} = $1;
  21. }
  22.  
  23. while ( <$cue_fh> )
  24. {
  25.   if(      /REM GENRE (.*)/) {
  26.     $static_meta{"genre"}   = $1;
  27.     print "Genre: ".$static_meta{"genre"}."\n";                                                                                                                                      
  28.   } elsif (/REM DATE ([0-9x]{4})/) {                                                                                                                                                
  29.     $static_meta{"date"}    = $1;                                                                                                                                                    
  30.     print "Year: ".$static_meta{"date"}."\n";                                                                                                                                        
  31.   } elsif (/REM DISCID (.*)/) {                                                                                                                                                      
  32.     $static_meta{"discid"}  = $1;                                                                                                                                                    
  33.     print "DiscID: ".$static_meta{"discid"}."\n";                                                                                                                                    
  34.   } elsif (/REM COMMENT "(.*)"/) {                                                                                                                                                  
  35.     $static_meta{"comment"} = $1;                                                                                                                                                    
  36.     print "Comment: ".$static_meta{"comment"}."\n";                                                                                                                                  
  37.   } elsif (/PERFORMER "(.*)"/) {                                                                                                                                                    
  38.     if($part == 0) {                                                                                                                                                                
  39.       $static_meta{"albumartist"} = $1;                                                                                                                                              
  40.       print "AlbumArtist: ".$static_meta{"albumartist"}."\n";                                                                                                                        
  41.     }                                                                                                                                                                                
  42.     else {                                                                                                                                                                          
  43.       $meta->{"artist"} = $1;                                                                                                                                                        
  44.       print "Artist: ".$meta->{"artist"}."\n";                                                                                                                                      
  45.     }                                                                                                                                                                                
  46.   } elsif (/TITLE "(.*)"/) {                                                                                                                                                        
  47.     if($part == 0) {
  48.       $static_meta{"album"} = $1;
  49.       print "Album: ".$static_meta{"album"}."\n";
  50.     }
  51.     else {
  52.       $meta->{"title"} = $1;
  53.       print "Title: ".$meta->{"title"}."\n";
  54.     }
  55.   } elsif (/FILE "(.*)" (.*)/) {
  56.     print "File ($2): $1\n";
  57.   } elsif (/TRACK (.*) (.*)/) {
  58.     print "Track $1 ($2)\n";
  59.     if($part == 0) {
  60.       while(my($k, $v) = each %static_meta) {
  61.         $meta->{$k} = $v;
  62.       }
  63.     } else {
  64.       push @list, $meta;
  65.       $meta = {};
  66.       while(my($k, $v) = each %static_meta) {
  67.         $meta->{$k} = $v;
  68.       }
  69.     }
  70.     $meta->{"tracknumber"} = $1;
  71.     $meta->{"artist"} = $meta->{"albumartist"};
  72.     $part ++;
  73.   } elsif (/INDEX ([0-9]*) ([0-9]{2}):([0-9]{2}):([0-9]{2})/) {
  74.     print "Index $1 $2-$3-$4\n";
  75.   }
  76. }
  77. push @list, $meta;
  78. close ($cue_fh);
  79.  
  80. print " ~~~ ... ~~~ \n";
  81.  
  82. foreach my $info (@list)
  83. {
  84.   my $flac_file = shift @ARGV;
  85.   print "\n";
  86.   print "FLAC: $flac_file\n\n";
  87.  
  88.   open( my $fh, ">", "/tmp/$$-taginfo.tmp") or die("Could not create tags file");
  89.   while(my($k, $v) = each $info) {
  90.     print $fh "$k=$v\n";
  91.     print "$k=$v\n";
  92.   }
  93.   close $fh;
  94.    
  95.   system("metaflac", "--remove-all-tags", "--import-tags-from=/tmp/$$-taginfo.tmp","$flac_file");
  96.    
  97.   unlink "/tmp/$$-taginfo.tmp";
  98. }
  99.  
  100. print " ~~~ ... ~~~ \n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement