AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Codeprüfung/-vorschläge | Thema: MP3, ID-Infos
Thema durchsuchen
Ansicht
Themen-Optionen

Codeprüfung/-vorschläge | Thema: MP3, ID-Infos

Ein Thema von Techcrawler · begonnen am 20. Okt 2006 · letzter Beitrag vom 20. Okt 2006
 
Benutzerbild von Techcrawler
Techcrawler

Registriert seit: 14. Sep 2006
Ort: Neukirchen-Vluyn
40 Beiträge
 
Delphi 2006 Architect
 
#1

Codeprüfung/-vorschläge | Thema: MP3, ID-Infos

  Alt 20. Okt 2006, 09:48
Hi,
ich habe just for fun mal eine Unit zum extrahieren der ID-Infos aus MP3 Dateien geschrieben und es sieht so aus, als würde diese auch gut funktionieren.
Nun möchte ich gern mal das 'tausend-augen-prinzip' nutzen und euch mal bitten, dass ihr euch den Code mal anseht, ob da evtl. Fehler drin sind oder was ich noch verbessern kann. Das ganze bezieht sich bisher nur auf ID3v1 Tags, die ID3v2´s kommen später mit rein.
Ich danke allen, die sich die Mühe machen, im vorraus.
Der Delphicode ist die komplette .pas Datei.

Delphi-Quellcode:
unit mp3idvx;

interface

uses classes, SysUtils;

type
    TID3v1 = record
        Songtitel: string;
        Kuenstler: string;
        Album: string;
        Erscheinungsjahr: string;
        Kommentar: string;
        Genre: string;
    end;
    TMP3ID3vX = class
        private
        public
            function getID3v1Information(filenameWithPath: string; var ID3v1Infos: TID3v1): integer;
    end;

var
    clsMP3ID3vX: TMP3ID3vX;

implementation

function TMP3ID3vX.getID3v1Information(filenameWithPath: string; var ID3v1Infos: TID3v1): integer;
var
    fstream: TFileStream;
    buffer: string;
    i: integer;
begin
    // Stream öffnen
    fstream := TFileStream.Create(filenameWithPath,fmOpenRead or fmShareDenyNone);

    // Pufferlänge einstellen
    SetLength(buffer,128);

    // An den Anfang der ID3v1 Informationen gehen
    fstream.Seek(-128,soFromEnd);

    // 128 Bytes in den Puffer laden
    if (fstream.Read(buffer[1],128) < 128) then
    begin
        // Datenmenge reicht nicht für einlesen aus, Fehler
        result := -1;
        exit;
    end;

    // Freigeben des FileStreams, da nicht mehr benötigt
    fstream.Free;

    // Songtitel extrahieren
    ID3v1Infos.Songtitel := '';
    for i:=4 to 33 do
        ID3v1Infos.Songtitel := ID3v1Infos.Songtitel+buffer[i];

    // Künstler/Interpret extrahieren
    ID3v1Infos.Kuenstler := '';
    for i:=34 to 63 do
        ID3v1Infos.Kuenstler := ID3v1Infos.Kuenstler+buffer[i];

    // Albuminformationen extrahieren
    ID3v1Infos.Album := '';
    for i:=64 to 93 do
        ID3v1Infos.Album := ID3v1Infos.Album+buffer[i];

    // Erscheinungsjahr extrahieren
    ID3v1Infos.Erscheinungsjahr := '';
    for i:=94 to 97 do
        ID3v1Infos.Erscheinungsjahr := ID3v1Infos.Erscheinungsjahr+buffer[i];

    // Kommentar extrahieren
    ID3v1Infos.Kommentar := '';
    for i:=98 to 127 do
        ID3v1Infos.Kommentar := ID3v1Infos.Kommentar+buffer[i];

    // Genre extrahieren
    ID3v1Infos.Genre := buffer[128];

    // Alles okay, Rückgabe
    result := 0;
end;

end.
Wer das ganze mal testen möchte, braucht eine Form, einen Button und einen FileDialog (bei mir aus den Jedi Sachen, kann aber auch der Standartdialog sein), 6 Labels und einen Verweis auf die obige Unit.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    mp3info: TID3v1;
begin
    if JvOpenDialog1.Execute then
    begin
        if (clsMP3ID3vX.getID3v1Information(JvOpenDialog1.FileName,mp3info) >= 0) then
        begin
            Label1.Caption := 'Songtitel: '+mp3info.Songtitel;
            Label2.Caption := 'Künstler/Interpret: '+mp3info.Kuenstler;
            Label3.Caption := 'Album: '+mp3info.Album;
            Label4.Caption := 'Erscheinungsjahr: '+mp3info.Erscheinungsjahr;
            Label5.Caption := 'Kommentar: '+mp3info.Kommentar;
            Label6.Caption := 'Genre: '+mp3info.Genre;
        end
        else begin
            MessageDlg('Es trat ein Fehler auf!', mtError, [mbOK], 0);
        end;
    end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz