Index: trunk/cuesheet2tocdata
===================================================================
--- trunk/cuesheet2tocdata	(revision 48)
+++ trunk/cuesheet2tocdata	(revision 1)
@@ -2,10 +2,40 @@
 use strict;
 
-use FindBin qw{$RealBin};
-use lib "$RealBin/lib";
+# XXX: does this every vary?
+# or is the lead-in always 88200 samples (88200 / 588 = 150)?
+use constant SECTOR_OFFSET => 150;  # the lead-in, in frames
 
-use Tracks;
+# conversion factors
+use constant FRAMES_PER_SECOND => 75;
+use constant SECONDS_PER_MINUTE => 60;
 
-my $tracks = Tracks->new;
-$tracks->read_cue(shift || '-');
-print "http://musicbrainz.org/bare/cdlookup.html?toc=" . join("+", $tracks->get_musicbrainz_tocdata) . "\n";
+# see also http://flac.sourceforge.net/format.html#cuesheet_track
+# 588 samples/frame = 44100 samples/sec / 75 frames/sec
+use constant SAMPLES_PER_FRAME => 588;
+
+my @sectors;
+my $total_sectors;
+while (<>) {
+    if (/INDEX 01/) {
+        my ($m,$s,$f) = /INDEX 01 (\d\d):(\d\d):(\d\d)/;
+        push @sectors, ($m * SECONDS_PER_MINUTE * FRAMES_PER_SECOND) + ($s * FRAMES_PER_SECOND) + $f + SECTOR_OFFSET;
+    } elsif (/lead-out/) {
+        my ($total_samples) = /lead-out \d+ (\d+)/;
+        $total_sectors = ($total_samples / SAMPLES_PER_FRAME) + SECTOR_OFFSET;
+    }
+}
+
+# this is a CD TOC suitable for submitting to MusicBrainz as a CD Stub
+# http://musicbrainz.org/doc/XML_Web_Service#Submitting_a_CDStub
+my @toc_data = (
+    1,                # first track number
+    scalar(@sectors), # last track number
+    $total_sectors,   # last frame (sector?)
+    @sectors,         # start frame for each track
+);
+
+my $url = q{http://musicbrainz.org/bare/cdlookup.html?toc=} . join('+', @toc_data);
+
+print "$url\n";
+#print join(' ', @toc_data) . "\n";
+#print "$_\n" foreach @toc_data;
