Usage¶
Basic¶
The basic use case is:
# this will load libdiscid
import discid
print("device: %s" % discid.get_default_device())
disc = discid.read() # reads from default device
print("id: %s" % disc.id)
print("submission url:\n%s" % disc.submission_url)
You can also set the device explicitely:
device = discid.get_default_device()
disc = discid.read(device)
id = disc.id
You can use other devices of course: see read()
.
When anything goes wrong reading from the device, DiscError
is raised.
Advanced¶
discid
can do more than just provide the MusicBrainz Disc ID.
You can get details about the tracks an fetch additional features
like the ISRCs and the MCN, which is basically the EAN/UPC of the disc:
disc = discid.read(features=["mcn", "isrc"])
print("mcn: %s" % disc.mcn)
for track in disc.tracks:
print("{num:>2}: {isrc:13}".format(num=track.number, isrc=track.isrc))
Without Disc Access¶
When you just want to generate disc IDs and you have the necessary data
laying around, you can use put()
.
You will need the numbers of the first track (should be 1),
the number of the last audio track (cut off trailing data tracks),
the total number of sectors for these tracks
and the offset for every one of the tracks up to the last audio track.
An example for the TOC TqvKjMu7dMliSfmVEBtrL7sBSno-:
first = 1
last = 15
sectors = 258725
offsets = [150, 17510, ..., 235590]
disc = discid.put(first, last, sectors, offsets)
print("id: %s" % disc.id)
last_track = disc.tracks[disc.last_track_num - 1]
print("last track length: %s seconds" % last_track.seconds)
Note
The example disc has track 16 as a multimedia/data track. The sector count for the disc is the ending sector for track 15! Depending on how you get this number, you might need to substract 11400 (2:32 minutes) from your sector count. Make sure the last track length is correct!
See also
Disc ID Calculation for details on which numbers to choose.
Fetching Metadata¶
You can use python-musicbrainzngs to fetch metadata for your disc.
The relevant function is musicbrainzngs.get_releases_by_discid()
:
import discid
import musicbrainzngs
musicbrainzngs.set_useragent("python-discid-example", "0.1", "your@mail")
disc = discid.read()
try:
result = musicbrainzngs.get_releases_by_discid(disc.id,
includes=["artists"])
except musicbrainzngs.ResponseError:
print("disc not found or bad response")
else:
if result.get("disc"):
print("artist:\t%s" %
result["disc"]["release-list"][0]["artist-credit-phrase"])
print("title:\t%s" % result["disc"]["release-list"][0]["title"])
elif result.get("cdstub"):
print("artist:\t" % result["cdstub"]["artist"])
print("title:\t" % result["cdstub"]["title"])
You can fetch much more data.
See musicbrainzngs
for details.
Note
Please submit your disc ID with Disc.submission_url
when it isn’t found at the MusicBrainz server.