[Python-de] Re: systemunabhängiges Audio CD modul ?

genrich Genrich at gmx.net
Die Nov 9 17:32:57 CET 2004


Diez B. Roggisch schrieb:
>>Dennoch passt die ID leider nicht :(
> 
> Doch, tut sie wohl. Du musst be43cc10 in eine Zahl verwandeln .

Das kann es eigentlich nicht sein... Ich hab per Hand nach der CD gesucht... Es kommen nur 
folgende IDs in Frage:
d40e9010
db0e9210
d60e5910

Davon bin ich weit entfernt :(



Ich habe mit noch mal genau die Spezifikationen angeschaut:
http://www.freedb.org/modules.php?name=Sections&sop=viewarticle&artid=6

Ganz merkwürdig finde ich die berechnung von t:
	t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
	    ((cdtoc[0].min * 60) + cdtoc[0].sec);


Aber ich hab das versucht bei mit nachzubauen:
=======================================

from pygame import cdrom

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


def GetHMS(s):
     h,s = divmod(s,3600)
     m,s=divmod(s,60)
     return "%02.f:%02.f:%02.f" % (h, m, s)

def Sek_Frames(s):
     nurSek = int( s )
     Frames = int( round( (s - nurSek) * 75 ) )
     return nurSek, Frames


def cddb_sum(n):
     # cddb_sum(123456789) => 1+2+3+4+5+6+7+8+9 = 45
     ret = 0
     while n > 0:
         ret += (n % 10)
         n = n / 10
     return ret


def DiscID(cd_object):
     print "\n Nr.   Länge"
     print "--------------------------"

     checksum=0
     TotalFrames=0
     TotalSek=0
     for i in range(TrackAnzahl):
         track_length = cd_object.get_track_length(i)

         nurSek, Frames = Sek_Frames( track_length )
         checksum += cddb_sum(nurSek)

         print " %2d   %s.%2d Frames" % (i, GetHMS(nurSek), Frames)

         TotalSek += nurSek

     nurSek, Frames = Sek_Frames( TotalSek )
     print "\nTotalZeit:",nurSek,"sek"
     print "TotalZeit: %s.%d" % (GetHMS(nurSek),Frames)

     sek_LetzterTrack = Sek_Frames(cd_object.get_track_length(i))[0]
     sek_ErsterTrack  = Sek_Frames(cd_object.get_track_length(0))[0]

     t=sek_LetzterTrack - sek_ErsterTrack

     RAWdiscID=( checksum % 0xff << 24 | t << 8 | TrackAnzahl )



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()

     TrackAnzahl = cd_object.get_numtracks()

     if TrackAnzahl!=0:
         RAWdiscID = DiscID(cd_object)
         print "\nRAW discID..:", RAWdiscID
         print "freedb ID...: %08lx" % RAWdiscID

=======================================



Nun erhalte ich für die "Depeche Mode" - "Speak & Spell" die ID "be00b210"



-- 
Genrich