123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- #include "WwiseSound.h"
- #include "BFApp.h"
- #if (_MSC_VER != 1800)
- #undef BF_WWISE_ENABLED
- #endif
- #ifdef BF_WWISE_ENABLED
- #if _DEBUG
- #define BF_IS_WWISE_COMM_ENABLED 1
- #endif
- #include "AK/SoundEngine/Common/AkTypes.h"
- #include <AK/SoundEngine/Common/AkMemoryMgr.h> // Memory Manager
- #include <AK/SoundEngine/Common/AkModule.h> // Default memory and stream managers
- #include <AK/SoundEngine/Common/IAkStreamMgr.h> // Streaming Manager
- #include <AK/SoundEngine/Common/AkSoundEngine.h> // Sound engine
- #include <AK/MusicEngine/Common/AkMusicEngine.h> // Music Engine
- #include <AK/SoundEngine/Common/AkStreamMgrModule.h> // AkStreamMgrModule
- #include <AK/Plugin/AllPluginsFactories.h>
- #include "Win32/AkDefaultIOHookBlocking.h"
- #ifndef AK_OPTIMIZED
- #include <AK/Comm/AkCommunication.h> // Communication between Wwise and the game (excluded in release build)
- #endif
- /*
- AkMusicEngine.lib
- AkHarmonizerFX.lib
- AkPitchShifterFX.lib
- AkStereoDelayFX.lib
- AkTimeStretchFX.lib
- AkMeterFX.lib
- AkConvolutionReverbFX.lib
- AkAudioInputSource.lib
- AkSilenceSource.lib
- AkPeakLimiterFX.lib
- AkRoomVerbFX.lib
- AkParametricEQFX.lib
- AkGainFX.lib
- AkDelayFX.lib
- AkMatrixReverbFX.lib
- AkExpanderFX.lib
- AkCompressorFX.lib
- AkSineSource.lib
- AkGuitarDistortionFX.lib
- AkTremoloFX.lib
- AkFlangerFX.lib
- AkToneSource.lib
- AkSoundSeedImpactFX.lib
- McDSPLimiterFX.lib McDSPFutzBoxFX.lib AkSoundSeedWoosh.lib AkSoundSeedWind.lib AkStreamMgr.lib AkVorbisDecoder.lib ;%(AdditionalDependencies)*/
- //iZHybridReverbFX.lib iZTrashBoxModelerFX.lib iZTrashDelayFX.lib iZTrashDistortionFX.lib iZTrashDynamicsFX.lib iZTrashFiltersFX.lib iZTrashMultibandDistortionFX.lib McDSPLimiterFX.lib
- #pragma comment(lib, "AkSoundEngine.lib")
- #pragma comment(lib, "AkMemoryMgr.lib")
- #pragma comment(lib, "AkStreamMgr.lib")
- #pragma comment(lib, "AkMusicEngine.lib")
- #pragma comment(lib, "AkVorbisDecoder.lib")
- #pragma comment(lib, "AkAudioInputSource.lib")
- #pragma comment(lib, "AkToneSource.lib")
- #pragma comment(lib, "AkSilenceSource.lib")
- #pragma comment(lib, "AkSineSource.lib")
- //#pragma comment(lib, "AkMP3Source.lib")
- #pragma comment(lib, "AkMatrixReverbFX.lib")
- #pragma comment(lib, "AkMeterFX.lib")
- #pragma comment(lib, "AkParametricEQFX.lib")
- #pragma comment(lib, "AkGainFX.lib")
- #pragma comment(lib, "AkDelayFX.lib")
- #pragma comment(lib, "AkCompressorFX.lib")
- #pragma comment(lib, "AkExpanderFX.lib")
- #pragma comment(lib, "AkPeakLimiterFX.lib")
- #pragma comment(lib, "AkRoomVerbFX.lib")
- #pragma comment(lib, "AkGuitarDistortionFX.lib")
- #pragma comment(lib, "AkFlangerFX.lib")
- #pragma comment(lib, "AkStereoDelayFX.lib")
- #pragma comment(lib, "AkTimeStretchFX.lib")
- #pragma comment(lib, "AkHarmonizerFX.lib")
- #pragma comment(lib, "AkPitchShifterFX.lib")
- #pragma comment(lib, "AkConvolutionReverbFX.lib")
- #pragma comment(lib, "AkTremoloFX.lib")
- #pragma comment(lib, "AkRumble.lib")
- #pragma comment(lib, "AkMotionGenerator.lib")
- #pragma comment(lib, "AkSoundSeedWind.lib")
- #pragma comment(lib, "AkSoundSeedWoosh.lib")
- #pragma comment(lib, "AkSoundSeedImpactFX.lib")
- #pragma comment(lib, "McDSPFutzBoxFX.lib")
- #pragma comment(lib, "dxguid.lib")
- #ifdef BF_IS_WWISE_COMM_ENABLED
- #pragma comment(lib, "CommunicationCentral.lib")
- #endif
- #pragma comment(lib, "wsock32.lib")
- static bool gWwiseInitialized = false;
- USING_NS_BF;
- #define DEMO_DEFAULT_POOL_SIZE 2*1024*1024
- #define DEMO_LENGINE_DEFAULT_POOL_SIZE 1*1024*1024
- CAkDefaultIOHookBlocking* m_pLowLevelIO = NULL;
- namespace AK
- {
- void * AllocHook( size_t in_size )
- {
- return malloc( in_size );
- }
- void FreeHook( void * in_ptr )
- {
- free( in_ptr );
- }
- #ifdef _WINDOWS
- // Note: VirtualAllocHook() may be used by I/O pools of the default implementation
- // of the Stream Manager, to allow "true" unbuffered I/O (using FILE_FLAG_NO_BUFFERING
- // - refer to the Windows SDK documentation for more details). This is NOT mandatory;
- // you may implement it with a simple malloc().
- void * VirtualAllocHook(
- void * in_pMemAddress,
- size_t in_size,
- DWORD in_dwAllocationType,
- DWORD in_dwProtect
- )
- {
- return VirtualAlloc( in_pMemAddress, in_size, in_dwAllocationType, in_dwProtect );
- }
- void VirtualFreeHook(
- void * in_pMemAddress,
- size_t in_size,
- DWORD in_dwFreeType
- )
- {
- VirtualFree( in_pMemAddress, in_size, in_dwFreeType );
- }
- #endif
- }
- static bool WWise_Init()
- {
- m_pLowLevelIO = new CAkDefaultIOHookBlocking();
- AkMemSettings memSettings;
- AkStreamMgrSettings stmSettings;
- AkDeviceSettings deviceSettings;
- AkInitSettings initSettings;
- AkPlatformInitSettings platformInitSettings;
- AkMusicSettings musicInit;
-
- // Get default settings
- memSettings.uMaxNumPools = 20;
- AK::StreamMgr::GetDefaultSettings( stmSettings );
-
- AK::StreamMgr::GetDefaultDeviceSettings( deviceSettings );
-
- AK::SoundEngine::GetDefaultInitSettings( initSettings );
- initSettings.uDefaultPoolSize = DEMO_DEFAULT_POOL_SIZE;
- #if defined( INTEGRATIONDEMO_ASSERT_HOOK )
- initSettings.pfnAssertHook = INTEGRATIONDEMO_ASSERT_HOOK;
- #endif // defined( INTEGRATIONDEMO_ASSERT_HOOK )
-
- AK::SoundEngine::GetDefaultPlatformInitSettings( platformInitSettings );
- platformInitSettings.uLEngineDefaultPoolSize = DEMO_LENGINE_DEFAULT_POOL_SIZE;
-
- AK::MusicEngine::GetDefaultInitSettings( musicInit );
-
- //
- // Create and initialize an instance of the default memory manager. Note
- // that you can override the default memory manager with your own. Refer
- // to the SDK documentation for more information.
- //
-
- AKRESULT res = AK::MemoryMgr::Init( &memSettings );
- if ( res != AK_Success )
- {
- return false;
- }
-
- //
- // Create and initialize an instance of the default streaming manager. Note
- // that you can override the default streaming manager with your own. Refer
- // to the SDK documentation for more information.
- //
-
- // Customize the Stream Manager settings here.
-
- if ( !AK::StreamMgr::Create( stmSettings ) )
- {
- return false;
- }
- //
- // Create a streaming device with blocking low-level I/O handshaking.
- // Init() creates a streaming device in the Stream Manager, and registers itself as the File Location Resolver.
- deviceSettings.uSchedulerTypeFlags = AK_SCHEDULER_BLOCKING;
- res = m_pLowLevelIO->Init( deviceSettings );
- if ( res != AK_Success )
- {
- return false;
- }
- // Set the path to the SoundBank Files.
- /*#ifdef HOST_WINDOWS
- std::wstring wFullPath = StringToWString(m_filePath);
- m_pLowLevelIO->SetBasePath( wFullPath.c_str() );
- #else
- m_pLowLevelIO->SetBasePath( m_filePath.c_str() );
- #endif */
- //
- // Create the Sound Engine
- // Using default initialization parameters
- //
-
- res = AK::SoundEngine::Init( &initSettings, &platformInitSettings );
- if ( res != AK_Success )
- {
- return false;
- }
-
- //
- // Initialize the music engine
- // Using default initialization parameters
- //
-
- res = AK::MusicEngine::Init( &musicInit );
- if ( res != AK_Success )
- {
- return false;
- }
-
- #if defined HOST_MACOSX || defined HOST_IPHONEOS
- // Register the AAC codec for Mac/iOS.
- AK::SoundEngine::RegisterCodec(
- AKCOMPANYID_AUDIOKINETIC,
- AKCODECID_AAC,
- CreateAACFilePlugin,
- CreateAACBankPlugin );
- #endif
- #if BF_IS_WWISE_COMM_ENABLED
- //
- // Initialize communications (not in release build!)
- //
- AkCommSettings commSettings;
- AK::Comm::GetDefaultInitSettings( commSettings );
- res = AK::Comm::Init( commSettings );
- if ( res != AK_Success )
- {
- }
- #endif // BF_IS_WWISE_COMM_ENABLED
- gWwiseInitialized = true;
- return true;
- }
- void Beefy::WWiseUpdate()
- {
- if (gWwiseInitialized)
- AK::SoundEngine::RenderAudio();
- }
- BF_EXPORT void BF_CALLTYPE Wwise_Shutdown()
- {
- if (!gWwiseInitialized)
- return;
- #if BF_IS_WWISE_COMM_ENABLED
- //
- // Terminate Communication Services (not in release build!)
- //
- AK::Comm::Term();
- #endif // BF_IS_WWISE_COMM_ENABLED
- //
- // Terminate the music engine
- //
- AK::MusicEngine::Term();
- //
- // Terminate the sound engine
- //
- AK::SoundEngine::Term();
- // Terminate the streaming device and streaming manager
-
- // SexyIOHookBlocking::Term() destroys its associated streaming device
- // that lives in the Stream Manager, and unregisters itself as the File Location Resolver.
- m_pLowLevelIO->Term();
- delete m_pLowLevelIO;
-
- if ( AK::IAkStreamMgr::Get() )
- AK::IAkStreamMgr::Get()->Destroy();
- // Terminate the Memory Manager
- AK::MemoryMgr::Term();
- gWwiseInitialized = false;
- }
- //
- BF_EXPORT void* BF_CALLTYPE Wwise_LoadBankByName(const uint16* name)
- {
- if (!gWwiseInitialized)
- WWise_Init();
- std::wstring bankFileName = gBFApp->mInstallDir + UTF16Decode(name) + L".bnk";
- AkBankID bankID;
- AKRESULT result = AK::SoundEngine::LoadBank(bankFileName.c_str(), AK_DEFAULT_POOL_ID, bankID);
- if (result != AK_Success)
- return NULL;
- return (void*) bankID;
- }
- BF_EXPORT uint32 BF_CALLTYPE Wwise_SendEvent(uint32 eventId, void* gameObject)
- {
- uint32 playingSound;
- playingSound = AK::SoundEngine::PostEvent(eventId, (AkGameObjectID) gameObject);
- return playingSound;
- }
- BF_EXPORT int BF_CALLTYPE Wwise_SetRTPCValue(uint32 paramId, float value, void* gameObject)
- {
- if (gameObject == 0)
- {
- if (AK::SoundEngine::SetRTPCValue(paramId, value, (AkGameObjectID) AK_INVALID_GAME_OBJECT) == AK_Success)
- return true;
- }
- else
- {
- if (AK::SoundEngine::SetRTPCValue(paramId, value, (AkGameObjectID) gameObject) == AK_Success)
- return true;
- }
- return false;
- }
- #else
- void Beefy::WWiseUpdate()
- {
- }
- BF_EXPORT void* BF_CALLTYPE Wwise_LoadBankByName(const uint16* name)
- {
- return NULL;
- }
- BF_EXPORT uint32 BF_CALLTYPE Wwise_SendEvent(uint32 eventId, void* gameObject)
- {
- return 0;
- }
- BF_EXPORT int BF_CALLTYPE Wwise_SetRTPCValue(uint32 paramId, float value, void* gameObject)
- {
- return false;
- }
- BF_EXPORT void BF_CALLTYPE Wwise_Shutdown()
- {
- }
- #endif
|