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@0: Chris@19: import java.util.Map; Chris@19: import java.util.List; Chris@18: import java.lang.RuntimeException; Chris@16: Chris@22: import org.vamp_plugins.PluginLoader; Chris@22: import org.vamp_plugins.Plugin; Chris@22: import org.vamp_plugins.ParameterDescriptor; Chris@22: import org.vamp_plugins.OutputDescriptor; Chris@22: import org.vamp_plugins.Feature; Chris@22: import org.vamp_plugins.RealTime; Chris@22: Chris@0: public class test Chris@0: { Chris@41: private static void printFeatures(Map> features) { Chris@41: for (Map.Entry> mi : features.entrySet()) { Chris@19: System.out.print(mi.getKey() + ": "); Chris@19: for (Feature li : mi.getValue()) { Chris@19: System.out.print("[" + li.timestamp + "= "); Chris@19: for (float v : li.values) { Chris@19: System.out.print(v + " "); Chris@19: } Chris@19: System.out.print("] (\""); Chris@19: System.out.print(li.label); Chris@19: System.out.print("\") "); Chris@19: } Chris@19: System.out.println(""); Chris@19: } Chris@19: } Chris@19: Chris@0: public static void main(String[] args) { Chris@0: Chris@0: // This is a plugin we know we have installed Chris@6: // String key = "vamp-example-plugins:percussiononsets"; Chris@7: String key = "qm-vamp-plugins:qm-onsetdetector"; Chris@0: Chris@0: PluginLoader loader = PluginLoader.getInstance(); Chris@0: Chris@24: String[] plugins = loader.listPlugins(); Chris@24: System.out.println("We know " + plugins.length + " plugins"); Chris@24: for (int i = 0; i < plugins.length; ++i) { Chris@24: System.out.println(i + ": " + plugins[i]); Chris@24: } Chris@24: Chris@0: try { Chris@29: Plugin p = loader.loadPlugin(key, 44100, PluginLoader.AdapterFlags.ADAPT_ALL); Chris@24: String[] cat = loader.getPluginCategory(key); Chris@24: System.out.print("category: "); Chris@24: for (int i = 0; i < cat.length; ++i) { Chris@24: System.out.print(cat[i]); Chris@24: if (i+1 < cat.length) System.out.print(" > "); Chris@24: } Chris@24: System.out.println(""); Chris@9: System.out.println("identifier: " + p.getIdentifier()); Chris@9: System.out.println("name: " + p.getName()); Chris@9: System.out.println("description: " + p.getDescription()); Chris@9: System.out.println("version: " + p.getPluginVersion()); Chris@5: Plugin.InputDomain domain = p.getInputDomain(); Chris@29: if (domain == Plugin.InputDomain.TIME_DOMAIN) { Chris@5: System.out.println("This is a time-domain plugin"); Chris@5: } else { Chris@5: System.out.println("This is a frequency-domain plugin"); Chris@5: } Chris@9: ParameterDescriptor[] params = p.getParameterDescriptors(); Chris@9: System.out.println("Plugin has " + params.length + " parameters(s)"); Chris@9: for (int i = 0; i < params.length; ++i) { Chris@9: System.out.println(i + ": " + params[i].identifier + " (" + params[i].name + ")"); Chris@9: } Chris@6: String[] progs = p.getPrograms(); Chris@6: System.out.println("Plugin has " + progs.length + " program(s)"); Chris@6: for (int i = 0; i < progs.length; ++i) { Chris@6: System.out.println(i + ": " + progs[i]); Chris@6: } Chris@7: OutputDescriptor[] outputs = p.getOutputDescriptors(); Chris@7: System.out.println("Plugin has " + outputs.length + " output(s)"); Chris@7: for (int i = 0; i < outputs.length; ++i) { Chris@7: System.out.println(i + ": " + outputs[i].identifier + " (sample type: " + outputs[i].sampleType + ")"); Chris@7: } Chris@16: Chris@18: boolean b = p.initialise(1, 1024, 1024); Chris@16: System.out.println("Plugin initialise returned " + b); Chris@18: if (!b) { Chris@18: throw new RuntimeException("Plugin initialise failed"); Chris@18: } Chris@16: Chris@17: float[][] buffers = new float[1][1024]; Chris@17: for (int block = 0; block < 1024; ++block) { Chris@17: for (int i = 0; i < 1024; ++i) { Chris@17: buffers[0][i] = 0.0f; Chris@17: } Chris@17: if (block == 512) { Chris@19: buffers[0][0] = 0.5f; Chris@19: buffers[0][1] = -0.5f; Chris@17: } Chris@17: RealTime timestamp = RealTime.frame2RealTime(block * 1024, 44100); Chris@49: Map> features = p.process(buffers, timestamp); Chris@21: Chris@19: printFeatures(features); Chris@17: } Chris@16: Chris@41: Map> Chris@16: features = p.getRemainingFeatures(); Chris@19: Chris@19: System.out.println("Results from getRemainingFeatures:"); Chris@19: Chris@19: printFeatures(features); Chris@21: p.dispose(); Chris@16: Chris@0: } catch (PluginLoader.LoadFailedException e) { Chris@0: System.out.println("Plugin load failed"); Chris@0: } Chris@0: } Chris@0: } Chris@0: