Thema: Mp3FileUtils

Einzelnen Beitrag anzeigen

DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#35

AW: Mp3FileUtils

  Alt 30. Jun 2011, 13:17
Hi,
leider habe ich ein Problem mit den Demos. Ich nutze Demo_ID3v2_Level2.exe um ein Bild anzuhängen. In der "orginal" Demo-Exe klappt es auch.

Bei dem Demo-Sourcecode der dabei ist, klappt es nicht. Es klappt nur wenn vorher schon ein Bild enthalten war. Möchte man ein mp3 um ein Bild erweitern, dann klappt es nur mit der "orginal" Demo_ID3v2_Level2.exe.

Wäre toll wenn mir einer helfen würde.

Danke im voraus

EDIT: Ich habe ein bissl getraced. GetPictureFrameIndex da kommt er mit -1 zurück weil kein Bild da ist. Er legt es dann aber nicht an. Sind die DemoSource andere als die exe-files??

Edit2:
Der fehler ist hier.
Delphi-Quellcode:
// ------------------------------------------
// set pictures
// ------------------------------------------
procedure TID3v2Tag.SetPicture(MimeTyp: AnsiString; PicType: Byte; Description: UnicodeString; stream: TStream);
var IDX: Integer;
    NewFrame: TID3v2Frame;
    idStr: AnsiString;
    oldMime: AnsiString;
    oldDescription: UnicodeString;
    oldType: Byte;
    oldStream: TMemoryStream;
begin
    idStr := GetFrameIDString(IDv2_PICTURE);
    IDX := GetPictureFrameIndex({PicType,} Description);
    if IDX <> -1 then
    begin
        if Stream = NIL then
          Frames.Delete(IDX)
        else
        begin
            if (Description = '*') or (MimeTyp = '*') or (Stream.size = 0) then
            begin
                oldStream := TMemoryStream.Create;
                (Frames[IDX] as TID3v2Frame).GetPicture(oldMime, oldType, oldDescription, oldStream);
                if (Description = '*') then
                  Description := oldDescription;
                if (MimeTyp = '*') then
                  MimeTyp := oldMime;
                if Stream.Size = 0 then
                  oldStream.SaveToStream(Stream);
                oldStream.Free;
            end;
            (Frames[IDX] as TID3v2Frame).SetPicture(MimeTyp, PicType, Description, Stream)
        end;

    end else
    begin
        if (Stream <> NIL) and (Stream.Size > 0)then
        begin
            NewFrame := TID3v2Frame.Create(idStr, TID3v2FrameVersions(FVersion.Major));
            NewFrame.AlwaysWriteUnicode := fAlwaysWriteUnicode;
            newFrame.CharCode := fCharCode;
            NewFrame.AutoCorrectCodepage := fAutoCorrectCodepage;
            Frames.Add(newFrame);
            if (Description = '*') then
                Description := '';
            if (MimeTyp = '*') then
                  MimeTyp := 'image/jpeg';
            newFrame.SetPicture(MimeTyp, PicType, Description, stream)
        end;
    end;
end;
Er merkt das kein Bild da ist, legt es an (NewFrame) und "schmeisst" es weg. Trotzdem frage ich mich warum es bei den demo-exe-files geht. Dürfte ja nicht...
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (30. Jun 2011 um 14:47 Uhr)
  Mit Zitat antworten Zitat