| 1 |
root |
1.1 |
#!/usr/bin/perl |
| 2 |
|
|
|
| 3 |
|
|
# feeds all AUDIO tracks into sox. might work only |
| 4 |
|
|
# on little-endian machines, so BEWARE! |
| 5 |
|
|
|
| 6 |
root |
1.2 |
$PLAY = "trap '' INT; play -traw -r44100 -c2 -sw - >/dev/null"; |
| 7 |
root |
1.1 |
|
| 8 |
|
|
use Convert::CD::Cue; |
| 9 |
|
|
|
| 10 |
root |
1.2 |
$SIG{INT} = sub { $int++ }; |
| 11 |
root |
1.1 |
|
| 12 |
root |
1.2 |
print "interrupt to skip song\n"; |
| 13 |
root |
1.1 |
|
| 14 |
root |
1.2 |
for (@ARGV) { |
| 15 |
|
|
print "reading $_\n"; |
| 16 |
root |
1.1 |
|
| 17 |
root |
1.2 |
my $toc = new Convert::CD::Cue path => $_; |
| 18 |
|
|
my $cd = $toc->read; |
| 19 |
root |
1.1 |
|
| 20 |
root |
1.2 |
open PLAY, "|-", $PLAY |
| 21 |
|
|
or die "@PLAY: $!"; |
| 22 |
root |
1.1 |
|
| 23 |
root |
1.2 |
$| = 1; |
| 24 |
|
|
|
| 25 |
|
|
for my $track ($cd->track) { |
| 26 |
|
|
next unless $track->{mode} eq "AUDIO"; |
| 27 |
|
|
print "playing ", $track->as_string, "\n"; |
| 28 |
|
|
|
| 29 |
|
|
my $size = $track->size; |
| 30 |
|
|
my $chunk = $track->{datasize}; |
| 31 |
|
|
|
| 32 |
|
|
for (my $ofs = 0; $ofs < $size && !$int; $ofs += $chunk) { |
| 33 |
|
|
my $data = $track->read ($ofs, $chunk); |
| 34 |
|
|
syswrite PLAY, $data; |
| 35 |
|
|
printf " %5.2f %s / %s\r", 100 * $ofs / $size, |
| 36 |
|
|
$track->to_msf ($ofs), $track->to_msf ($size); |
| 37 |
|
|
} |
| 38 |
|
|
|
| 39 |
|
|
$int = 0; |
| 40 |
root |
1.1 |
} |
| 41 |
|
|
} |
| 42 |
|
|
|
| 43 |
|
|
|