Titel von AudioCDs von FreeDB.org holen & DiscID berechnen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Ich bekomme mit dem request immer nur eine ID... immer die erste. Wenn ich den gleichen Query im Browser benutze bekomme ich z.B. 2 ID's angezeigt.... das ist es was mich verwirrt...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Beitrag von alen »

Hallo Zusammen,

länger ist es her aber ich habe es mal wieder geschafft an diesen Thread anzuknüpfpen. Ich habe mal den Code von Rings (nachgebessert von HexOR) mal versucht in mein Projekt einzubauen.

Dabei habe ich noch Verständnisprobleme. Was ist das "{HTTPGETCOMMAND}" ? Was das für die Abfrage sein soll ist mir schon klar aber wo stammt dieses Gebilde her ? Es wird nirgends zusammengebaut oder definiert. Woher kennt Purebasic das ? Das gibt normale Online Hilfe mit F1 nicht her.

Ich merke das ich auch bei PB noch jede Menge lernen muss. Bitte um symbolischen Schlag auf den Hinterkopf falls ich es zu langsam kapiere oder die falschen Wissenquellen habe.

Grüße
Alen H. aus D.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Das gibs so auch nicht ... schau dir mal den Code etwas weiter unten an,
da gibs die folgende Zeile ... oder ähnlich, hab einfach einen der beiden
Codes schnell die Zeile kopiert :D :

Code: Alles auswählen

SendNetworkString(ConVar\CID, ReplaceString(HttpHeader, "{HTTPGETCOMMAND}", GetGadgetText(0)))
Kommst selbst drauf? :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Beitrag von alen »

Hallo @PMV,

jetzt blicke ich durch, das ist ein Platzhalter damit der HttpHeader String leserlicher bleibt, wird dann später ersetzt.

Ich bin doch wirklich nicht sofort drauf gekommen und habe es aus dem Quellcode nicht erkannt.

Danke für den Schlag auf den Hinterkopf. :oops:

Grüße
Alen
VisionA
Beiträge: 1
Registriert: 23.11.2008 13:56

Re: Die Sache mit den mehrfachen DiscIDs

Beitrag von VisionA »

hallo zusammen,

ich mache immer wieder den gleichen Fehler, fange an einem Problem zu programmieren an und plage mich, bevor ich in den PB Foren suche, ob nicht vor mir jemand das Rad schon erfunden hat.
So ging es mir auch mit dem Problem der FreeDB Abfrage, oh hätt' ich doch....

Trotzdem, hat jemand inzwischen eine Methode gefunden, wie man in FreeDB nach mehrfach eingetragenen DiscID's sucht,
ohne die Anfrage mit allen möglichen Genres zu wiederholen, oder führt daran kein Weg vorbei ?

mfG
VisionA
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Mein Quellcode funktioniert nicht mehr ?!?!

Beitrag von alen »

Hallo Zusammen,

nach langer Zeit packe ich wieder ein paar ehemalige Projekte an und merke dabei, dass der u.g. Quellcode unter Purebasic 4.60 nicht mehr funktionert.

Der Code ist 100% der den ich mal veröffentlicht hatte und der auch bei Purebasic 4.30 funktionierte. Die Berechnung der DiscID fällt irgendwo bei der Berechnung auf die Nase. Vielleicht hat jemand eine Idee was im Laufe der Purebasic Evolution verändert haben könnte. Ich sehe im Moment keinen Fehler.

Grüße
Alen
alen hat geschrieben:

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(List 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Interesse an Mitarbeit an Hobby Projekt ?

Beitrag von jpd »

Hallo Alen,

dein code funktionierte mit 4.20 einwandfrei danach mit 4.30 hat sich der befehl hex() geändert also wurde hexq() entfehrnt und dafür wurde hex mit parameter gesteuert.
auf jeden fall das problem ist an folgende procedure wenn temp als quad deklariert wird und hex die zu konvertierende zahl als quad behandelt dann tut's.

Ciao
jpd

Code: Alles auswählen

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

PB 5.10 Windows 7 x64
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Re: Interesse an Mitarbeit an Hobby Projekt ?

Beitrag von alen »

@jpd
Grüß Dich jpd,

das werde ich heute Abend direkt mal antesten. Hier in Köln habe ich kein PB dabei ;-)

Derzeit bin ich neuer Abteilung unterwegs und habe da noch nicht so alle Möglichkeiten.
Im Voraus schonmal vielen Dank fürs drüber schauen.

Grüße
Alen
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Interesse an Mitarbeit an Hobby Projekt ?

Beitrag von ts-soft »

@alen
Wäre nett, wenn Du den Thread Titel im ersten Posting anpasst. Hätte ich gewusst, das hier auch Tipps zu freedb.org enthalten
sind, hätte ich hier schon früher mitgelesen :wink:

Danke und Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Interesse an Mitarbeit an Hobby Projekt ?

Beitrag von jpd »

Hi Alen,

müsste eingentlich in Tipps und Tricks rein ..oder?

Grüße
jpd
PB 5.10 Windows 7 x64
Antworten