annotate test/test.java @ 37:c9515589be7d v1.0

Licence
author Chris Cannam
date Thu, 22 Nov 2012 17:12:12 +0000
parents 7d1118b3860d
children 544ee975b822
rev   line source
Chris@37 1 /*
Chris@37 2 jVamp
Chris@37 3
Chris@37 4 A Java host interface for Vamp audio analysis plugins
Chris@37 5
Chris@37 6 Centre for Digital Music, Queen Mary, University of London.
Chris@37 7 Copyright 2012 Chris Cannam and QMUL.
Chris@37 8
Chris@37 9 Permission is hereby granted, free of charge, to any person
Chris@37 10 obtaining a copy of this software and associated documentation
Chris@37 11 files (the "Software"), to deal in the Software without
Chris@37 12 restriction, including without limitation the rights to use, copy,
Chris@37 13 modify, merge, publish, distribute, sublicense, and/or sell copies
Chris@37 14 of the Software, and to permit persons to whom the Software is
Chris@37 15 furnished to do so, subject to the following conditions:
Chris@37 16
Chris@37 17 The above copyright notice and this permission notice shall be
Chris@37 18 included in all copies or substantial portions of the Software.
Chris@37 19
Chris@37 20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@37 21 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@37 22 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Chris@37 23 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
Chris@37 24 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@37 25 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@37 26 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@37 27
Chris@37 28 Except as contained in this notice, the names of the Centre for
Chris@37 29 Digital Music; Queen Mary, University of London; and Chris Cannam
Chris@37 30 shall not be used in advertising or otherwise to promote the sale,
Chris@37 31 use or other dealings in this Software without prior written
Chris@37 32 authorization.
Chris@37 33 */
Chris@0 34
Chris@16 35 import java.util.ArrayList;
Chris@16 36 import java.util.TreeMap;
Chris@19 37 import java.util.Map;
Chris@19 38 import java.util.List;
Chris@18 39 import java.lang.RuntimeException;
Chris@16 40
Chris@22 41 import org.vamp_plugins.PluginLoader;
Chris@22 42 import org.vamp_plugins.Plugin;
Chris@22 43 import org.vamp_plugins.ParameterDescriptor;
Chris@22 44 import org.vamp_plugins.OutputDescriptor;
Chris@22 45 import org.vamp_plugins.Feature;
Chris@22 46 import org.vamp_plugins.RealTime;
Chris@22 47
Chris@0 48 public class test
Chris@0 49 {
Chris@19 50 private static void printFeatures(Map<Integer, ArrayList<Feature>> features) {
Chris@19 51 for (Map.Entry<Integer, ArrayList<Feature>> mi : features.entrySet()) {
Chris@19 52 System.out.print(mi.getKey() + ": ");
Chris@19 53 for (Feature li : mi.getValue()) {
Chris@19 54 System.out.print("[" + li.timestamp + "= ");
Chris@19 55 for (float v : li.values) {
Chris@19 56 System.out.print(v + " ");
Chris@19 57 }
Chris@19 58 System.out.print("] (\"");
Chris@19 59 System.out.print(li.label);
Chris@19 60 System.out.print("\") ");
Chris@19 61 }
Chris@19 62 System.out.println("");
Chris@19 63 }
Chris@19 64 }
Chris@19 65
Chris@0 66 public static void main(String[] args) {
Chris@0 67
Chris@0 68 // This is a plugin we know we have installed
Chris@6 69 // String key = "vamp-example-plugins:percussiononsets";
Chris@7 70 String key = "qm-vamp-plugins:qm-onsetdetector";
Chris@0 71
Chris@0 72 PluginLoader loader = PluginLoader.getInstance();
Chris@0 73
Chris@24 74 String[] plugins = loader.listPlugins();
Chris@24 75 System.out.println("We know " + plugins.length + " plugins");
Chris@24 76 for (int i = 0; i < plugins.length; ++i) {
Chris@24 77 System.out.println(i + ": " + plugins[i]);
Chris@24 78 }
Chris@24 79
Chris@0 80 try {
Chris@29 81 Plugin p = loader.loadPlugin(key, 44100, PluginLoader.AdapterFlags.ADAPT_ALL);
Chris@24 82 String[] cat = loader.getPluginCategory(key);
Chris@24 83 System.out.print("category: ");
Chris@24 84 for (int i = 0; i < cat.length; ++i) {
Chris@24 85 System.out.print(cat[i]);
Chris@24 86 if (i+1 < cat.length) System.out.print(" > ");
Chris@24 87 }
Chris@24 88 System.out.println("");
Chris@9 89 System.out.println("identifier: " + p.getIdentifier());
Chris@9 90 System.out.println("name: " + p.getName());
Chris@9 91 System.out.println("description: " + p.getDescription());
Chris@9 92 System.out.println("version: " + p.getPluginVersion());
Chris@5 93 Plugin.InputDomain domain = p.getInputDomain();
Chris@29 94 if (domain == Plugin.InputDomain.TIME_DOMAIN) {
Chris@5 95 System.out.println("This is a time-domain plugin");
Chris@5 96 } else {
Chris@5 97 System.out.println("This is a frequency-domain plugin");
Chris@5 98 }
Chris@9 99 ParameterDescriptor[] params = p.getParameterDescriptors();
Chris@9 100 System.out.println("Plugin has " + params.length + " parameters(s)");
Chris@9 101 for (int i = 0; i < params.length; ++i) {
Chris@9 102 System.out.println(i + ": " + params[i].identifier + " (" + params[i].name + ")");
Chris@9 103 }
Chris@6 104 String[] progs = p.getPrograms();
Chris@6 105 System.out.println("Plugin has " + progs.length + " program(s)");
Chris@6 106 for (int i = 0; i < progs.length; ++i) {
Chris@6 107 System.out.println(i + ": " + progs[i]);
Chris@6 108 }
Chris@7 109 OutputDescriptor[] outputs = p.getOutputDescriptors();
Chris@7 110 System.out.println("Plugin has " + outputs.length + " output(s)");
Chris@7 111 for (int i = 0; i < outputs.length; ++i) {
Chris@7 112 System.out.println(i + ": " + outputs[i].identifier + " (sample type: " + outputs[i].sampleType + ")");
Chris@7 113 }
Chris@16 114
Chris@18 115 boolean b = p.initialise(1, 1024, 1024);
Chris@16 116 System.out.println("Plugin initialise returned " + b);
Chris@18 117 if (!b) {
Chris@18 118 throw new RuntimeException("Plugin initialise failed");
Chris@18 119 }
Chris@16 120
Chris@17 121 float[][] buffers = new float[1][1024];
Chris@17 122 for (int block = 0; block < 1024; ++block) {
Chris@17 123 for (int i = 0; i < 1024; ++i) {
Chris@17 124 buffers[0][i] = 0.0f;
Chris@17 125 }
Chris@17 126 if (block == 512) {
Chris@19 127 buffers[0][0] = 0.5f;
Chris@19 128 buffers[0][1] = -0.5f;
Chris@17 129 }
Chris@17 130 RealTime timestamp = RealTime.frame2RealTime(block * 1024, 44100);
Chris@18 131 TreeMap<Integer, ArrayList<Feature>>
Chris@17 132 features = p.process(buffers, timestamp);
Chris@19 133
Chris@21 134 timestamp.dispose();
Chris@21 135
Chris@19 136 printFeatures(features);
Chris@17 137 }
Chris@16 138
Chris@18 139 TreeMap<Integer, ArrayList<Feature>>
Chris@16 140 features = p.getRemainingFeatures();
Chris@19 141
Chris@19 142 System.out.println("Results from getRemainingFeatures:");
Chris@19 143
Chris@19 144 printFeatures(features);
Chris@21 145 p.dispose();
Chris@16 146
Chris@0 147 } catch (PluginLoader.LoadFailedException e) {
Chris@0 148 System.out.println("Plugin load failed");
Chris@0 149 }
Chris@0 150 }
Chris@0 151 }
Chris@0 152