Könnt Ihr mir bitte helfen? Habe begonnen mit FMODex einen kleinen Player zu schreiben. Abspielen usw funktioniert sehr gut, jedoch beim abrufen des TAG's bekomme ich alle paar Titel eine Speicherverletzung.



Hier die Strucktur für den Tagabruf:
Code: Alles auswählen
Structure strucFMOD_TAG
FMOD_TAGTYPE.l
FMOD_TAGDATATYPE.l
TAG_Name.s
TAG_Data.s
TAG_Datalen.l
FMOD_BOOL.b
EndStructure
Code: Alles auswählen
Procedure.b FMOD_GetTag(*pointTAG.structFTag, Plsound.l)
Protected NumTags.l, NumTagsUp.l, TagOK.b, TagI.strucFMOD_TAG
TagOK = 0
Result = FMOD_Sound_GetNumTags(Plsound, @NumTags, @NumTagsUp)
FMOD_ErrCheck(Result)
If Result = #FMOD_OK
If NumTags > 0
Result = FMOD_Sound_GetTagByIndex(Plsound, 0, 0, @TagI)
FMOD_ErrCheck(Result)
Select TagI\FMOD_TAGTYPE
Case #FMOD_TAGTYPE_ID3V1 ;/ mp3
Case #FMOD_TAGTYPE_ID3V2 ;/ mp3
Case #FMOD_TAGTYPE_ASF ;/ Windows Media
For a = 0 To NumTags -1
Result = FMOD_Sound_GetTagByIndex(Plsound, 0, a, @TagI)
If TagI\TAG_Name = "TITLE"
*pointTAG\Title = TagI\TAG_Data
ElseIf TagI\TAG_Name = "AUTHOR"
*pointTAG\Artist = TagI\TAG_Data
ElseIf TagI\TAG_Name = "WM/AlbumTitle"
*pointTAG\AlbumTitle = TagI\TAG_Data
ElseIf TagI\TAG_Name = "WM/AlbumArtist"
*pointTAG\AlbumArtist = TagI\TAG_Data
ElseIf TagI\TAG_Name = "WM/Year"
*pointTAG\Release = TagI\TAG_Data
ElseIf TagI\TAG_Name = "WM/Genre"
*pointTAG\Genre = TagI\TAG_Data
ElseIf TagI\TAG_Name = "COMMENT"
*pointTAG\Comment = TagI\TAG_Data
ElseIf TagI\TAG_Name = "WM/TrackNumber"
*pointTAG\NumberOnAlbum = Val(TagI\TAG_Data)
EndIf
Next a
TagOK = 1
Case #FMOD_TAGTYPE_VORBISCOMMENT ;/ flac, ogg
EndSelect
EndIf
EndIf
Testtxt$ = "Titel " + *pointTAG\Title + #crlf
Testtxt$ + "Interpret " + *pointTAG\Artist + #crlf
Testtxt$ + "Albumtitel " + *pointTAG\AlbumTitle + #crlf
Testtxt$ + "Jahr " + *pointTAG\Release + #crlf
Testtxt$ + "Musikrichtung " + *pointTAG\Genre + #crlf
Testtxt$ + "Kommentar " + *pointTAG\Comment + #crlf
Testtxt$ + "Titelnummer " + Str(*pointTAG\NumberOnAlbum) + #crlf
;MessageRequester(#Caption, Testtxt$)
ProcedureReturn TagOK
EndProcedure
Code: Alles auswählen
ProcedureDLL.l FMOD_Sound_GetTagByIndex(a.l,b.l,c.l,d.l)
ProcedureReturn CallFunctionFast(FMOD_Sound_GetTag,a,b,c,d)
EndProcedure