Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   CDDB ID ohne wnaspi32.dll (https://www.delphipraxis.net/161850-cddb-id-ohne-wnaspi32-dll.html)

ATS3788 24. Jul 2011 14:32

CDDB ID ohne wnaspi32.dll
 
Hat jemand eine Idee wie ich eine CD ID für
einen CDDB Server auslesen kann
ich habe das mit der "CDRip122.dll" gemacht
und möchte eine Lösung ohne diese DLL finden.

Eigendlich langt es mir die CDToc auszulesen
Delphi-Quellcode:
var
t : PWCDTOC

  if WNASPI_Loaded
  then begin
    ReadCdTOC( CdRoms, CB_Laufwerke.ItemIndex, Toc, cdiAutoDetect );
  end
  else begin
 ///   sptiReadTOC( CdRoms, CB_Laufwerke.ItemIndex, t);
 //  ConvertTOC( t, Toc );
  end;
das fand ich im Project CDTyp
nur leider ist das was ich brauche ausgeklammert und
ich habe keine Ahnung wie ich PWCDTOC einlesen kann

rollstuhlfahrer 24. Jul 2011 16:33

AW: CDDB ID ohne wnaspi32.dll
 
Bass.dll in Kombination mit BassCD.dll geht auch. Nur stellt sich dann vielleicht die Frage, ob das nicht auch einfacher geht.

Bernhard

Luckie 24. Jul 2011 16:40

AW: CDDB ID ohne wnaspi32.dll
 
Warum ohne die DLL? Was stört dich daran?

rollstuhlfahrer 24. Jul 2011 16:48

AW: CDDB ID ohne wnaspi32.dll
 
Kommt immer ganz auf den Verwendungszweck drauf an. Wenn man dann die CD noch abspielen will oder encodieren will, dann auf jeden Fall. Wenn man jetzt aber "nur" die CD-ID auslesen will, dann finde ich, dass eine komplette Audio-Bibliothek, deren Hauptmerkmal auf dem Abspielen und Aufnehmen liegt und nur als zusätzliches Feature die CD-ID noch berechnen kann, ein klein wenig Overkill ist.

Meine Meinung. Dies soll nicht heißen, dass ich es nicht trotzdem exakt genau so machen würde.

Bernhard

ATS3788 24. Jul 2011 16:55

AW: CDDB ID ohne wnaspi32.dll
 
Danke
Ich will aber nichts abspielen, ich möchte nur eine Datenbank
für CD schreiben, besser gesagt umschreiben.
Geht das ohne wnaspi32.dll , oder geht es nicht

Luckie 24. Jul 2011 16:58

AW: CDDB ID ohne wnaspi32.dll
 
Geht bestimmt auch ohne. Man muss nur den Funktionen der DLL implementieren. Mach dich mal kundig, wie man die DB abfragt.

rollstuhlfahrer 24. Jul 2011 16:59

AW: CDDB ID ohne wnaspi32.dll
 
Dann gibt es noch die Möglichkeit, die ID schnell selbst zu berechnen: http://en.wikipedia.org/wiki/CDDB#Ex...eDB.29_disc_ID (gerade gefunden)

Bernhard

ADD: Und für die Abfrage der CDDB gibt es im Internet sogar ein paar funktionsfähige Beispiele fertige Komponenten, die das können.

EWeiss 25. Jul 2011 04:30

AW: CDDB ID ohne wnaspi32.dll
 
Zitat:

Und für die Abfrage der CDDB gibt es im Internet sogar ein paar
So wie ich das verstanden habe braucht er die von seiner CD nicht diese vom Server.

Zitat:

für
einen CDDB Server auslesen
Für! Nicht von einem Server.

So wie mir bekannt ist greifen die alle indirekt auf die wnaspi32 zu.
Egal was du da nimmst akrip32, lame oder auch basscd

Was aber unter umständen funktionieren könnte.
mit der API GetVolumeInformation.. Kernel32.dll

Hier mal die Infos..
Habe es aus meinem Mediaplayer mal kopiert.

Code:
'volume CDID
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" _
    (ByVal lpRootPathName As String, _
    ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
    lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
    ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Code:
Public Function LeftZeroPad(s As String, n As Integer) As String
    If Len(s) < n Then
        LeftZeroPad = String$(n - Len(s), "0") & s
    Else
        LeftZeroPad = s
    End If
End Function
Code:
Public Function GetMediaInfo(ByVal DriveLetter As String) As String
    Dim sn As Long, sts As Long
    Dim cl As Long, fl As Long
    Dim vnb As String * 32
    Dim snb As String * 16

    'process errors
    On Error Resume Next

    'trim leading and trailing blanks and add colon
    m_DriveLetter = left$(Trim$(DriveLetter), 1) & ":"

    'get the CDID (volume serial number)
    sts = GetVolumeInformation(m_DriveLetter, vnb, 32, sn, cl, fl, snb, 16)
    If (sts > 0 And left$(snb, 4) = "CDFS") Then
        GetMediaInfo = LeftZeroPad(Hex$(sn), 8)
    End If
End Function
Sorry hab jetzt keinen bock das zu übersetzen.
Aber es sollte die Infos die du suchst zurück liefern.

PS:
Zitat:

Eigendlich langt es mir die CDToc auszulesen
Den Toc kannst du über drei verschiedene arten auslesen
  • SPTI
  • ASPI
  • MCI

Hier noch ein Ansatz!
http://www.delphipraxis.net/92525-post1.html

noch ein bildchen hehehehhee
gruss

rollstuhlfahrer 25. Jul 2011 10:33

AW: CDDB ID ohne wnaspi32.dll
 
Zitat:

Zitat von EWeiss (Beitrag 1113374)
Zitat:

Und für die Abfrage der CDDB gibt es im Internet sogar ein paar
So wie ich das verstanden habe braucht er die von seiner CD nicht diese vom Server.

Zitat:

für
einen CDDB Server auslesen
Für! Nicht von einem Server.

Jetzt bin ich auch mal gehässig: Wenn Titel-Informationen als Text auf der CD gespeichert sind, dann nennt sich das CD-Text. Dieser ist optional, muss also nicht existieren. Wenn man die Titel-Informationen jetzt haben will, gibt es 2 Möglichkeiten:

a) händisch eintippen (was der TE vermeiden will) - oder -
b) die CD-ID auslesen und von einem CDDB-Server (z.B. freedb) auslesen.

Der 2. Schritt, laut TE, ist erst die interne Verarbeitung der Daten in einer eigenen Datenbank. Diese interne Datenbank muss sich nicht nach den Richtlinien von CDDB orientieren.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz