| Autor |
Beitrag |
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 16.10.05 08:50
Hallo Leute !
Ich habe das Problem das Ich gerne von CDR's worauf sich Musikstücke befinden die Titel auslesen möchte.
Vieleicht weiss Jemand wie man das bewerkstelligen könnte.
Windows oder die Suche nach Dateien liefert Mir nur Track1.cda
usw. (Die Titel stehen auf der CDR) Nero oder CDEx liefert mir ja auch die Titel also müsst man ja irgendwie dort rankommen.
Hab grad gesehen das Ich den Beitrag ins falsche Thema eingestellt hab, vieleicht kanns ja jemand verschieben. Moderiert von Gausi: Topic aus Internet / Netzwerk verschoben am So 16.10.2005 um 10:57
Zuletzt bearbeitet von Blackheart666 am So 16.10.05 09:02, insgesamt 1-mal bearbeitet
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: So 16.10.05 09:00
Versuch es mal mit dem MediaPlayer von MS.
Hatt Mir auch geholfen bei einer CD, wo der WindowsExplorer nur die Extra Videodatei anzeigte, aber nicht die 13 Musiktitel.
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 16.10.05 09:09
Danke ! Nein so hatte Ich das nicht gemeint. Die Titel werden ansich schon richtig angezeigt also zb. sind 17 Titel auf der CDR werden aber nur mit Track1.cda bis 17 angezeigt.
Ich wollte das schon mit Delphi bewerkstelligen.
Wenn Ich die CDR mit CDex einlese zeigt er mir zb.
Titel 1 - ACDC_Highway_To_Hell usw.
Ich Denke mal das, das ähnlich ist wie bei MP3's das der Text zum Anfang oder am Ende der Datei angefügt wird - nur wie komm Ich da ran.
|
|
ManuelGS
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: So 16.10.05 09:25
such mal nach cddb - was anderes wird dir wohl nicht übrigbleiben.
_________________ "Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 16.10.05 09:43
cddb kann's meiner Ansicht auch nicht sein, das ist doch nur ein Abgleich mit der CD übers internet.
Die Titel hab Ich Ja per Hand selbst eingegeben.
Der Titel befindet sich als Text oder wie auch immer irgendwo auf der CD wenn Ich die CDR mit CDex öffne hab Ich sämtliche Titel innerhalb einer Sekunde.
|
|
ManuelGS
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: So 16.10.05 09:48
wo hast du die titel eingegeben?
_________________ "Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 16.10.05 09:56
Dann hast du eine CD mit CDText geschrieben. Viele Autoradios zeigen dann z.B. auch im Display den Titel an. Wie man den aisliest, weiss ich aber leider auch nicht. Aber vielleicht hilft das Stichwort CD-Text 
_________________ We are, we were and will not be.
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 16.10.05 09:59
Ich hab die CDR mit Nero gebrannt dort kann man doch dann Titel und Interpret angeben.
CD Text ist mir klar das ist ja das Problem.
Habs schon mit googeln probiert und... aber naja
Erst mal vielen Dank.
Ich lass die Frage erstmal offen vieleicht hatt ja noch jemand ne' Idee.
Nachtrag falls es wen Interessiert (Nur leider hilfts nichts).
CD-Text CDs enthalten in einem Subchannel eincodierte Text-Informationen über die CD und die einzelnen Tracks der CD.
CD-Text ist eine Erweiterung des bestehenden Red Book-Standards. Die CD-Text-Informationen sind innerhalb der Subchannels R bis W auf der AudioCD gespeichert (genauer gesagt in den Subchannels des Lead-In). Neben den naheliegenden Informationen über Interpret und Titelnamen können Komponist, Dirigent oder Sparte vermerkt werden.
Die acht Bits eines Frame-Kontrollbytes werden mit P, Q, R, S, T, U, V und W bezeichnet. Der Datenstrom aller P- bzw. Q-Bits eines Sektors wird als P- bzw. Q-Subchannel bezeichnet. Der sog. R-Thru-W-Channel vereinigt alle übrigen Subchannels
Der P-Subchannel gibt an, in welchen Abschnitten eines Tracks (bezogen auf Frames) sich Musik und andere Daten befinden. Der Q-Subchannel dient im Lead-in-Bereich einer CD zur Speicherung ihres Inhaltsverzeichnisses (Table of Content) und bei CD-DA Discs zur Angabe der relativen Zeit innerhalb eines Tracks und der absoluten Zeitangabe auf der CD .
Die Subchannels R bis W können dazu benutzt werden, neben den eigentlichen Nutzdaten der Frames zusätzliche Daten zu speichern. Diese Subchannels sind nur in Audio-Tracks ansprechbar und enthalten auf Audio-CDs z. B. Graphik- oder MIDI-Informationen. Der Datenstrom dieser Subchannels ist unterteilt in Blöcke und erfährt eine Fehlerbehandlung durch Reed- Solomon. Weil die Datenrate dieser Subchannels zusammengenommen lediglich 44,1 kBit/s beträgt, ist die Einbindung von Graphik eingeschränkt .
Audio-CDs enthalten neben den eigentlichen Musikdaten noch zusätzliche Daten, die sog. Subchannels. Es existieren insgesamt acht dieser Subchannels (P,Q,R,S,T,U,V,W), von denen CD-TEXT lediglich zwei benötigt: R und W. Diese beiden Subchannels werden dabei nur im Bereich des "Leadin" (dem Bereich vor den eigentlichen Daten) beschrieben, der Rest kann für andere Zwecke genutzt werden. Die Nutzung dieser Subchanels basiert übrigens auf dem sog. ITTS- Verfahren. Theoretisch sollte jeder CD-Recorder in der Lage sein, CD-TEXT zu schreiben. Es muß lediglich die Möglichkeit gegeben sein, die im RED BOOK spezifizierten Subchannels steuern zu können - der Rest wird von der Software erledigt. Jeder CD-Recorder muß diese Subchannels während eines Brenn- vorganges sowieso schreiben, die meisten füllen diesen Bereich jedoch leider nur mit Nullen auf.
|
|
Wishmaster
      
Beiträge: 34
|
Verfasst: Di 18.10.05 01:18
Hi
Du kannst das mit Bass.dll+BassCD.dll machen
oder
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137:
| unit CDAtrack;
interface
uses Classes, SysUtils, IniFiles;
type TCDAtrack = class(TObject) private FValid: Boolean; FTitle: WideString; FArtist: WideString; FAlbum: WideString; FDuration: Double; FTrack: Word; FPosition: Double; procedure FResetData; public constructor Create; function ReadFromFile(const FileName: string): Boolean; property Valid: Boolean read FValid; property Title: WideString read FTitle; property Artist: WideString read FArtist; property Album: WideString read FAlbum; property Duration: Double read FDuration; property Track: Word read FTrack; property Position: Double read FPosition; end;
implementation
type TrackData = packed record RIFFHeader: array [1..4] of Char; FileSize: Integer; CDDAHeader: array [1..8] of Char; FormatSize: Integer; FormatID: Word; TrackNumber: Word; Serial: Integer; PositionHSG: Integer; DurationHSG: Integer; PositionRB: Integer; DurationRB: Integer; Title: string; Artist: string; Album: string; end;
function ReadData(const FileName: string; var Data: TrackData): Boolean; var Source: TFileStream; CDData: TIniFile; begin Result := false; try Source := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); Source.Read(Data, 44); Source.Free; Result := true; CDData := TIniFile.Create('cdplayer.ini'); Data.Title := CDData.ReadString(IntToHex(Data.Serial, 2), IntToStr(Data.TrackNumber), ''); Data.Artist := CDData.ReadString(IntToHex(Data.Serial, 2), 'artist', ''); Data.Album := CDData.ReadString(IntToHex(Data.Serial, 2), 'title', ''); CDData.Free; except end; end;
function IsValid(const Data: TrackData): Boolean; begin Result := (Data.RIFFHeader = 'RIFF') and (Data.CDDAHeader = 'CDDAfmt '); end;
procedure TCDAtrack.FResetData; begin FValid := false; FTitle := ''; FArtist := ''; FAlbum := ''; FDuration := 0; FTrack := 0; FPosition := 0; end;
constructor TCDAtrack.Create; begin inherited; FResetData; end;
function TCDAtrack.ReadFromFile(const FileName: string): Boolean; var Data: TrackData; begin FResetData; FillChar(Data, SizeOf(Data), 0); Result := ReadData(FileName, Data); if Result and IsValid(Data) then begin FValid := true; FTitle := Data.Title; FArtist := Data.Artist; FAlbum := Data.Album; FDuration := Data.DurationHSG / 75; FTrack := Data.TrackNumber; FPosition := Data.PositionHSG / 75; end; end;
end. |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| private CDAtrack: TCDAtrack;
procedure TMainForm.FormCreate(Sender: TObject); begin CDAtrack := TCDAtrack.Create;
procedure TMainForm.FileListChange(Sender: TObject); begin ClearAll; if FileList.FileName = '' then exit; if FileExists(FileList.FileName) then if CDAtrack.ReadFromFile(FileList.FileName) then if CDAtrack.Valid then begin ValidFormatText.Text := 'Yes'; TitleText.Text := CDAtrack.Title; ArtistText.Text := CDAtrack.Artist; AlbumText.Text := CDAtrack.Album; DurationText.Text := FormatFloat('.000', CDAtrack.Duration) + ' sec.'; TrackText.Text := IntToStr(CDAtrack.Track); PositionText.Text := FormatFloat('.000', CDAtrack.Position) + ' sec.'; end else ValidFormatText.Text := 'No' else ShowMessage('Can not read track data: ' + FileList.FileName) else ShowMessage('The file does not exist: ' + FileList.FileName); end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin CDAtrack.Free; end; |
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Di 18.10.05 09:44
@ Wishmaster vielen Dank für die Mühe ! Ist schon häftiger Stoff, habs mal probiert nachzuvollziehen.
Die Unit CDAtrack erstellt und eingebunden aber es kamen nur Fehlermeldungen ala undefinierte Bezeichner usw. Danach hab Ich's mal alles in ein, Projekt geschrieben kamen zwar keine Fehlermeldungen mehr aber getan hat sich auch nichts.
Trotzdem Vielen Dank !!!! Ich bleib mal dran vieleicht krieg Ichs ja noch gebacken.
Die Bass Dll's hatte Ich mir schon mal runtergeladen und einiges probiert ist aber meiner Ansicht auch ziehmlich schwer.
Die Hilfe von Bass ist nicht grad berauschend find Ich.
Na Dann nochmals Dank !
|
|
taipan84
      
Beiträge: 17
|
Verfasst: Fr 28.10.05 20:05
@Blackheart:
Bist du schon weitergekommen? Bei mir funktioniert die CDAtrack.pas auch nicht, bekomme nur leere Strings raus...
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 28.10.05 21:07
Hallo !
ValidFormatText, DurationText, TrackText, PositionText zeigt er mir an - Titel, Artist und Album nicht.
Also funktionieren wird es, Ich steig bloß noch nicht richtig durch.
Titel Artist und Album sollen Ja wenn mich nicht alles täuscht aus der Ini gelesen werden, die wird aber garnicht angelegt.
Vieleicht steigt ja wer anders da durch und hilft uns mal auf die Sprünge.
|
|
taipan84
      
Beiträge: 17
|
Verfasst: Sa 29.10.05 13:16
Nein, es muss keiner da durch steigen, denn es wird nicht funktionieren, Titel, Artist oder Album durch diese Unit zu ermitteln. Das liegt schlichtweg daran, dass diese Infos woanders gespeichert werden als die Informationen über Positionen, Dauern, etc., und zwar in den SubChannels, afaik.
Die Sache mit der "cdplayer.ini" hat was anderes zu bedeuten:
Es wird nur versucht, Titel, Artist und Album aus einer INI-Datei zu lesen, wenn es diese schon gibt und sie genau die gewünschten Informationen über Interpret etc. enthält. Dazu wird von der CD die Seriennummer gelesen und als Section in der INI-Datei gesucht. Da wir aber keine INI-Datei mit den Titelnamen haben, hilft uns diese Unit dahingehend nicht weiter.
In anderen Worten: der Beitrag von Wishmaster war ein Schuss ins Leere; wir wollen ja den CD-Text lesen, aber die gepostete Unit hat nichts mit dem CD-Text zu tun...
Da werden wir uns wohl was anderes suchen müssen.
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 29.10.05 14:11
Naja ganz so seh Ich das nicht.
Wishmaster hat da schon eine Lösung aufgezeigt die auf alle Fälle in die richtige Richtung geht.
Auf jeden Fall wird ja schon mal von der CDR was ausgelesen,
vieleicht erwischt man gerade nicht den gewissen SubChannel den man gerade benötigt um Titel usw. auszulesen.
Die Daten sind ja devinitiv auf der CDR drauf - nur das auslesen....
Das was Du mit der Ini meinst kann Ich nachvollziehen, das geht in Richtung CDDB was vorher angesprochen wurde aber ja leider bei CDRS nicht in Frage kommt.
|
|
taipan84
      
Beiträge: 17
|
Verfasst: So 30.10.05 21:04
Wollte damit ja nicht sagen, dass der Beitrag von Wishmaster oder seine Intention schlecht war
Find's nett, dass er versucht zu helfen!
Wir befinden uns trotzdem aufm falschen Weg, der CD-Text hat absolut nix mit den o.g. Auslese-Infos zu tun. Und der Lesevorgang für CD-Text-Informationen muss völlig anders gelesen, decodiert werden, etc. - hab mich dahingehend informiert.
Zwischen "aus einer Datei lesen" ( .cda) und "SubChannels lesen" liegen noch Welten, leider ist das nicht einmal der Ansatz, um an den CD-Text zu kommen. Da müsste auf ganz anderer Ebene gelesen werden. Ich befürchte leider, dass das für uns nix gibt mit dem CD-Text - es sei denn wir nähmen kostenpflichtige Komponenten mit ins Spiel.
Aber mit den anderen Infos wie Track-Länge kann ich immerhin was anfangen, ich lass mein kleines Proggie einfach so wie es jetzt ist 
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 30.10.05 21:25
Ich werd mich mal in die Bass Knien die soll das alles können, nur die Hilfe ist nicht so berauschend.
Vieleicht wirds ja mal was.
|
|
|