[Python-de] freedb abfrage...

genrich Genrich at gmx.net
Mit Nov 10 10:40:40 CET 2004


Habe nun entlich eine funktionierende Variante um von einer Audio-CD die freedb-ID zu 
berechnen:


==================================================
#!/usr/bin/python
# -*- coding: cp1252 -*-


from pygame import cdrom


cdrom.init()
print "CDROM initialized: ", cdrom.get_init()
print "Number of CDROMs:  ", cdrom.get_count()



def DiscID(cd_object):
     def getHMS_f(Frames):
         # Umwandung von Frames in h:m:s.frames
         s,Frames = divmod(Frames,75)
         h,s = divmod(s,3600)
         m,s=divmod(s,60)
         return "%02.f:%02.f:%02.f.%02.f" % (h, m, s, Frames)

     def sumDigits( n ):
         # Berechnet die Quersumme
         # n=123456789 => 1+2+3+4+5+6+7+8+9 = 45
         ret = 0
         for i in str(n):
             ret += int(i)
         return ret

     TrackAnzahl = cd_object.get_numtracks()

     checksum=0
     total_length = 0
     for i in range(TrackAnzahl):
         track_length = cd_object.get_track_length(i)*75
         print "%2d - %s" % (i, getHMS_f(track_length))
         total_length += track_length

         checksum += sumDigits( int(cd_object.get_track_start( i )) )

     print "\nTotalZeit: %s -> %dsek." % (getHMS_f(total_length), round(total_length/75))

     RAWdiscID = (long(checksum % 0xff) << 24) + (long(total_length/75) << 8) + TrackAnzahl
     return "%08lx" % RAWdiscID



def getIDs():
     IDlist=[]

     for i in range(cdrom.get_count()):
         cd_object = cdrom.CD(i)
         print "\nNr.:",i," Laufwerk:",cd_object.get_name()

         print "Initialisierte..."
         cd_object.init()

         if cd_object.get_numtracks()!=0:
             # Es sind Tracks vorhanden

             freedbID = DiscID(cd_object)
             print "\nfreedb ID...:", freedbID

             IDlist.append(freedbID)

     return IDlist
==================================================

getIDs() liefert eine Liste der IDs aus allen CD-ROM Laufwerke zurück, mit der man eine 
freedb Abfrage starten kann...

Es wird das Paket pygame benötigt, damit man systemunabhängig auf das CD-ROM zugreifen 
kann: http://www.pygame.org/



Danke an alle die mir geholfen haben


-- 
Genrich