Re: [linux-audio-user] freedb track info fetcher?

From: Paul Winkler <pw_lists@email-addr-hidden>
Date: Tue Oct 10 2006 - 17:08:35 EEST

On Tue, Oct 10, 2006 at 03:18:12PM +0200, Mario Lang wrote:
> There are a lot of CDDB based tools for linux, but they all seem
> to depend on the physical disk being in the cdrom drive.

The CDDB disc ID is based on the number of tracks and the track
lengths. So if you can accurately calculate that from some
soundfiles, you might be in business.

I haven't found the algorithm defined anywhere, but maybe these excerpts
from the DiscID python module will serve as explanatory pseudocode.
It's at http://cddb-py.sourceforge.net/

BUT... I'm not sure how "leadout" is extracted; that might scuttle your
idea.

# If called from the command line, will print out disc info in a
# format identical to Robert Woodcock's 'cd-discid' program.

def cddb_sum(n):
    ret = 0
    while n > 0:
        ret = ret + (n % 10)
        n = n / 10
    return ret

def disc_id(device):
    (first, last) = cdrom.toc_header(device)

    track_frames = []
    checksum = 0

    for i in range(first, last + 1):
        (min, sec, frame) = cdrom.toc_entry(device, i)
        checksum = checksum + cddb_sum(min*60 + sec)
        track_frames.append(min*60*75 + sec*75 + frame)

    (min, sec, frame) = cdrom.leadout(device)
    track_frames.append(min*60*75 + sec*75 + frame)

    total_time = (track_frames[-1] / 75) - (track_frames[0] / 75)

    discid = ((checksum % 0xff) << 24 | total_time << 8 | last)

 

-- 
Paul Winkler
http://www.slinkp.com
Received on Tue Oct 10 20:15:04 2006

This archive was generated by hypermail 2.1.8 : Tue Oct 10 2006 - 20:15:04 EEST