Seite 2 von 4

Verfasst: 18.12.2007 11:38
von Rings
Ich kling mich mal in diesen thread ein, da ich auch für mein
eigenes Projekt diese möglichkeiten ausloten wollte.
(abfrage der freedb datenbank, sowie späteres automatisches laden von
Bildern der Covers aus dem Inet, dazu sind interpret und album wichtig.)

hier mein bisheriger code:

Code: Alles auswählen

Structure Struc_CD_Info
 DiscId.s
 Author.s
 Album.s
 Genre.s
 Year.s
 title.s[31]
EndStructure 
Global CD.Struc_CD_Info

Structure CON_THREAD
   CID.l
   *IP
   Port.l
EndStructure

If InitNetwork() = 0
   MessageRequester("Error", "No Network valid Stack found", 0)
   End
EndIf

Procedure OpenNetworkConnectionThread(*COM.CON_THREAD)
   Protected ConnectionID.l

   ConnectionID = OpenNetworkConnection(PeekS(*COM\IP), *COM\Port)
   If ConnectionID = 0
      *COM\CID = -1
   Else
      *COM\CID = ConnectionID
   EndIf

EndProcedure

Procedure.s IsEntry(Entry.s,Zeile.s)
 Entry +"="
 If Left(UCase(Zeile),Len(Entry))=UCase(Entry) 
  ProcedureReturn Right(Zeile,Len(Zeile)-Len(Entry))
 EndIf
 
EndProcedure
Procedure ScanFreeDBResult(Content.s)
 Repeat 
  Zeile.s = StringField(Content.s, i, Chr(10))
  i+1
  
  Entry.s="discid":If IsEntry(entry,Zeile.s)<>"":cd\discid + IsEntry(entry,Zeile):EndIf
  
  Entry.s="dtitle":
  If IsEntry(entry,Zeile.s)<>""
   
   cd\Author + IsEntry(entry,Zeile)
   p=FindString(cd\Author,"/",1)
   If p
    cd\album=Right(cd\Author ,Len(cd\Author)-p) 
    cd\Author =Left(cd\Author ,p-1)
   EndIf 
  EndIf
  
  Entry.s="dgenre":If IsEntry(entry,Zeile.s)<>"":cd\genre + IsEntry(entry,Zeile):EndIf
  Entry.s="dyear":If IsEntry(entry,Zeile.s)<>"":cd\Year + IsEntry(entry,Zeile):EndIf
  
  For T=1 To 30
   Entry.s="ttitle"+Str(T):If IsEntry(entry,Zeile.s)<>"":cd\title[t]+ IsEntry(entry,Zeile):EndIf
  Next

Until Zeile.s=""
EndProcedure

Procedure Main()
   Protected ConVar.CON_THREAD, Connected.l, HttpHeader.s, *Buffer, Received.s, Recv.l
   Protected Referer.s, UserAgent.s

   OpenWindow(0, 0, 0, 450, 340, "Test", #PB_Window_SystemMenu)
   CreateGadgetList(WindowID(0))
   ;StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+lscat+&hello=test+localhost+Purebasic+4.10&proto=5")
   StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+Read+rock+9f0e010c&hello=test+localhost+Purebasic+4.10&proto=5")
   ButtonGadget(1, 360, 5, 80, 20, "Send")
   EditorGadget(2, 5, 35, 435, 300, #PB_Editor_ReadOnly)

   HttpHeader = "GET {HTTPGETCOMMAND} HTTP/1.0" + #CRLF$
   HttpHeader + "Referer: " + Referer           + #CRLF$
   HttpHeader + "User-Agent: " + UserAgent      + #CRLF$
   HttpHeader + #CRLF$ + #CRLF$

   ConVar\IP   = @"freedb.freedb.org"
   ConVar\Port = 80
   *Buffer     = AllocateMemory(8192)

   Repeat
      Select WaitWindowEvent(10)
         Case #PB_Event_CloseWindow
            Break
         Case #PB_Event_Gadget
            Select EventGadget()
               Case 0
                  If EventType() = #PB_EventType_Change
                     If GetGadgetText(0)
                        DisableGadget(1, 0)
                     Else
                        DisableGadget(1, 1)
                     EndIf
                  EndIf
               Case 1
                  ConVar\CID = 0
                  Connected  = 0
                  CreateThread(@OpenNetworkConnectionThread(), @ConVar)
                  ClearGadgetItemList(2)
                  DisableGadget(0, 1)
                  DisableGadget(1, 1)
            EndSelect
      EndSelect
      If Connected = 0 And ConVar\CID <> 0
         Connected = 1
         If ConVar\CID <> -1
            SendNetworkString(ConVar\CID, ReplaceString(HttpHeader, "{HTTPGETCOMMAND}", GetGadgetText(0)))
         Else
            AddGadgetItem(2, -1, "Unable to reach Host")
            DisableGadget(0, 0)
            DisableGadget(1, 0)
         EndIf
      EndIf
      If ConVar\CID < -1 Or ConVar\CID > 0
         Select NetworkClientEvent(ConVar\CID)
            Case #PB_NetworkEvent_Data
               Recv = ReceiveNetworkData(ConVar\CID, *Buffer, 8192)
               If Recv > 0
                  Received + PeekS(*Buffer, Recv)
                  If Right(Received, 3) = "." + #CR$ + #LF$
                     AddGadgetItem(2, -1, Received)
                  
                     ScanFreeDBResult(Received)
                    Debug "CD-ID="+ cd\discid 
                    Debug "Interpret="+cd\Author
                    Debug "Album="+cd\Album
                    Debug "Genre="+cd\genre 
                    Debug "Year="+cd\Year
                    For T=1 To 30
                     If cd\title[t]<>""
                      Debug "Track-"+Str(T)+"=" + cd\title[t]
                     EndIf
                    Next 
                     
                     Received = ""
                     DisableGadget(0, 0)
                     DisableGadget(1, 0)
                     CloseNetworkConnection(ConVar\CID)
                     ConVar\CID = 0
                  EndIf
               EndIf
         EndSelect
      EndIf

   ForEver

   If ConVar\CID < -1 Or ConVar\CID > 0
      CloseNetworkConnection(ConVar\CID)
   EndIf
   FreeMemory(*Buffer)

EndProcedure

Main() 

Verfasst: 18.12.2007 14:11
von HeX0R
Noch a weng nachgebessert:
-Thread wird vor dem Ende der Prozedur gekillt, falls er noch rennt (hier auf Arbeit z.B. dauert das 10 Sek. bis er merkt, dass er ohne Proxy nicht rauskommt).
-WaitWindowEvent() nur im Bedarfsfall mit Timeout bestückt.
An Rings'ss' (<- extra für vtut sämtliche Kombinationen) Code hab ich nix geändert.

Code: Alles auswählen

Structure Struc_CD_Info
	DiscId.s
	Author.s
	Album.s
	Genre.s
	Year.s
	title.s[31]
EndStructure
Global CD.Struc_CD_Info

Structure CON_THREAD
	CID.l
	*IP
	Port.l
	ThreadID.l
EndStructure

If InitNetwork() = 0
	MessageRequester("Error", "No Network valid Stack found", 0)
	End
EndIf

Procedure OpenNetworkConnectionThread(*COM.CON_THREAD)
	Protected ConnectionID.l

	ConnectionID = OpenNetworkConnection(PeekS(*COM\IP), *COM\Port)
	If ConnectionID = 0
		*COM\CID = -1
	Else
		*COM\CID = ConnectionID
	EndIf
	*COM\ThreadID = 0

EndProcedure

Procedure.s IsEntry(Entry.s,Zeile.s)
	Entry +"="
	If Left(UCase(Zeile),Len(Entry))=UCase(Entry)
		ProcedureReturn Right(Zeile,Len(Zeile)-Len(Entry))
	EndIf

EndProcedure
Procedure ScanFreeDBResult(Content.s)
	Repeat
		Zeile.s = StringField(Content.s, i, Chr(10))
		i+1

		Entry.s="discid":If IsEntry(entry,Zeile.s)<>"":cd\discid + IsEntry(entry,Zeile):EndIf

		Entry.s="dtitle":
		If IsEntry(entry,Zeile.s)<>""

			cd\Author + IsEntry(entry,Zeile)
			p=FindString(cd\Author,"/",1)
			If p
				cd\album=Right(cd\Author ,Len(cd\Author)-p)
				cd\Author =Left(cd\Author ,p-1)
			EndIf
		EndIf

		Entry.s="dgenre":If IsEntry(entry,Zeile.s)<>"":cd\genre + IsEntry(entry,Zeile):EndIf
		Entry.s="dyear":If IsEntry(entry,Zeile.s)<>"":cd\Year + IsEntry(entry,Zeile):EndIf

		For T=1 To 30
			Entry.s="ttitle"+Str(T):If IsEntry(entry,Zeile.s)<>"":cd\title[t]+ IsEntry(entry,Zeile):EndIf
		Next

	Until Zeile.s=""
EndProcedure

Procedure Main()
	Protected ConVar.CON_THREAD, Connected.l = -1, HttpHeader.s, *Buffer, Received.s, Recv.l
	Protected Referer.s, UserAgent.s

	OpenWindow(0, 0, 0, 450, 340, "Test", #PB_Window_SystemMenu)
	CreateGadgetList(WindowID(0))
	;StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+lscat+&hello=test+localhost+Purebasic+4.10&proto=5")
	StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+Read+rock+9f0e010c&hello=test+localhost+Purebasic+4.10&proto=5")
	ButtonGadget(1, 360, 5, 80, 20, "Send")
	EditorGadget(2, 5, 35, 435, 300, #PB_Editor_ReadOnly)

	HttpHeader = "GET {HTTPGETCOMMAND} HTTP/1.0" + #CRLF$
	HttpHeader + "Referer: " + Referer           + #CRLF$
	HttpHeader + "User-Agent: " + UserAgent      + #CRLF$
	HttpHeader + #CRLF$ + #CRLF$

	ConVar\IP   = @"freedb.freedb.org"
	ConVar\Port = 80
	*Buffer     = AllocateMemory(8192)

	Repeat
		Select WaitWindowEvent(Connected)
			Case #PB_Event_CloseWindow
				Break
			Case #PB_Event_Gadget
				Select EventGadget()
					Case 0
						If EventType() = #PB_EventType_Change
							If GetGadgetText(0)
								DisableGadget(1, 0)
							Else
								DisableGadget(1, 1)
							EndIf
						EndIf
					Case 1
						If ConVar\ThreadID
							KillThread(ConVar\ThreadID)
						EndIf
						ConVar\CID      = 0
						Connected       = 15
						ConVar\ThreadID = CreateThread(@OpenNetworkConnectionThread(), @ConVar)
						ClearGadgetItemList(2)
						DisableGadget(0, 1)
						DisableGadget(1, 1)
				EndSelect
		EndSelect
		If Connected = 15 And ConVar\CID <> 0
			If ConVar\CID <> -1
				SendNetworkString(ConVar\CID, ReplaceString(HttpHeader, "{HTTPGETCOMMAND}", GetGadgetText(0)))
				Connected = 10
			Else
				AddGadgetItem(2, -1, "Unable to reach Host")
				DisableGadget(0, 0)
				DisableGadget(1, 0)
				Connected = -1
			EndIf
		EndIf
		If ConVar\CID < -1 Or ConVar\CID > 0
			Select NetworkClientEvent(ConVar\CID)
				Case #PB_NetworkEvent_Data
					Recv = ReceiveNetworkData(ConVar\CID, *Buffer, 8192)
					If Recv > 0
						Received + PeekS(*Buffer, Recv)
						If Right(Received, 3) = "." + #CRLF$
							AddGadgetItem(2, -1, Received)

							ScanFreeDBResult(Received)
							Debug "CD-ID="+ cd\discid
							Debug "Interpret="+cd\Author
							Debug "Album="+cd\Album
							Debug "Genre="+cd\genre
							Debug "Year="+cd\Year
							For T=1 To 30
								If cd\title[t]<>""
									Debug "Track-"+Str(T)+"=" + cd\title[t]
								EndIf
							Next

							Received = ""
							DisableGadget(0, 0)
							DisableGadget(1, 0)
							CloseNetworkConnection(ConVar\CID)
							ConVar\CID = 0
							Connected  = -1
						EndIf
					EndIf
			EndSelect
		EndIf

	ForEver

	If ConVar\CID < -1 Or ConVar\CID > 0
		CloseNetworkConnection(ConVar\CID)
	ElseIf ConVar\ThreadID
		KillThread(ConVar\ThreadID)
	EndIf
	FreeMemory(*Buffer)

EndProcedure

Main()

Verfasst: 18.12.2007 15:08
von Rings
so, nun mal experiementell auch die länge ermitteln der
einzelnen tracks.

Code: Alles auswählen

Structure Struc_CD_Info
   DiscId.s
   Author.s
   Album.s
   AlbumLength.l
   Genre.s
   Year.s
   title.s[31]
   titleFrameoffset.l[31]
   titlelength.l[31]
   
EndStructure
Global CD.Struc_CD_Info

Structure CON_THREAD
   CID.l
   *IP
   Port.l
   ThreadID.l
EndStructure

If InitNetwork() = 0
   MessageRequester("Error", "No Network valid Stack found", 0)
   End
EndIf

Procedure OpenNetworkConnectionThread(*COM.CON_THREAD)
   Protected ConnectionID.l

   ConnectionID = OpenNetworkConnection(PeekS(*COM\IP), *COM\Port)
   If ConnectionID = 0
      *COM\CID = -1
   Else
      *COM\CID = ConnectionID
   EndIf
   *COM\ThreadID = 0

EndProcedure

Procedure.s IsEntry(Entry.s,Zeile.s)
   Entry +"="
   If Left(UCase(Zeile),Len(Entry))=UCase(Entry)
      ProcedureReturn Right(Zeile,Len(Zeile)-Len(Entry))
   EndIf

EndProcedure
Procedure ScanFreeDBResult(Content.s)
   Repeat
      Zeile.s = StringField(Content.s, i, Chr(10))
      i+1

      Entry.s="discid":If IsEntry(entry,Zeile.s)<>"":cd\discid + IsEntry(entry,Zeile):EndIf

      Entry.s="dtitle":
      If IsEntry(entry,Zeile.s)<>""

         cd\Author + IsEntry(entry,Zeile)
         p=FindString(cd\Author,"/",1)
         If p
            cd\album=Right(cd\Author ,Len(cd\Author)-p)
            cd\Author =Left(cd\Author ,p-1)
         EndIf
      EndIf

      Entry.s="dgenre":If IsEntry(entry,Zeile.s)<>"":cd\genre + IsEntry(entry,Zeile):EndIf
      Entry.s="dyear":If IsEntry(entry,Zeile.s)<>"":cd\Year + IsEntry(entry,Zeile):EndIf

      For T=1 To 30
         Entry.s="ttitle"+Str(T):If IsEntry(entry,Zeile.s)<>"":cd\title[t]+ IsEntry(entry,Zeile):EndIf
      Next
      
      
      
      ;get complete length of cd
      If Left(Zeile,Len("# Disc length:"))= "# Disc length:" 
       temp.s=Right(Zeile,Len(Zeile)-Len("# Disc length:"))
       p=FindString(temp,"seconds",1)
       If p
        temp=Trim(Left(temp,p-1))
        cd\Albumlength=Val(temp) ;in seconds
        EndIf
       ;now calculate complete length of tracks
        For p=1 To StartTrackoffset
        
          d.d=cd\titleFrameoffset[p+1]-cd\titleFrameoffset[p]
          d=d/75.2
          Debug Str(p)+":"+Str(d) 
          If d<0 
           ;last entry correcting
           d=(cd\Albumlength*75.2)-cd\titleFrameoffset[p]
           d=d/75.2
          EndIf
          cd\titlelength[p]=d
        Next
        StartTrackoffset=0
       EndIf
     
      If Left(Zeile,Len("# Track frame offsets:"))="# Track frame offsets:"
       StartTrackoffset=1
      EndIf
      If StartTrackoffset>0 
       If Left(Zeile,Len("#        "))="#        "
        temp=Right(Zeile,Len(zeile)-Len("#        "))
        If Trim(temp)<>""
         l=Val(temp)
         cd\titleFrameoffset[StartTrackoffset-1]=l
         StartTrackoffset +1 
        EndIf
       EndIf
      
      EndIf
       
; #        150
; #        21517
; #        45542
; #        66242
; #        88112
; #        127940
; #        152520
; #        176680
; #        194077
; #        219215
; #        225647
; #        241252
; #
; # Disc length: 3587 seconds

   Until Zeile.s=""
   
   
EndProcedure

Procedure Main()
   Protected ConVar.CON_THREAD, Connected.l = -1, HttpHeader.s, *Buffer, Received.s, Recv.l
   Protected Referer.s, UserAgent.s

   OpenWindow(0, 0, 0, 450, 340, "Test", #PB_Window_SystemMenu)
   CreateGadgetList(WindowID(0))
   ;StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+lscat+&hello=test+localhost+Purebasic+4.10&proto=5")
   StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+Read+rock+9f0e010c&hello=test+localhost+Purebasic+4.10&proto=5")
   ButtonGadget(1, 360, 5, 80, 20, "Send")
   EditorGadget(2, 5, 35, 435, 300, #PB_Editor_ReadOnly)

   HttpHeader = "GET {HTTPGETCOMMAND} HTTP/1.0" + #CRLF$
   HttpHeader + "Referer: " + Referer           + #CRLF$
   HttpHeader + "User-Agent: " + UserAgent      + #CRLF$
   HttpHeader + #CRLF$ + #CRLF$

   ConVar\IP   = @"freedb.freedb.org"
   ConVar\Port = 80
   *Buffer     = AllocateMemory(8192)

   Repeat
      Select WaitWindowEvent(Connected)
         Case #PB_Event_CloseWindow
            Break
         Case #PB_Event_Gadget
            Select EventGadget()
               Case 0
                  If EventType() = #PB_EventType_Change
                     If GetGadgetText(0)
                        DisableGadget(1, 0)
                     Else
                        DisableGadget(1, 1)
                     EndIf
                  EndIf
               Case 1
                  If ConVar\ThreadID
                     KillThread(ConVar\ThreadID)
                  EndIf
                  ConVar\CID      = 0
                  Connected       = 15
                  ConVar\ThreadID = CreateThread(@OpenNetworkConnectionThread(), @ConVar)
                  ClearGadgetItemList(2)
                  DisableGadget(0, 1)
                  DisableGadget(1, 1)
            EndSelect
      EndSelect
      If Connected = 15 And ConVar\CID <> 0
         If ConVar\CID <> -1
            SendNetworkString(ConVar\CID, ReplaceString(HttpHeader, "{HTTPGETCOMMAND}", GetGadgetText(0)))
            Connected = 10
         Else
            AddGadgetItem(2, -1, "Unable to reach Host")
            DisableGadget(0, 0)
            DisableGadget(1, 0)
            Connected = -1
         EndIf
      EndIf
      If ConVar\CID < -1 Or ConVar\CID > 0
         Select NetworkClientEvent(ConVar\CID)
            Case #PB_NetworkEvent_Data
               Recv = ReceiveNetworkData(ConVar\CID, *Buffer, 8192)
               If Recv > 0
                  Received + PeekS(*Buffer, Recv)
                  If Right(Received, 3) = "." + #CRLF$
                     AddGadgetItem(2, -1, Received)

                     ScanFreeDBResult(Received)
                     Debug "CD-ID="+ cd\discid
                     Debug "Interpret="+cd\Author
                     Debug "Album="+cd\Album
                     Debug "Genre="+cd\genre
                     Debug "Year="+cd\Year
                     Debug "Length="+Str(cd\Albumlength) + " seconds"
                     For T=1 To 30
                        If cd\title[t]<>""
                           Debug "Track-"+Str(T)+"=" + cd\title[t] + "  "+ Str(    cd\titlelength[t] ) +" sec."
                        EndIf
                     Next

                     Received = ""
                     DisableGadget(0, 0)
                     DisableGadget(1, 0)
                     CloseNetworkConnection(ConVar\CID)
                     ConVar\CID = 0
                     Connected  = -1
                  EndIf
               EndIf
         EndSelect
      EndIf

   ForEver

   If ConVar\CID < -1 Or ConVar\CID > 0
      CloseNetworkConnection(ConVar\CID)
   ElseIf ConVar\ThreadID
      KillThread(ConVar\ThreadID)
   EndIf
   FreeMemory(*Buffer)

EndProcedure

Main() 

Verfasst: 19.12.2007 09:52
von Rings
@alen: reicht das fürs erste ?
mich selbst würde noch interessieren wie du die ID der cd
ermittelst, so das ich mal andere cd's testen kann hier.

Verfasst: 19.12.2007 23:58
von alen
Rings hat geschrieben:reicht das fürs erste ?
mich selbst würde noch interessieren wie du die ID der cd
ermittelst, so das ich mal andere cd's testen kann hier.
@Rings:
Hallo Rings,

Klar reicht erstmal, das schon mehr Feedback als ich erwartet hatte, ich bin begeistert ! Das ganze muss ich nun noch sichten, verstehen und dann einbauen. Da ich bei Purebasic noch nicht so fit bin und noch übe, sehen meine Quellcodes nicht so komplex und effektiv aus aber sie funktionieren auch.

Hier habe ich mal meine derzeitige Version der DiscID Berechnung beigelegt.

Code: Alles auswählen

Global NewList StartTrackList()
Global NumberOfDrives = InitAudioCD()

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

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

Procedure.s CalcRawDiscID(StartTrackList()) 
  Counter = 1
  ForEach StartTrackList()
    track_length = AudioCDTrackLength(Counter)
    total_length + track_length
    CheckSum + SumDigits(StartTrackList())                
    Counter + 1
  Next
  
  Temp    = (CheckSum % $FF) << 24
  
  XX.s    = LCase(RSet(Hex(Temp), 2, "0"))               
  YYYY.s  = LCase(RSet(Hex(AudioCDLength()), 4, "0"))
  ZZ.s    = LCase(RSet(Hex(AudioCDTracks()), 2, "0"))
  
  RawDiscID.s = XX.s + YYYY.s + ZZ.s  
  ProcedureReturn RawDiscID.s
EndProcedure

Procedure CreateTrackList() 
  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.s = CalcRawDiscID(StartTrackList())
  
  Debug "*** DiscID ***"
  Debug RawDiscID
  Debug ""
  
  Debug "*** Startzeiten der Tracks ***"
  ForEach StartTrackList()
    Debug GetHourFormat(StartTrackList())
  Next
EndIf
Auch noch Danke an alle die sich hierfür interessieren und Tipps und Code beisteuern.

Grüße
Alen

Verfasst: 20.12.2007 11:34
von Rings
Danke dir, endlich hab ich sogar ne Funktion zur ID ermittlung
die ohne jegliche Api auskommt. Genial.
Und an alle anderen, so sollte Code-Sharing funktionieren ;)

Verfasst: 20.12.2007 13:54
von HeX0R
??
Seit wann gibts denn die AudioCD-Funktionen in PB ?
Hab ich die jetzt jahrelang überlesen, oder sind die doch etwas neuer ?

Verfasst: 20.12.2007 14:32
von Bisonte
HeX0R hat geschrieben:??
Seit wann gibts denn die AudioCD-Funktionen in PB ?
Hab ich die jetzt jahrelang überlesen, oder sind die doch etwas neuer ?
Die haste wohl jahrelang überlesen ;)

Naja zumindest das "native" abspielen ist schon länger möglich... ob das mit den AudioCDTrackLength() usw genauso ist, kann ich dir auch nicht sagen, habs nie benutzt ;)

@alen: könntest du die beschreibungen irgendwo hochladen ? bei freedb.org lassen sie sich nicht runterladen... (erledigt)

EditEdit : http://www.public.planetmirror.com/pub/freedb/misc/?fl= ist ein Mirror falls die DL-Links bei jemanden ebenfalls nicht funktionieren sollten

Verfasst: 20.12.2007 16:47
von Bisonte
Ich experimentiere hier an dem discid empfangen rum, aber ich bekomme immer nur die erste ID und trackdaten von freedb zurück, obwohl es mehrere CD's mit der ID gibt. Wie bau ich den Query an den Server so um damit der alle ID's und deren daten anzeigt, so wie auf der seite : http://www.freedb.org/freedb_discid_check.php ???

Die Sache mit den mehrfachen DiscIDs

Verfasst: 23.12.2007 00:02
von alen
Bisonte hat geschrieben:Ich experimentiere hier an dem discid empfangen rum, aber ich bekomme immer nur die erste ID und trackdaten von freedb zurück, obwohl es mehrere CD's mit der ID gibt. Wie bau ich den Query an den Server so um damit der alle ID's und deren daten anzeigt, so wie auf der seite : http://www.freedb.org/freedb_discid_check.php ???
@Bisonte:

Hei Bisonte,

so wie ich das verstanden habe, ist das kein Problem des Query. Meine Beobachtungen gehen in die Richtung das es in unterschiedlichen Genres die gleichen IDs zu finden sind. Das würde heissen man müsste für jedes Genre eine eigene Query erzeugen und jeden Treffer dann anzeigen oder weiterverarbeiten.

Ich denke wenn Du eine Query mit einer DiscID bei FreeDB über die erweiterte Suche im Web Interface machst, die zu mehreren Ergebnissen führt, wird in allen Genres danach gesucht und alle Ergebnisse angezeigt.

Ob es tatsächlich gleiche IDs im selben Genre gibt kann ich nicht sagen da ich so einen Fall noch nicht hatte. Die ID ist ja auch nur dann gleich wenn zufällig die Gesamtlänge und die Längen der Einzelstücke übereinstimmen.

Aber wie gesagt, ich hatte auch noch nicht alle theoretisch vorkommenden Fälle.

Grüße
Alen