Created
August 26, 2008 15:17
-
-
Save ohac/7276 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import DiscID, CDDB, sys, os | |
from eyeD3.tag import * | |
def disc_id(track): | |
frame2array = lambda(f): (f/(60*75), (f/75)%60, f%75) | |
last = len(track) - 1 | |
track_frames = [] | |
checksum = 0 | |
for i in range(1, last + 1): | |
(min, sec, frame) = frame2array(track[i - 1]) | |
checksum = checksum + DiscID.cddb_sum(min*60 + sec) | |
track_frames.append(min*60*75 + sec*75 + frame) | |
(min, sec, frame) = frame2array(track[-1]) | |
track_frames.append(min*60*75 + sec*75 + frame) | |
total_time = (track_frames[-1] / 75) - (track_frames[0] / 75) | |
discid = ((long(checksum) % 0xff) << 24 | total_time << 8 | last) | |
return [discid, last] + track_frames[:-1] + [ track_frames[-1] / 75 ] | |
files = sys.argv[1:] | |
audiofiles = map(lambda f: eyeD3.tag.Mp3AudioFile(f), files) | |
tracks = map(lambda audiofile: audiofile.getPlayTime() * 75, audiofiles) | |
totaltime = 2*75 | |
tracks2 = [totaltime] | |
for length in tracks: | |
totaltime += length | |
tracks2.append(totaltime) | |
disc_id = disc_id(tracks2) | |
print disc_id | |
print "Disc ID: %08lx Num tracks: %d" % (disc_id[0], disc_id[1]) | |
(query_stat, query_info) = CDDB.query(disc_id, | |
server_url='http://freedbtest.dyndns.org/~cddb/cddb.cgi') | |
if query_stat == 200: | |
print ("success!\nQuerying CDDB for track info of `%s'... " % | |
query_info['title']), | |
(read_stat, read_info) = CDDB.read(query_info['category'], | |
query_info['disc_id']) | |
if read_stat == 210: | |
print "success!" | |
for i in range(0, disc_id[1]): | |
print "Track %.02d: %s" % (i+1, read_info['TTITLE' + `i`]) | |
else: | |
print "failure getting track info, status: %i" % read_stat | |
elif query_stat == 210 or query_stat == 211: | |
print "multiple matches found! Matches are:" | |
for i in query_info: | |
print "ID: %s Category: %s Title: %s" % \ | |
(i['disc_id'], i['category'], i['title']) | |
else: | |
print "failure getting disc info, status %i" % query_stat |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment