FMODEX-include

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

FMODEX-include

Beitrag 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)
!UD2
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Ich habe die include-Datei geupdated, da im alten ein Bug war, also ggf. bitte neu herunterladen.

Frohes Neues!
!UD2
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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?
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Klarissimo! Gerne ab damit ins Codearchiv.
!UD2
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Froggerprogger hat geschrieben:Klarissimo! Gerne ab damit ins Codearchiv.
Ok, danke.

Ist schon gespeichert. :)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

Beitrag 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
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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)
!UD2
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

Beitrag 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)
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

wo genau liegt die "richtige" fmodEX [edit] zum downloaden bereit [/edit] ?
meine hat die version 4.4.30
Zuletzt geändert von a14xerus am 06.01.2007 20:54, insgesamt 1-mal geändert.
m0
Beiträge: 150
Registriert: 12.10.2004 13:55
Wohnort: Immenstadt
Kontaktdaten:

Beitrag von m0 »

Die Fmod liegt in "purebasicfolder"\compilers\fmodex.dll und da wo die exe is. Meine hat Version 0.4.6.1

m0
Schaut euch doch http://www.momo-wagner.de mal an ;)

MfG
m0
Antworten