FMOD Soundcard-test
Posted: Wed Feb 25, 2004 1:37 pm
The following code shows how to test the available soundcard-drivers using DSound / WinMM / ASIO and others from within the fmod.dll.
Code: Select all
; FMOD soundcard - test
;
; An example of how to check the capabilities of your soundcard.
; All data is stored inside a LinkedList for further processing.
;
; written for FMOD 3.71 and needs the FMOD-Wrapper for PureBasic to compile
;
; by Froggerprogger, 25.02.04
Structure SFX_DriverData
outputmodeID.l
outputmode.s
driverID.l
drivername.s
flag_hardware.l
flag_eax2.l
flag_eax3.l
EndStructure
NewList Sounddrivers.SFX_DriverData()
Procedure FSOUND_TestOutputmode(outputmodeID.l, outputmode.s)
If FSOUND_SetOutput(outputmodeID) = #False
MessageRequester("","Cannot initialize output... FSOUND_Init() must not be called before FSOUND_SetOutput()",#MB_ICONERROR)
ProcedureReturn #False
EndIf
Protected numDrivers.l : numDrivers = FSOUND_GetNumDrivers()
Protected i.l, caps.l
If numDrivers = 0
AddElement(Sounddrivers())
Sounddrivers()\outputmodeID = outputmodeID
Sounddrivers()\outputmode = outputmode
Sounddrivers()\drivername = "none available"
Else
For i = 0 To numDrivers - 1
AddElement(Sounddrivers())
Sounddrivers()\outputmodeID = outputmodeID
Sounddrivers()\outputmode = outputmode
Sounddrivers()\driverID = i
If FSOUND_GetDriverName(i) <> 0
Sounddrivers()\drivername = PeekS(FSOUND_GetDriverName(i))
Else
Sounddrivers()\drivername = "no name"
EndIf
FSOUND_GetDriverCaps(i, @caps)
Sounddrivers()\flag_hardware = caps & #FSOUND_CAPS_HARDWARE
Sounddrivers()\flag_eax2 = caps & #FSOUND_CAPS_EAX2
Sounddrivers()\flag_eax3 = caps & #FSOUND_CAPS_EAX3
Next
EndIf
ProcedureReturn numDrivers
EndProcedure
Procedure FSOUND_TestSoundcard()
; just for fun all of the types
; normally WINMM, DSOUND and perhaps ASIO is enough for Windows
SetGadgetText(0, "Testing soundcard, please wait...")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_WINMM, "WinMM")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_DSOUND, "DirectSound")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_A3D, "A3D")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_OSS, "OSS Open Sound System")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_ESD, "ESD")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_ALSA, "Alsa")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_ASIO, "ASIO")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_XBOX, "XBOX")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_PS2, "Playstation 2")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_MAC, "MAC")
FSOUND_TestOutputmode(#FSOUND_OUTPUT_GC, "GameCube")
SetGadgetText(0, "")
EndProcedure
; Open a window and put some gadgets onto in
OpenWindow(0,0,0,400,600, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "FMOD soundcard-test by Froggerprogger")
CreateGadgetList(WindowID())
TextGadget(0, 4, 4, 392, 20, "")
ListIconGadget(1, 4, 24, 392, 572, "results:", 392)
; We must not have called FSOND_Init() before !
FSOUND_TestSoundcard()
; Output
ForEach Sounddrivers()
AddGadgetItem(1, -1, "_________________________________________________")
AddGadgetItem(1, -1, "OutputID: " + Str(Sounddrivers()\outputmodeID) + " ( " + Sounddrivers()\outputmode + " )")
AddGadgetItem(1, -1, "DriverID: " + Str(Sounddrivers()\driverID) + " ( " + Sounddrivers()\drivername + " )")
If Sounddrivers()\drivername = "No Sound Driver"
Continue
EndIf
If Sounddrivers()\flag_hardware
AddGadgetItem(1, -1, "- Hardwarechannels supported")
Else
AddGadgetItem(1, -1, "- no Hardwarechannels")
EndIf
If Sounddrivers()\flag_eax2
AddGadgetItem(1, -1, "- EAX 2 supported")
Else
AddGadgetItem(1, -1, "- no EAX 2")
EndIf
If Sounddrivers()\flag_eax3
AddGadgetItem(1, -1, "- EAX 3 supported")
Else
AddGadgetItem(1, -1, "- no EAX 3")
EndIf
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow