Chris@37: /* Chris@37: jVamp Chris@37: Chris@37: A Java host interface for Vamp audio analysis plugins Chris@37: Chris@37: Centre for Digital Music, Queen Mary, University of London. Chris@37: Copyright 2012 Chris Cannam and QMUL. Chris@37: Chris@37: Permission is hereby granted, free of charge, to any person Chris@37: obtaining a copy of this software and associated documentation Chris@37: files (the "Software"), to deal in the Software without Chris@37: restriction, including without limitation the rights to use, copy, Chris@37: modify, merge, publish, distribute, sublicense, and/or sell copies Chris@37: of the Software, and to permit persons to whom the Software is Chris@37: furnished to do so, subject to the following conditions: Chris@37: Chris@37: The above copyright notice and this permission notice shall be Chris@37: included in all copies or substantial portions of the Software. Chris@37: Chris@37: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, Chris@37: EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF Chris@37: MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND Chris@37: NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR Chris@37: ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF Chris@37: CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION Chris@37: WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Chris@37: Chris@37: Except as contained in this notice, the names of the Centre for Chris@37: Digital Music; Queen Mary, University of London; and Chris Cannam Chris@37: shall not be used in advertising or otherwise to promote the sale, Chris@37: use or other dealings in this Software without prior written Chris@37: authorization. Chris@37: */ Chris@37: Chris@0: #include "org_vamp_plugins_PluginLoader.h" Chris@0: Chris@0: #include Chris@45: #include Chris@0: Chris@0: #include "handle.h" Chris@0: Chris@0: using Vamp::Plugin; Chris@0: using Vamp::HostExt::PluginLoader; Chris@0: Chris@30: JNIEXPORT void JNICALL Chris@0: Java_org_vamp_1plugins_PluginLoader_initialise(JNIEnv *env, jobject obj) Chris@0: { Chris@0: PluginLoader *inst = PluginLoader::getInstance(); Chris@0: setHandle(env, obj, inst); Chris@0: } Chris@0: Chris@30: JNIEXPORT jobjectArray JNICALL Chris@23: Java_org_vamp_1plugins_PluginLoader_listPlugins(JNIEnv *env, jobject obj) Chris@23: { Chris@23: PluginLoader *inst = getHandle(env, obj); Chris@23: PluginLoader::PluginKeyList plugins = inst->listPlugins(); Chris@23: jobjectArray result = env->NewObjectArray Chris@23: (plugins.size(), env->FindClass("java/lang/String"), 0); chris@46: for (int i = 0; i < (int)plugins.size(); ++i) { Chris@23: env->SetObjectArrayElement(result, i, Chris@23: env->NewStringUTF(plugins[i].c_str())); Chris@23: } Chris@23: return result; Chris@23: } Chris@23: Chris@30: JNIEXPORT jlong JNICALL Chris@0: Java_org_vamp_1plugins_PluginLoader_loadPluginNative(JNIEnv *env, jobject obj, Chris@29: jstring key, jfloat rate, Chris@29: jint flags) Chris@0: { Chris@0: PluginLoader *inst = getHandle(env, obj); Chris@0: const char *kstr = env->GetStringUTFChars(key, 0); Chris@29: Plugin *p = inst->loadPlugin(kstr, rate, flags); Chris@0: env->ReleaseStringUTFChars(key, kstr); Chris@0: return (jlong)p; Chris@0: } Chris@0: Chris@30: JNIEXPORT jobjectArray JNICALL Chris@24: Java_org_vamp_1plugins_PluginLoader_getPluginCategory(JNIEnv *env, jobject obj, Chris@24: jstring key) Chris@24: { Chris@24: PluginLoader *inst = getHandle(env, obj); Chris@24: const char *kstr = env->GetStringUTFChars(key, 0); Chris@24: PluginLoader::PluginCategoryHierarchy cat = inst->getPluginCategory(kstr); Chris@24: jobjectArray result = env->NewObjectArray Chris@24: (cat.size(), env->FindClass("java/lang/String"), 0); chris@46: for (int i = 0; i < (int)cat.size(); ++i) { Chris@24: env->SetObjectArrayElement(result, i, Chris@24: env->NewStringUTF(cat[i].c_str())); Chris@24: } Chris@24: return result; Chris@24: } Chris@0: Chris@45: JNIEXPORT jobjectArray JNICALL Chris@45: Java_org_vamp_1plugins_PluginLoader_getPluginPath(JNIEnv *env, jobject obj) Chris@45: { Chris@45: std::vector path = Vamp::PluginHostAdapter::getPluginPath(); Chris@45: jobjectArray result = env->NewObjectArray Chris@45: (path.size(), env->FindClass("java/lang/String"), 0); chris@46: for (int i = 0; i < (int)path.size(); ++i) { Chris@45: env->SetObjectArrayElement(result, i, Chris@45: env->NewStringUTF(path[i].c_str())); Chris@45: } Chris@45: return result; Chris@45: } Chris@23: