FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spielen
FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spielen
Hallo,
habe für ein Spiel ein Musikstück komponiert. Jetzt sollen je nach Situation im Spiel andere Instrumente bzw. Instrumentenspuren in das stetig laufende Musikstück zugeschaltet oder ausgeblendet werden (die Musik läuft quasi ununterbrochen, auch im Hauptmenü usw.). Wie und mit welcher Bibliothek (FMOD zum Beispiel) könnte ich das am besten anstellen? Ich habe hier nun 6 einzelne mp3/ogg-Dateien (wahrscheinlich werden es noch mehr) mit den einzelnen Instrumenten bzw. Instrumentengruppen vorliegen. Eine Möglichkeit wäre, alle 6 gleichzeitig zu starten und je nach Situation einzelne Kanäle stumm zu schalten. Aber: Starten die Dateien auch alle gleichzeitig und ohne Versatz? Bleiben sie auch nach 10 min Abspielzeit immer noch synchron? Geht dabei die Hardware in die Knie, da eigentlich immer nur 1 bis 3 Spuren gleichzeitig zu hören sein sollen? Man könnte auch beim Zuschalten eines Instruments erst mit dem Starten der zugehörigen Datei beginnen und die aktuelle Abspielposition setzen...
Ich weiß nicht so recht, wie ich da rangehen soll. Vielleicht habt ihr eine Idee. Vielleicht bietet ja FMOD oder ein ähnliche Bibliothek eine Funktion, die genau so was macht...
habe für ein Spiel ein Musikstück komponiert. Jetzt sollen je nach Situation im Spiel andere Instrumente bzw. Instrumentenspuren in das stetig laufende Musikstück zugeschaltet oder ausgeblendet werden (die Musik läuft quasi ununterbrochen, auch im Hauptmenü usw.). Wie und mit welcher Bibliothek (FMOD zum Beispiel) könnte ich das am besten anstellen? Ich habe hier nun 6 einzelne mp3/ogg-Dateien (wahrscheinlich werden es noch mehr) mit den einzelnen Instrumenten bzw. Instrumentengruppen vorliegen. Eine Möglichkeit wäre, alle 6 gleichzeitig zu starten und je nach Situation einzelne Kanäle stumm zu schalten. Aber: Starten die Dateien auch alle gleichzeitig und ohne Versatz? Bleiben sie auch nach 10 min Abspielzeit immer noch synchron? Geht dabei die Hardware in die Knie, da eigentlich immer nur 1 bis 3 Spuren gleichzeitig zu hören sein sollen? Man könnte auch beim Zuschalten eines Instruments erst mit dem Starten der zugehörigen Datei beginnen und die aktuelle Abspielposition setzen...
Ich weiß nicht so recht, wie ich da rangehen soll. Vielleicht habt ihr eine Idee. Vielleicht bietet ja FMOD oder ein ähnliche Bibliothek eine Funktion, die genau so was macht...
Zuletzt geändert von Lebostein am 13.07.2010 12:27, insgesamt 1-mal geändert.
Re: Mehrere Musikdateien gleichzeitig und synchron abspielen
Hab gestern mal mit FMOD Ex ein wenig herumgespielt und ein kleines Beispiel gebastelt:
http://www.lebostein.de/download/FMOD_Beispiel.zip (3 MB)

Mit Windows und Mac OS X sollte das Programm (beispiel.pb) ohne Probleme starten (Fmod-Libs liegen alle mit drin), Linux konnte ich noch nicht testen, sollte aber eigentlich auch funktionieren. Jedenfalls werden hier 6 ogg-Dateien als Stream geladen und gestartet. Mit den Häkchen kann man die einzelnen Spuren zuschalten. Hier auf meinem Mac blieben die Spuren immer synchron, auch wenn im Hintergrund zum Beispiel ein Film gestartet wurde. Auf meiner Windows XP Kiste liefen die Spuren aber schon nach ein paar Durchläufen auseinander und man hörte das auch. Scheint also doch nicht so einfach zu funktionieren.
Was bewirkt denn der Befehl "FMOD_Sound_AddSyncPoint"? Könnte das was für mich sein?
http://www.lebostein.de/download/FMOD_Beispiel.zip (3 MB)

Mit Windows und Mac OS X sollte das Programm (beispiel.pb) ohne Probleme starten (Fmod-Libs liegen alle mit drin), Linux konnte ich noch nicht testen, sollte aber eigentlich auch funktionieren. Jedenfalls werden hier 6 ogg-Dateien als Stream geladen und gestartet. Mit den Häkchen kann man die einzelnen Spuren zuschalten. Hier auf meinem Mac blieben die Spuren immer synchron, auch wenn im Hintergrund zum Beispiel ein Film gestartet wurde. Auf meiner Windows XP Kiste liefen die Spuren aber schon nach ein paar Durchläufen auseinander und man hörte das auch. Scheint also doch nicht so einfach zu funktionieren.
Was bewirkt denn der Befehl "FMOD_Sound_AddSyncPoint"? Könnte das was für mich sein?
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
Läuft hier absolut syncron auf der XP-Kiste 
Danke für das bereitstellen des Codes
Danke für das bereitstellen des Codes
Rings hat geschrieben:ziert sich nich beim zitieren
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
Ich bekomme folgende Meldung:
"Die Anwendung konnte nicht gestartet werden, weil fmodex.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben."
cu, helpy
"Die Anwendung konnte nicht gestartet werden, weil fmodex.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben."
cu, helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
So ganz steig ich mit den verschiedenen DLL's und LIB's in Verbindung mit OpenLibrary + CallFunction bzw. Import selber noch nicht durch. Erfordert denn die fmodex.lib in Verbindung mit Import trotzdem die fmodex.dll? Ich dachte immer, man nimmt eine DLL oder eine LIB....helpy hat geschrieben:"Die Anwendung konnte nicht gestartet werden, weil fmodex.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben."
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
ma ehrlich jez .. ich hab mir mal die mühe gemacht und versucht das mit pb-boardmitteln nachzubauen.
ich hör da mal hin und hör ohne merklichen versatz und eigentlich auch irgendwie synchron.
will aber auch nun nicht drauf bestehen, vielleicht hab ich ja auch schon das, was da als letztes
ausgegeben wird .. und hier noch ein kleines Leckerli
ich hör da mal hin und hör ohne merklichen versatz und eigentlich auch irgendwie synchron.
will aber auch nun nicht drauf bestehen, vielleicht hab ich ja auch schon das, was da als letztes
ausgegeben wird .. und hier noch ein kleines Leckerli
Code: Alles auswählen
Enumeration 1
#s_drm
#s_bss
#s_org
#s_gt1
#s_gt2
#s_tut
EndEnumeration
InitSound()
Global quit,l,quitted.l
Global.l c_drm,c_bss,c_gt1,c_gt2,c_org,c_tut
Global.l v_drm,v_bss,v_org,v_gt1,v_gt2,v_tut
v_drm=0
v_bss=100
v_gt1=0
v_gt2=0
v_tut=0
v_org=0
UseOGGSoundDecoder()
Procedure playall(haurein)
LoadSound(#s_drm,"HDL_schlagwerk.ogg")
LoadSound(#s_bss,"HDL_basslauf.ogg")
LoadSound(#s_org,"HDL_orgel.ogg")
LoadSound(#s_gt1,"HDL_gitarre1.ogg")
LoadSound(#s_gt2,"HDL_gitarre2.ogg")
LoadSound(#s_tut,"HDL_floete.ogg")
Repeat
c_drm=PlaySound(#s_drm,#PB_Sound_MultiChannel)
SoundVolume(#s_drm,v_drm,c_drm)
c_org = PlaySound(#s_org,#PB_Sound_MultiChannel)
SoundVolume(#s_org,v_org,c_org)
c_gt1 = PlaySound(#s_gt1,#PB_Sound_MultiChannel)
SoundVolume(#s_gt1,v_gt1,c_gt1)
c_gt2 = PlaySound(#s_gt2,#PB_Sound_MultiChannel)
SoundVolume(#s_gt2,v_gt2,c_gt2)
c_tut = PlaySound(#s_tut,#PB_Sound_MultiChannel)
SoundVolume(#s_tut,v_tut,c_tut)
c_bss = PlaySound(#s_bss,#PB_Sound_MultiChannel)
SoundVolume(#s_bss,v_bss,c_bss)
startit.l=ElapsedMilliseconds()
While ElapsedMilliseconds()<startit+16695
Delay(10)
If quit
Break
EndIf
Wend
Until quit
For v=0 To 100 Step 2
SoundVolume(#s_tut,v,c_tut)
SoundVolume(#s_gt1,v,c_gt2)
SoundVolume(#s_gt2,v,c_gt1)
SoundVolume(#s_org,v,c_org)
SoundVolume(#s_bss,v,c_bss)
SoundVolume(#s_drm,v,c_drm)
Delay(10)
Next v
For v=100 To 0 Step -2
SoundVolume(#s_tut,v,c_tut)
SoundVolume(#s_gt1,v,c_gt2)
SoundVolume(#s_gt2,v,c_gt1)
SoundVolume(#s_org,v,c_org)
SoundVolume(#s_bss,v,c_bss)
SoundVolume(#s_drm,v,c_drm)
Delay(25)
Next v
quitted=1
EndProcedure
CreateThread(@playall(),0)
OpenWindow(0,0,0,400,200,"soundlooper",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
h=17
b=300
t_drm = TrackBarGadget(#PB_Any,0,0,b,h,0,100,1)
t1 = TextGadget(#PB_Any,b,0,100,h,"drums")
t_bss = TrackBarGadget(#PB_Any,0,h,b,h,0,100,1)
b1 = TextGadget(#PB_Any,b,h,100,h,"bass")
t_gt1 = TrackBarGadget(#PB_Any,0,h+h,b,h,0,100,1)
g1 = TextGadget(#PB_Any,b,h+h,100,h,"git1")
t_gt2 = TrackBarGadget(#PB_Any,0,h+h+h,b,h,0,100,1)
g2 = TextGadget(#PB_Any,b,h+h+h,100,h,"git2")
t_org = TrackBarGadget(#PB_Any,0,h+h+h+h,b,h,0,100,1)
o1 = TextGadget(#PB_Any,b,h+h+h+h,100,h,"organ")
t_tut = TrackBarGadget(#PB_Any,0,h+h+h+h+h,b,h,0,100,1)
f1 = TextGadget(#PB_Any,b,h+h+h+h+h,100,h,"tröte")
SetGadgetState(t_drm,v_drm)
SetGadgetState(t_bss,v_bss)
SetGadgetState(t_gt1,v_gt1)
SetGadgetState(t_gt2,v_gt2)
SetGadgetState(t_org,v_org)
SetGadgetState(t_tut,v_tut)
Repeat
event=WaitWindowEvent()
eventgadget=EventGadget()
If event=#PB_Event_Gadget
Select eventgadget
Case t_drm
v_drm=GetGadgetState(t_drm)
SoundVolume(#s_drm,v_drm,c_drm)
Case t_bss
v_bss=GetGadgetState(t_bss)
SoundVolume(#s_bss,v_bss,c_bss)
Case t_gt1
v_gt1=GetGadgetState(t_gt1)
SoundVolume(#s_gt1,v_gt1,c_gt1)
Case t_gt2
v_gt2=GetGadgetState(t_gt2)
SoundVolume(#s_gt2,v_gt2,c_gt2)
Case t_tut
v_tut=GetGadgetState(t_tut)
SoundVolume(#s_tut,v_tut,c_tut)
Case t_org
v_org=GetGadgetState(t_org)
SoundVolume(#s_org,v_org,c_org)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
quit=1
While Not quitted
Delay(10)
Wend
Debug "schicht ..endlich .. hab schon ohrenkrebs von dem radau"
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
Danke. Aber es geht noch etwas einfacher. Hier der Code aus meinem ZIP-File umgesetzt mit "Bordmitteln". Leider kann man die Position von Sounds nicht abfragen und setzen, deshalb fällt das für meine Zwecke flach... und ob die Synchronität gewährleistet ist, bleibt ein Rätsel. Außerdem scheint das Flag #PB_Sound_Streaming für LoadSound nicht funktioniert bzw. zu Abstürzen und eigenartigen Fehlermeldungen zu führen, deshalb hab ich das wieder rausgenommen.
Code: Alles auswählen
#Spur_Name = 10
#Spur_Laut = 50
Structure spur
file.s
sound.l
laut.l
EndStructure
Global NewList spur.spur()
Procedure CreateSpur(file.s, laut.l)
AddElement(spur())
spur()\file = file
spur()\laut = laut
EndProcedure
CreateSpur("HDL_basslauf.ogg", 100)
CreateSpur("HDL_floete.ogg", 0)
CreateSpur("HDL_schlagwerk.ogg", 0)
CreateSpur("HDL_gitarre1.ogg", 0)
CreateSpur("HDL_gitarre2.ogg", 0)
CreateSpur("HDL_orgel.ogg", 0)
; ------------------------------------------------
InitSound()
UseOGGSoundDecoder()
ForEach spur()
spur()\sound = LoadSound(#PB_Any, spur()\file)
SoundVolume(spur()\sound, spur()\laut)
Next
ForEach spur()
PlaySound(spur()\sound, #PB_Sound_Loop | #PB_Sound_MultiChannel)
Next
; ------------------------------------------------
OpenWindow(0, 0, 0, 600, 250, "iMuse", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
ForEach spur()
index = ListIndex(spur())
TextGadget(#Spur_Name + index, 50, 20 + index * 25, 300, 18, "Spur " + Str(index + 1) + ": " + spur()\file)
TrackBarGadget(#Spur_Laut + index, 300, 20 + index * 25, 150, 18, 0, 100): SetGadgetState(#Spur_Laut + index, spur()\laut)
Next
; ------------------------------------------------
Repeat
Event = WaitWindowEvent(20)
ForEach spur()
index = ListIndex(spur())
If Event = #PB_Event_Gadget And EventGadget() = #Spur_Laut + index
spur()\laut = GetGadgetState(#Spur_Laut + index)
SoundVolume(spur()\sound, spur()\laut)
EndIf
Next
Until Event = #PB_Event_CloseWindowRe: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
die umsetzung ist ja egal .. ich wollte halt nix klauen ..
wenn alle 16695 msec die waves neu gestartet werden und alle genauso lang
sind, ist es synchron und bleibt synchron. allerhöchstens das starten der waves
nacheinander ergibt eine vermutlich absolut vernachlässigbare verzögerung.
ich seh grad ..dein code loopt im playsound-aufruf .. mein code loopt genau da nicht sondern
startet die waves nach 16695 msec neu. unter beibehaltung der lautstärke natürlich.
wenn alle 16695 msec die waves neu gestartet werden und alle genauso lang
sind, ist es synchron und bleibt synchron. allerhöchstens das starten der waves
nacheinander ergibt eine vermutlich absolut vernachlässigbare verzögerung.
ich seh grad ..dein code loopt im playsound-aufruf .. mein code loopt genau da nicht sondern
startet die waves nach 16695 msec neu. unter beibehaltung der lautstärke natürlich.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
Ah, jetzt verstehe ich deinen Code. Nach jedem Durchlauf ein kompletter Neustart. Ist ne Idee, die tatsächlich zu funktionieren scheint. Aber es muss doch noch eine elegantere Lösung geben. Schaue mir grade mal die BASS-Library (http://www.un4seen.com/) an. Als Features führen die auf:bobobo hat geschrieben:die umsetzung ist ja egal .. ich wollte halt nix klauen
wenn alle 16695 msec die waves neu gestartet werden und alle genauso lang
sind ist es synchron und bleibt synchron. allerhöchstens das starten der waves
nacheinander ergibt eine vermutlich vernachlässigbare verzögerung.
http://www.un4seen.com/forum/?topic=812 ... 9#msg55479High precision synchronization
Synchronize events in your software to the streams and MOD musics, synchronize playback of multiple channels together
Zuletzt geändert von Lebostein am 13.07.2010 22:29, insgesamt 1-mal geändert.
Re: FMOD Ex - Mehrere Musikdateien gleichzeitig/synchron spi
mi der bass.dll (gefällt mir aus unerfindlichen gründen besser als fmod) hab ich mal ne
automatische disco gemacht .. ging ganz gut .. un4seen liefert die pb-includes praktischerweise
auf der seite mit.
da gibt es ein plugin das sich bass_mix nennt . damit sollte es möglich sein
aber warum bass wenn's pb auch tut.. ich bin immernoch der meinung, dass "mein" code
synchron genug ist. und kompliziert ist es auch eigentlich nicht.
automatische disco gemacht .. ging ganz gut .. un4seen liefert die pb-includes praktischerweise
auf der seite mit.
da gibt es ein plugin das sich bass_mix nennt . damit sollte es möglich sein
aber warum bass wenn's pb auch tut.. ich bin immernoch der meinung, dass "mein" code
synchron genug ist. und kompliziert ist es auch eigentlich nicht.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.