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