Skip to content

Instantly share code, notes, and snippets.

@ohac
Created August 26, 2008 15:17
Show Gist options
  • Save ohac/7276 to your computer and use it in GitHub Desktop.
Save ohac/7276 to your computer and use it in GitHub Desktop.
#!/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