diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/MainWnd.cs b/Samples/CSharpAudioPlayer/cAudioPlayer/MainWnd.cs index 4ddc67c..301cb22 100644 --- a/Samples/CSharpAudioPlayer/cAudioPlayer/MainWnd.cs +++ b/Samples/CSharpAudioPlayer/cAudioPlayer/MainWnd.cs @@ -12,7 +12,7 @@ namespace cAudioPlayer { public partial class MainWnd : Form { - private readonly IAudioManager mAudioMgr; + private IAudioManager mAudioMgr; private IAudioSource mCurrentSource; private readonly AudioSourceListener mAudioListener; private readonly Timer mUpdateTimer = new Timer(); @@ -22,6 +22,18 @@ namespace cAudioPlayer mAudioMgr = cAudioCSharpWrapper.createAudioManager(true); mAudioListener = new AudioSourceListener(this); mUpdateTimer.Tick += UpdateTimerTick; + Closing += MainWnd_Closing; + } + + void MainWnd_Closing(object sender, CancelEventArgs e) + { + if (mCurrentSource != null) + { + mCurrentSource.unRegisterEventHandler(mAudioListener); + mCurrentSource = null; + } + mAudioMgr.Dispose(); + mAudioMgr = null; } void UpdateTimerTick(object sender, EventArgs e) diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/EAXLegacyPreset_d.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/EAXLegacyPreset_d.dll index 7473726..dbe84cd 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/EAXLegacyPreset_d.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/EAXLegacyPreset_d.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAp_mp3Decoder_d.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAp_mp3Decoder_d.dll index 91409a4..e4f923c 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAp_mp3Decoder_d.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAp_mp3Decoder_d.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharp.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharp.dll index 8362316..b19072b 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharp.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharp.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharpWrapper.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharpWrapper.dll index 40aac74..e767dfd 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharpWrapper.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudioCSharpWrapper.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudio_d.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudio_d.dll index 8d05f30..eaf1fe2 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudio_d.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Debug/cAudio_d.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/EAXLegacyPreset.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/EAXLegacyPreset.dll index d133141..6e34c0d 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/EAXLegacyPreset.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/EAXLegacyPreset.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAp_mp3Decoder.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAp_mp3Decoder.dll index 50bcf0f..f687185 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAp_mp3Decoder.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAp_mp3Decoder.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudio.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudio.dll index e1d7c5a..bd79100 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudio.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudio.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharp.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharp.dll index d96a712..e746391 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharp.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharp.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharpWrapper.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharpWrapper.dll index fbe1b09..bd97b9e 100644 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharpWrapper.dll and b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/cAudioCSharpWrapper.dll differ diff --git a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/mp3Decoder.dll b/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/mp3Decoder.dll deleted file mode 100644 index 5527bea..0000000 Binary files a/Samples/CSharpAudioPlayer/cAudioPlayer/bin/Release/mp3Decoder.dll and /dev/null differ diff --git a/Samples/Tutorial5_AudioEffects/src/main.cpp b/Samples/Tutorial5_AudioEffects/src/main.cpp index 8a1692c..121f56e 100644 --- a/Samples/Tutorial5_AudioEffects/src/main.cpp +++ b/Samples/Tutorial5_AudioEffects/src/main.cpp @@ -19,7 +19,7 @@ using namespace std; int main(int argc, char* argv[]) { //Some fancy text - cout << "cAudio 2.1.0 Tutorial 5: Basic Audio Effects. \n \n"; + cout << "cAudio 2.2.0 Tutorial 5: Basic Audio Effects. \n \n"; //Create an uninitialized Audio Manager cAudio::IAudioManager* manager = cAudio::createAudioManager(false); diff --git a/cAudio/Headers/cAudioManager.h b/cAudio/Headers/cAudioManager.h index ea9bb37..9d427fd 100644 --- a/cAudio/Headers/cAudioManager.h +++ b/cAudio/Headers/cAudioManager.h @@ -4,7 +4,6 @@ #pragma once -#include "cAudioSource.h" #include "cListener.h" #include "cMutex.h" #include "cAudioEffects.h" @@ -14,9 +13,7 @@ #include "cSTLAllocator.h" #include "cAudioString.h" #include "IThread.h" - -#include -#include +#include "IAudioDeviceContext.h" namespace cAudio { @@ -34,7 +31,7 @@ namespace cAudio ON_DATASOURCEREGISTER, }; - cAudioManager() : Device(NULL), Context(NULL), AudioThread(NULL), EFXSupported(false), Initialized(false) { } + cAudioManager() : AudioThread(NULL), AudioContext(NULL), Initialized(false) { } virtual ~cAudioManager(); virtual bool initialize(const char* deviceName = 0x0, int outputFrequency = -1, int eaxEffectSlots = 4); @@ -66,37 +63,29 @@ namespace cAudio virtual IListener* getListener() { return &initlistener; } - virtual bool isUpdateThreadRunning() - { - return (AudioThread != NULL && AudioThread->isRunning()); - } + virtual bool isUpdateThreadRunning(); #if CAUDIO_EFX_ENABLED == 1 - virtual IAudioEffects* getEffects() { return &initEffects; } + virtual IAudioEffects* getEffects(); #endif + protected: virtual void run(); IAudioSource* createAudioSource(IAudioDecoder* decoder, const cAudioString& audioName, const cAudioString& dataSource); private: - //! Mutex for thread syncronization + //! Mutex for thread synchronization cAudioMutex Mutex; - //! An OpenAL context pointer - ALCcontext* Context; - //! An OpenAL device pointer - ALCdevice* Device; - - //! Holds whether EFX is supported - bool EFXSupported; - //! Whether the manager is currently initialized and ready to go. bool Initialized; //! Our update thread IThread* AudioThread; + IAudioDeviceContext* AudioContext; + //! Holds an index for fast searching of audio sources by name cAudioMap::Type audioIndex; typedef cAudioMap::Type::iterator audioIndexIterator; @@ -112,12 +101,6 @@ namespace cAudio //! The listener object cListener initlistener; -#if CAUDIO_EFX_ENABLED == 1 - //! Interface for audio effects - cAudioEffects initEffects; -#endif - //! Check for OpenAL errors - bool checkError(); //! Signals a event to all event handlers void signalEvent(Events sevent); diff --git a/cAudio/Headers/cOpenALDeviceContext.h b/cAudio/Headers/cOpenALDeviceContext.h new file mode 100644 index 0000000..e5237ad --- /dev/null +++ b/cAudio/Headers/cOpenALDeviceContext.h @@ -0,0 +1,55 @@ +// Copyright (c) 2008-2011 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones, Murat (wolfmanfx) Sari +// This file is part of the "cAudio Engine" +// For conditions of distribution and use, see copyright notice in cAudio.h + +#pragma once + +#include +#include + +#include "IAudioDeviceContext.h" +#include "cMemoryOverride.h" +#include "cMutex.h" +#include "cAudioEffects.h" + +namespace cAudio +{ + class cOpenALDeviceContext : public IAudioDeviceContext, public cMemoryOverride + { + public: + cOpenALDeviceContext(IAudioManager* audioManager); + virtual ~cOpenALDeviceContext(); + virtual bool initialize(const char* deviceName, int outputFrequency, int eaxEffectSlots); + virtual void shutDown(); + virtual void update(); + virtual IAudioManager* getAudioManager() const; + virtual IAudioEffects* getEffects() const; + ALCcontext* getOpenALContext() const; + + private: + + //! Check for OpenAL errors + bool checkError(); + + //! Mutex for thread synchronization + cAudioMutex Mutex; + + //! An OpenAL context pointer + ALCcontext* Context; + + //! An OpenAL device pointer + ALCdevice* Device; + + IAudioManager* AudioManager; + + bool Initialized; + + //! Holds whether EFX is supported + bool EFXSupported; + +#if CAUDIO_EFX_ENABLED == 1 + //! Interface for audio effects + cAudioEffects initEffects; +#endif + }; +} \ No newline at end of file diff --git a/cAudio/cAudio_src_files.cmake b/cAudio/cAudio_src_files.cmake index 0301347..b1bd841 100644 --- a/cAudio/cAudio_src_files.cmake +++ b/cAudio/cAudio_src_files.cmake @@ -24,6 +24,7 @@ set (file_root_header_files Headers/cWavAudioDecoderFactory.h Headers/cWavDecoder.h Headers/cOpenALAudioDeviceList.h + Headers/cOpenALDeviceContext.h ) set (file_root_include include/cAudio.h @@ -57,6 +58,7 @@ set (file_root_include include/IPluginManager.h include/IRefCounted.h include/ISourceEventHandler.h + include/IAudioDeviceContext.h ) set (file_root_util Headers/cUtils.h @@ -87,6 +89,7 @@ set (file_root_source_files src/cWavDecoder.cpp src/cAudio.cpp src/cOpenALAudioDeviceList.cpp + src/cOpenALDeviceContext.cpp ) if(CAUDIO_ENABLE_OGG) diff --git a/cAudio/include/IAudioDeviceContext.h b/cAudio/include/IAudioDeviceContext.h new file mode 100644 index 0000000..e8dcb38 --- /dev/null +++ b/cAudio/include/IAudioDeviceContext.h @@ -0,0 +1,21 @@ +// Copyright (c) 2008-2011 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones, Murat (wolfmanfx) Sari +// This file is part of the "cAudio Engine" +// For conditions of distribution and use, see copyright notice in cAudio.h + +#pragma once + +namespace cAudio +{ + class IAudioManager; + class IAudioEffects; + + class IAudioDeviceContext + { + public: + virtual bool initialize(const char* deviceName, int outputFrequency, int eaxEffectSlots) = 0; + virtual void shutDown() = 0; + virtual void update() = 0; + virtual IAudioManager* getAudioManager() const = 0; + virtual IAudioEffects* getEffects() const = 0; + }; +} \ No newline at end of file diff --git a/cAudio/src/cAudioManager.cpp b/cAudio/src/cAudioManager.cpp index c09dfd3..217caac 100644 --- a/cAudio/src/cAudioManager.cpp +++ b/cAudio/src/cAudioManager.cpp @@ -4,6 +4,7 @@ #include "cAudioManager.h" #include "cAudio.h" +#include "cAudioSource.h" #include "cAudioPlatform.h" #include "cAudioSleep.h" #include "cUtils.h" @@ -15,31 +16,13 @@ #include "cRawAudioDecoderFactory.h" #include #include - -#if CAUDIO_EFX_ENABLED == 1 - -#ifdef CAUDIO_PLATFORM_WIN - #include - #include - #include -#endif - -#ifdef CAUDIO_PLATFORM_LINUX - #include -#endif - -#endif +#include "cOpenALDeviceContext.h" namespace cAudio { cAudioManager::~cAudioManager() { - if (AudioThread) - { - AudioThread->join(); - delete AudioThread; - AudioThread = NULL; - } + shutDown(); } bool cAudioManager::initialize(const char* deviceName, int outputFrequency, int eaxEffectSlots) @@ -49,80 +32,10 @@ namespace cAudio if(Initialized) return false; - //Stores the context attributes (MAX of 4, with 2 zeros to terminate) - ALint attribs[6] = { 0 }; + AudioContext = CAUDIO_NEW cOpenALDeviceContext(this); - unsigned int currentAttrib = 0; - if(outputFrequency > 0) - { - attribs[currentAttrib++] = ALC_FREQUENCY; - attribs[currentAttrib++] = outputFrequency; - } -#if CAUDIO_EFX_ENABLED == 1 - if(eaxEffectSlots > 0) - { - attribs[currentAttrib++] = ALC_MAX_AUXILIARY_SENDS; - attribs[currentAttrib++] = eaxEffectSlots; - } -#endif - - //Create a new device - Device = alcOpenDevice(deviceName); - //Check if device can be created - if (Device == NULL) - { - getLogger()->logError("AudioManager", "Failed to Create OpenAL Device."); - checkError(); + if(!AudioContext->initialize(deviceName, outputFrequency, eaxEffectSlots)) return false; - } - - Context = alcCreateContext(Device, attribs); - if (Context == NULL) - { - getLogger()->logError("AudioManager", "Failed to Create OpenAL Context."); - checkError(); - alcCloseDevice(Device); - Device = NULL; - return false; - } - - if(!alcMakeContextCurrent(Context)) - { - getLogger()->logError("AudioManager", "Failed to make OpenAL Context current."); - checkError(); - alcDestroyContext(Context); - alcCloseDevice(Device); - Context = NULL; - Device = NULL; - return false; - } - -#if CAUDIO_EFX_ENABLED == 1 - initEffects.getEFXInterface()->Mutex.lock(); - EFXSupported = initEffects.getEFXInterface()->CheckEFXSupport(Device); - initEffects.getEFXInterface()->Mutex.unlock(); - initEffects.checkEFXSupportDetails(); -#endif - - getLogger()->logInfo("AudioManager", "OpenAL Version: %s", alGetString(AL_VERSION)); - getLogger()->logInfo("AudioManager", "Vendor: %s", alGetString(AL_VENDOR)); - getLogger()->logInfo("AudioManager", "Renderer: %s", alGetString(AL_RENDERER)); -#if CAUDIO_EFX_ENABLED == 1 - if(EFXSupported) - { - int EFXMajorVersion = 0; - int EFXMinorVersion = 0; - alcGetIntegerv(Device, ALC_EFX_MAJOR_VERSION, 1, &EFXMajorVersion); - alcGetIntegerv(Device, ALC_EFX_MINOR_VERSION, 1, &EFXMinorVersion); - getLogger()->logInfo("AudioManager", "EFX Version: %i.%i", EFXMajorVersion, EFXMinorVersion); - getLogger()->logInfo("AudioManager", "EFX supported and enabled."); - } - else - { - getLogger()->logWarning("AudioManager", "EFX is not supported, EFX disabled."); - } -#endif - getLogger()->logInfo("AudioManager", "Supported Extensions: %s", alGetString(AL_EXTENSIONS)); #ifdef CAUDIO_USE_INTERNAL_THREAD if (!AudioThread) @@ -135,15 +48,78 @@ namespace cAudio return true; } + void cAudioManager::shutDown() + { + if(Initialized) + { + if (AudioThread) // First wait for our update thread to finish up + { + AudioThread->join(); + delete AudioThread; + AudioThread = NULL; + } + + cAudioMutexBasicLock lock(Mutex); + + releaseAllSources(); + + if (AudioContext) + { + AudioContext->shutDown(); + CAUDIO_DELETE AudioContext; + AudioContext = NULL; + } + + Initialized = false; + + getLogger()->logInfo("AudioManager", "Manager successfully shutdown."); + } + } + + void cAudioManager::update() + { + cAudioMutexBasicLock lock(Mutex); + size_t count = audioSources.size(); + for(unsigned int i=0; iisValid()) + { + source->update(); + } + } + } + + void cAudioManager::run() + { + if(!audioSources.empty()) + update(); + + cAudioSleep(1); + } + + bool cAudioManager::isUpdateThreadRunning() + { + return (AudioThread != NULL && AudioThread->isRunning()); + } + + IAudioEffects* cAudioManager::getEffects() + { + if (AudioContext) + { + return AudioContext->getEffects(); + } + return NULL; + } IAudioSource* cAudioManager::createAudioSource(IAudioDecoder* decoder, const cAudioString& audioName, const cAudioString& dataSource) { if(decoder && decoder->isValid()) { #if CAUDIO_EFX_ENABLED == 1 - IAudioSource* audio = CAUDIO_NEW cAudioSource(decoder, Context, initEffects.getEFXInterface()); + IAudioSource* audio = CAUDIO_NEW cAudioSource(decoder, ((cOpenALDeviceContext*)AudioContext)->getOpenALContext(), ((cAudioEffects*)getEffects())->getEFXInterface()); #else - IAudioSource* audio = CAUDIO_NEW cAudioSource(decoder, Context); + IAudioSource* audio = CAUDIO_NEW cAudioSource(decoder, ((cOpenALDeviceContext*)AudioContext)->getOpenALContext()); #endif decoder->drop(); @@ -168,8 +144,9 @@ namespace cAudio IAudioSource* cAudioManager::create(const char* name, const char* filename, bool stream) { - cAudioMutexBasicLock lock(Mutex); + if(!Initialized) return NULL; + cAudioMutexBasicLock lock(Mutex); cAudioString audioName = safeCStr(name); cAudioString path = safeCStr(filename); cAudioString ext = getExt(path); @@ -208,8 +185,9 @@ namespace cAudio IAudioSource* cAudioManager::createFromMemory(const char* name, const char* data, size_t length, const char* extension) { - cAudioMutexBasicLock lock(Mutex); + if(!Initialized) return NULL; + cAudioMutexBasicLock lock(Mutex); cAudioString audioName = safeCStr(name); cAudioString ext = safeCStr(extension); IAudioDecoderFactory* factory = getAudioDecoderFactory(ext.c_str()); @@ -237,6 +215,8 @@ namespace cAudio IAudioSource* cAudioManager::createFromRaw(const char* name, const char* data, size_t length, unsigned int frequency, AudioFormats format) { + if(!Initialized) return NULL; + cAudioMutexBasicLock lock(Mutex); cAudioString audioName = safeCStr(name); IAudioDecoderFactory* factory = getAudioDecoderFactory("raw"); @@ -505,78 +485,12 @@ namespace cAudio for(unsigned int i=0; idrop(); + { audioSources.erase(audioSources.begin()+i); + source->drop(); break; } } } } - - void cAudioManager::update() - { - cAudioMutexBasicLock lock(Mutex); - for(unsigned int i=0; iisValid()) - { - if (source->update()) - { - - } - } - } - } - - void cAudioManager::shutDown() - { - if(Initialized) - { - cAudioMutexBasicLock lock(Mutex); - releaseAllSources(); - //Reset context to null - alcMakeContextCurrent(NULL); - //Delete the context - alcDestroyContext(Context); - Context = NULL; - //Close the device - alcCloseDevice(Device); - Device = NULL; - Initialized = false; - getLogger()->logInfo("AudioManager", "Manager successfully shutdown."); - } - } - - bool cAudioManager::checkError() - { - int error = alGetError(); - const char* errorString; - - if (error != AL_NO_ERROR) - { - errorString = alGetString(error); - getLogger()->logError("AudioManager", "OpenAL Error: %s.", errorString); - return true; - } - - if(Device) - { - error = alcGetError(Device); - if (error != AL_NO_ERROR) - { - errorString = alGetString(error); - getLogger()->logError("AudioManager", "OpenAL Error: %s.", errorString); - return true; - } - } - return false; - } - - void cAudioManager::run() - { - update(); - cAudioSleep(1); - } }; diff --git a/cAudio/src/cAudioSource.cpp b/cAudio/src/cAudioSource.cpp index 8e9b053..ad09340 100644 --- a/cAudio/src/cAudioSource.cpp +++ b/cAudio/src/cAudioSource.cpp @@ -47,20 +47,18 @@ namespace cAudio alGenSources(1, &Source); state = !checkError(); } -#if CAUDIO_EFX_ENABLED == 1 - Valid = state && (Decoder != NULL) && (Context != NULL) && (EFX != NULL); -#else - Valid = state && (Decoder != NULL) && (Context != NULL); -#endif #if CAUDIO_EFX_ENABLED == 1 + Valid = state && (Decoder != NULL) && (Context != NULL) && (EFX != NULL); + int numSlots = 0; ALCdevice* device = alcGetContextsDevice(Context); alcGetIntegerv(device, ALC_MAX_AUXILIARY_SENDS, 1, &numSlots); EffectSlotsAvailable = (numSlots <= CAUDIO_SOURCE_MAX_EFFECT_SLOTS) ? numSlots : CAUDIO_SOURCE_MAX_EFFECT_SLOTS; +#else + Valid = state && (Decoder != NULL) && (Context != NULL); #endif - } cAudioSource::~cAudioSource() diff --git a/cAudio/src/cOpenALDeviceContext.cpp b/cAudio/src/cOpenALDeviceContext.cpp new file mode 100644 index 0000000..207b525 --- /dev/null +++ b/cAudio/src/cOpenALDeviceContext.cpp @@ -0,0 +1,182 @@ +// Copyright (c) 2008-2011 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones, Murat (wolfmanfx) Sari +// This file is part of the "cAudio Engine" +// For conditions of distribution and use, see copyright notice in cAudio.h + +#include "cOpenALDeviceContext.h" +#include "cAudio.h" +#include "cLogger.h" +#include "cAudioEffects.h" + +#if CAUDIO_EFX_ENABLED == 1 +# ifdef CAUDIO_PLATFORM_WIN +# include +# include +# include +# elif defined(CAUDIO_PLATFORM_LINUX) +# include +# endif +#endif + +namespace cAudio +{ + cOpenALDeviceContext::cOpenALDeviceContext(IAudioManager* audioManager) : AudioManager(audioManager), Context(NULL), Device(NULL), Initialized(false) + { + + } + + cOpenALDeviceContext::~cOpenALDeviceContext() + { + + } + + bool cOpenALDeviceContext::initialize(const char* deviceName, int outputFrequency, int eaxEffectSlots) + { + cAudioMutexBasicLock lock(Mutex); + + if(Initialized) + return false; + + //Stores the context attributes (MAX of 4, with 2 zeros to terminate) + ALint attribs[6] = { 0 }; + + unsigned int currentAttrib = 0; + if(outputFrequency > 0) + { + attribs[currentAttrib++] = ALC_FREQUENCY; + attribs[currentAttrib++] = outputFrequency; + } +#if CAUDIO_EFX_ENABLED == 1 + if(eaxEffectSlots > 0) + { + attribs[currentAttrib++] = ALC_MAX_AUXILIARY_SENDS; + attribs[currentAttrib++] = eaxEffectSlots; + } +#endif + + //Create a new device + Device = alcOpenDevice(deviceName); + //Check if device can be created + if (Device == NULL) + { + getLogger()->logError("AudioManager", "Failed to Create OpenAL Device."); + checkError(); + return false; + } + + Context = alcCreateContext(Device, attribs); + if (Context == NULL) + { + getLogger()->logError("AudioManager", "Failed to Create OpenAL Context."); + checkError(); + alcCloseDevice(Device); + Device = NULL; + return false; + } + + if(!alcMakeContextCurrent(Context)) + { + getLogger()->logError("AudioManager", "Failed to make OpenAL Context current."); + checkError(); + alcDestroyContext(Context); + alcCloseDevice(Device); + Context = NULL; + Device = NULL; + return false; + } + + getLogger()->logInfo("AudioManager", "OpenAL Version: %s", alGetString(AL_VERSION)); + getLogger()->logInfo("AudioManager", "Vendor: %s", alGetString(AL_VENDOR)); + getLogger()->logInfo("AudioManager", "Renderer: %s", alGetString(AL_RENDERER)); + +#if CAUDIO_EFX_ENABLED == 1 + initEffects.getEFXInterface()->Mutex.lock(); + EFXSupported = initEffects.getEFXInterface()->CheckEFXSupport(Device); + initEffects.getEFXInterface()->Mutex.unlock(); + initEffects.checkEFXSupportDetails(); + + if(EFXSupported) + { + int EFXMajorVersion = 0; + int EFXMinorVersion = 0; + alcGetIntegerv(Device, ALC_EFX_MAJOR_VERSION, 1, &EFXMajorVersion); + alcGetIntegerv(Device, ALC_EFX_MINOR_VERSION, 1, &EFXMinorVersion); + getLogger()->logInfo("AudioManager", "EFX Version: %i.%i", EFXMajorVersion, EFXMinorVersion); + getLogger()->logInfo("AudioManager", "EFX supported and enabled."); + } + else + { + getLogger()->logWarning("AudioManager", "EFX is not supported, EFX disabled."); + } +#endif + getLogger()->logInfo("AudioManager", "Supported Extensions: %s", alGetString(AL_EXTENSIONS)); + + return true; + } + + void cOpenALDeviceContext::shutDown() + { + if(Initialized) + { + cAudioMutexBasicLock lock(Mutex); + //Reset context to null + alcMakeContextCurrent(NULL); + //Delete the context + alcDestroyContext(Context); + Context = NULL; + //Close the device + alcCloseDevice(Device); + checkError(); + + Device = NULL; + Initialized = false; + } + } + + void cOpenALDeviceContext::update() + { + + } + + IAudioManager* cOpenALDeviceContext::getAudioManager() const + { + return AudioManager; + } + + IAudioEffects* cOpenALDeviceContext::getEffects() const + { + if(EFXSupported) + return (IAudioEffects*)&initEffects; + + return NULL; + } + + ALCcontext* cOpenALDeviceContext::getOpenALContext() const + { + return Context; + } + + bool cOpenALDeviceContext::checkError() + { + int error = alGetError(); + const char* errorString; + + if (error != AL_NO_ERROR) + { + errorString = alGetString(error); + getLogger()->logError("AudioManager", "OpenAL Error: %s.", errorString); + return true; + } + + if(Device) + { + error = alcGetError(Device); + if (error != AL_NO_ERROR) + { + errorString = alGetString(error); + getLogger()->logError("AudioManager", "OpenAL Error: %s.", errorString); + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/cAudioCSharp/IAudioDeviceContext.cs b/cAudioCSharp/IAudioDeviceContext.cs new file mode 100644 index 0000000..a706072 --- /dev/null +++ b/cAudioCSharp/IAudioDeviceContext.cs @@ -0,0 +1,71 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.4 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace cAudio { + +using System; +using System.Runtime.InteropServices; + +public class IAudioDeviceContext : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal IAudioDeviceContext(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(IAudioDeviceContext obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~IAudioDeviceContext() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + cAudioCSharpWrapperPINVOKE.delete_IAudioDeviceContext(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public virtual bool initialize(string deviceName, int outputFrequency, int eaxEffectSlots) { + bool ret = cAudioCSharpWrapperPINVOKE.IAudioDeviceContext_initialize(swigCPtr, deviceName, outputFrequency, eaxEffectSlots); + return ret; + } + + public virtual void shutDown() { + cAudioCSharpWrapperPINVOKE.IAudioDeviceContext_shutDown(swigCPtr); + } + + public virtual void update() { + cAudioCSharpWrapperPINVOKE.IAudioDeviceContext_update(swigCPtr); + } + + public virtual IAudioManager getAudioManager() { + IntPtr cPtr = cAudioCSharpWrapperPINVOKE.IAudioDeviceContext_getAudioManager(swigCPtr); + IAudioManager ret = (cPtr == IntPtr.Zero) ? null : new IAudioManager(cPtr, false); + return ret; + } + + public virtual SWIGTYPE_p_cAudio__IAudioEffects getEffects() { + IntPtr cPtr = cAudioCSharpWrapperPINVOKE.IAudioDeviceContext_getEffects(swigCPtr); + SWIGTYPE_p_cAudio__IAudioEffects ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_cAudio__IAudioEffects(cPtr, false); + return ret; + } + +} + +} diff --git a/cAudioCSharp/IPluginManager.cs b/cAudioCSharp/IPluginManager.cs new file mode 100644 index 0000000..0fb2531 --- /dev/null +++ b/cAudioCSharp/IPluginManager.cs @@ -0,0 +1,90 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.4 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace cAudio { + +using System; +using System.Runtime.InteropServices; + +public class IPluginManager : IDisposable { + private HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal IPluginManager(IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new HandleRef(this, cPtr); + } + + internal static HandleRef getCPtr(IPluginManager obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } + + ~IPluginManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + cAudioCSharpWrapperPINVOKE.delete_IPluginManager(swigCPtr); + } + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + GC.SuppressFinalize(this); + } + } + + public virtual bool installPlugin(IAudioPlugin plugin, string name) { + bool ret = cAudioCSharpWrapperPINVOKE.IPluginManager_installPlugin__SWIG_0(swigCPtr, IAudioPlugin.getCPtr(plugin), name); + return ret; + } + + public virtual bool installPlugin(IAudioPlugin plugin) { + bool ret = cAudioCSharpWrapperPINVOKE.IPluginManager_installPlugin__SWIG_1(swigCPtr, IAudioPlugin.getCPtr(plugin)); + return ret; + } + + public virtual bool installPlugin(string filename, string name) { + bool ret = cAudioCSharpWrapperPINVOKE.IPluginManager_installPlugin__SWIG_2(swigCPtr, filename, name); + return ret; + } + + public virtual bool installPlugin(string filename) { + bool ret = cAudioCSharpWrapperPINVOKE.IPluginManager_installPlugin__SWIG_3(swigCPtr, filename); + return ret; + } + + public virtual bool checkForPlugin(string name) { + bool ret = cAudioCSharpWrapperPINVOKE.IPluginManager_checkForPlugin(swigCPtr, name); + return ret; + } + + public virtual IAudioPlugin getPlugin(string name) { + IntPtr cPtr = cAudioCSharpWrapperPINVOKE.IPluginManager_getPlugin(swigCPtr, name); + IAudioPlugin ret = (cPtr == IntPtr.Zero) ? null : new IAudioPlugin(cPtr, false); + return ret; + } + + public virtual uint getPluginCount() { + uint ret = cAudioCSharpWrapperPINVOKE.IPluginManager_getPluginCount(swigCPtr); + return ret; + } + + public virtual void uninstallPlugin(IAudioPlugin plugin) { + cAudioCSharpWrapperPINVOKE.IPluginManager_uninstallPlugin__SWIG_0(swigCPtr, IAudioPlugin.getCPtr(plugin)); + } + + public virtual void uninstallPlugin(string name) { + cAudioCSharpWrapperPINVOKE.IPluginManager_uninstallPlugin__SWIG_1(swigCPtr, name); + } + +} + +} diff --git a/cAudioCSharp/SWIGTYPE_p_cAudio__IAudioEffects.cs b/cAudioCSharp/SWIGTYPE_p_cAudio__IAudioEffects.cs new file mode 100644 index 0000000..72b4b01 --- /dev/null +++ b/cAudioCSharp/SWIGTYPE_p_cAudio__IAudioEffects.cs @@ -0,0 +1,30 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 2.0.4 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +namespace cAudio { + +using System; +using System.Runtime.InteropServices; + +public class SWIGTYPE_p_cAudio__IAudioEffects { + private HandleRef swigCPtr; + + internal SWIGTYPE_p_cAudio__IAudioEffects(IntPtr cPtr, bool futureUse) { + swigCPtr = new HandleRef(this, cPtr); + } + + protected SWIGTYPE_p_cAudio__IAudioEffects() { + swigCPtr = new HandleRef(null, IntPtr.Zero); + } + + internal static HandleRef getCPtr(SWIGTYPE_p_cAudio__IAudioEffects obj) { + return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; + } +} + +} diff --git a/cAudioCSharp/cAudioCSharp.csproj b/cAudioCSharp/cAudioCSharp.csproj index b6560f3..2577349 100644 --- a/cAudioCSharp/cAudioCSharp.csproj +++ b/cAudioCSharp/cAudioCSharp.csproj @@ -39,6 +39,7 @@ + @@ -53,6 +54,7 @@ + @@ -61,6 +63,7 @@ + diff --git a/cAudioCSharp/cAudioCSharpWrapper.cs b/cAudioCSharp/cAudioCSharpWrapper.cs index 389f041..7dab625 100644 --- a/cAudioCSharp/cAudioCSharpWrapper.cs +++ b/cAudioCSharp/cAudioCSharpWrapper.cs @@ -12,6 +12,16 @@ using System; using System.Runtime.InteropServices; public class cAudioCSharpWrapper { + public static IMemoryProvider getMemoryProvider() { + IntPtr cPtr = cAudioCSharpWrapperPINVOKE.getMemoryProvider(); + IMemoryProvider ret = (cPtr == IntPtr.Zero) ? null : new IMemoryProvider(cPtr, false); + return ret; + } + + public static void cAudioSleep(uint ms) { + cAudioCSharpWrapperPINVOKE.cAudioSleep(ms); + } + public static string toWINSTR(string str) { string ret = cAudioCSharpWrapperPINVOKE.toWINSTR(str); return ret; @@ -48,6 +58,12 @@ public class cAudioCSharpWrapper { } } + public static IPluginManager getPluginManager() { + IntPtr cPtr = cAudioCSharpWrapperPINVOKE.getPluginManager(); + IPluginManager ret = (cPtr == IntPtr.Zero) ? null : new IPluginManager(cPtr, false); + return ret; + } + public static IAudioManager createAudioManager(bool initializeDefault) { IntPtr cPtr = cAudioCSharpWrapperPINVOKE.createAudioManager__SWIG_0(initializeDefault); IAudioManager ret = (cPtr == IntPtr.Zero) ? null : new IAudioManager(cPtr, false); @@ -98,16 +114,6 @@ public class cAudioCSharpWrapper { return ret; } - public static IMemoryProvider getMemoryProvider() { - IntPtr cPtr = cAudioCSharpWrapperPINVOKE.getMemoryProvider(); - IMemoryProvider ret = (cPtr == IntPtr.Zero) ? null : new IMemoryProvider(cPtr, false); - return ret; - } - - public static void cAudioSleep(uint ms) { - cAudioCSharpWrapperPINVOKE.cAudioSleep(ms); - } - public static SWIGTYPE_p_float new_floatp() { IntPtr cPtr = cAudioCSharpWrapperPINVOKE.new_floatp(); SWIGTYPE_p_float ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_float(cPtr, false); diff --git a/cAudioCSharp/cAudioCSharpWrapperPINVOKE.cs b/cAudioCSharp/cAudioCSharpWrapperPINVOKE.cs index fc7beb2..e0f841f 100644 --- a/cAudioCSharp/cAudioCSharpWrapperPINVOKE.cs +++ b/cAudioCSharp/cAudioCSharpWrapperPINVOKE.cs @@ -189,6 +189,36 @@ class cAudioCSharpWrapperPINVOKE { } + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_Allocate")] + public static extern IntPtr IMemoryProvider_Allocate(HandleRef jarg1, uint jarg2, string jarg3, int jarg4, string jarg5); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_Free")] + public static extern void IMemoryProvider_Free(HandleRef jarg1, HandleRef jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_getMaxAllocationSize")] + public static extern uint IMemoryProvider_getMaxAllocationSize(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_delete_IMemoryProvider")] + public static extern void delete_IMemoryProvider(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_VERSION_get")] + public static extern string CAUDIO_VERSION_get(); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_BUFFER_SIZE_get")] + public static extern int CAUDIO_SOURCE_BUFFER_SIZE_get(); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_NUM_BUFFERS_get")] + public static extern int CAUDIO_SOURCE_NUM_BUFFERS_get(); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get")] + public static extern int CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get(); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_getMemoryProvider")] + public static extern IntPtr getMemoryProvider(); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_cAudioSleep")] + public static extern void cAudioSleep(uint jarg1); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_toWINSTR")] public static extern string toWINSTR(string jarg1); @@ -801,6 +831,24 @@ class cAudioCSharpWrapperPINVOKE { [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioManager_getListener")] public static extern IntPtr IAudioManager_getListener(HandleRef jarg1); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioDeviceContext_initialize")] + public static extern bool IAudioDeviceContext_initialize(HandleRef jarg1, string jarg2, int jarg3, int jarg4); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioDeviceContext_shutDown")] + public static extern void IAudioDeviceContext_shutDown(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioDeviceContext_update")] + public static extern void IAudioDeviceContext_update(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioDeviceContext_getAudioManager")] + public static extern IntPtr IAudioDeviceContext_getAudioManager(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioDeviceContext_getEffects")] + public static extern IntPtr IAudioDeviceContext_getEffects(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_delete_IAudioDeviceContext")] + public static extern void delete_IAudioDeviceContext(HandleRef jarg1); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_delete_IAudioPlugin")] public static extern void delete_IAudioPlugin(HandleRef jarg1); @@ -1005,17 +1053,38 @@ class cAudioCSharpWrapperPINVOKE { [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IAudioSource_unRegisterAllEventHandlers")] public static extern void IAudioSource_unRegisterAllEventHandlers(HandleRef jarg1); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_Allocate")] - public static extern IntPtr IMemoryProvider_Allocate(HandleRef jarg1, uint jarg2, string jarg3, int jarg4, string jarg5); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_delete_IPluginManager")] + public static extern void delete_IPluginManager(HandleRef jarg1); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_Free")] - public static extern void IMemoryProvider_Free(HandleRef jarg1, HandleRef jarg2); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_installPlugin__SWIG_0")] + public static extern bool IPluginManager_installPlugin__SWIG_0(HandleRef jarg1, HandleRef jarg2, string jarg3); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IMemoryProvider_getMaxAllocationSize")] - public static extern uint IMemoryProvider_getMaxAllocationSize(HandleRef jarg1); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_installPlugin__SWIG_1")] + public static extern bool IPluginManager_installPlugin__SWIG_1(HandleRef jarg1, HandleRef jarg2); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_delete_IMemoryProvider")] - public static extern void delete_IMemoryProvider(HandleRef jarg1); + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_installPlugin__SWIG_2")] + public static extern bool IPluginManager_installPlugin__SWIG_2(HandleRef jarg1, string jarg2, string jarg3); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_installPlugin__SWIG_3")] + public static extern bool IPluginManager_installPlugin__SWIG_3(HandleRef jarg1, string jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_checkForPlugin")] + public static extern bool IPluginManager_checkForPlugin(HandleRef jarg1, string jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_getPlugin")] + public static extern IntPtr IPluginManager_getPlugin(HandleRef jarg1, string jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_getPluginCount")] + public static extern uint IPluginManager_getPluginCount(HandleRef jarg1); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_uninstallPlugin__SWIG_0")] + public static extern void IPluginManager_uninstallPlugin__SWIG_0(HandleRef jarg1, HandleRef jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IPluginManager_uninstallPlugin__SWIG_1")] + public static extern void IPluginManager_uninstallPlugin__SWIG_1(HandleRef jarg1, string jarg2); + + [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_getPluginManager")] + public static extern IntPtr getPluginManager(); [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IThread_start")] public static extern bool IThread_start(HandleRef jarg1); @@ -1065,24 +1134,6 @@ class cAudioCSharpWrapperPINVOKE { [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_createAudioDeviceList__SWIG_1")] public static extern IntPtr createAudioDeviceList__SWIG_1(); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_VERSION_get")] - public static extern string CAUDIO_VERSION_get(); - - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_BUFFER_SIZE_get")] - public static extern int CAUDIO_SOURCE_BUFFER_SIZE_get(); - - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_NUM_BUFFERS_get")] - public static extern int CAUDIO_SOURCE_NUM_BUFFERS_get(); - - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get")] - public static extern int CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get(); - - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_getMemoryProvider")] - public static extern IntPtr getMemoryProvider(); - - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_cAudioSleep")] - public static extern void cAudioSleep(uint jarg1); - [DllImport("cAudioCSharpWrapper", EntryPoint="CSharp_IntVector_Clear")] public static extern void IntVector_Clear(HandleRef jarg1); diff --git a/cAudioCSharpWrapper/src/cAudioWrapped.i b/cAudioCSharpWrapper/src/cAudioWrapped.i index 69bbe37..d18e827 100644 --- a/cAudioCSharpWrapper/src/cAudioWrapped.i +++ b/cAudioCSharpWrapper/src/cAudioWrapped.i @@ -39,6 +39,7 @@ #include "IAudioDecoder.h" #include "IAudioDecoderFactory.h" #include "IAudioDeviceList.h" +#include "IAudioDeviceContext.h" %} #if !defined(SWIGLUA) && !defined(SWIGR) @@ -141,6 +142,11 @@ %feature("director") cAudio::IAudioDecoderFactory; %feature("director") cAudio::IAudioDecoder; +%include "..\cAudio\include\IMemoryProvider.h" +%include "..\cAudio\include\cAudioDefines.h" +%include "..\cAudio\include\cAudioMemory.h" +%include "..\cAudio\include\cAudioPlatform.h" +%include "..\cAudio\include\cAudioSleep.h" %include "..\cAudio\include\cAudioString.h" %include "..\cAudio\include\IAudioDeviceList.h" %include "..\cAudio\include\EAudioFormats.h" @@ -154,25 +160,20 @@ %include "..\cAudio\include\IManagerEventHandler.h" %include "..\cAudio\include\ISourceEventHandler.h" %include "..\cAudio\include\ICaptureEventHandler.h" +%include "..\cAudio\include\IEffectParameters.h" +%include "..\cAudio\include\IFilter.h" +%include "..\cAudio\include\IEffect.h" +%include "..\cAudio\include\IAudioEffects.h" %include "..\cAudio\include\IAudioCapture.h" %include "..\cAudio\include\IAudioDecoder.h" %include "..\cAudio\include\IAudioDecoderFactory.h" -%include "..\cAudio\include\IAudioEffects.h" %include "..\cAudio\include\IAudioManager.h" +%include "..\cAudio\include\IAudioDeviceContext.h" %include "..\cAudio\include\IAudioPlugin.h" %include "..\cAudio\include\IAudioSource.h" -%include "..\cAudio\include\IEffect.h" -%include "..\cAudio\include\IEffectParameters.h" -%include "..\cAudio\include\IFilter.h" -%include "..\cAudio\include\IMemoryProvider.h" %include "..\cAudio\include\IPluginManager.h" %include "..\cAudio\include\IThread.h" %include "..\cAudio\include\cAudio.h" -%include "..\cAudio\include\cAudioDefines.h" -%include "..\cAudio\include\cAudioMemory.h" -%include "..\cAudio\include\cAudioPlatform.h" -%include "..\cAudio\include\cAudioSleep.h" - namespace std { %template(IntVector) vector; diff --git a/cAudioCSharpWrapper/src/cAudioWrapped_wrap.cxx b/cAudioCSharpWrapper/src/cAudioWrapped_wrap.cxx index 80c9419..17f4087 100644 --- a/cAudioCSharpWrapper/src/cAudioWrapped_wrap.cxx +++ b/cAudioCSharpWrapper/src/cAudioWrapped_wrap.cxx @@ -376,6 +376,7 @@ namespace Swig { #include "IAudioDecoder.h" #include "IAudioDecoderFactory.h" #include "IAudioDeviceList.h" +#include "IAudioDeviceContext.h" SWIGINTERN std::vector< int > *new_std_vector_Sl_int_Sg___SWIG_2(int capacity){ std::vector< int >* pv = 0; @@ -1436,6 +1437,114 @@ void SwigDirector_IAudioDecoderFactory::swig_init_callbacks() { extern "C" { #endif +SWIGEXPORT void * SWIGSTDCALL CSharp_IMemoryProvider_Allocate(void * jarg1, unsigned long jarg2, char * jarg3, int jarg4, char * jarg5) { + void * jresult ; + cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; + size_t arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + char *arg5 = (char *) 0 ; + void *result = 0 ; + + arg1 = (cAudio::IMemoryProvider *)jarg1; + arg2 = (size_t)jarg2; + arg3 = (char *)jarg3; + arg4 = (int)jarg4; + arg5 = (char *)jarg5; + result = (void *)(arg1)->Allocate(arg2,(char const *)arg3,arg4,(char const *)arg5); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IMemoryProvider_Free(void * jarg1, void * jarg2) { + cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; + void *arg2 = (void *) 0 ; + + arg1 = (cAudio::IMemoryProvider *)jarg1; + arg2 = (void *)jarg2; + (arg1)->Free(arg2); +} + + +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_IMemoryProvider_getMaxAllocationSize(void * jarg1) { + unsigned long jresult ; + cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; + size_t result; + + arg1 = (cAudio::IMemoryProvider *)jarg1; + result = (arg1)->getMaxAllocationSize(); + jresult = (unsigned long)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_IMemoryProvider(void * jarg1) { + cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; + + arg1 = (cAudio::IMemoryProvider *)jarg1; + delete arg1; +} + + +SWIGEXPORT char * SWIGSTDCALL CSharp_CAUDIO_VERSION_get() { + char * jresult ; + char *result = 0 ; + + result = (char *)("2.2.0"); + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_BUFFER_SIZE_get() { + int jresult ; + int result; + + result = (int)((1024*64)); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_NUM_BUFFERS_get() { + int jresult ; + int result; + + result = (int)(3); + jresult = result; + return jresult; +} + + +SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get() { + int jresult ; + int result; + + result = (int)(4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_getMemoryProvider() { + void * jresult ; + cAudio::IMemoryProvider *result = 0 ; + + result = (cAudio::IMemoryProvider *)cAudio::getMemoryProvider(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_cAudioSleep(unsigned int jarg1) { + unsigned int arg1 ; + + arg1 = (unsigned int)jarg1; + cAudio::cAudioSleep(arg1); +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_toWINSTR(char * jarg1) { char * jresult ; char *arg1 = (char *) 0 ; @@ -3923,6 +4032,72 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_IAudioManager_getListener(void * jarg1) { } +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IAudioDeviceContext_initialize(void * jarg1, char * jarg2, int jarg3, int jarg4) { + unsigned int jresult ; + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int arg4 ; + bool result; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + arg2 = (char *)jarg2; + arg3 = (int)jarg3; + arg4 = (int)jarg4; + result = (bool)(arg1)->initialize((char const *)arg2,arg3,arg4); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IAudioDeviceContext_shutDown(void * jarg1) { + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + (arg1)->shutDown(); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IAudioDeviceContext_update(void * jarg1) { + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + (arg1)->update(); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_IAudioDeviceContext_getAudioManager(void * jarg1) { + void * jresult ; + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + cAudio::IAudioManager *result = 0 ; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + result = (cAudio::IAudioManager *)((cAudio::IAudioDeviceContext const *)arg1)->getAudioManager(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_IAudioDeviceContext_getEffects(void * jarg1) { + void * jresult ; + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + cAudio::IAudioEffects *result = 0 ; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + result = (cAudio::IAudioEffects *)((cAudio::IAudioDeviceContext const *)arg1)->getEffects(); + jresult = (void *)result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_delete_IAudioDeviceContext(void * jarg1) { + cAudio::IAudioDeviceContext *arg1 = (cAudio::IAudioDeviceContext *) 0 ; + + arg1 = (cAudio::IAudioDeviceContext *)jarg1; + delete arg1; +} + + SWIGEXPORT void SWIGSTDCALL CSharp_delete_IAudioPlugin(void * jarg1) { cAudio::IAudioPlugin *arg1 = (cAudio::IAudioPlugin *) 0 ; @@ -4759,53 +4934,141 @@ SWIGEXPORT void SWIGSTDCALL CSharp_IAudioSource_unRegisterAllEventHandlers(void } -SWIGEXPORT void * SWIGSTDCALL CSharp_IMemoryProvider_Allocate(void * jarg1, unsigned long jarg2, char * jarg3, int jarg4, char * jarg5) { - void * jresult ; - cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; - size_t arg2 ; - char *arg3 = (char *) 0 ; - int arg4 ; - char *arg5 = (char *) 0 ; - void *result = 0 ; +SWIGEXPORT void SWIGSTDCALL CSharp_delete_IPluginManager(void * jarg1) { + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; - arg1 = (cAudio::IMemoryProvider *)jarg1; - arg2 = (size_t)jarg2; + arg1 = (cAudio::IPluginManager *)jarg1; + delete arg1; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_installPlugin__SWIG_0(void * jarg1, void * jarg2, char * jarg3) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + cAudio::IAudioPlugin *arg2 = (cAudio::IAudioPlugin *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (cAudio::IAudioPlugin *)jarg2; arg3 = (char *)jarg3; - arg4 = (int)jarg4; - arg5 = (char *)jarg5; - result = (void *)(arg1)->Allocate(arg2,(char const *)arg3,arg4,(char const *)arg5); + result = (bool)(arg1)->installPlugin(arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_installPlugin__SWIG_1(void * jarg1, void * jarg2) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + cAudio::IAudioPlugin *arg2 = (cAudio::IAudioPlugin *) 0 ; + bool result; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (cAudio::IAudioPlugin *)jarg2; + result = (bool)(arg1)->installPlugin(arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_installPlugin__SWIG_2(void * jarg1, char * jarg2, char * jarg3) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (char *)jarg2; + arg3 = (char *)jarg3; + result = (bool)(arg1)->installPlugin((char const *)arg2,(char const *)arg3); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_installPlugin__SWIG_3(void * jarg1, char * jarg2) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (char *)jarg2; + result = (bool)(arg1)->installPlugin((char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_checkForPlugin(void * jarg1, char * jarg2) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (char *)jarg2; + result = (bool)(arg1)->checkForPlugin((char const *)arg2); + jresult = result; + return jresult; +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_IPluginManager_getPlugin(void * jarg1, char * jarg2) { + void * jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + char *arg2 = (char *) 0 ; + cAudio::IAudioPlugin *result = 0 ; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (char *)jarg2; + result = (cAudio::IAudioPlugin *)(arg1)->getPlugin((char const *)arg2); jresult = (void *)result; return jresult; } -SWIGEXPORT void SWIGSTDCALL CSharp_IMemoryProvider_Free(void * jarg1, void * jarg2) { - cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; - void *arg2 = (void *) 0 ; +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_IPluginManager_getPluginCount(void * jarg1) { + unsigned int jresult ; + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + unsigned int result; - arg1 = (cAudio::IMemoryProvider *)jarg1; - arg2 = (void *)jarg2; - (arg1)->Free(arg2); -} - - -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_IMemoryProvider_getMaxAllocationSize(void * jarg1) { - unsigned long jresult ; - cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; - size_t result; - - arg1 = (cAudio::IMemoryProvider *)jarg1; - result = (arg1)->getMaxAllocationSize(); - jresult = (unsigned long)result; + arg1 = (cAudio::IPluginManager *)jarg1; + result = (unsigned int)(arg1)->getPluginCount(); + jresult = result; return jresult; } -SWIGEXPORT void SWIGSTDCALL CSharp_delete_IMemoryProvider(void * jarg1) { - cAudio::IMemoryProvider *arg1 = (cAudio::IMemoryProvider *) 0 ; +SWIGEXPORT void SWIGSTDCALL CSharp_IPluginManager_uninstallPlugin__SWIG_0(void * jarg1, void * jarg2) { + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + cAudio::IAudioPlugin *arg2 = (cAudio::IAudioPlugin *) 0 ; - arg1 = (cAudio::IMemoryProvider *)jarg1; - delete arg1; + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (cAudio::IAudioPlugin *)jarg2; + (arg1)->uninstallPlugin(arg2); +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_IPluginManager_uninstallPlugin__SWIG_1(void * jarg1, char * jarg2) { + cAudio::IPluginManager *arg1 = (cAudio::IPluginManager *) 0 ; + char *arg2 = (char *) 0 ; + + arg1 = (cAudio::IPluginManager *)jarg1; + arg2 = (char *)jarg2; + (arg1)->uninstallPlugin((char const *)arg2); +} + + +SWIGEXPORT void * SWIGSTDCALL CSharp_getPluginManager() { + void * jresult ; + cAudio::IPluginManager *result = 0 ; + + result = (cAudio::IPluginManager *)cAudio::getPluginManager(); + jresult = (void *)result; + return jresult; } @@ -4965,64 +5228,6 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_createAudioDeviceList__SWIG_1() { } -SWIGEXPORT char * SWIGSTDCALL CSharp_CAUDIO_VERSION_get() { - char * jresult ; - char *result = 0 ; - - result = (char *)("2.2.0"); - jresult = SWIG_csharp_string_callback((const char *)result); - return jresult; -} - - -SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_BUFFER_SIZE_get() { - int jresult ; - int result; - - result = (int)((1024*64)); - jresult = result; - return jresult; -} - - -SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_NUM_BUFFERS_get() { - int jresult ; - int result; - - result = (int)(3); - jresult = result; - return jresult; -} - - -SWIGEXPORT int SWIGSTDCALL CSharp_CAUDIO_SOURCE_MAX_EFFECT_SLOTS_get() { - int jresult ; - int result; - - result = (int)(4); - jresult = result; - return jresult; -} - - -SWIGEXPORT void * SWIGSTDCALL CSharp_getMemoryProvider() { - void * jresult ; - cAudio::IMemoryProvider *result = 0 ; - - result = (cAudio::IMemoryProvider *)cAudio::getMemoryProvider(); - jresult = (void *)result; - return jresult; -} - - -SWIGEXPORT void SWIGSTDCALL CSharp_cAudioSleep(unsigned int jarg1) { - unsigned int arg1 ; - - arg1 = (unsigned int)jarg1; - cAudio::cAudioSleep(arg1); -} - - SWIGEXPORT void SWIGSTDCALL CSharp_IntVector_Clear(void * jarg1) { std::vector< int > *arg1 = (std::vector< int > *) 0 ;