]> diplodocus.org Git - flac-archive/blobdiff - fa-rip
Copy ALBUMARTIST from FLAC file to TPE2 in ID3.
[flac-archive] / fa-rip
diff --git a/fa-rip b/fa-rip
index fb2a18567677ae7e68373a3f8171f9fd7f8fce0e..62b69af831c335dd3f7b1366a99e2ea36d4f9211 100755 (executable)
--- a/fa-rip
+++ b/fa-rip
@@ -1,13 +1,13 @@
 #! /usr/bin/env python2.4
 
-'''
+"""
 =head1 NAME
 
 B<fa-rip> - rip a CD for B<fa-flacd>
 
 =head1 SYNOPSIS
 
-B<fa-rip> [B<-d> I<device>] [B<-p> I<post-processor> [B<-t> I<track-count>]
+B<fa-rip> [B<--artist> I<artist> B<--title> I<title>] [B<-d> I<device>] [B<-m>] [B<-p> I<post-processor>] [B<-s>] [B<-t> I<track-count>]
 
 =head1 DESCRIPTION
 
@@ -27,17 +27,32 @@ have to fill out the candidate-tags-0 template.
 
 =over 4
 
+=item B<--artist> I<artist> B<--title> I<title>
+
+Write candidate-tags files based on I<artist> and album I<title>.
+Useful if you've already ripped wav files with some other program and
+just need to set things up for B<fa-flacd>.
+
 =item B<-d> [B<--device>] I<device>
 
 Use I<device> as the CD-ROM device, instead of the default
 "/dev/cdrom" or the environment variable CDDEV.
 
+=item B<-m> [B<--no-musicbrainz>]
+
+Don't connect to MusicBrainz, just write candidate-tags-0.
+
 =item B<-p> [B<--post-processor>] I<post-processor>
 
 Create a "post-processor" file in the temporary directory containing
 the line 'I<post-processor> "$@"'.  See B<fa-flacd>'s man page for
 information about this hook.
 
+=item B<-s> [B<--single-file>]
+
+Rip whole disc to one wav file and configure B<fa-flacd> to encode it
+to one FLAC file with embedded cuesheet.
+
 =item B<-t> [B<--tracks>] I<track-count>
 
 Archive only the first I<track-count> tracks.  This is handy for
@@ -65,7 +80,7 @@ it under the same terms as Perl itself.
 
 =cut
 
-''' #' # python-mode is sucks
+"""
 
 import os, re, sys, tempfile, traceback
 from optparse import OptionParser
@@ -76,21 +91,21 @@ import musicbrainz2.webservice
 
 from org.diplodocus.util import catch_EnvironmentError as c
 
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=439790
+MSF_OFFSET = 150
+
 def mkcue(disc, trackcount=None):
     fp = c(file, 'cue', 'w')
     c(fp.write, 'FILE "dummy.wav" WAVE\n')
-    c(fp.write, '  TRACK 01 AUDIO\n')
-    c(fp.write, '    INDEX 01 00:00:00\n')
 
     if trackcount == None:
         trackcount = disc.lastTrackNum
     else:
         trackcount = min(trackcount, disc.lastTrackNum)
 
-    pregap = disc.tracks[0][0]
-    for i in xrange(disc.firstTrackNum, trackcount):
-        offset = disc.tracks[i][0]
-        offset -= pregap
+    for i in xrange(disc.firstTrackNum, trackcount+1):
+        offset = disc.tracks[i-1][0]
+        offset -= MSF_OFFSET
 
         minutes = seconds = 0
         sectors = offset % 75
@@ -100,7 +115,9 @@ def mkcue(disc, trackcount=None):
                 minutes = seconds / 60
                 seconds = seconds % 60
 
-        c(fp.write, '  TRACK %02d AUDIO\n' % (i + 1,))
+        c(fp.write, '  TRACK %02d AUDIO\n' % (i,))
+        if i == 1 and offset > 0:
+            c(fp.write, '    INDEX 00 00:00:00\n')
         c(fp.write,
           '    INDEX 01 %02d:%02d:%02d\n' % (minutes, seconds, sectors))
 
@@ -113,10 +130,10 @@ def tags_file(fn, trackcount, various, artist=None, album=None,
     fp = c(file, fn, 'w')
     c(fp.write, 'ARTIST=')
     if artist != None:
-        c(fp.write, artist)
+        c(fp.write, artist.encode('utf-8'))
     c(fp.write, '\nALBUM=')
     if album != None:
-        c(fp.write, album)
+        c(fp.write, album.encode('utf-8'))
     c(fp.write, '\n')
 
     have_date = False
@@ -135,8 +152,9 @@ def tags_file(fn, trackcount, various, artist=None, album=None,
         except IndexError:
             title = ''
             artist = ''
-        various and c(fp.write, 'ARTIST[%d]=%s\n' % (i, artist))
-        c(fp.write, 'TITLE[%d]=%s\n' % (i, title))
+        various and c(fp.write, 'ARTIST[%d]=%s\n' % (i,
+                                                     artist.encode('utf-8')))
+        c(fp.write, 'TITLE[%d]=%s\n' % (i, title.encode('utf-8')))
 
     c(fp.close)
 
@@ -238,6 +256,7 @@ def main(argv):
 
         tempdir = c((lambda x: tempfile.mkdtemp(prefix=x, dir='.')),
                     'flac-archive.')
+        sys.stderr.write('ripping to %s\n\n' % (tempdir,))
         c(os.chdir, tempdir)
 
         make_post_processor(options.post_processor)