3 # Copyright 2005 Decklin Foster, licensed under the same terms as abcde.
8 import musicbrainz.queries as mq
10 DEF_CD_DEV = '/dev/cdrom'
14 # * --cdrom should take an argument, e.g. /dev/cdrom1. musicbrainz.queries
15 # doesn't seem to provide for this.
17 def get_toc_discid(mb):
18 mb.Query(mq.MBQ_GetCDTOC)
19 return mb.GetResultData(mq.MBE_TOCGetCDIndexId)
21 def lookup_discid(mb, id):
22 mb.QueryWithArgs(mq.MBQ_GetCDInfoFromCDIndexId, [id])
24 if __name__ == "__main__":
26 longopts = ['cdrom', 'discid=']
31 opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
36 if opt in ('--cdrom', '-c'):
37 id = get_toc_discid(mb)
39 if opt in ('--discid', '-d'):
43 id = get_toc_discid(mb)
46 matches = mb.GetResultInt(mq.MBE_GetNumAlbums)
48 print >>sys.stderr, "could not find an entry for this CD"
51 print >>sys.stderr, "warning: multiple matches, using first"
53 mb.Select1(mq.MBS_SelectAlbum, 1)
54 album = mb.GetResultData(mq.MBE_AlbumGetAlbumName)
55 n = mb.GetResultInt(mq.MBE_AlbumGetNumTracks)
57 artistid = mb.GetIDFromURL(mb.GetResultData(mq.MBE_AlbumGetAlbumArtistId))
58 if artistid == mq.MBI_VARIOUS_ARTIST_ID:
59 artist = 'Various Artists'
62 artist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, 1)
63 except musicbrainz.MusicBrainzError:
64 artist = 'Unknown Artist'
67 tracks = map(int, args)
69 tracks = range(1, n+1)
73 if artistid == mq.MBI_VARIOUS_ARTIST_ID:
75 tartist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, i)
76 except musicbrainz.MusicBrainzError:
77 tartist = 'Unknown Artist'
81 ttitle = mb.GetResultData1(mq.MBE_AlbumGetTrackName, i)
82 except musicbrainz.MusicBrainzError:
83 tartist = 'Unknown Track'
85 tlength = mb.GetResultInt1(mq.MBE_AlbumGetTrackDuration, i)
86 except musicbrainz.MusicBrainzError:
88 trackinfo.append((tartist, ttitle, tlength))
90 print "# fake CD database file generated by musicbrainz-get-tracks 0.1"
92 print "# Track frame offsets:"
94 # Assume standard pregap
97 tartist, ttitle, tlength = t
98 print "# %d" % (total_len / (1000.0/75.0))
102 print "# Disc length: %d seconds" % (total_len / 1000)
104 print "# Revision: 0"
105 print "# Processed by: MusicBrainz"
106 print "# Submitted by: MusicBrainz"
107 print "DISCID=%s" % id
108 print "DTITLE=%s / %s" % (artist, album)
110 for i in range(0, len(trackinfo)):
111 tartist, ttitle, tlength = trackinfo[i]
113 print "TTITLE%d=%s / %s" % (i, tartist, ttitle)
115 print "TTITLE%d=%s" % (i, ttitle)
119 for i in range(0, len(trackinfo)):