FMOD Spectrum und EQ was ist falsch?
Verfasst: 07.02.2005 13:14
Hi
Da ich jetzt in meinem player ein prob habe mit dem anzeigen des Spectrums in verbindung mit dem EQ den ich gebastelt hatte muß ich mal wieder zm hilfe bitte (Froggeproger ?)
Hier mal der code wo der EQ zwar geht aber die Spectrumanzeige nicht mehr.
hoffe ihr könnt mir helfen ich weiss gerade einfach nich weiter 
Da ich jetzt in meinem player ein prob habe mit dem anzeigen des Spectrums in verbindung mit dem EQ den ich gebastelt hatte muß ich mal wieder zm hilfe bitte (Froggeproger ?)
Hier mal der code wo der EQ zwar geht aber die Spectrumanzeige nicht mehr.
Code: Alles auswählen
Declare updateFFT() ; declares the Proc
Structure fftarray ;the structure for the FSOUND_DSP_GetSpectrum()
Value.f[512]
EndStructure
Enumeration
#TrackBar_80
#TrackBar_170
#TrackBar_310
#TrackBar_600
#TrackBar_1000
#TrackBar_3000
#TrackBar_6000
#TrackBar_12000
#TrackBar_14000
#TrackBar_16000
EndEnumeration
Global HardCh_1.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)
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, 376, 250, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar , "FMOD Equalizer")
If CreateGadgetList(WindowID())
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)
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)
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
If InitSprite() = 0 ; Try to open DirectX
MessageRequester("","Sorry, problem with InitSprite() - no DirectX 7.0 ?",0):End
EndIf
hwnd=OpenWindow(1,0,0,520,264,#PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Mini-FFT-Spectrum Visualization using FMOD")
OpenWindowedScreen(hwnd,4,60,512,200,0,0,0) ; opens a screen on the window
CreateSprite(1,512,200,0) ; creates a temporarily sprite
;FSOUND_SetBufferSize(125) ;in- or decrease, if you want to
;initialize FMOD and create menu + gadgets
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 = 32
HardCh_1 = numSoftChannels + 1
If hwnd <> 0 And FSOUND_Init(44100, numSoftChannels, 0) And CreateMenu(1,hwnd) And CreateGadgetList(hwnd)
MenuItem(1, "open")
MenuItem(2, "play")
MenuItem(3,"stop")
MenuItem(4, "eq")
TextGadget(1,5,10,512,20,"Music-File: " + soundfile.s,0)
resume.b=1
EndIf
;_____________ Main Prog ::
While resume
updateFFT()
Delay(1)
Select WindowEvent()
Case #PB_EventMenu ; (select a menu item...)
Select EventMenuID()
Case 1 ;(Open)
temp_filename.s = OpenFileRequester("Choose a music-file...","C:\","PCM-MusicFiles (*.mp3, *.wav, *.mp2, *.ogg, *.raw)|*.mp3;*.wav;*.mp2;*.ogg;*.raw|*.*|*.*",0,0)
If temp_filename
soundfile.s = temp_filename
SetGadgetText(1,soundfile)
EndIf
Case 2 ;(Play)
hstream = FSOUND_Stream_Open(soundfile,#FSOUND_LOOP_NORMAL | #FSOUND_HW2D | #FSOUND_ENABLEFX,0,0) ;open the soundfile
If hstream <> 0
dsp_unit = FSOUND_DSP_GetFFTUnit()
FSOUND_DSP_SetActive(dsp_unit, #True) ;activate the FastFourierTransformation-DSP-Unit
channel = FSOUND_Stream_PlayEx(HardCh_1,hstream,0,#True) ;play the stream on channel 1
InitEQ()
FSOUND_SetPaused(channel, #False)
EndIf
Case 3 ;(Stop)
For I=255 To 0 Step -1 ;a small fast fade-out to prevent a clipping-sound
FSOUND_SetVolume(1,I)
Next
FSOUND_Stream_Stop(hstream) ;stop playing the stream
FSOUND_SetVolume(1,255) ;reset volume to max
Case 4 ;(Equalizer)
Open_Equalizer()
EndSelect
Case #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))
EndIf
Case #PB_Event_CloseWindow ; (systemmenu close...)
If EventWindowID() = 0
CloseWindow(0)
Else
resume=0
FSOUND_Stream_Stop(hstream) ;stop playing the stream
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), #False) ;set the FFT-DSP-Unit inactive
FSOUND_Close() ;shut down FSOUND
EndIf
EndSelect
Wend
;The following procedure updates and displays the fft-visualisation
Procedure updateFFT()
If FSOUND_DSP_GetActive(FSOUND_DSP_GetFFTUnit())
CopyMemory(FSOUND_DSP_GetSpectrum(), hfft.fftarray, 4*512)
EndIf
StartDrawing(SpriteOutput(1)) ;Starts Drawing on the sprite
Box(0,0,512,200,$000000)
For I=0 To 511
actfftvalue.f = hfft\Value[I]*199 ;linear y-scale
Box(I,200,1,-1-actfftvalue, (255-actfftvalue) * $000100 + actfftvalue * $000001) ;Draw a line with various colors, linear x-scale
DrawingMode(1) ; sets Text background transparent
FrontColor(255,255,255) ;white of course
cpuusage.s="CPU: "+StrF(FSOUND_GetCPUUsage(),1)+" %" ;create CPU-String
Locate(508 - TextLength(cpuusage), 4) ;position upper right
DrawText(cpuusage) ;draw the text
Next
StopDrawing() ;Stops drawing on the sprite
FlipBuffers()
DisplaySprite(1,0,0) ; display the sprite
EndProcedure
