tracknames.pl
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. #!/usr/local/bin/perl 
  2. # A quick perl hack to get rename files pulled in with cdda2wav.
  3. # by billo@billo.com
  4. #
  5. use Socket;
  6. use IO::Handle;
  7. use Env qw(USER);
  8. use strict;
  9. no strict 'subs'; # can't get it to stop complaining about SOCK
  10. my $state = "header";
  11. my $global_album = "Artist / Title";
  12. my $global_title = "Title";
  13. my $global_artist = "Artist";
  14. my @global_tracks = ("") x 100;
  15. my $global_ntracks = 0;
  16. my @track_offsets = ();
  17. my $disc_id = 0;
  18. my $disc_time = 0;
  19. if ($#ARGV != 1)
  20. {
  21.     print "usage: cddbhack.pl CDDBHOST PORT < audio.cddbn";
  22.     exit 0;
  23. }
  24. while (<STDIN>)
  25. {
  26.     if ($state eq "header")
  27.     {
  28. if (/#s[s]*(d[d]*)$/)
  29. {
  30.     push @track_offsets, $1;
  31. } elsif (/#s[s]*Disc length:s(d[d]*)/) {
  32.         $disc_time = $1;
  33.     $state = "discid";
  34.         }
  35.     } elsif ($state eq "discid")
  36.     {
  37. if (/DISCID=(w[w]*)/)
  38. {
  39.     $disc_id = $1;
  40.     last;
  41.     }
  42. }
  43. my $query_string = "cddb query $disc_id " . ($#track_offsets + 1);
  44. foreach my $offset (@track_offsets)
  45. {
  46.     $query_string .= " $offset";
  47. }
  48. $query_string .= " $disc_time";
  49. print "$query_stringn";
  50. my $host = $ARGV[0];
  51. my $port = $ARGV[1];
  52. my $iaddr = inet_aton($host);
  53. my $paddr = sockaddr_in($port, $iaddr);
  54. socket(SOCK, AF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "socket: $!";
  55. connect(SOCK, $paddr) or die "connect: $!";
  56. autoflush SOCK 1;
  57. print "Connected.n";
  58. my ($status, $result) = &resp(*SOCK);
  59. if (int($status) != 201)
  60. {
  61.     print "Unexpected status.n";
  62.     close(*SOCK);
  63.     exit 0;
  64. }
  65. $host = `hostname`;
  66. $host =~ s/n//g;
  67. &cmd(*SOCK, "cddb hello $USER $host billo-scan 0.1");
  68. ($status, $result) = &resp(*SOCK);
  69. if (int($status) != 200)
  70. {
  71.     print "Unexpected status.n";
  72.     close(*SOCK);
  73.     exit 0;
  74. }
  75. &cmd(*SOCK, "$query_string");
  76. ($status, $result) = &resp(*SOCK);
  77. if (int($status) != 200)
  78. {
  79.     print "Unexpected status.n";
  80.     close(*SOCK);
  81.     exit 0;
  82. }
  83. my ($ignore, $cat, $id, @rest) = split (" ", $result);
  84. my $read_string = "cddb read $cat $id";
  85. &cmd(*SOCK, $read_string);
  86. &resp(*SOCK);
  87. while (<SOCK>)
  88. {
  89.     if (/^./)
  90.     {
  91. # print $_;
  92. # print "last linen";
  93. last;
  94.     } else {
  95. &process($_);
  96. # print $_;
  97.     }
  98. }
  99. &cmd(*SOCK, "quit");
  100. &resp(*SOCK);
  101. close(*SOCK);
  102. &rename;
  103. exit 0;
  104. sub cmd
  105. {
  106.     my ($S, $cmd) = @_;
  107.     print "$cmdn";
  108.     print $S "$cmdrn";
  109. }
  110. sub resp
  111. {
  112.     my ($S) = @_;
  113.     my ($code, $message);
  114.     while (<$S>)
  115.     {
  116. if (/^(d[d]*)s.*/)
  117. {
  118.     # print "n$1n";
  119.     print "$_n";
  120.     $code = $1;
  121.     $message = $_;
  122.     last;
  123. }
  124. sleep(1);
  125.     }
  126.     my @return_array = ($code, $message);
  127.     return @return_array;
  128. }
  129. sub process 
  130. {
  131.     my ($line) = @_;
  132.     $_ = $line;
  133.     if (/^DTITLE=(.*)$/)
  134.     {
  135. $global_album = $1;
  136. $_ = $global_album;
  137. if (m/([^/][^/]*)s/s([^/][^/nr]*)/)
  138. {
  139.     $global_artist = $1;
  140.     $global_title = $2;
  141. }
  142. print "$global_albumn";
  143. print "$global_titlen";
  144. print "$global_artistn";
  145. return;
  146.     }
  147.     if (/^TTITLE(d[d]*)=(.*)$/)
  148.     {
  149. my $track = $1 + 1;
  150. if ($track > $global_ntracks)
  151. {
  152.     $global_ntracks = $track;
  153. }
  154. $global_tracks[$track] = sprintf ("%s-%02d-%s", $global_title, 
  155.   $track, $2);
  156. $global_tracks[$track] =~ s/s$//g;
  157. $global_tracks[$track] =~ s/'//g;
  158. $global_tracks[$track] =~ s/s/_/g;
  159. $global_tracks[$track] =~ s/:/_/g;
  160. $global_tracks[$track] =~ s/?//g;
  161. $global_tracks[$track] =~ s/*//g;
  162. $global_tracks[$track] =~ s/\/_/g;
  163. $global_tracks[$track] =~ s/s/_/g;
  164. $global_tracks[$track] =~ s///_/g;
  165. print "Track match " . $global_tracks[$track] . "n";
  166.     }
  167. }
  168. sub rename
  169. {
  170.     my $i = 1;
  171.     
  172.     for ($i = 1; $i <= $global_ntracks; $i++)
  173.     {
  174. my $track_name = $global_tracks[$i];
  175. if ($track_name ne "")
  176. {
  177.     my $file_name = sprintf("audio_%02d.wav", $i);
  178.     my $new_file_name = sprintf("$track_name.wav", $i);
  179.     
  180.     my $mv_cmd = "mv '" . $file_name . "' '" 
  181. . $new_file_name . "'";
  182.     print "$mv_cmdn";
  183.     `echo $mv_cmd >> rename.sh`;
  184. }
  185.     }
  186. }
  187. sub unrename
  188. {
  189.     my $i = 1;
  190.     
  191.     for ($i = 1; $i <= $global_ntracks; $i++)
  192.     {
  193. my $track_name = $global_tracks[$i];
  194. if ($track_name ne "")
  195. {
  196.     my $file_name = sprintf("$track_name.wav", $i);
  197.     my $new_file_name = sprintf("audio_%02d.wav", $i);
  198.     
  199.     my $mv_cmd = "mv '" . $file_name . "' '" 
  200. . $new_file_name . "'";
  201.     print "$mv_cmdn";
  202.     `echo $mv_cmd >> unrename.sh`;
  203. }
  204.     }
  205. }