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

genrich Genrich at gmx.net
Die Nov 9 15:47:55 CET 2004


Diez B. Roggisch schrieb:
> Du kannst das natuerlich versuchen - aber ich denke da kannst du unter 
> Umstaenden mal nen Frame danebenlangen, und dann wars das. Aber das laesst 
> sich nur empirisch nachpruefen.

Also ich hab mal ein Test mit der "Depeche Mode" - "Speak & Spell" gemacht:

  Nr.   Länge
--------------------------
   0    226 sek    0 Frames
   1    138 sek   25 Frames
   2    237 sek   63 Frames
   3    187 sek   25 Frames
   4    255 sek   57 Frames
   5    165 sek   40 Frames
   6    284 sek   28 Frames
   7    277 sek   62 Frames
   8    264 sek   45 Frames
   9    155 sek    5 Frames
  10    224 sek   58 Frames
  11    243 sek   65 Frames
  12    245 sek   37 Frames
  13    226 sek   63 Frames
  14    188 sek   65 Frames
  15    404 sek   12 Frames

TotalZeit: 279500 Frames
TotalZeit: 3726.66666667 Sek

RAW discID..: -1102853104
freedb ID...: be43cc10


Ich hab die Anzahl der Frames mit EAC verglichen und die Stimmen... Dennoch passt die ID 
leider nicht :(



Hier das aktuelle Skript:
========================================================
from pygame import cdrom

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


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


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

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

     TrackAnzahl = cd_object.get_numtracks()

     print "\n Nr.   Länge"
     print "--------------------------"

     if TrackAnzahl!=0:

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

             nurSek = int( track_length )
             Frames = int( round( (track_length - nurSek) * 75 ) )

             print " %2d   %4d sek   %2d Frames" % (i, nurSek, Frames)

             TotalSek += track_length
             TotalFrames += (nurSek * 75) + Frames

             checksum += cddb_sum(nurSek)

         print "\nTotalZeit:",TotalFrames,"Frames"
         print "TotalZeit:",TotalSek,"Sek"

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

         print "\nRAW discID..:", RAWdiscID
         print "freedb ID...: %08lx" % RAWdiscID
========================================================



-- 
Genrich