audiotools.freedb — FreeDB Lookup Service Module

The audiotools.freedb module contains classes and functions for performing lookups to the FreeDB service.

DiscID Objects

class audiotools.freedb.DiscID(offsets, total_length, track_count)

A FreeDB disc ID object used to perform lookups. offsets is a list of track offsets in CD sectors (1/75th of a second), each including the 2 second pre-gap at the start of the disc. total_length is the length of the disc, in seconds, from index point 1 of the first track to the disc’s lead-out. track_count is the total number of tracks on the disc.


Returns the disc ID as an 8 character hexadecimal string that FreeDB expects when performing lookups.

classmethod DiscID.from_cddareader(cddareader)

Given a audiotools.cdio.CDDAReader object, returns the DiscID of that disc.

classmethod DiscID.from_tracks(tracks)

Given a sorted list of audiotools.AudioFile objects, returns the DiscID as if those tracks were a CD.


This assumes all the tracks from the disc are present and are laid out in a conventional fashion with no “hidden” tracks or other oddities. The disc ID may not be accurate if that’s not the case.

classmethod DiscID.from_sheet(sheet, total_pcm_frames, sample_rate)

Given a audiotools.Sheet object along with the total length of the disc in PCM frames and the disc’s sample rate (typically 44100), returns the DiscID.

Performing Lookup

audiotools.freedb.perform_lookup(disc_id, freedb_server, freedb_port)

Given a DiscID object, FreeDB hostname string and FreeDB server port (usually 80), iterates over a list of audiotools.MetaData objects per successful match, like:

[track1, track2, ...], [track1, track2, ...], ...

May yield nothing if the server has no matches for the given disc ID.

May raise urllib2.HTTPError if an error occurs querying the server or ValueError if the server returns invalid data.