Revision: 37547
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37547
Author:   nexyon
Date:     2011-06-16 09:13:29 +0000 (Thu, 16 Jun 2011)
Log Message:
-----------
3D Audio GSoC:
GameEngine Python access sound actuator's sound (with setting! :-D).

Modified Paths:
--------------
    branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.cpp
    branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.h
    branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.cpp
    branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.h

Modified: branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.cpp      
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.cpp      
2011-06-16 09:13:29 UTC (rev 37547)
@@ -2881,6 +2881,19 @@
        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,

Modified: branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.h        
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/intern/audaspace/Python/AUD_PyAPI.h        
2011-06-16 09:13:29 UTC (rev 37547)
@@ -68,6 +68,7 @@
 
 extern PyObject* Device_empty();
 extern PyObject* Factory_empty();
+extern Factory* checkFactory(PyObject* factory);
 
 #ifdef __cplusplus
 }

Modified: branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.cpp      
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.cpp      
2011-06-16 09:13:29 UTC (rev 37547)
@@ -227,6 +227,32 @@
 
        return module;
 }
+
+PyObject* AUD_getPythonFactory(AUD_Sound* sound)
+{
+       if(sound)
+       {
+               Factory* obj = (Factory*) Factory_empty();
+               if(obj)
+               {
+                       obj->factory = new AUD_Reference<AUD_IFactory>(*sound);
+                       return (PyObject*) obj;
+               }
+       }
+
+       return NULL;
+}
+
+AUD_Sound* AUD_getPythonSound(PyObject* sound)
+{
+       Factory* factory = checkFactory(sound);
+
+       if(!factory)
+               return NULL;
+
+       return new 
AUD_Reference<AUD_IFactory>(*reinterpret_cast<AUD_Reference<AUD_IFactory>*>(factory->factory));
+}
+
 #endif
 
 void AUD_lock()
@@ -973,3 +999,8 @@
 #endif
        return -1;
 }
+
+AUD_Sound* AUD_copy(AUD_Sound* sound)
+{
+       return new AUD_Reference<AUD_IFactory>(*sound);
+}

Modified: branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.h        
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.h        
2011-06-16 09:13:29 UTC (rev 37547)
@@ -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 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

Modified: branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.cpp      
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.cpp      
2011-06-16 09:13:29 UTC (rev 37547)
@@ -53,7 +53,7 @@
                                                                   
KX_SOUNDACT_TYPE type)//,
                                                                   : 
SCA_IActuator(gameobj, KX_ACT_SOUND)
 {
-       m_sound = sound;
+       m_sound = AUD_copy(sound);
        m_volume = volume;
        m_pitch = pitch;
        m_is3d = is3d;
@@ -69,6 +69,7 @@
 {
        if(m_handle)
                AUD_stop(m_handle);
+       AUD_unload(m_sound);
 }
 
 void KX_SoundActuator::play()
@@ -286,6 +287,7 @@
        KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_inner", KX_SoundActuator, 
pyattr_get_3d_property, pyattr_set_3d_property),
        KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_outer", KX_SoundActuator, 
pyattr_get_3d_property, pyattr_set_3d_property),
        KX_PYATTRIBUTE_RW_FUNCTION("cone_volume_outer", KX_SoundActuator, 
pyattr_get_3d_property, pyattr_set_3d_property),
+       KX_PYATTRIBUTE_RW_FUNCTION("sound", KX_SoundActuator, pyattr_get_sound, 
pyattr_set_sound),
 
        KX_PYATTRIBUTE_RW_FUNCTION("time", KX_SoundActuator, 
pyattr_get_audposition, pyattr_set_audposition),
        KX_PYATTRIBUTE_RW_FUNCTION("volume", KX_SoundActuator, pyattr_get_gain, 
pyattr_set_gain),
@@ -400,6 +402,12 @@
        return result;
 }
 
+PyObject* KX_SoundActuator::pyattr_get_sound(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+       return AUD_getPythonFactory(actuator->m_sound);
+}
+
 int KX_SoundActuator::pyattr_set_3d_property(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
 {
        KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
@@ -501,4 +509,22 @@
        return PY_SET_ATTR_SUCCESS;
 }
 
+int KX_SoundActuator::pyattr_set_sound(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+       PyObject* sound = NULL;
+       KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+       if (!PyArg_Parse(value, "O", &sound))
+               return PY_SET_ATTR_FAIL;
+
+       AUD_Sound* snd = AUD_getPythonSound(sound);
+       if(snd)
+       {
+               AUD_unload(actuator->m_sound);
+               actuator->m_sound = snd;
+               return PY_SET_ATTR_SUCCESS;
+       }
+
+       return PY_SET_ATTR_FAIL;
+}
+
 #endif // WITH_PYTHON

Modified: branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.h        
2011-06-16 07:59:22 UTC (rev 37546)
+++ branches/soc-2011-pepper/source/gameengine/Ketsji/KX_SoundActuator.h        
2011-06-16 09:13:29 UTC (rev 37547)
@@ -110,12 +110,14 @@
        static int pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_type(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
+       static int pyattr_set_sound(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
 
        static PyObject* pyattr_get_3d_property(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject* pyattr_get_audposition(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject* pyattr_get_gain(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject* pyattr_get_pitch(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject* pyattr_get_type(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
+       static PyObject* pyattr_get_sound(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef);
 
 #endif // WITH_PYTHON
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to