// *************************************************************************** void CListenerFMod::setDopplerFactor( float f ) { if( !CSoundDriverFMod::getInstance()->fmodOk() ) return; // clamp as in DSound. clamp(f, 0.f, 10.f); // set FSOUND_3D_SetDopplerFactor(f); }
void LLListener_FMOD::setDopplerFactor(F32 factor) { mDopplerFactor = factor; FSOUND_3D_SetDopplerFactor(factor); }
/****************************************************************************** * * Initialise driver and listener * *****************************************************************************/ EXPORT INT32 HWRAPI(Startup) (I_Error_t FatalErrorFunction, snddev_t *snd_dev) { boolean inited = false; INT32 i = 0; I_ErrorFMOD = FatalErrorFunction; if (FSOUND_GetVersion() < FMOD_VERSION) { DBG_Printf("Error : You are using the wrong DLL version!\nYou should be using FMOD %.02f\n", FMOD_VERSION); return inited; } else DBG_Printf("S_FMOD Init(): FMOD_SOUND driver for SRB2 %s\n",VERSIONSTRING); if (!FSOUND_SetMinHardwareChannels(STATIC_SOURCES_NUM*4)) DBG_Printf("FMOD(Startup,FSOUND_SetMinHardwareChannels,# of Channels Min: %i): %s\n",STATIC_SOURCES_NUM*4, FMOD_ErrorString(FSOUND_GetError())); if (!FSOUND_SetMaxHardwareChannels(0)) DBG_Printf("FMOD(Startup,FSOUND_SetMaxHardwareChannels,# of Channels Min: %i): %s\n",0, FMOD_ErrorString(FSOUND_GetError())); for (i = 0; i < FSOUND_GetNumDrivers(); i++) { UINT32 caps = 0; DBG_Printf("Driver Caps, if any\n"); if (FSOUND_GetDriverCaps(i, &caps)) { DBG_Printf("FMOD: Driver# %d - %s\n", i+1, FSOUND_GetDriverName(i)); // print driver names if (caps & FSOUND_CAPS_HARDWARE) DBG_Printf("This sound hardware supports hardware accelerated 3d sound.\n"); if (caps & FSOUND_CAPS_EAX2) DBG_Printf("This sound hardware supports hardware accelerated 3d sound with EAX 2 reverb.\n"); if (caps & FSOUND_CAPS_EAX3) DBG_Printf("This sound hardware supports hardware accelerated 3d sound with EAX 3 reverb.\n"); } else DBG_Printf("FMOD(Startup,FSOUND_GetDriverCaps,%s): %s\n",FSOUND_GetDriverName(i), FMOD_ErrorString(FSOUND_GetError())); } #if defined (_WIN32) || defined (_WIN64) if (!FSOUND_SetHWND(snd_dev->hWnd)) { DBG_Printf("FMOD(Startup,FSOUND_SetHWND): %s\n", FMOD_ErrorString(FSOUND_GetError())); return inited; } else #endif { DBG_Printf("Initialising FMOD %.02f\n",FMOD_VERSION); inited = FSOUND_Init(snd_dev->sample_rate,MAXCHANNEL,0); } if (!inited) { DBG_Printf("FMOD(Startup,Main): %s\n", FMOD_ErrorString(FSOUND_GetError())); } else { #ifdef OLDFMOD DBG_Printf(" Maximum hardware mixing buffers %d\n", FSOUND_GetNumHardwareChannels()); #else INT32 num2DC, num3DC, numDC; if (FSOUND_GetNumHWChannels(&num2DC,&num3DC,&numDC)) { DBG_Printf(" Maximum hardware 2D buffers %d\n", num2DC); DBG_Printf(" Maximum hardware 3D buffers %d\n", num3DC); DBG_Printf(" Maximum hardware mixing buffers %d\n", numDC); } else DBG_Printf("FMOD(Startup,FSOUND_GetNumHWChannels): %s\n", FMOD_ErrorString(FSOUND_GetError())); #endif DBG_Printf("FMOD is up and running at %i KHZ\n",FSOUND_GetOutputRate()); DBG_Printf("Sound hardware capabilities:\n"); if (FSOUND_GetDriverName(FSOUND_GetDriver())) DBG_Printf(" Driver is %s\n",FSOUND_GetDriverName(FSOUND_GetDriver())); else DBG_Printf("FMOD(Startup,FSOUND_GetDriverName): %s\n", FMOD_ErrorString(FSOUND_GetError())); FSOUND_3D_SetDistanceFactor(1.0f/72.0f); FSOUND_3D_SetRolloffFactor(0); FSOUND_3D_SetRolloffFactor(1.6f); #ifdef MORESTUFF FSOUND_3D_SetDopplerFactor(0); #endif switch (FSOUND_GetOutput()) { case FSOUND_OUTPUT_NOSOUND: DBG_Printf("FMOD driver: NoSound driver, all calls to this succeed but do nothing.\n"); break; case FSOUND_OUTPUT_WINMM: DBG_Printf("FMOD driver: Windows Multimedia driver.\n"); break; case FSOUND_OUTPUT_DSOUND: DBG_Printf("FMOD driver: DirectSound driver. You need this to get EAX2 or EAX3 support, or FX api support.\n"); break; case FSOUND_OUTPUT_A3D: DBG_Printf("FMOD driver: A3D driver.\n"); break; case FSOUND_OUTPUT_XBOX: DBG_Printf("FMOD driver: Xbox driver\n"); break; case FSOUND_OUTPUT_OSS: DBG_Printf("FMOD driver: Linux/Unix OSS (Open Sound System) driver, i.e. the kernel sound drivers.\n"); break; case FSOUND_OUTPUT_ESD: DBG_Printf("FMOD driver: Linux/Unix ESD (Enlightment Sound Daemon) driver.\n"); break; case FSOUND_OUTPUT_ALSA: DBG_Printf("FMOD driver: Linux Alsa driver.\n"); break; case FSOUND_OUTPUT_MAC: DBG_Printf("FMOD driver: Mac SoundManager driver\n"); break; case FSOUND_OUTPUT_PS2: DBG_Printf("FMOD driver: PlayStation 2 driver\n"); break; case FSOUND_OUTPUT_GC: DBG_Printf("FMOD driver: Gamecube driver\n"); break; case FSOUND_OUTPUT_NOSOUND_NONREALTIME: DBG_Printf("FMOD driver: This is the same as nosound, but the sound generation is driven by FSOUND_Update\n"); break; case FSOUND_OUTPUT_ASIO: DBG_Printf("FMOD driver: Low latency ASIO driver\n"); break; default: DBG_Printf("FMOD driver: Unknown Sound Driver\n"); break; } relsetup(); blankfmsample = FSOUND_Sample_Alloc(FSOUND_UNMANAGED,1,FSOUND_UNORMAL,11025,127,FSOUND_STEREOPAN,127); if (!blankfmsample) DBG_Printf("FMOD(Startup,FSOUND_Sample_Alloc): %s\n", FMOD_ErrorString(FSOUND_GetError())); else if (!FSOUND_Sample_SetMaxPlaybacks(blankfmsample,STATIC_SOURCES_NUM*2)) DBG_Printf("FMOD(Startup,FSOUND_Sample_SetMaxPlaybacks): %s\n", FMOD_ErrorString(FSOUND_GetError())); } return inited; }