Seite 4 von 4

Re: Interesse an Mitarbeit an Hobby Projekt ?

Verfasst: 23.01.2012 15:10
von ts-soft
jpd hat geschrieben:müsste eingentlich in Tipps und Tricks rein ..oder?
Sehr gute Idee :allright:
Einfach die funktionierenden aktuellen Proceduren zusammensuchen, den Link zur freedb.org dokumentation dazu,
unter Tipps und Tricks dann posten und es wird viele dankbare User geben :D

Gruß
Thomas

Re: Titel von AudioCDs von FreeDB.org holen & DiscID berechn

Verfasst: 24.01.2012 00:41
von Rebon
Die folgende Anpassung des Codes entstand durch den Versuch von mir den Fehler zu finden, bin aber nicht darauf gekommen. Habe die Anpassung bei Hex so vorgenommen, wie es jpd gelöst hatte.
Bei beispielsweise den Typendeklarationen bin ich mir aber überhaupt nicht sicher ob die so stimmen und ein Test, mit der ID einer Audio-CD bei freedb, funktionierte leider nicht(no results found).

Code: Alles auswählen

EnableExplicit
Global NewList StartTrackList(), NumberOfDrives.i = InitAudioCD(), RawDiscID.s

Procedure.s GetHourFormat(LengthInSeconds)
  Protected Minutes.i = LengthInSeconds / 60, Seconds.i = LengthInSeconds - Minutes * 60, Null.s = ""
  If Seconds < 10
    Null = "0"
  EndIf
  ProcedureReturn RSet(Str(Minutes),2,"0")+":" + Null + Str(Seconds)
EndProcedure

Procedure.l SumDigits(numbers)
  Protected qs.l
  While numbers > 0
    qs = qs + (numbers % 10)
    numbers = numbers / 10
  Wend
  ProcedureReturn qs
EndProcedure

Procedure.s CalcRawDiscID(List StartTrackList())
  Protected Counter.i = 1, track_length.i, total_length.i, CheckSum.i, Temp.q, XX.s = "", YYYY.s = "", ZZ.s = ""
  ForEach StartTrackList()
    track_length = AudioCDTrackLength(Counter)
    total_length + track_length
    CheckSum + SumDigits(StartTrackList())               
    Counter + 1
  Next

  Temp    = (CheckSum % $FF) << 24

  XX    = LCase(RSet(Hex(Temp,#PB_Quad), 2, "0"))               
  YYYY  = LCase(RSet(Hex(AudioCDLength(),#PB_Quad), 4, "0"))
  ZZ    = LCase(RSet(Hex(AudioCDTracks(),#PB_Quad), 2, "0"))

  RawDiscID = XX + YYYY + ZZ
  ProcedureReturn RawDiscID
EndProcedure

Procedure CreateTrackList()
  Protected Drive.i, NumTracks.i, Track.i, StartTimeTrack.i
  If NumberOfDrives > 0
    For Drive = 1 To NumberOfDrives
      UseAudioCD(Drive-1)
      If AudioCDTracks() > 0
        NumTracks     = AudioCDTracks()
        InsertElement(StartTrackList())
        StartTrackList() = 2
       
        For Track = 1 To NumTracks         
          StartTimeTrack = StartTimeTrack + AudioCDTrackLength(Track)
          AddElement(StartTrackList())
          StartTrackList()  = StartTimeTrack
        Next
       
        LastElement(StartTrackList())
        DeleteElement(StartTrackList())     
      EndIf
    Next
  EndIf
EndProcedure

If NumberOfDrives = 0
  MessageRequester("Fehler", "Keine CD-Audio Laufwerke gefunden", 0)
  End
Else
  ClearList(StartTrackList())
  CreateTrackList()

  RawDiscID = CalcRawDiscID(StartTrackList())

  Debug "*** DiscID ***"
  Debug RawDiscID
  Debug ""

  Debug "*** Startzeiten der Tracks ***"
  ForEach StartTrackList()
    Debug GetHourFormat(StartTrackList())
  Next
EndIf

Re: Titel von AudioCDs von FreeDB.org holen & DiscID berechn

Verfasst: 24.01.2012 13:58
von jpd
Hallo Rebon,

habe auf Freedb eine disc id von einer meiner CD's verglichen und funktioniert fehlerfrei.

Fredb Disc ID Check

Mit freeRIP kriege ich die gleiche Disc-ID.

Ciao
jpd

Re: Titel von AudioCDs von FreeDB.org holen & DiscID berechn

Verfasst: 24.01.2012 17:54
von Rebon
Danke jpd für die Info. :allright:
Ich hatte gestern Nacht noch die Variable qs von Global in die Prozedur geschrieben, das war wohl der Hauptfehler, die Var wurde zuvor beim erneuten Aufruf von SumDigits() nicht zurückgesetzt. :oops: