[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37547] branches/soc-2011-pepper: 3D Audio GSoC:
Joerg Mueller
nexyon at gmail.com
Thu Jun 16 11:13:29 CEST 2011
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
More information about the Bf-blender-cvs
mailing list