AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMOD: getTag

Ein Thema von Nils_13 · begonnen am 14. Apr 2008 · letzter Beitrag vom 18. Apr 2008
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

FMOD: getTag

  Alt 14. Apr 2008, 19:05
Hi,

ich weiß, es ist ein Delphi-Forum und ich könnte die Frage viel besser im FMOD-Forum stellen. Aber ich glaube das Problem ist Pascal und nicht FMOD in diesem Fall. Ich möchte die Tags einer Audiodatei (MP3) auslesen. Macht der folgende Code vorallem in Bezug auf die vorher gezeigten Deklarationen und das unten stehende Codebeispiel in C Sinn ? ShowMessage(String(tag.data)) liefert mir grundsätzlich nur die ersten beiden Zeichen. Nehme man sich als Beispiel die Band Celldweller, wird nur Ce ausgegeben (bei Static-X dementsprechend nur St usw.). Dies trifft nicht nur auf den Artisten zu, sondern auf alle Taginformationen.
Delphi-Quellcode:
type
  FMOD_TAGTYPE =
  (
    FMOD_TAGTYPE_UNKNOWN,
    FMOD_TAGTYPE_ID3V1,
    FMOD_TAGTYPE_ID3V2,
    FMOD_TAGTYPE_VORBISCOMMENT,
    FMOD_TAGTYPE_SHOUTCAST,
    FMOD_TAGTYPE_ICECAST,
    FMOD_TAGTYPE_ASF,
    FMOD_TAGTYPE_MIDI,
    FMOD_TAGTYPE_PLAYLIST,
    FMOD_TAGTYPE_FMOD,
    FMOD_TAGTYPE_USER,
    FMOD_TAGTYPE_MAX
  );

  FMOD_TAGDATATYPE =
  (
    FMOD_TAGDATATYPE_BINARY,
    FMOD_TAGDATATYPE_INT,
    FMOD_TAGDATATYPE_FLOAT,
    FMOD_TAGDATATYPE_STRING,
    FMOD_TAGDATATYPE_STRING_UTF16,
    FMOD_TAGDATATYPE_STRING_UTF16BE,
    FMOD_TAGDATATYPE_STRING_UTF8,
    FMOD_TAGDATATYPE_CDTOC
  );

  FMOD_TAG = record
    tagtype: FMOD_TAGTYPE; (* [out] The type of this tag. *)
    datatype: FMOD_TAGDATATYPE; (* [out] The type of data that this tag contains *)
    name: PChar; (* [out] The name of this tag i.e. "TITLE", "ARTIST" etc. *)
    data: Pointer; (* [out] Pointer to the tag data - its format is determined by the datatype member *)
    datalen: Cardinal; (* [out] Length of the data contained in this tag *)
    updated: FMOD_BOOL; (* [out] True if this tag has been updated since last being accessed with FMOD_Sound_GetTag *)
  end;

function FMOD_Sound_GetNumTags(sound: FMOD_SOUND; var numtags: Integer; var numtagsupdated: Integer): FMOD_RESULT; stdcall;
function FMOD_Sound_GetTag(sound: FMOD_SOUND; const name: PChar; index: Integer; var tag: FMOD_TAG): FMOD_RESULT; stdcall;
Delphi-Quellcode:
var fmods : FMOD_SOUND;
    i, numtags, numtagsupdated : Integer;
    tag : FMOD_TAG;
begin
  fmodr := FMOD_System_CreateStream(fmod, PAnsiChar(f), FMOD_DEFAULT, nil, fmods);
  Fehler;

  fmodr := FMOD_Sound_GetNumTags(fmods, numtags, numtagsupdated);
  Fehler;

  for i := 0 to Pred(numtags) do
  begin
    fmodr := FMOD_Sound_GetTag(fmods, nil, i, tag);
    Fehler;

    if tag.datatype = FMOD_TAGDATATYPE_STRING then
      ShowMessage(String(tag.data));
  end;

  FMOD_Sound_Release(fmods);
Auszug aus dem bei FMODEx mitgelieferten Beispiel namens Readtags, von welchem ich die nötigen Zeilen oben übersetzt habe:
Code:
int main(int argc, char *argv[])
{
    FMOD_SYSTEM    *system;
    FMOD_SOUND     *sound;
    FMOD_RESULT     result;
    FMOD_TAG        tag;
    int             numtags, numtagsupdated, count;
    unsigned int    version;

    // ...

    /*
        Read all the tags regardless of whether they're updated or not. Also show the tag type.
    */
    result = FMOD_Sound_GetNumTags(sound, &numtags, &numtagsupdated);
    ERRCHECK(result);
    for (count=0; count < numtags; count++)
    {
        result = FMOD_Sound_GetTag(sound, 0, count, &tag);
        ERRCHECK(result);

        if (tag.datatype == FMOD_TAGDATATYPE_STRING)
        {
            printf("%s = %s (%d bytes)\n", tag.name, tag.data, tag.datalen);
        }
        else
        {
            printf("%s = ??? (%d bytes)\n", tag.name, tag.datalen);
        }
    }
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#2

Re: FMOD: getTag

  Alt 18. Apr 2008, 21:46
Bearbeiten geht nicht mehr, also einfach eine neue Nachricht....

StrPas anstelle vom String-Cast ist die Lösung.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:34 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