📄 tracknames.pl
字号:
#!/usr/local/bin/perl # A quick perl hack to get rename files pulled in with cdda2wav.# by billo@billo.com#use Socket;use IO::Handle;use Env qw(USER);use strict;no strict 'subs'; # can't get it to stop complaining about SOCKmy $state = "header";my $global_album = "Artist / Title";my $global_title = "Title";my $global_artist = "Artist";my @global_tracks = ("") x 100;my $global_ntracks = 0;my @track_offsets = ();my $disc_id = 0;my $disc_time = 0;if ($#ARGV != 1){ print "usage: cddbhack.pl CDDBHOST PORT < audio.cddb\n"; exit 0;}while (<STDIN>){ if ($state eq "header") { if (/#\s[\s]*(\d[\d]*)$/) { push @track_offsets, $1; } elsif (/#\s[\s]*Disc length:\s(\d[\d]*)/) { $disc_time = $1; $state = "discid"; } } elsif ($state eq "discid") { if (/DISCID=(\w[\w]*)/) { $disc_id = $1; last; } }}my $query_string = "cddb query $disc_id " . ($#track_offsets + 1);foreach my $offset (@track_offsets){ $query_string .= " $offset";}$query_string .= " $disc_time";print "$query_string\n";my $host = $ARGV[0];my $port = $ARGV[1];my $iaddr = inet_aton($host);my $paddr = sockaddr_in($port, $iaddr);socket(SOCK, AF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "socket: $!";connect(SOCK, $paddr) or die "connect: $!";autoflush SOCK 1;print "Connected.\n";my ($status, $result) = &resp(\*SOCK);if (int($status) != 201){ print "Unexpected status.\n"; close(\*SOCK); exit 0;}$host = `hostname`;$host =~ s/\n//g;&cmd(\*SOCK, "cddb hello $USER $host billo-scan 0.1");($status, $result) = &resp(\*SOCK);if (int($status) != 200){ print "Unexpected status.\n"; close(\*SOCK); exit 0;}&cmd(\*SOCK, "$query_string");($status, $result) = &resp(\*SOCK);if (int($status) != 200){ print "Unexpected status.\n"; close(\*SOCK); exit 0;}my ($ignore, $cat, $id, @rest) = split (" ", $result);my $read_string = "cddb read $cat $id";&cmd(\*SOCK, $read_string);&resp(\*SOCK);while (<SOCK>){ if (/^\./) { # print $_; # print "last line\n"; last; } else { &process($_); # print $_; }}&cmd(\*SOCK, "quit");&resp(\*SOCK);close(\*SOCK);&rename;exit 0;sub cmd{ my ($S, $cmd) = @_; print "$cmd\n"; print $S "$cmd\r\n";}sub resp{ my ($S) = @_; my ($code, $message); while (<$S>) { if (/^(\d[\d]*)\s.*/) { # print "\n$1\n"; print "$_\n"; $code = $1; $message = $_; last; } sleep(1); } my @return_array = ($code, $message); return @return_array;}sub process { my ($line) = @_; $_ = $line; if (/^DTITLE=(.*)$/) { $global_album = $1; $_ = $global_album; if (m/([^\/][^\/]*)\s\/\s([^\/][^\/\n\r]*)/) { $global_artist = $1; $global_title = $2; } print "$global_album\n"; print "$global_title\n"; print "$global_artist\n"; return; } if (/^TTITLE(\d[\d]*)=(.*)$/) { my $track = $1 + 1; if ($track > $global_ntracks) { $global_ntracks = $track; } $global_tracks[$track] = sprintf ("%s-%02d-%s", $global_title, $track, $2); $global_tracks[$track] =~ s/\s$//g; $global_tracks[$track] =~ s/'//g; $global_tracks[$track] =~ s/\s/_/g; $global_tracks[$track] =~ s/:/_/g; $global_tracks[$track] =~ s/\?//g; $global_tracks[$track] =~ s/\*//g; $global_tracks[$track] =~ s/\\/_/g; $global_tracks[$track] =~ s/\s/_/g; $global_tracks[$track] =~ s/\//_/g; print "Track match " . $global_tracks[$track] . "\n"; }}sub rename{ my $i = 1; for ($i = 1; $i <= $global_ntracks; $i++) { my $track_name = $global_tracks[$i]; if ($track_name ne "") { my $file_name = sprintf("audio_%02d.wav", $i); my $new_file_name = sprintf("$track_name.wav", $i); my $mv_cmd = "mv '" . $file_name . "' '" . $new_file_name . "'"; print "$mv_cmd\n"; `echo $mv_cmd >> rename.sh`; } }}sub unrename{ my $i = 1; for ($i = 1; $i <= $global_ntracks; $i++) { my $track_name = $global_tracks[$i]; if ($track_name ne "") { my $file_name = sprintf("$track_name.wav", $i); my $new_file_name = sprintf("audio_%02d.wav", $i); my $mv_cmd = "mv '" . $file_name . "' '" . $new_file_name . "'"; print "$mv_cmd\n"; `echo $mv_cmd >> unrename.sh`; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -