Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/audaspace/bindings/python/PyAPI.cpp')
-rw-r--r--extern/audaspace/bindings/python/PyAPI.cpp231
1 files changed, 231 insertions, 0 deletions
diff --git a/extern/audaspace/bindings/python/PyAPI.cpp b/extern/audaspace/bindings/python/PyAPI.cpp
new file mode 100644
index 00000000000..cceadbc0992
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyAPI.cpp
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PyAPI.h"
+#include "PySound.h"
+#include "PyHandle.h"
+#include "PyDevice.h"
+#include "PySequenceEntry.h"
+#include "PySequence.h"
+#include "PyPlaybackManager.h"
+#include "PyDynamicMusic.h"
+#include "PyThreadPool.h"
+#include "PySource.h"
+
+#ifdef WITH_CONVOLUTION
+#include "PyImpulseResponse.h"
+#include "PyHRTF.h"
+#endif
+
+#include "respec/Specification.h"
+#include "devices/IHandle.h"
+#include "devices/I3DDevice.h"
+#include "file/IWriter.h"
+#include "plugin/PluginManager.h"
+#include "sequence/AnimateableProperty.h"
+#include "ISound.h"
+
+#include <memory>
+
+#include <structmember.h>
+
+using namespace aud;
+
+// ====================================================================
+
+#define PY_MODULE_ADD_CONSTANT(module, name) PyModule_AddIntConstant(module, #name, name)
+
+// ====================================================================
+
+extern PyObject* AUDError;
+PyObject* AUDError = nullptr;
+
+// ====================================================================
+
+PyDoc_STRVAR(M_aud_doc,
+ "Audaspace (pronounced \"outer space\") is a high level audio library.");
+
+static struct PyModuleDef audmodule = {
+ PyModuleDef_HEAD_INIT,
+ "aud", /* name of module */
+ M_aud_doc, /* module documentation */
+ -1, /* size of per-interpreter state of the module,
+ or -1 if the module keeps state in global variables. */
+ nullptr, nullptr, nullptr, nullptr, nullptr
+};
+
+PyMODINIT_FUNC
+PyInit_aud()
+{
+ PyObject* module;
+
+ PluginManager::loadPlugins();
+
+ if(!initializeSound())
+ return nullptr;
+
+ if(!initializeDevice())
+ return nullptr;
+
+ if(!initializeHandle())
+ return nullptr;
+
+ if(!initializeSequenceEntry())
+ return nullptr;
+
+ if(!initializeSequence())
+ return nullptr;
+
+ if(!initializeDynamicMusic())
+ return nullptr;
+
+ if(!initializePlaybackManager())
+ return nullptr;
+
+ if(!initializeThreadPool())
+ return nullptr;
+
+ if(!initializeSource())
+ return nullptr;
+
+#ifdef WITH_CONVOLUTION
+ if(!initializeImpulseResponse())
+ return nullptr;
+
+ if(!initializeHRTF())
+ return nullptr;
+#endif
+
+ module = PyModule_Create(&audmodule);
+ if(module == nullptr)
+ return nullptr;
+
+ addSoundToModule(module);
+ addHandleToModule(module);
+ addDeviceToModule(module);
+ addSequenceEntryToModule(module);
+ addSequenceToModule(module);
+ addDynamicMusicToModule(module);
+ addPlaybackManagerToModule(module);
+ addThreadPoolToModule(module);
+ addSourceToModule(module);
+
+#ifdef WITH_CONVOLUTION
+ addImpulseResponseToModule(module);
+ addHRTFToModule(module);
+#endif
+
+ AUDError = PyErr_NewException("aud.error", nullptr, nullptr);
+ Py_INCREF(AUDError);
+ PyModule_AddObject(module, "error", AUDError);
+
+ // animatable property type constants
+ PY_MODULE_ADD_CONSTANT(module, AP_VOLUME);
+ PY_MODULE_ADD_CONSTANT(module, AP_PANNING);
+ PY_MODULE_ADD_CONSTANT(module, AP_PITCH);
+ PY_MODULE_ADD_CONSTANT(module, AP_LOCATION);
+ PY_MODULE_ADD_CONSTANT(module, AP_ORIENTATION);
+ // channels constants
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_MONO);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO_LFE);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND4);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND5);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND51);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND61);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND71);
+ // codec constants
+ PY_MODULE_ADD_CONSTANT(module, CODEC_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_AAC);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_AC3);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_FLAC);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_MP2);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_MP3);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_PCM);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_VORBIS);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_OPUS);
+ // container constants
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_AC3);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_FLAC);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MATROSKA);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP2);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP3);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_OGG);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_WAV);
+ // distance model constants
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVALID);
+ // format constants
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT32);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT64);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S16);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S24);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S32);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_U8);
+ // rate constants
+ PY_MODULE_ADD_CONSTANT(module, RATE_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, RATE_8000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_16000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_11025);
+ PY_MODULE_ADD_CONSTANT(module, RATE_22050);
+ PY_MODULE_ADD_CONSTANT(module, RATE_32000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_44100);
+ PY_MODULE_ADD_CONSTANT(module, RATE_48000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_88200);
+ PY_MODULE_ADD_CONSTANT(module, RATE_96000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_192000);
+ // status constants
+ PY_MODULE_ADD_CONSTANT(module, STATUS_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_PAUSED);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_PLAYING);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_STOPPED);
+
+ return module;
+}
+
+AUD_API PyObject* AUD_getPythonSound(void* sound)
+{
+ if(sound)
+ {
+ Sound* object = (Sound*) Sound_empty();
+ if(object)
+ {
+ object->sound = new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound));
+ return (PyObject *) object;
+ }
+ }
+
+ return nullptr;
+}
+
+AUD_API void* AUD_getSoundFromPython(PyObject* object)
+{
+ Sound* sound = checkSound(object);
+
+ if(!sound)
+ return nullptr;
+
+ return new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound));
+}