* morituri/image/table.py:

Add getPregap() method.
	* morituri/rip/cd.py:
	  Use artist.name, not getUniqueName, to avoid monstruous names for
	  Muse.
	  Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
	  Don't set the date if the release doesn't have one.
	  Set pregap on trackResult using new Track.getPregap()
	  Write all log/cue/m3u files as utf-8.
This commit is contained in:
Thomas Vander Stichele
2009-06-07 12:54:32 +00:00
parent 3c57682a5a
commit 8f88db0a29
3 changed files with 56 additions and 26 deletions

View File

@@ -1,3 +1,15 @@
2009-06-07 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/image/table.py:
Add getPregap() method.
* morituri/rip/cd.py:
Use artist.name, not getUniqueName, to avoid monstruous names for
Muse.
Pass mbdiscid to getPath, so Unknown Disc can be saved with it.
Don't set the date if the release doesn't have one.
Set pregap on trackResult using new Track.getPregap()
Write all log/cue/m3u files as utf-8.
2009-06-06 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/test/cdparanoia.progress:

View File

@@ -95,6 +95,17 @@ class Track:
indexes.sort()
return self.indexes[indexes[-1]]
def getPregap(self):
"""
Returns the length of the pregap for this track.
The pregap is 0 if there is no index 0, and the difference between
index 1 and index 0 if there is.
"""
if 0 not in self.indexes:
return 0
return self.indexes[1].absolute - self.indexes[0].absolute
class Index:
"""

View File

@@ -114,10 +114,11 @@ def musicbrainz(discid):
isSingleArtist = release.isSingleArtistRelease()
metadata.various = not isSingleArtist
metadata.title = release.title
metadata.artist = release.artist.getUniqueName()
# getUniqueName gets disambiguating names like Muse (UK rock band)
metadata.artist = release.artist.name
metadata.release = release.getEarliestReleaseDate()
print "%s - %s" % (release.artist.getUniqueName(), release.title)
print "%s - %s" % (release.artist.name, release.title)
for t in release.tracks:
track = TrackMetadata()
@@ -131,7 +132,7 @@ def musicbrainz(discid):
return metadata
def getPath(outdir, template, metadata, i):
def getPath(outdir, template, metadata, mbdiscid, i):
"""
Based on the template, get a complete path for the given track,
minus extension.
@@ -154,10 +155,10 @@ def getPath(outdir, template, metadata, i):
# default values
v['A'] = 'Unknown Artist'
v['d'] = 'Unknown Disc'
v['d'] = mbdiscid
v['a'] = v['A']
v['n'] = 'Unknown Track'
v['n'] = 'Unknown Track %d' % i
if metadata:
v['A'] = filterForPath(metadata.artist)
@@ -232,16 +233,17 @@ def getTagList(metadata, i):
# GstDate expects a full date, so default to Jan and 1st if MM and DD
# are missing
date = metadata.release
log.debug('metadata',
'Converting release date %r to structure', date)
if len(date) == 4:
date += '-01'
if len(date) == 7:
date += '-01'
if date:
log.debug('metadata',
'Converting release date %r to structure', date)
if len(date) == 4:
date += '-01'
if len(date) == 7:
date += '-01'
s = gst.structure_from_string('hi,date=(GstDate)%s' %
str(date))
ret[gst.TAG_DATE] = s['date']
s = gst.structure_from_string('hi,date=(GstDate)%s' %
str(date))
ret[gst.TAG_DATE] = s['date']
# FIXME: gst.TAG_ISRC
@@ -313,9 +315,10 @@ class Rip(logcommand.LogCommand):
# already show us some info based on this
print "CDDB disc id", ittoc.getCDDBDiscId()
print "MusicBrainz disc id", ittoc.getMusicBrainzDiscId()
mbdiscid = ittoc.getMusicBrainzDiscId()
print "MusicBrainz disc id", mbdiscid
metadata = musicbrainz(ittoc.getMusicBrainzDiscId())
metadata = musicbrainz(mbdiscid)
if not metadata:
print 'Submit this disc to MusicBrainz at:'
print ittoc.getMusicBrainzSubmitURL()
@@ -370,7 +373,7 @@ class Rip(logcommand.LogCommand):
print 'Found Hidden Track One Audio from frame %d to %d' % (start, stop)
# rip it
htoapath = getPath(outdir, self.options.track_template, metadata, 0) + '.' + extension
htoapath = getPath(outdir, self.options.track_template, metadata, mbdiscid, 0) + '.' + extension
dirname = os.path.dirname(htoapath)
if not os.path.exists(dirname):
os.makedirs(dirname)
@@ -408,7 +411,7 @@ class Rip(logcommand.LogCommand):
trackResult = result.TrackResult()
res.tracks.append(trackResult)
path = getPath(outdir, self.options.track_template, metadata, i + 1) + '.' + extension
path = getPath(outdir, self.options.track_template, metadata, mbdiscid, i + 1) + '.' + extension
trackResult.number = i + 1
trackResult.filename = path
@@ -437,6 +440,7 @@ class Rip(logcommand.LogCommand):
trackResult.copycrc = t.copychecksum
trackResult.peak = t.peak
trackResult.quality = t.quality
trackResult.pregap = itable.tracks[i].getPregap()
print 'Peak level: %.2f %%' % (math.sqrt(t.peak) * 100.0, )
print 'Rip quality: %.2f %%' % (t.quality * 100.0, )
@@ -446,7 +450,7 @@ class Rip(logcommand.LogCommand):
### write disc files
discName = getPath(outdir, self.options.disc_template, metadata, i)
discName = getPath(outdir, self.options.disc_template, metadata, mbdiscid, i)
dirname = os.path.dirname(discName)
if not os.path.exists(dirname):
os.makedirs(dirname)
@@ -455,7 +459,8 @@ class Rip(logcommand.LogCommand):
assert itable.canCue()
cuePath = '%s.cue' % discName
handle = open(cuePath, 'w')
handle.write(itable.cue())
# FIXME: do we always want utf-8 ?
handle.write(itable.cue().encode('utf-8'))
handle.close()
# write .m3u file
@@ -473,11 +478,13 @@ class Rip(logcommand.LogCommand):
continue
path = getPath(outdir, self.options.track_template, metadata,
i + 1) + '.' + extension
handle.write('#EXTINF:%d,%s\n' % (
mbdiscid, i + 1) + '.' + extension
u = u'#EXTINF:%d,%s\n' % (
itable.getTrackLength(i + 1) / common.FRAMES_PER_SECOND,
os.path.basename(path)))
handle.write('%s\n' % os.path.basename(path))
os.path.basename(path))
handle.write(u.encode('utf-8'))
u = '%s\n' % os.path.basename(path)
handle.write(u.encode('utf-8'))
handle.close()
# verify using accuraterip
@@ -553,11 +560,11 @@ class Rip(logcommand.LogCommand):
i + 1, status, c, csum, ar)
# write log file
discName = getPath(outdir, self.options.disc_template, metadata, i)
discName = getPath(outdir, self.options.disc_template, metadata, mbdiscid, i)
logPath = '%s.log' % discName
logger = result.getLogger()
handle = open(logPath, 'w')
handle.write(logger.log(res))
handle.write(logger.log(res).encode('utf-8'))
handle.close()
class CD(logcommand.LogCommand):