FSOUND_FX_Enable() die 2.
Verfasst: 21.01.2005 22:32
Schade aber die freude über das gelingen des Equalizers (den ich auch in Code,Tips und Tricks) gepostet hatte hält nich lange an.
Und zwar taucht folgendes problem auf:
wenn man das erste mal ein soundfile läd und abspielt ist alles ok und FSOUND_FX_Enable() arbeitet auch richtig doch wenn das programm nun nicht geschlossen wird und man ein neues soundfile läd kommt es zu nem komischen fehler bei FSOUND_FX_Enable() und zwar bekommen dann nich mehr alle 10 EQ-Bander (is die bezeichnung aus dem beispielcode von mir) ne FX-ID sondern nur die ersten 5 und der rest auf einmal -1 was ich aber nich verstehe. weenn man nun noch mal ein neues file läd haben alle 10 Bander auf einmal ne FX-ID von -1.
Um das besser zu verstehen is hier mal ein beispielcode (mit debuger starten um zu sehen was ich meine)
Ist das ein bug in der FMOD-Wrapper-Lib oder direkt von FMOD ein bug oder mach ich was falsch?
Danke schon mal
Und zwar taucht folgendes problem auf:
wenn man das erste mal ein soundfile läd und abspielt ist alles ok und FSOUND_FX_Enable() arbeitet auch richtig doch wenn das programm nun nicht geschlossen wird und man ein neues soundfile läd kommt es zu nem komischen fehler bei FSOUND_FX_Enable() und zwar bekommen dann nich mehr alle 10 EQ-Bander (is die bezeichnung aus dem beispielcode von mir) ne FX-ID sondern nur die ersten 5 und der rest auf einmal -1 was ich aber nich verstehe. weenn man nun noch mal ein neues file läd haben alle 10 Bander auf einmal ne FX-ID von -1.
Um das besser zu verstehen is hier mal ein beispielcode (mit debuger starten um zu sehen was ich meine)
Code: Alles auswählen
; Author: nicolaus
; Date: 21. Januar 2005
; um das beispiel zu kompilieren und zu starten braucht ihr die FMOD-Wrapper-LIB
; und die fmod.dll (getestet wurde mit dll-version 3.7.4.0)
Enumeration
#NewSoundfile
#TrackBar_80
#TrackBar_170
#TrackBar_310
#TrackBar_600
#TrackBar_1000
#TrackBar_3000
#TrackBar_6000
#TrackBar_12000
#TrackBar_14000
#TrackBar_16000
#TrackBar_SFX_Vol
EndEnumeration
Global HardCh_1.l
Global sample.l
Dim EQBand.l(10)
Procedure InitEQ()
Protected I.l
For I=0 To 10
EQBand(I)= FSOUND_FX_Enable(HardCh_1, #FSOUND_FX_PARAMEQ)
Debug "FX-ID "+Str(I)+" = "+ Str(EQBand(I))
Next
FSOUND_FX_SetParamEQ(EQBand(0), 80, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(1), 170, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(2), 310, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(3), 600, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(4), 1000, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(5), 3000, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(6), 6000, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(7), 12000, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(8), 14000, 10, 0)
FSOUND_FX_SetParamEQ(EQBand(9), 16000, 10, 0)
EndProcedure
Procedure Open_Equalizer()
If OpenWindow(0, 216, 0, 410, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar , "FMOD Equalizer")
If CreateGadgetList(WindowID())
ButtonGadget(#NewSoundfile,10,2,100,18,"Load new File")
TrackBarGadget(#TrackBar_80, 20, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_170, 60, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_310, 95, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_600, 130, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_1000, 165, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_3000, 200, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_6000, 235, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_12000, 270, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_14000, 305, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_16000, 340, 30, 20, 200, 0, 240, #PB_TrackBar_Vertical)
TrackBarGadget(#TrackBar_SFX_Vol, 375, 30, 30, 200, 0, 255, #PB_TrackBar_Vertical)
SetGadgetState(#TrackBar_80,120)
SetGadgetState(#TrackBar_170,120)
SetGadgetState(#TrackBar_310,120)
SetGadgetState(#TrackBar_600,120)
SetGadgetState(#TrackBar_1000,120)
SetGadgetState(#TrackBar_3000,120)
SetGadgetState(#TrackBar_6000,120)
SetGadgetState(#TrackBar_12000,120)
SetGadgetState(#TrackBar_14000,120)
SetGadgetState(#TrackBar_16000,120)
SetGadgetState(#TrackBar_SFX_Vol,255)
EndIf
EndIf
EndProcedure
Procedure Set_EQ_Value(ID.l,Value.f)
Select ID
Case 0
FSOUND_FX_SetParamEQ(EQBand(0), 80, 10, Value)
Case 1
FSOUND_FX_SetParamEQ(EQBand(1), 170, 10, Value)
Case 2
FSOUND_FX_SetParamEQ(EQBand(2), 310, 10, Value)
Case 3
FSOUND_FX_SetParamEQ(EQBand(3), 600, 10, Value)
Case 4
FSOUND_FX_SetParamEQ(EQBand(4), 1000, 10, Value)
Case 5
FSOUND_FX_SetParamEQ(EQBand(5), 3000, 10, Value)
Case 6
FSOUND_FX_SetParamEQ(EQBand(6), 6000, 10, Value)
Case 7
FSOUND_FX_SetParamEQ(EQBand(7), 12000, 10, Value)
Case 8
FSOUND_FX_SetParamEQ(EQBand(8), 14000, 10, Value)
Case 9
FSOUND_FX_SetParamEQ(EQBand(9), 16000, 10, Value)
EndSelect
EndProcedure
Procedure.f Calculate_EQ_Gain(Value.f)
If Value > 15.00
temp_value.f = 15.00
Gain = Value - temp_value
ProcedureReturn Gain
ElseIf Value < 15.00
temp_value.f = -15.00
Gain = Value + temp_value
ProcedureReturn Gain
EndIf
EndProcedure
Procedure NewSoundfile()
FSOUND_Stream_Stop(sample)
FSOUND_Stream_Close(sample)
soundfile.s = OpenFileRequester("Wähle eine Musikdatei (wav, mp3,....)","","",0)
If soundfile = ""
End
EndIf
sample = FSOUND_Stream_Open(soundfile, #FSOUND_LOOP_NORMAL | #FSOUND_HW2D | #FSOUND_ENABLEFX, 0, 0)
channel = FSOUND_Stream_PlayEx(HardCh_1, sample, 0, #True)
Debug "----------------------"
InitEQ()
FSOUND_SetPaused(channel, #False)
EndProcedure
soundfile.s = OpenFileRequester("Wähle eine Musikdatei (wav, mp3,....)","","",0)
If soundfile = ""
End
EndIf
FSOUND_SetOutput(#FSOUND_OUTPUT_DSOUND)
Init_OK = #False
For I=0 To FSOUND_GetNumDrivers() - 1
FSOUND_GetDriverCaps(I, @caps)
If caps & #FSOUND_CAPS_HARDWARE
Init_OK = #True
FSOUND_SetDriver(I)
Break
EndIf
Next
If Init_OK = #False
MessageRequester("","Es wurde kein Soundtreiber mit Hardwarechannel gefunden", #MB_ICONERROR)
End
EndIf
numSoftChannels = 2
HardCh_1 = numSoftChannels + 1
FSOUND_Init(44100, numSoftChannels,0)
;sample = FSOUND_Sample_Load(#FSOUND_FREE, soundfile, #FSOUND_LOOP_NORMAL | #FSOUND_HW2D | #FSOUND_ENABLEFX, 0, 0)
sample = FSOUND_Stream_Open(soundfile, #FSOUND_LOOP_NORMAL | #FSOUND_HW2D | #FSOUND_ENABLEFX, 0, 0)
channel = FSOUND_Stream_PlayEx(HardCh_1, sample, 0, #True)
InitEQ()
FSOUND_SetPaused(channel, #False)
Open_Equalizer()
Repeat
Delay(1)
EventID = WindowEvent()
If EventID = #PB_EventGadget
gadget = EventGadgetID()
If gadget = #TrackBar_80
Set_EQ_Value(0,Calculate_EQ_Gain(GetGadgetState(#TrackBar_80)/8))
ElseIf gadget = #TrackBar_170
Set_EQ_Value(1,Calculate_EQ_Gain(GetGadgetState(#TrackBar_170)/8))
ElseIf gadget = #TrackBar_310
Set_EQ_Value(2,Calculate_EQ_Gain(GetGadgetState(#TrackBar_310)/8))
ElseIf gadget = #TrackBar_600
Set_EQ_Value(3,Calculate_EQ_Gain(GetGadgetState(#TrackBar_600)/8))
ElseIf gadget = #TrackBar_1000
Set_EQ_Value(4,Calculate_EQ_Gain(GetGadgetState(#TrackBar_1000)/8))
ElseIf gadget = #TrackBar_3000
Set_EQ_Value(5,Calculate_EQ_Gain(GetGadgetState(#TrackBar_3000)/8))
ElseIf gadget = #TrackBar_6000
Set_EQ_Value(6,Calculate_EQ_Gain(GetGadgetState(#TrackBar_6000)/8))
ElseIf gadget = #TrackBar_12000
Set_EQ_Value(7,Calculate_EQ_Gain(GetGadgetState(#TrackBar_12000)/8))
ElseIf gadget = #TrackBar_14000
Set_EQ_Value(8,Calculate_EQ_Gain(GetGadgetState(#TrackBar_14000)/8))
ElseIf gadget = #TrackBar_16000
Set_EQ_Value(9,Calculate_EQ_Gain(GetGadgetState(#TrackBar_16000)/8))
ElseIf gadget = #TrackBar_SFX_Vol
FSOUND_SetVolumeAbsolute(HardCh_1 ,GetGadgetState(#TrackBar_SFX_Vol))
ElseIf gadget = #NewSoundfile
NewSoundfile()
EndIf
EndIf
If EventID = #PB_Event_CloseWindow
FSOUND_Close()
Quit = 1
EndIf
Until Quit = 1
EndDanke schon mal