Seite 1 von 4
FMODEX-include
Verfasst: 28.12.2006 13:34
von Froggerprogger
Hi,
habe gerade ein fmodex-include-file fertiggestellt für fmodex in Version 4.06.01, welches aber auch für spätere Versionen funktionieren sollten (solange sich die api nicht ändert). Da ich das halbautomatisch gemacht habe, sollten spätere rebuilds nicht viel Zeit benötigen.
Include einfach folgende Datei:
http://www.2mal2mal.de/public/purebasic ... /fmodex.pb
und rufe Init_FMOD() zu Beginn auf. Hier ein Beispiel:
Code: Alles auswählen
;- SimplePlay with fmodex-include
IncludeFile "fmodex.pb"
Init_FMOD()
FMOD_System_Create(@fmodsystem)
FMOD_System_Init(fmodsystem, 32, 0, 0)
str.s = OpenFileRequester("Choose a soundfile", GetClipboardText(), "*.*|*.*", 0)
If str = "" : End : Else : SetClipboardText(str) : EndIf
FMOD_System_CreateStream(fmodsystem, @str, #FMOD_SOFTWARE, 0, @sound)
FMOD_System_PlaySound(fmodsystem, 0, sound, 0, @channel)
Dim Arr.f(512)
Repeat
FMOD_Channel_GetPosition(channel, @pos, #FMOD_TIMEUNIT_MS)
FMOD_Channel_IsPlaying(channel, @isPlaying)
FMOD_Channel_GetSpectrum(channel, Arr(), 512, 0, 0)
Debug "--------------------"
Debug "isPlaying: " + Str(isPlaying)
Debug "position: " + Str(pos)
Debug "spectrum: " + StrF(Arr(0),4) + " " + StrF(Arr(1),4) + " " + StrF(Arr(2),4) + " " + StrF(Arr(3),4) + " ..."
Delay(250)
Until pos > 10000 Or isPlaying = #False
FMOD_System_Release(fmodsystem)
Verfasst: 02.01.2007 17:04
von Froggerprogger
Ich habe die include-Datei geupdated, da im alten ein Bug war, also ggf. bitte neu herunterladen.
Frohes Neues!
Verfasst: 02.01.2007 18:40
von Andre
@FroggerProgger: ist es ok für Dich, wenn ich die neueste Version des Beispiels und Deiner Include-Datei in das nächste CodeArchiv aufnehme?
Verfasst: 02.01.2007 19:00
von Froggerprogger
Klarissimo! Gerne ab damit ins Codearchiv.
Verfasst: 02.01.2007 20:55
von Andre
Froggerprogger hat geschrieben:Klarissimo! Gerne ab damit ins Codearchiv.
Ok, danke.
Ist schon gespeichert.

Verfasst: 04.01.2007 18:52
von m0
Hi!
also die include is ja mal genial, aber bei mir funtzt das Beispiel nicht es gibt immer nur "isPlaying: 0 position: 0 spectrum: 0.0000 0.0000 0.0000 ..."
aus und dann is fertig.
woran könnte das liegen?
Die fmodex.dll habe ich sowol im compiler ordner vom PB sowol im Projektordner, und sie wird auch geöffnet von init_fmod()
und es kommt die meldung: An invalid parameter was passed to this function wenn FMOD_System_PlaySound() aufgerufen wird
mfg
m0
Verfasst: 04.01.2007 21:56
von Froggerprogger
Whoops, könnte daran gelegen haben, dass die Funktion FMOD_System_CreateStream intern FMOD_System_CreateStreamEx aufgerufen hat (da ist beim Übersetzen eines Alias für die Funktion etwas falschgelaufen).
Also: Lad nochmal die neue Version runter (Datum 04.01.2007) und probiers nochmal. Bei mir funktionierts.
@Andre: Dann müsste auch die neue Version ins Codearchiv...
(hoffentlich gibts nicht so viele weitere Änderungen)
Verfasst: 05.01.2007 02:02
von m0
Danke, jetzt gehts, aber ich hab noch n leichtes Problem... wieso stürtzt diese Procedure nach dem 6. Aufruf mit einem "Invalid Memory Access" bei EndProcedure ab
Code: Alles auswählen
Procedure id3get(pos)
artist.s=""
songtitle.s=""
album.s=""
genre.s=""
year.s=""
tag.FMOD_TAG
numtags=0
If CallFunction(0, "FMOD_System_CreateStream", system,GetGadgetItemText(#Listview_pl,pos,4), #FMOD_SOFTWARE | #FMOD_ACCURATETIME, 0, @sound)=#FMOD_OK
CallFunction(0, "FMOD_Sound_GetNumTags",sound,@numtags,0)
For x=0 To numtags-1
tag.FMOD_TAG
CallFunction(0,"FMOD_Sound_GetTag",sound,0,x,@tag)
If tag\type=#FMOD_TAGTYPE_ID3V1
url=0
If tag\name="TITLE"
songtitle.s=tag\_Data
ElseIf tag\name="ARTIST"
artist.s=tag\_Data
ElseIf tag\name="ALBUM"
album.s=tag\_Data
ElseIf tag\name="YEAR"
year.s=tag\_Data
ElseIf tag\name="GENRE"
genre3=Val(tag\_Data)
For i = 0 To 146
If genre3 = i
genre.s=genre1(i)
EndIf
Next
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_ID3V2
url=0
If tag\name="TRCK"
Tracknr.s=tag\_Data
ElseIf tag\name="TYER"
Year.s=tag\_Data
ElseIf tag\name="TCON"
Genre.s=tag\_Data
ElseIf tag\name="TIT2"
Songtitle.s=tag\_Data
ElseIf tag\name="TALB"
Album.s=tag\_Data
ElseIf tag\name="TPE1"
Artist.s=tag\_Data
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_VORBISCOMMENT
url=0
If tag\name="TITLE"
songtitle.s=tag\_Data
ElseIf tag\name="ARTIST"
artist.s=tag\_Data
ElseIf tag\name="ALBUM"
album.s=tag\_Data
ElseIf tag\name="Date"
year.s=tag\_Data
ElseIf tag\name="GENRE"
genre=tag\_Data
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_SHOUTCAST
url=1
If tag\name="icy-notice1"
icynotice1.s=tag\_Data
ElseIf tag\name="icy-notice2"
icynotice2.s=tag\_Data
ElseIf tag\name="icy-name"
icyname.s=tag\_Data
ElseIf tag\name="icy-genre"
icygenre.s=tag\_Data
ElseIf tag\name="icy-url"
icyurl.s=tag\_Data
ElseIf tag\name="icy-br"
icybitrate.s=tag\_Data
ElseIf tag\name="icy-irc"
icyirc.s=tag\_Data
ElseIf tag\name="icy-icq"
icyicq.s=tag\_Data
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_ICECAST
url=1
If tag\name="icy-notice1"
icynotice1.s=tag\_Data
ElseIf tag\name="icy-notice2"
icynotice2.s=tag\_Data
ElseIf tag\name="icy-name"
icyname.s=tag\_Data
ElseIf tag\name="icy-genre"
icygenre.s=tag\_Data
ElseIf tag\name="icy-url"
icyurl.s=tag\_Data
ElseIf tag\name="icy-br"
icybitrate.s=tag\_Data
ElseIf tag\name="icy-irc"
icyirc.s=tag\_Data
ElseIf tag\name="icy-icq"
icyicq.s=tag\_Data
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_PLAYLIST
url=0
If tag\name="FILE"
file.s=tag\_Data
ElseIf tag\name="TITLE"
title.s=tag\_Data
ElseIf tag\name="LENGTH"
length.s=tag\_Data
EndIf
AddGadgetItem(#Listview_pl,-1,Str(CountGadgetItems(#Listview_pl)-1)+Chr(10)+title+Chr(10)+""+Chr(10)+length+Chr(10)+file)
If Not title Or Not length
id3get(CountGadgetItems(#Listview_pl)-1)
EndIf
ElseIf tag\type=#FMOD_TAGTYPE_ASF
Debug "--------ASF--------------"
ElseIf tag\type=#FMOD_TAGTYPE_MIDI
Debug "----------MIDI------------"
ElseIf tag\type=#FMOD_TAGTYPE_FMOD
Debug "---------FMOD-------------"
EndIf
Next
CallFunction(0, "FMOD_Sound_Release", sound)
EndIf
EndProcedure
Irgendwelche Fehler? Oder kann es sein dass die tolle FMODex etwas buggy ist?
P.S: Vor der Procedure initiiere ich die FMODex folgendermaßen:
Code: Alles auswählen
OpenLibrary(0,"fmodex.dll")
CallFunction(0,"FMOD_System_Create", @system)
CallFunction(0, "FMOD_System_Init", system, 32, #FMOD_INIT_NORMAL, 0)
Verfasst: 06.01.2007 16:02
von a14xerus
wo genau liegt die "richtige" fmodEX [edit] zum downloaden bereit [/edit] ?
meine hat die version 4.4.30
Verfasst: 06.01.2007 16:24
von m0
Die Fmod liegt in "purebasicfolder"\compilers\fmodex.dll und da wo die exe is. Meine hat Version 0.4.6.1
m0