EAX Steuerung hinzugefügt und code ist nun unter Windows 7 lauffähig.
Code: Alles auswählen
IncludeFile "bass.pbi"
;{- Enumerations / DataSections
;{ Windows
Global Window_0
;}
;{ Gadgets
Global Image_0,Image
Global ProgressBar_1
Global ProgressBar_2
Global ProgressBar_3
Global Button_1
Global Button_2
Global Button_3
Global Button_4
Global Button_5
Global Combo_1
Global Combo_2
Global TrackBar_0
Global TrackBar_1
Global TrackBar_2
Global TrackBar_3
Global TrackBar_4
Global TrackBar_5
Global TrackBar_6
Global TrackBar_7
Global TrackBar_8
Global TrackBar_9
Global TrackBar_10
Global TrackBar_11
Global *vu.long=AllocateMemory(SizeOf(long))
Global ci.BASS_CHANNELINFO
Global cp.BASS_DX8_PARAMEQ
Global cpp.BASS_DX8_REVERB
Global Dim fx(11)
Global Dim fft.f(2048)
Global Dim wav.f(2)
Global System,Channel,Isplaying,Laenge,played
;}
;}
Macro setmix(a,b,c,d,e,f,g,h,i,j)
v= a/10.0
BASS_FXGetParameters(fx(0),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_1,a)
BASS_FXSetParameters(fx(0),@cp);
v= b/10.0
BASS_FXGetParameters(fx(1),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_2,b)
BASS_FXSetParameters(fx(1),@cp);
v= c/10.0
BASS_FXGetParameters(fx(2),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_3,c)
BASS_FXSetParameters(fx(2),@cp);
v= d/10.0
BASS_FXGetParameters(fx(3),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_4,d)
BASS_FXSetParameters(fx(3),@cp);
v= e/10.0
BASS_FXGetParameters(fx(4),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_5,e)
BASS_FXSetParameters(fx(4),@cp);
v= f/10.0
BASS_FXGetParameters(fx(5),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_6,f)
BASS_FXSetParameters(fx(5),@cp);
v= g/10.0
BASS_FXGetParameters(fx(6),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_7,g)
BASS_FXSetParameters(fx(6),@cp);
v= h/10.0
BASS_FXGetParameters(fx(7),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_8,h)
BASS_FXSetParameters(fx(7),@cp);
v= i/10.0
BASS_FXGetParameters(fx(8),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_9,i)
BASS_FXSetParameters(fx(8),@cp);
v= j/10.0
BASS_FXGetParameters(fx(9),@cp);
cp\fGain=v-12.0
SetGadgetState(TrackBar_10,j)
BASS_FXSetParameters(fx(9),@cp);
EndMacro
Macro mix(a,b)
If b<=9
v=GetGadgetState(a)/10.0
BASS_FXGetParameters(fx(b),@cp);
cp\fGain=v-12.0
BASS_FXSetParameters(fx(b),@cp);
Else
v=40-(GetGadgetState(a))/6.0
BASS_FXGetParameters(fx(11),@cpp);
cpp\fReverbMix=-0.060*v*v
BASS_FXSetParameters(fx(11),@cpp);
EndIf
EndMacro
Procedure Combo_1_Event( Gadget)
Static a.f,b.f,c.f,d.f,e.f,f.f,g.f,h.f,i.f,j.f,v.f
If isplaying= #BASS_ACTIVE_PLAYING
If EventType() =#CBN_SELCHANGE
Select GetGadgetState(Gadget)
Case 0 : setmix(120,120,120,120,120,120,72,72,72,57); classic
Case 1 : setmix(120,120,145,156,156,156,145,120,120,120); club
Case 2 : setmix(179,164,137,120,120,84,72,72,120,120); dance
Case 3 : setmix(120,120,120,120,120,120,120,120,120,120); Flat
Case 4 : setmix(179,179,179,156,120,91,65,53,50,50); fullbass
Case 5 : setmix(168,156,120,72,88,120,171,187,194,194); basstreb
Case 6 : setmix(57,57,57,91,137,187,217,217,217,217); fulltreb
Case 7 : setmix(149,187,152,103,103,130,159,179,198,210); laptop
Case 8 : setmix(187,187,156,156,120,88,88,88,120,120); LargeHall
Case 9 : setmix(88,120,145,152,156,156,145,137,137,133); live
Case 10 : setmix(164,164,120,120,120,120,120,120,164,164);party
Case 11 : setmix(107,149,164,168,152,110,103,103,107,107);pop
Case 12 : setmix(120,120,114,84,120,164,164,120,120,120); reggae
Case 13 : setmix(168,149,84,69,95,145,175,187,187,187); rock
Case 14 : setmix(193,88,91,114,145,156,175,179,187,179); ska
Case 15 : setmix(149,130,110,103,110,145,171,179,187,194);soft
Case 16 : setmix(145,145,133,114,91,84,95,114,137,175); softrock
Case 17 : setmix(168,156,120,84,88,120,168,179,179,175); techno
EndSelect
EndIf
EndIf
EndProcedure
Procedure eax ( Type)
If isplaying= #BASS_ACTIVE_PLAYING
Select type
Case 0
BASS_SetEAXParameters(EAX_PRESET_GENERIC )
Case 1
BASS_SetEAXParameters(EAX_PRESET_PADDEDCELL)
Case 2
BASS_SetEAXParameters(EAX_PRESET_ROOM )
Case 3
BASS_SetEAXParameters(EAX_PRESET_BATHROOM )
Case 4
BASS_SetEAXParameters(EAX_PRESET_LIVINGROOM )
Case 5
BASS_SetEAXParameters(EAX_PRESET_STONEROOM)
Case 6
BASS_SetEAXParameters(EAX_PRESET_AUDITORIUM)
Case 7
BASS_SetEAXParameters(EAX_PRESET_CONCERTHALL)
Case 8
BASS_SetEAXParameters(EAX_PRESET_CAVE )
Case 9
BASS_SetEAXParameters(EAX_PRESET_ARENA)
Case 10
BASS_SetEAXParameters(EAX_PRESET_HANGAR)
Case 11
BASS_SetEAXParameters(EAX_PRESET_CARPETEDHALLWAY)
Case 12
BASS_SetEAXParameters(EAX_PRESET_HALLWAY)
Case 13
BASS_SetEAXParameters(EAX_PRESET_STONECORRIDOR)
Case 14
BASS_SetEAXParameters(EAX_PRESET_ALLEY)
Case 15
BASS_SetEAXParameters(EAX_PRESET_FOREST)
Case 16
BASS_SetEAXParameters(EAX_PRESET_CITY)
Case 17
BASS_SetEAXParameters(EAX_PRESET_MOUNTAINS)
Case 18
BASS_SetEAXParameters(EAX_PRESET_QUARRY)
Case 19
BASS_SetEAXParameters(EAX_PRESET_PLAIN)
Case 20
BASS_SetEAXParameters(EAX_PRESET_PARKINGLOT)
Case 21
BASS_SetEAXParameters(EAX_PRESET_SEWERPIPE)
Case 22
BASS_SetEAXParameters(EAX_PRESET_UNDERWATER)
Case 23
BASS_SetEAXParameters(EAX_PRESET_DRUGGED)
Case 24
BASS_SetEAXParameters(EAX_PRESET_DIZZY)
Case 25
BASS_SetEAXParameters(EAX_PRESET_PSYCHOTIC)
EndSelect
EndIf
EndProcedure
Procedure Combo_2_Event(Gadget)
If isplaying= #BASS_ACTIVE_PLAYING
If EventType() =#CBN_SELCHANGE
eax (GetGadgetState(Gadget))
EndIf
EndIf
EndProcedure
Procedure UpdateFX (Gadget)
Static v.f
Select Gadget
Case TrackBar_1
mix(TrackBar_1,0)
Case TrackBar_2
mix(TrackBar_2,1)
Case TrackBar_3
mix(TrackBar_3,2)
Case TrackBar_4
mix(TrackBar_4,3)
Case TrackBar_5
mix(TrackBar_5,4)
Case TrackBar_6
mix(TrackBar_6,5)
Case TrackBar_7
mix(TrackBar_7,6)
Case TrackBar_8
mix(TrackBar_8,7)
Case TrackBar_9
mix(TrackBar_9,8)
Case TrackBar_10
mix(TrackBar_10,9)
Case TrackBar_11
mix(TrackBar_11,11)
EndSelect
EndProcedure
Procedure CFX()
fx(0)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(1)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(2)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(3)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(4)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(5)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(6)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(7)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(8)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(9)=BASS_ChannelSetFX(Channel,#BASS_FX_DX8_PARAMEQ,0)
fx(11)=BASS_ChannelSetFX(channel,#BASS_FX_DX8_REVERB,0)
cp\fBandwidth=18;
cp\fCenter=60; 60 Hz
BASS_FXSetParameters(fx(0),@cp);
mix(TrackBar_1,0)
cp\fCenter=170
BASS_FXSetParameters(fx(1),@cp);
mix(TrackBar_2,1)
cp\fCenter=310
BASS_FXSetParameters(fx(2),@cp);
mix(TrackBar_3,2)
cp\fCenter=600
BASS_FXSetParameters(fx(3),@cp);
mix(TrackBar_4,3)
cp\fCenter=1000
BASS_FXSetParameters(fx(4),@cp);
mix(TrackBar_5,4)
cp\fCenter=3000
BASS_FXSetParameters(fx(5),@cp);
mix(TrackBar_6,5)
cp\fCenter=6000
BASS_FXSetParameters(fx(6),@cp);
mix(TrackBar_7,6)
cp\fCenter=12000
BASS_FXSetParameters(fx(7),@cp);
mix(TrackBar_8,7)
cp\fCenter=14000
BASS_FXSetParameters(fx(8),@cp);
mix(TrackBar_9,8)
cp\fCenter=16000; bis 16 KHz
BASS_FXSetParameters(fx(9),@cp);
mix(TrackBar_10,9)
mix(TrackBar_11,11)
EndProcedure
Procedure bassinit()
system=BASS_Init(-1,44100,#BASS_DEVICE_3D,WindowID(Window_0),#Null) ; #BASS_DEVICE_3D for EAX
If system=#False : MessageRequester("Error", "Probleme mit Bass_init",0):End:EndIf
EndProcedure
Procedure OpenWindow_Window_0()
Window_0 = OpenWindow(#PB_Any, 417, 274, 396, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If Window_0
Image=CreateImage(#PB_Any, 395, 175 ,24 )
Image_0 = ImageGadget(#PB_Any, 0, 0, 395, 175, ImageID(Image) , #PB_Image_Border)
ProgressBar_1 = ProgressBarGadget(#PB_Any, 5, 180, 185, 10, 0, 100, #PB_ProgressBar_Smooth)
TrackBar_0 = TrackBarGadget(#PB_Any, 5, 195, 180, 25, 0, 100)
SetGadgetState(TrackBar_0,60)
ProgressBar_2 = ProgressBarGadget(#PB_Any, 200, 180, 185, 15, 0, 32770, #PB_ProgressBar_Smooth)
ProgressBar_3 = ProgressBarGadget(#PB_Any, 200, 200, 185, 15, 0, 32770, #PB_ProgressBar_Smooth)
Button_1 = ButtonGadget(#PB_Any, 5, 220, 50, 20, "Prev")
Button_2 = ButtonGadget(#PB_Any, 60, 220, 50, 20, "Play")
Button_3 = ButtonGadget(#PB_Any, 115, 220, 50, 20, "Pause")
Button_4 = ButtonGadget(#PB_Any, 170, 220, 50, 20, "Next")
Button_5 = ButtonGadget(#PB_Any, 225, 220, 50, 20, "Load")
Combo_1 = ComboBoxGadget(#PB_Any, 300, 220, 85, 20)
AddGadgetItem(Combo_1, -1, "Classic")
AddGadgetItem(Combo_1, -1, "Club")
AddGadgetItem(Combo_1, -1, "Dance")
AddGadgetItem(Combo_1, -1, "Flat")
AddGadgetItem(Combo_1, -1, "FullBass")
AddGadgetItem(Combo_1, -1, "Bass&Treble")
AddGadgetItem(Combo_1, -1, "Fulltreble")
AddGadgetItem(Combo_1, -1, "Laptop")
AddGadgetItem(Combo_1, -1, "LargeHall")
AddGadgetItem(Combo_1, -1, "Live")
AddGadgetItem(Combo_1, -1, "Party")
AddGadgetItem(Combo_1, -1, "Pop")
AddGadgetItem(Combo_1, -1, "Reggae")
AddGadgetItem(Combo_1, -1, "Rock")
AddGadgetItem(Combo_1, -1, "Ska")
AddGadgetItem(Combo_1, -1, "Soft")
AddGadgetItem(Combo_1, -1, "Softrock")
AddGadgetItem(Combo_1, -1, "Techno")
SetGadgetState(Combo_1,2)
TrackBar_1 = TrackBarGadget(#PB_Any, 5, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_2 = TrackBarGadget(#PB_Any, 25, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_3 = TrackBarGadget(#PB_Any, 45, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_4 = TrackBarGadget(#PB_Any, 65, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_5 = TrackBarGadget(#PB_Any, 85, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_6 = TrackBarGadget(#PB_Any, 105, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_7 = TrackBarGadget(#PB_Any, 125, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_8 = TrackBarGadget(#PB_Any, 145, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_9 = TrackBarGadget(#PB_Any, 165, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_10 = TrackBarGadget(#PB_Any, 185, 250, 25, 145, 0, 240, #PB_TrackBar_Vertical)
TrackBar_11 = TrackBarGadget(#PB_Any, 260, 245, 25, 145, 0, 240, #PB_TrackBar_Vertical)
;werte werden wie folgt berechnet z.b. 120
;v = ((trackbarmax 240-120)/10)-12 ergibt 0.0 db
;oder z.b. 72
;v = ((trackbarmax 240-72)/10)-12 ergibt 4.8 db
;Default "Club"
SetGadgetState(TrackBar_1,179)
SetGadgetState(TrackBar_2,164)
SetGadgetState(TrackBar_3,137)
SetGadgetState(TrackBar_4,120)
SetGadgetState(TrackBar_5,120)
SetGadgetState(TrackBar_6,84)
SetGadgetState(TrackBar_7,72)
SetGadgetState(TrackBar_8,72)
SetGadgetState(TrackBar_9,120)
SetGadgetState(TrackBar_10,120)
SetGadgetState(TrackBar_11,120)
Combo_2 = ComboBoxGadget(#PB_Any, 300, 250, 85, 20)
AddGadgetItem(Combo_2, -1, "GENERIC")
AddGadgetItem(Combo_2, -1, "PADDEDCELL")
AddGadgetItem(Combo_2, -1, "ROOM")
AddGadgetItem(Combo_2, -1, "BATHROOM")
AddGadgetItem(Combo_2, -1, "LIVINGROOM")
AddGadgetItem(Combo_2, -1, "STONEROOM")
AddGadgetItem(Combo_2, -1, "AUDITORIUM")
AddGadgetItem(Combo_2, -1, "CONCERTHALL")
AddGadgetItem(Combo_2, -1, "CAVE")
AddGadgetItem(Combo_2, -1, "ARENA")
AddGadgetItem(Combo_2, -1, "HANGAR")
AddGadgetItem(Combo_2, -1, "CARPETEDHALLWAY")
AddGadgetItem(Combo_2, -1, "HALLWAY")
AddGadgetItem(Combo_2, -1, "STONECORRIDOR")
AddGadgetItem(Combo_2, -1, "ALLEY")
AddGadgetItem(Combo_2, -1, "FOREST")
AddGadgetItem(Combo_2, -1, "CITY")
AddGadgetItem(Combo_2, -1, "MOUNTAINS")
AddGadgetItem(Combo_2, -1, "QUARRY")
AddGadgetItem(Combo_2, -1, "PLAIN")
AddGadgetItem(Combo_2, -1, "PARKINGLOT")
AddGadgetItem(Combo_2, -1, "SEWERPIPE")
AddGadgetItem(Combo_2, -1, "UNDERWATER")
AddGadgetItem(Combo_2, -1, "DRUGGED")
AddGadgetItem(Combo_2, -1, "DIZZY")
AddGadgetItem(Combo_2, -1, "PSYCHOTIC")
SetGadgetState(Combo_2,0)
Else
End
EndIf
EndProcedure
Procedure Draw()
If isplaying= #BASS_ACTIVE_PLAYING
w.l=ImageWidth(image)
w2.l=w/2
h.l=ImageHeight(image)
h2.l=h/2
BASS_ChannelGetInfo(Channel,@ci)
ReDim wav(ci\chans*w2+1)
BASS_ChannelGetData(Channel,@wav(),(ci\chans*w2*SizeOf(float))|#BASS_DATA_FLOAT)
BASS_ChannelGetData(Channel, @fft(), #BASS_DATA_FFT2048| #BASS_DATA_FFT_INDIVIDUAL)
played=BASS_ChannelBytes2Seconds(channel, BASS_ChannelGetPosition(channel, #BASS_POS_BYTE))
PokeL(*vu,BASS_ChannelGetLevel(Channel))
SetGadgetState(ProgressBar_3,HIWORD(PeekL(*vu)))
SetGadgetState(ProgressBar_2,LOWORD(PeekL(*vu)))
SetGadgetState(ProgressBar_1,(played*100)/Laenge)
StartDrawing(ImageOutput(image))
Box(0,0,w,h,0)
For x=1 To w2
LineXY(w2-x,h,w2-x,h-(h- Pow(0.0000001, fft(x*2)) * h),#Red-x)
LineXY(w2+x,h,w2+x,h-(h- Pow(0.0000001, fft(x*2+1)) * h),#Red-x)
Plot(w2-x,h2+wav(x*ci\chans)*h2,#Yellow)
Plot(w2+x,h2+wav(x*ci\chans+1)*h2,#Yellow)
Next
StopDrawing()
SendMessage_(GadgetID(Image_0),#STM_SETIMAGE,#IMAGE_BITMAP,ImageID(Image))
; setgadgetstate(Image_0,ImageID(Image))
Else
isplaying=#False
EndIf
EndProcedure
OpenWindow_Window_0()
bassinit()
AddWindowTimer( Window_0, 1,25)
;{- Event loop
Repeat
Event = WaitWindowEvent(40)
Gadget = EventGadget()
Type = EventType()
Window = EventWindow()
Timer = EventTimer()
isplaying=BASS_ChannelIsActive(Channel)
Select Event
Case #PB_Event_Gadget
Select Gadget
Case Button_1
Case Button_2
If Channel
If isplaying
If BASS_MusicFree( Channel)<>#True
BASS_StreamFree(Channel)
EndIf
Channel=#Null
isplaying=#Null
EndIf
EndIf
If file.s<>""
Select LCase(GetExtensionPart(file.s))
Case "mp3","mp2","mp1","ogg","aif","wav"
Channel = BASS_StreamCreateFile(#BASSFALSE, @file, 0, 0, #BASS_SAMPLE_MONO|#BASS_SAMPLE_3D|#BASS_SAMPLE_FX) ; #BASS_STREAM_PRESCAN um korrekte Spieldauer zu ermitteln
If Channel
Laenge = BASS_ChannelBytes2Seconds(channel, BASS_ChannelGetLength(channel, #BASS_POS_BYTE))
EndIf
Case "it","xm","mod","s3m","mo3","mtm","umx"
Channel = BASS_MusicLoad(#BASSFALSE, @file, 0, 0, #BASS_SAMPLE_MONO|#BASS_SAMPLE_3D|#BASS_STREAM_PRESCAN|#BASS_SAMPLE_FX , 0)
If Channel
Laenge = BASS_ChannelBytes2Seconds(channel, BASS_ChannelGetLength(channel, #BASS_POS_BYTE))
EndIf
EndSelect
If Channel = 0
MessageRequester("Error", "mist,geht nich",0)
End
Else
BASS_ChannelPlay(channel,0)
volume.f=GetGadgetState(TrackBar_0)/100
BASS_ChannelSetAttribute( channel,#BASS_ATTRIB_VOL,volume)
CFX()
EndIf
EndIf
Case Button_3
isplaying=BASS_ChannelIsActive(Channel)
If isplaying= #BASS_ACTIVE_PLAYING
BASS_ChannelPause(Channel)
Else
BASS_ChannelPlay(Channel,0)
EndIf
Case Button_4
Case Button_5
file.s=OpenFileRequester("Choose music","","playable files|*.mo3;*.xm;*.mod;*.s3m;*.it;*.mtm;*.umx;*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif|All files|*.*",0)
Case Combo_1
Combo_1_Event( Gadget)
Case Combo_2
Combo_2_Event( Gadget)
Case TrackBar_0
If channel
volume.f=GetGadgetState(TrackBar_0)/100
BASS_ChannelSetAttribute( channel,#BASS_ATTRIB_VOL,volume); nur lautstärke des Programms änden
EndIf
Case TrackBar_1,TrackBar_2,TrackBar_3,TrackBar_4,TrackBar_5,TrackBar_6,TrackBar_7,TrackBar_8,TrackBar_9,TrackBar_10,TrackBar_11
UpdateFX (Gadget)
EndSelect
Case #PB_Event_Timer
If timer = 1
Draw()
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
Select Window
Case Window_0
CloseWindow(Window_0)
Window_0 = 0
Break
EndSelect
Default
;
EndSelect
ForEver
;
;}