X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/f0582268a00c97c92f40f3a218c6b195c50e5239..22b54460ba7338e88a50fdf1a5e77ca44616519a:/examples/musicbrainz-get-tracks diff --git a/examples/musicbrainz-get-tracks b/examples/musicbrainz-get-tracks new file mode 100755 index 0000000..1d38480 --- /dev/null +++ b/examples/musicbrainz-get-tracks @@ -0,0 +1,123 @@ +#!/usr/bin/python + +# Copyright 2005 Decklin Foster, licensed under the same terms as abcde. + +import sys +import getopt +import musicbrainz +import musicbrainz.queries as mq + +DEF_CD_DEV = '/dev/cdrom' + +# TODO: +# +# * --cdrom should take an argument, e.g. /dev/cdrom1. musicbrainz.queries +# doesn't seem to provide for this. + +def get_toc_discid(mb): + mb.Query(mq.MBQ_GetCDTOC) + return mb.GetResultData(mq.MBE_TOCGetCDIndexId) + +def lookup_discid(mb, id): + mb.QueryWithArgs(mq.MBQ_GetCDInfoFromCDIndexId, [id]) + +if __name__ == "__main__": + shortopts = 'cd:' + longopts = ['cdrom', 'discid='] + + mb = musicbrainz.mb() + mb.SetDepth(2) + + opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts) + + id = None + if opts: + for opt, arg in opts: + if opt in ('--cdrom', '-c'): + id = get_toc_discid(mb) + lookup_discid(mb, id) + if opt in ('--discid', '-d'): + id = arg + lookup_discid(mb, id) + else: + id = get_toc_discid(mb) + lookup_discid(mb, id) + + matches = mb.GetResultInt(mq.MBE_GetNumAlbums) + if matches == 0: + print >>sys.stderr, "could not find an entry for this CD" + sys.exit(1) + if matches > 1: + print >>sys.stderr, "warning: multiple matches, using first" + + mb.Select1(mq.MBS_SelectAlbum, 1) + album = mb.GetResultData(mq.MBE_AlbumGetAlbumName) + n = mb.GetResultInt(mq.MBE_AlbumGetNumTracks) + + artistid = mb.GetIDFromURL(mb.GetResultData(mq.MBE_AlbumGetAlbumArtistId)) + if artistid == mq.MBI_VARIOUS_ARTIST_ID: + artist = 'Various Artists' + else: + try: + artist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, 1) + except musicbrainz.MusicBrainzError: + artist = 'Unknown Artist' + + if args: + tracks = map(int, args) + else: + tracks = range(1, n+1) + + trackinfo = [] + for i in tracks: + if artistid == mq.MBI_VARIOUS_ARTIST_ID: + try: + tartist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, i) + except musicbrainz.MusicBrainzError: + tartist = 'Unknown Artist' + else: + tartist = None + try: + ttitle = mb.GetResultData1(mq.MBE_AlbumGetTrackName, i) + except musicbrainz.MusicBrainzError: + tartist = 'Unknown Track' + try: + tlength = mb.GetResultInt1(mq.MBE_AlbumGetTrackDuration, i) + except musicbrainz.MusicBrainzError: + tlength = 0 + trackinfo.append((tartist, ttitle, tlength)) + + print "# fake CD database file generated by musicbrainz-get-tracks 0.1" + print "#" + print "# Track frame offsets:" + + # Assume standard pregap + total_len = 2000 + for t in trackinfo: + tartist, ttitle, tlength = t + print "# %d" % (total_len / (1000.0/75.0)) + total_len += tlength + + print "#" + print "# Disc length: %d seconds" % (total_len / 1000) + print "#" + print "# Revision: 0" + print "# Processed by: MusicBrainz" + print "# Submitted by: MusicBrainz" + print "DISCID=%s" % id + print "DTITLE=%s / %s" % (artist, album) + + for i in range(0, len(trackinfo)): + tartist, ttitle, tlength = trackinfo[i] + if tartist: + print "TTITLE%d=%s / %s" % (i, tartist, ttitle) + else: + print "TTITLE%d=%s" % (i, ttitle) + + print "EXTD=" + + for i in range(0, len(trackinfo)): + print "EXTD%d=" % i + + print "PLAYORDER=" + print "."