From a90d30c8638a87234048060d8fcb385369b3daaf Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Thu, 16 Jun 2011 09:13:29 +0000 Subject: 3D Audio GSoC: GameEngine Python access sound actuator's sound (with setting! :-D). --- intern/audaspace/Python/AUD_PyAPI.cpp | 13 +++++++++++++ intern/audaspace/Python/AUD_PyAPI.h | 1 + intern/audaspace/intern/AUD_C-API.cpp | 31 +++++++++++++++++++++++++++++++ intern/audaspace/intern/AUD_C-API.h | 12 ++++++++++++ 4 files changed, 57 insertions(+) (limited to 'intern') diff --git a/intern/audaspace/Python/AUD_PyAPI.cpp b/intern/audaspace/Python/AUD_PyAPI.cpp index ac25ab34a69..b6e336eb329 100644 --- a/intern/audaspace/Python/AUD_PyAPI.cpp +++ b/intern/audaspace/Python/AUD_PyAPI.cpp @@ -2881,6 +2881,19 @@ Factory_empty() return FactoryType.tp_alloc(&FactoryType, 0); } +Factory* +checkFactory(PyObject* factory) +{ + if(!PyObject_TypeCheck(factory, &FactoryType)) + { + PyErr_SetString(PyExc_TypeError, "Object is not of type Factory!"); + return NULL; + } + + return (Factory*)factory; +} + + // ==================================================================== PyDoc_STRVAR(M_aud_doc, diff --git a/intern/audaspace/Python/AUD_PyAPI.h b/intern/audaspace/Python/AUD_PyAPI.h index 97e1e63b6eb..822aec06976 100644 --- a/intern/audaspace/Python/AUD_PyAPI.h +++ b/intern/audaspace/Python/AUD_PyAPI.h @@ -68,6 +68,7 @@ PyInit_aud(void); extern PyObject* Device_empty(); extern PyObject* Factory_empty(); +extern Factory* checkFactory(PyObject* factory); #ifdef __cplusplus } diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index b0050abe7ac..61d7616f694 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -227,6 +227,32 @@ PyObject* AUD_initPython() return module; } + +PyObject* AUD_getPythonFactory(AUD_Sound* sound) +{ + if(sound) + { + Factory* obj = (Factory*) Factory_empty(); + if(obj) + { + obj->factory = new AUD_Reference(*sound); + return (PyObject*) obj; + } + } + + return NULL; +} + +AUD_Sound* AUD_getPythonSound(PyObject* sound) +{ + Factory* factory = checkFactory(sound); + + if(!factory) + return NULL; + + return new AUD_Reference(*reinterpret_cast*>(factory->factory)); +} + #endif void AUD_lock() @@ -973,3 +999,8 @@ int AUD_doesPlayback() #endif return -1; } + +AUD_Sound* AUD_copy(AUD_Sound* sound) +{ + return new AUD_Reference(*sound); +} diff --git a/intern/audaspace/intern/AUD_C-API.h b/intern/audaspace/intern/AUD_C-API.h index 47dadd05555..3fdb9e7bca3 100644 --- a/intern/audaspace/intern/AUD_C-API.h +++ b/intern/audaspace/intern/AUD_C-API.h @@ -31,6 +31,10 @@ #ifndef AUD_CAPI #define AUD_CAPI +#ifdef WITH_PYTHON +#include "Python.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -492,6 +496,14 @@ extern void AUD_setSyncCallback(AUD_syncFunction function, void* data); extern int AUD_doesPlayback(void); +extern AUD_Sound* AUD_copy(AUD_Sound* sound); + +#ifdef WITH_PYTHON +extern PyObject* AUD_getPythonFactory(AUD_Sound* sound); + +extern AUD_Sound* AUD_getPythonSound(PyObject* sound); +#endif + #ifdef __cplusplus } #endif -- cgit v1.2.3