[SCM] morituri/master: * examples/readdisc.py: Add musicbrainz code for disc naming.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:08:58 UTC 2014


The following commit has been merged in the master branch:
commit 1485ef790c4d26d12bbc6c9dc593ed2ae433d4e5
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Wed May 6 21:45:12 2009 +0000

    	* examples/readdisc.py:
    	  Add musicbrainz code for disc naming.

diff --git a/ChangeLog b/ChangeLog
index 23dc1b0..4b30576 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* examples/readdisc.py:
+	  Add musicbrainz code for disc naming.
+
+2009-05-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* morituri/image/table.py:
 	* morituri/image/toc.py:
 	  Delete old code.
diff --git a/examples/readdisc.py b/examples/readdisc.py
index 40b52da..e450233 100644
--- a/examples/readdisc.py
+++ b/examples/readdisc.py
@@ -56,27 +56,91 @@ def gtkmain(runner, taskk):
 def climain(runner, taskk):
     runner.run(taskk)
 
+class TrackMetadata(object):
+    artist = None
+    title = None
+
+class DiscMetadata(object):
+    artist = None
+    title = None
+    various = False
+    tracks = None
+
+    def __init__(self):
+        self.tracks = []
+
+def musicbrainz(discid):
+    metadata = DiscMetadata()
+
+    import musicbrainz2.disc as mbdisc
+    import musicbrainz2.webservice as mbws
+
+
+    # Setup a Query object.
+    service = mbws.WebService()
+    query = mbws.Query(service)
+
+
+    # Query for all discs matching the given DiscID.
+    try:
+        filter = mbws.ReleaseFilter(discId=discid)
+        results = query.getReleases(filter)
+    except mbws.WebServiceError, e:
+        print "Error:", e
+        return
+
+
+    # No disc matching this DiscID has been found.
+    if len(results) == 0:
+        print "Disc is not yet in the MusicBrainz database."
+        print "Consider adding it via", mbdisc.getSubmissionUrl(disc)
+        return
+
+
+    # Display the returned results to the user.
+    print 'Matching releases:'
+
+    for result in results:
+        release = result.release
+        print 'Artist  :', release.artist.name
+        print 'Title   :', release.title
+        print
+
+
+    # Select one of the returned releases. We just pick the first one.
+    selectedRelease = results[0].release
+
+
+    # The returned release object only contains title and artist, but no tracks.
+    # Query the web service once again to get all data we need.
+    try:
+        inc = mbws.ReleaseIncludes(artist=True, tracks=True, releaseEvents=True)
+        release = query.getReleaseById(selectedRelease.getId(), inc)
+    except mbws.WebServiceError, e:
+        print "Error:", e
+        sys.exit(2)
+
+
+    isSingleArtist = release.isSingleArtistRelease()
+    metadata.various = not isSingleArtist
+    metadata.title = release.title
+    metadata.artist = release.artist.getUniqueName()
+
+    print "%s - %s" % (release.artist.getUniqueName(), release.title)
+
+    i = 1
+    for t in release.tracks:
+        track = TrackMetadata()
+        if isSingleArtist:
+            track.artist = metadata.artist
+            track.title = t.title
+        else:
+            track.artist = t.artist.name
+            track.title = t.title
+        metadata.tracks.append(track)
+
+    return metadata
 
-def arcs(runner, function, table, track, offset):
-    # rips the track with the given offset, return the arcs checksum
-    print 'ripping track %r with offset %d' % (track, offset)
-
-    fd, path = tempfile.mkstemp(suffix='.track%02d.offset%d.morituri.wav' % (
-        track, offset))
-    os.close(fd)
-
-    track = table.tracks[track - 1]
-    t = cdparanoia.ReadTrackTask(path, table, track.start, track.end, offset)
-    t.description = 'Ripping with offset %d' % offset
-    function(runner, t)
-
-    t = checksum.AccurateRipChecksumTask(path, trackNumber=track,
-        trackCount=len(table.tracks))
-    function(runner, t)
-    
-    # os.unlink(path)
-    return "%08x" % t.checksum
- 
 def main(argv):
     parser = optparse.OptionParser()
 
@@ -128,8 +192,13 @@ def main(argv):
 
     lastTrackStart = 0
 
+    metadata = musicbrainz(itable.getMusicBrainzDiscId())
+
     for i, track in enumerate(itable.tracks):
         path = 'track%02d.wav' % (i + 1)
+        if metadata:
+            path = '%s - %s.wav' % (metadata.tracks[i].artist,
+                metadata.tracks[i].title)
         # FIXME: optionally allow overriding reripping
         if not os.path.exists(path):
             print 'Ripping track %d' % (i + 1)
@@ -148,12 +217,16 @@ def main(argv):
     for t in itable.tracks:
         print t, t.indexes.values()
 
-    handle = open('morituri.cue', 'w')
+    discName = 'morituri'
+    if metadata:
+        discName = '%s - %s' % (metadata.artist, metadata.title)
+    handle = open('%s.cue' % discName, 'w')
     handle.write(itable.cue())
     handle.close()
 
     # verify using accuraterip
     print "CDDB disc id", itable.getCDDBDiscId()
+    print "MusicBrainz disc id", itable.getMusicBrainzDiscId()
     url = itable.getAccurateRipURL()
     print "AccurateRip URL", url
 

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list