~ubuntu-branches/ubuntu/precise/abcde/precise

« back to all changes in this revision

Viewing changes to examples/musicbrainz-get-tracks

  • Committer: Bazaar Package Importer
  • Author(s): Jesus Climent
  • Date: 2005-12-12 23:46:58 UTC
  • Revision ID: james.westby@ubuntu.com-20051212234658-2lfvwka0gdc3pvtn
Tags: 2.3.99.2-1
* Missing bits in the 2.3.99.1 changelog:
  - Man page: added information about -z (Debug option).
  - Corrected config file with the BATCHNORM/NOGAP split
    (Closes: #337622).
  - Uses /bin/bash for the time being... We need to get some substitution
    functions/operations for the bashisms we have: Closes: #337139.
* Config bits with corrected typos
* Adding musicbrainz support. First bits.
* Reworked comparison for numerical answer when selecting a CDDB output.
* TODO updated

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
# Copyright 2005 Decklin Foster, licensed under the same terms as abcde.
 
4
 
 
5
import sys
 
6
import getopt
 
7
import musicbrainz
 
8
import musicbrainz.queries as mq
 
9
 
 
10
DEF_CD_DEV = '/dev/cdrom'
 
11
 
 
12
# TODO:
 
13
#
 
14
# * --cdrom should take an argument, e.g. /dev/cdrom1. musicbrainz.queries
 
15
#   doesn't seem to provide for this.
 
16
 
 
17
def get_toc_discid(mb):
 
18
    mb.Query(mq.MBQ_GetCDTOC)
 
19
    return mb.GetResultData(mq.MBE_TOCGetCDIndexId)
 
20
 
 
21
def lookup_discid(mb, id):
 
22
    mb.QueryWithArgs(mq.MBQ_GetCDInfoFromCDIndexId, [id])
 
23
 
 
24
if __name__ == "__main__":
 
25
    shortopts = 'cd:'
 
26
    longopts = ['cdrom', 'discid=']
 
27
 
 
28
    mb = musicbrainz.mb()
 
29
    mb.SetDepth(2)
 
30
 
 
31
    opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
 
32
 
 
33
    id = None
 
34
    if opts:
 
35
        for opt, arg in opts:
 
36
            if opt in ('--cdrom', '-c'):
 
37
                id = get_toc_discid(mb)
 
38
                lookup_discid(mb, id)
 
39
            if opt in ('--discid', '-d'):
 
40
                id = arg
 
41
                lookup_discid(mb, id)
 
42
    else:
 
43
        id = get_toc_discid(mb)
 
44
        lookup_discid(mb, id)
 
45
 
 
46
    matches = mb.GetResultInt(mq.MBE_GetNumAlbums)
 
47
    if matches == 0:
 
48
        print >>sys.stderr, "could not find an entry for this CD"
 
49
        sys.exit(1)
 
50
    if matches > 1:
 
51
        print >>sys.stderr, "warning: multiple matches, using first"
 
52
 
 
53
    mb.Select1(mq.MBS_SelectAlbum, 1)
 
54
    album = mb.GetResultData(mq.MBE_AlbumGetAlbumName)
 
55
    n = mb.GetResultInt(mq.MBE_AlbumGetNumTracks)
 
56
 
 
57
    artistid = mb.GetIDFromURL(mb.GetResultData(mq.MBE_AlbumGetAlbumArtistId))
 
58
    if artistid == mq.MBI_VARIOUS_ARTIST_ID:
 
59
        artist = 'Various Artists'
 
60
    else:
 
61
        try:
 
62
            artist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, 1)
 
63
        except musicbrainz.MusicBrainzError:
 
64
            artist = 'Unknown Artist'
 
65
 
 
66
    if args:
 
67
        tracks = map(int, args)
 
68
    else:
 
69
        tracks = range(1, n+1)
 
70
 
 
71
    trackinfo = []
 
72
    for i in tracks:
 
73
        if artistid == mq.MBI_VARIOUS_ARTIST_ID:
 
74
            try:
 
75
                tartist = mb.GetResultData1(mq.MBE_AlbumGetArtistName, i)
 
76
            except musicbrainz.MusicBrainzError:
 
77
                tartist = 'Unknown Artist'
 
78
        else:
 
79
            tartist = None
 
80
        try:
 
81
            ttitle = mb.GetResultData1(mq.MBE_AlbumGetTrackName, i)
 
82
        except musicbrainz.MusicBrainzError:
 
83
            tartist = 'Unknown Track'
 
84
        try:
 
85
            tlength = mb.GetResultInt1(mq.MBE_AlbumGetTrackDuration, i)
 
86
        except musicbrainz.MusicBrainzError:
 
87
            tlength = 0
 
88
        trackinfo.append((tartist, ttitle, tlength))
 
89
 
 
90
    print "# fake CD database file generated by musicbrainz-get-tracks 0.1"
 
91
    print "#"
 
92
    print "# Track frame offsets:"
 
93
 
 
94
    # Assume standard pregap
 
95
    total_len = 2000
 
96
    for t in trackinfo:
 
97
        tartist, ttitle, tlength = t
 
98
        print "#       %d" % (total_len / (1000.0/75.0))
 
99
        total_len += tlength
 
100
 
 
101
    print "#"
 
102
    print "# Disc length: %d seconds" % (total_len / 1000)
 
103
    print "#"
 
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)
 
109
 
 
110
    for i in range(0, len(trackinfo)):
 
111
        tartist, ttitle, tlength = trackinfo[i]
 
112
        if tartist:
 
113
            print "TTITLE%d=%s / %s" % (i, tartist, ttitle)
 
114
        else:
 
115
            print "TTITLE%d=%s" % (i, ttitle)
 
116
 
 
117
    print "EXTD="
 
118
 
 
119
    for i in range(0, len(trackinfo)):
 
120
        print "EXTD%d=" % i
 
121
 
 
122
    print "PLAYORDER="
 
123
    print "."