Speicherverletzung bei Tag abrufen mit FMODex..
Verfasst: 27.04.2006 10:01
Hallo
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:
Hier die Funktion zum abrufen des Tags:
und hier die Funktion zum aufruf der .dll
Hoffe von euch hat jemand eine Lösung...
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