/******************************************************************************* * 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 "devices/I3DHandle.h" #include "Exception.h" #include using namespace aud; #define AUD_CAPI_IMPLEMENTATION #include "AUD_Handle.h" AUD_API int AUD_Handle_pause(AUD_Handle* handle) { assert(handle); return (*handle)->pause(); } AUD_API int AUD_Handle_resume(AUD_Handle* handle) { assert(handle); return (*handle)->resume(); } AUD_API int AUD_Handle_stop(AUD_Handle* handle) { assert(handle); int result = (*handle)->stop(); delete handle; return result; } AUD_API float AUD_Handle_getAttenuation(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getAttenuation(); return 0.0f; } AUD_API int AUD_Handle_setAttenuation(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setAttenuation(value); return false; } AUD_API float AUD_Handle_getConeAngleInner(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getConeAngleInner(); return 0.0f; } AUD_API int AUD_Handle_setConeAngleInner(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setConeAngleInner(value); return false; } AUD_API float AUD_Handle_getConeAngleOuter(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getConeAngleOuter(); return 0.0f; } AUD_API int AUD_Handle_setConeAngleOuter(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setConeAngleOuter(value); return false; } AUD_API float AUD_Handle_getConeVolumeOuter(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getConeVolumeOuter(); return 0.0f; } AUD_API int AUD_Handle_setConeVolumeOuter(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setConeVolumeOuter(value); return false; } AUD_API float AUD_Handle_getDistanceMaximum(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getDistanceMaximum(); return 0.0f; } AUD_API int AUD_Handle_setDistanceMaximum(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setDistanceMaximum(value); return false; } AUD_API float AUD_Handle_getDistanceReference(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getDistanceReference(); return 0.0f; } AUD_API int AUD_Handle_setDistanceReference(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setDistanceReference(value); return false; } AUD_API int AUD_Handle_doesKeep(AUD_Handle* handle) { assert(handle); return (*handle)->getKeep(); } AUD_API int AUD_Handle_setKeep(AUD_Handle* handle, int value) { assert(handle); return (*handle)->setKeep(value); } AUD_API int AUD_Handle_getLocation(AUD_Handle* handle, float value[3]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Vector3 v = h->getLocation(); value[0] = v.x(); value[1] = v.y(); value[2] = v.z(); return true; } return false; } AUD_API int AUD_Handle_setLocation(AUD_Handle* handle, const float value[3]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Vector3 v = Vector3(value[0], value[1], value[2]); return h->setLocation(v); } return false; } AUD_API int AUD_Handle_getLoopCount(AUD_Handle* handle) { assert(handle); return (*handle)->getLoopCount(); } AUD_API int AUD_Handle_setLoopCount(AUD_Handle* handle, int value) { assert(handle); return (*handle)->setLoopCount(value); } AUD_API int AUD_Handle_getOrientation(AUD_Handle* handle, float value[4]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Quaternion v = h->getOrientation(); value[0] = v.x(); value[1] = v.y(); value[2] = v.z(); value[3] = v.w(); return true; } return false; } AUD_API int AUD_Handle_setOrientation(AUD_Handle* handle, const float value[4]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Quaternion v(value[3], value[0], value[1], value[2]); return h->setOrientation(v); } return false; } AUD_API float AUD_Handle_getPitch(AUD_Handle* handle) { assert(handle); return (*handle)->getPitch(); } AUD_API int AUD_Handle_setPitch(AUD_Handle* handle, float value) { assert(handle); return (*handle)->setPitch(value); } AUD_API float AUD_Handle_getPosition(AUD_Handle* handle) { assert(handle); return (*handle)->getPosition(); } AUD_API int AUD_Handle_setPosition(AUD_Handle* handle, float value) { assert(handle); return (*handle)->seek(value); } AUD_API int AUD_Handle_isRelative(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->isRelative(); return true; } AUD_API int AUD_Handle_setRelative(AUD_Handle* handle, int value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setRelative(value); return false; } AUD_API AUD_Status AUD_Handle_getStatus(AUD_Handle* handle) { assert(handle); return static_cast((*handle)->getStatus()); } AUD_API int AUD_Handle_getVelocity(AUD_Handle* handle, float value[3]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Vector3 v = h->getVelocity(); value[0] = v.x(); value[1] = v.y(); value[2] = v.z(); return true; } return false; } AUD_API int AUD_Handle_setVelocity(AUD_Handle* handle, const float value[3]) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) { Vector3 v = Vector3(value[0], value[1], value[2]); return h->setVelocity(v); } return false; } AUD_API float AUD_Handle_getVolume(AUD_Handle* handle) { assert(handle); return (*handle)->getVolume(); } AUD_API int AUD_Handle_setVolume(AUD_Handle* handle, float value) { assert(handle); return (*handle)->setVolume(value); } AUD_API float AUD_Handle_getVolumeMaximum(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getVolumeMaximum(); return 0.0f; } AUD_API int AUD_Handle_setVolumeMaximum(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setVolumeMaximum(value); return false; } AUD_API float AUD_Handle_getVolumeMinimum(AUD_Handle* handle) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->getVolumeMinimum(); return 0.0f; } AUD_API int AUD_Handle_setVolumeMinimum(AUD_Handle* handle, float value) { assert(handle); std::shared_ptr h = std::dynamic_pointer_cast(*handle); if(h.get()) return h->setVolumeMinimum(value); return false; } AUD_API void AUD_Handle_free(AUD_Handle* handle) { delete handle; }