changeset 138:147de5e64d28

* Update vamp.n3/rdf from km-rdf * Add template generator (old jerrell version) from sv1 repository * Add provisional RDF descriptions for example plugins
author cannam
date Thu, 19 Jun 2008 09:37:31 +0000
parents dbab8c3a6571
children bb46b8bd213a
files examples/vamp-example-plugins:amplitudefollower.n3 examples/vamp-example-plugins:percussiononsets.n3 examples/vamp-example-plugins:spectralcentroid.n3 examples/vamp-example-plugins:zerocrossing.n3 rdf/README rdf/ToDo rdf/generator/Makefile.linux rdf/generator/template-generator.cpp rdf/vamp.n3 rdf/vamp.rdf
diffstat 10 files changed, 578 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/vamp-example-plugins:amplitudefollower.n3	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,63 @@
+@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
+@prefix vamp:     <http://www.purl.org/ontology/vamp/> .
+@prefix vampex:   <http://www.purl.org/ontology/vamp/examples/> .
+@prefix plugbase: <http://purl.org/ontology/vamp/examples/> .
+@prefix owl:      <http://www.w3.org/2002/07/owl#> .
+@prefix dc:       <http://purl.org/dc/elements/1.1/> .
+@prefix af:       <http://purl.org/ontology/af/> .
+@prefix foaf:     <http://xmlns.com/foaf/0.1/> .
+@prefix cc:       <http://web.resource.org/cc/> .
+@prefix thisplug: <http://purl.org/ontology/vamp/examples/amplitudefollower#> .
+@prefix :         <> .
+
+<>  a   vamp:PluginDescription ;
+     foaf:maker          <http://www.vamp-plugins.org/> ;
+     foaf:maker          <http://www.vamp-plugins.org/doap.rdf#template-generator> ;
+     foaf:primaryTopic   plugbase:amplitudefollower .
+
+plugbase:amplitudefollower a   vamp:Plugin ;
+    dc:title              "Amplitude Follower" ;
+    vamp:name             "Amplitude Follower" ;
+    dc:description        "Track the amplitude of the audio signal" ;
+    foaf:maker            [ foaf:name "Vamp SDK Example Plugins"] ; # FIXME could give plugin author's URI here
+    cc:license            <FIXME license for the plugin> ; 
+    vamp:identifier       "amplitudefollower" ;
+    vamp:vamp_API_version vamp:api_version_1 ;
+    owl:versionInfo       "1" ;
+    vamp:input_domain     vamp:TimeDomain ;
+
+    vamp:parameter_descriptor   thisplug:param_attack ;
+    vamp:parameter_descriptor   thisplug:param_release ;
+
+    vamp:output_descriptor      thisplug:output_amplitude ;
+    .
+thisplug:param_attack a  vamp:ParameterDescriptor ;
+    vamp:identifier     "attack" ;
+    dc:title            "Attack time" ;
+    dc:format           "s" ;
+    vamp:min_value       0 ;
+    vamp:max_value       1 ;
+    vamp:default_value   0.01 .
+
+thisplug:param_release a  vamp:ParameterDescriptor ;
+    vamp:identifier     "release" ;
+    dc:title            "Release time" ;
+    dc:format           "s" ;
+    vamp:min_value       0 ;
+    vamp:max_value       1 ;
+    vamp:default_value   0.01 .
+
+thisplug:output_amplitude a  vamp:DenseOutput ;
+    vamp:identifier       "amplitude" ;
+    dc:title              "Amplitude" ;
+    dc:description        ""  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantised     "false"  ;
+    vamp:unit             "V" ;
+    vamp:bin_count          1 ;
+    vamp:bin_names          ( "");
+    vamp:sample_type       vamp:OneSamplePerStep ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/vamp-example-plugins:percussiononsets.n3	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,78 @@
+@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
+@prefix vamp:     <http://www.purl.org/ontology/vamp/> .
+@prefix vampex:   <http://www.purl.org/ontology/vamp/examples/> .
+@prefix plugbase: <http://purl.org/ontology/vamp/examples/> .
+@prefix owl:      <http://www.w3.org/2002/07/owl#> .
+@prefix dc:       <http://purl.org/dc/elements/1.1/> .
+@prefix af:       <http://purl.org/ontology/af/> .
+@prefix foaf:     <http://xmlns.com/foaf/0.1/> .
+@prefix cc:       <http://web.resource.org/cc/> .
+@prefix thisplug: <http://purl.org/ontology/vamp/examples/percussiononsets#> .
+@prefix :         <> .
+
+<>  a   vamp:PluginDescription ;
+     foaf:maker          <http://www.vamp-plugins.org/> ;
+     foaf:maker          <http://www.vamp-plugins.org/doap.rdf#template-generator> ;
+     foaf:primaryTopic   plugbase:percussiononsets .
+
+plugbase:percussiononsets a   vamp:Plugin ;
+    dc:title              "Simple Percussion Onset Detector" ;
+    vamp:name             "Simple Percussion Onset Detector" ;
+    dc:description        "Detect percussive note onsets by identifying broadband energy rises" ;
+    foaf:maker            [ foaf:name "Vamp SDK Example Plugins"] ; # FIXME could give plugin author's URI here
+    cc:license            <FIXME license for the plugin> ; 
+    vamp:identifier       "percussiononsets" ;
+    vamp:vamp_API_version vamp:api_version_1 ;
+    owl:versionInfo       "2" ;
+    vamp:input_domain     vamp:TimeDomain ;
+
+    vamp:parameter_descriptor   thisplug:param_threshold ;
+    vamp:parameter_descriptor   thisplug:param_sensitivity ;
+
+    vamp:output_descriptor      thisplug:output_onsets ;
+    vamp:output_descriptor      thisplug:output_detectionfunction ;
+    .
+thisplug:param_threshold a  vamp:ParameterDescriptor ;
+    vamp:identifier     "threshold" ;
+    dc:title            "Energy rise threshold" ;
+    dc:format           "dB" ;
+    vamp:min_value       0 ;
+    vamp:max_value       20 ;
+    vamp:default_value   3 .
+
+thisplug:param_sensitivity a  vamp:ParameterDescriptor ;
+    vamp:identifier     "sensitivity" ;
+    dc:title            "Sensitivity" ;
+    dc:format           "%" ;
+    vamp:min_value       0 ;
+    vamp:max_value       100 ;
+    vamp:default_value   40 .
+
+thisplug:output_onsets a  vamp:SparseOutput ;
+    vamp:identifier       "onsets" ;
+    dc:title              "Onsets" ;
+    dc:description        "Percussive note onset locations"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantized     "false"  ;
+    vamp:unit             "" ;
+    vamp:bin_count          0 ;
+    vamp:bin_names          ();
+    vamp:sample_type        vamp:VariableSampleRate ;
+    vamp:sample_rate    44100 ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
+thisplug:output_detectionfunction a  vamp:DenseOutput ;
+    vamp:identifier       "detectionfunction" ;
+    dc:title              "Detection Function" ;
+    dc:description        "Broadband energy rise detection function"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantised     "true"  ;
+    vamp:unit             "" ;
+    vamp:bin_count          1 ;
+    vamp:bin_names          ( "");
+    vamp:quantize_step        1  ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/vamp-example-plugins:spectralcentroid.n3	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,59 @@
+@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
+@prefix vamp:     <http://www.purl.org/ontology/vamp/> .
+@prefix vampex:   <http://www.purl.org/ontology/vamp/examples/> .
+@prefix plugbase: <http://purl.org/ontology/vamp/examples/> .
+@prefix owl:      <http://www.w3.org/2002/07/owl#> .
+@prefix dc:       <http://purl.org/dc/elements/1.1/> .
+@prefix af:       <http://purl.org/ontology/af/> .
+@prefix foaf:     <http://xmlns.com/foaf/0.1/> .
+@prefix cc:       <http://web.resource.org/cc/> .
+@prefix thisplug: <http://purl.org/ontology/vamp/examples/spectralcentroid#> .
+@prefix :         <> .
+
+<>  a   vamp:PluginDescription ;
+     foaf:maker          <http://www.vamp-plugins.org/> ;
+     foaf:maker          <http://www.vamp-plugins.org/doap.rdf#template-generator> ;
+     foaf:primaryTopic   plugbase:spectralcentroid .
+
+plugbase:spectralcentroid a   vamp:Plugin ;
+    dc:title              "Spectral Centroid" ;
+    vamp:name             "Spectral Centroid" ;
+    dc:description        "Calculate the centroid frequency of the spectrum of the input signal" ;
+    foaf:maker            [ foaf:name "Vamp SDK Example Plugins"] ; # FIXME could give plugin author's URI here
+    cc:license            <FIXME license for the plugin> ; 
+    vamp:identifier       "spectralcentroid" ;
+    vamp:vamp_API_version vamp:api_version_1 ;
+    owl:versionInfo       "2" ;
+    vamp:input_domain     vamp:TimeDomain ;
+
+
+    vamp:output_descriptor      thisplug:output_logcentroid ;
+    vamp:output_descriptor      thisplug:output_linearcentroid ;
+    .
+thisplug:output_logcentroid a  vamp:DenseOutput ;
+    vamp:identifier       "logcentroid" ;
+    dc:title              "Log Frequency Centroid" ;
+    dc:description        "Centroid of the log weighted frequency spectrum"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantised     "false"  ;
+    vamp:unit             "Hz" ;
+    vamp:bin_count          1 ;
+    vamp:bin_names          ( "");
+    vamp:sample_type       vamp:OneSamplePerStep ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
+thisplug:output_linearcentroid a  vamp:DenseOutput ;
+    vamp:identifier       "linearcentroid" ;
+    dc:title              "Linear Frequency Centroid" ;
+    dc:description        "Centroid of the linear frequency spectrum"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantised     "false"  ;
+    vamp:unit             "Hz" ;
+    vamp:bin_count          1 ;
+    vamp:bin_names          ( "");
+    vamp:sample_type       vamp:OneSamplePerStep ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/vamp-example-plugins:zerocrossing.n3	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,61 @@
+@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
+@prefix vamp:     <http://www.purl.org/ontology/vamp/> .
+@prefix vampex:   <http://www.purl.org/ontology/vamp/examples/> .
+@prefix plugbase: <http://purl.org/ontology/vamp/examples/> .
+@prefix owl:      <http://www.w3.org/2002/07/owl#> .
+@prefix dc:       <http://purl.org/dc/elements/1.1/> .
+@prefix af:       <http://purl.org/ontology/af/> .
+@prefix foaf:     <http://xmlns.com/foaf/0.1/> .
+@prefix cc:       <http://web.resource.org/cc/> .
+@prefix thisplug: <http://purl.org/ontology/vamp/examples/zerocrossing#> .
+@prefix :         <> .
+
+<>  a   vamp:PluginDescription ;
+     foaf:maker          <http://www.vamp-plugins.org/> ;
+     foaf:maker          <http://www.vamp-plugins.org/doap.rdf#template-generator> ;
+     foaf:primaryTopic   plugbase:zerocrossing .
+
+plugbase:zerocrossing a   vamp:Plugin ;
+    dc:title              "Zero Crossings" ;
+    vamp:name             "Zero Crossings" ;
+    dc:description        "Detect and count zero crossing points" ;
+    foaf:maker            [ foaf:name "Vamp SDK Example Plugins"] ; # FIXME could give plugin author's URI here
+    cc:license            <FIXME license for the plugin> ; 
+    vamp:identifier       "zerocrossing" ;
+    vamp:vamp_API_version vamp:api_version_1 ;
+    owl:versionInfo       "2" ;
+    vamp:input_domain     vamp:TimeDomain ;
+
+
+    vamp:output_descriptor      thisplug:output_counts ;
+    vamp:output_descriptor      thisplug:output_zerocrossings ;
+    .
+thisplug:output_counts a  vamp:DenseOutput ;
+    vamp:identifier       "counts" ;
+    dc:title              "Zero Crossing Counts" ;
+    dc:description        "The number of zero crossing points per processing block"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantised     "true"  ;
+    vamp:unit             "crossings" ;
+    vamp:bin_count          1 ;
+    vamp:bin_names          ( "");
+    vamp:quantize_step        1  ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
+thisplug:output_zerocrossings a  vamp:SparseOutput ;
+    vamp:identifier       "zerocrossings" ;
+    dc:title              "Zero Crossings" ;
+    dc:description        "The locations of zero crossing points"  ;
+    vamp:fixed_bin_count  "true" ;
+    vamp:is_quantized     "true"  ;
+    vamp:unit             "" ;
+    vamp:bin_count          0 ;
+    vamp:bin_names          ();
+   vamp:quantize_step        1  ;
+    vamp:sample_type        vamp:VariableSampleRate ;
+    vamp:sample_rate    44100 ;
+    vamp:computes_feature_type  <FIXME feature type URI> ;
+    vamp:computes_event_type    <FIXME event type URI> ;
+    .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf/README	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,18 @@
+/*
+	Vamp Ontology/Transform OWL description (Chris Cannam)
+	www.vamp-plugins.org
+	www.sonicvisualiser.org
+*/
+
+	David Pastor Escuredo
+	Contributions:
+		-Chris Sutton
+		-Yves Raimond
+	2008, Centre For Digital Music, Queen Mary, University of London.
+
+This includes:
+
+-Vamp Ontology(n3 and RDF/XML)
+-HTML class reference documentation
+-Script to generate plugin descriptions driven from Prolog
+-Plugin Description (they require some tweaking)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf/ToDo	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,4 @@
+-automatic library URI assignment (not is a bit tricky)
+-rules to define TrackLevelOutputs and other exceptions
+-mapping vamp-audio features
+...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf/generator/Makefile.linux	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,9 @@
+
+CXXFLAGS	:= -I../.. -O2 -Wall
+
+template-generator:	template-generator.o
+	g++ $^ -o $@ -L../../vamp-sdk -Wl,-Bstatic -lvamp-hostsdk -Wl,-Bdynamic -ldl
+
+clean:	
+	rm *.o
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rdf/generator/template-generator.cpp	Thu Jun 19 09:37:31 2008 +0000
@@ -0,0 +1,230 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+#include "vamp-sdk/PluginHostAdapter.h"
+#include "vamp-sdk/hostext/PluginChannelAdapter.h"
+#include "vamp-sdk/hostext/PluginInputDomainAdapter.h"
+#include "vamp-sdk/hostext/PluginLoader.h"
+#include "vamp/vamp.h"
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <sndfile.h>
+
+#include <cmath>
+
+using std::cout;
+using std::cin;
+using std::cerr;
+using std::getline;
+using std::endl;
+using std::string;
+using std::vector;
+using std::ofstream;
+using std::ios;
+
+using Vamp::HostExt::PluginLoader;
+using Vamp::Plugin;
+
+/*
+  
+   usage:
+
+   template-generator vamp:aubioonset:onsets
+
+*/
+
+string programURI = "http://www.vamp-plugins.org/doap.rdf#template-generator";
+
+void usage()
+{
+    cerr << "usage: template-generator [PLUGIN_BASE_URI YOUR_URI] vamp:soname:plugin[:output]" << endl;
+    exit(2);
+}
+
+template <class T>
+inline string to_string (const T& t)
+{
+    std::stringstream ss;
+    ss << t;
+    return ss.str();
+}
+
+string describe_namespaces(Plugin* plugin, string pluginBundleBaseURI)
+{
+	string res=\
+"@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .\n\
+@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .\n\
+@prefix vamp:     <http://www.vamp-plugins.org/ontology/> .\n\
+@prefix vampex:   <http://www.vamp-plugins.org/examples/> .\n\
+@prefix plugbase: <"+pluginBundleBaseURI+"> .\n\
+@prefix owl:      <http://www.w3.org/2002/07/owl#> .\n\
+@prefix dc:       <http://purl.org/dc/elements/1.1/> .\n\
+@prefix af:       <http://purl.org/ontology/af/> .\n\
+@prefix foaf:     <http://xmlns.com/foaf/0.1/> .\n\
+@prefix cc:       <http://web.resource.org/cc/> .\n\
+@prefix thisplug: <"+pluginBundleBaseURI+plugin->getIdentifier()+"#> .\n\
+@prefix :         <> .\n\n";
+	
+	return res;
+}
+
+string describe_doc(Plugin* plugin, string describerURI)
+{
+	string res=\
+"<>  a   vamp:PluginDescription ;\n\
+     foaf:maker          <"+describerURI+"> ;\n\
+     foaf:maker          <"+programURI+"> ;\n\
+     foaf:primaryTopic   plugbase:"+plugin->getIdentifier()+" .\n\n";
+	return res;
+}
+
+
+string describe_plugin(Plugin* plugin)
+{
+	string res=\
+"plugbase:"+plugin->getIdentifier()+" a   vamp:Plugin ;\n\
+    dc:title              \""+plugin->getName()+"\" ;\n\
+    dc:description        \""+plugin->getDescription()+"\" ;\n\
+    foaf:maker            [ foaf:name \""+plugin->getMaker()+"\"] ; # FIXME could give plugin author's URI here\n\
+    cc:license            <FIXME license for the plugin> ; \n\
+    vamp:identifier       \""+plugin->getIdentifier()+"\" ;\n\
+    vamp:vamp_API_version vamp:api_version_"+to_string(plugin->getVampApiVersion())+" ;\n\
+    owl:versionInfo       \""+to_string(plugin->getPluginVersion())+"\" ;\n";
+	if (plugin->getInputDomain() == Vamp::Plugin::FrequencyDomain)
+		res+="    vamp:input_domain     vamp:FrequencyDomain ;\n\n";
+	else
+		res+="    vamp:input_domain     vamp:TimeDomain ;\n\n";
+	
+
+	Plugin::ParameterList params = plugin->getParameterDescriptors();
+	for (Plugin::ParameterList::const_iterator i = params.begin(); i != params.end(); i++)
+		res+="    vamp:parameter_descriptor   thisplug:param_"+(*i).identifier+" ;\n";
+	res+="\n";
+
+	Plugin::OutputList outputs = plugin->getOutputDescriptors();
+	for (Plugin::OutputList::const_iterator i = outputs.begin(); i!= outputs.end(); i++)
+		res+="    vamp:output_descriptor      thisplug:output_"+(*i).identifier+" ;\n";
+	res+="    .\n";
+	
+	return res;
+}
+
+string describe_param(Plugin::ParameterDescriptor p)
+{
+	string res=\
+"thisplug:param_"+p.identifier+" a  vamp:ParameterDescriptor ;\n\
+    vamp:identifier     \""+p.identifier+"\" ;\n\
+    dc:title            \""+p.name+"\" ;\n\
+    dc:format           \""+p.unit+"\" ;\n\
+    vamp:minValue       "+to_string(p.minValue)+" ;\n\
+    vamp:maxValue       "+to_string(p.maxValue)+" ;\n\
+    vamp:defaultValue   "+to_string(p.defaultValue)+" .\n\n";
+	return res;
+}
+
+string describe_output(Plugin::OutputDescriptor o)
+{
+	string res=\
+"thisplug:output_"+o.identifier+" a  vamp:OutputDescriptor ;\n\
+    vamp:identifier     \""+o.identifier+"\" ;\n\
+    dc:title            \""+o.name+"\" ;\n\
+    vamp:fixed_bin_count \""+(o.hasFixedBinCount == 1 ? "true" : "false")+"\" ;\n";
+
+	// FIXME ? Bin names may vary based on plugin setup, so including them here might be misleading...
+	if (o.hasFixedBinCount)
+	{
+		res+="    vamp:bin_count      "+to_string(o.binCount)+" ;\n";
+		res+="    vamp:bin_names      (";
+
+		unsigned int i;
+		for (i=0; i+1 < o.binNames.size(); i++)
+			res+=" \""+o.binNames[i]+"\"";
+		if (i < o.binNames.size())
+			res+=" \""+o.binNames[i]+"\"";
+		res+=");\n";
+	}
+	
+	if (o.sampleType == Plugin::OutputDescriptor::VariableSampleRate)
+	{
+		res+="    vamp:sample_type    vamp:VariableSampleRate ;\n";
+		if (o.sampleRate > 0.0f)
+			res+="    vamp:sample_rate    "+to_string(o.sampleRate)+" ;\n";
+	}
+	else if (o.sampleType == Plugin::OutputDescriptor::FixedSampleRate)
+	{
+		res+="    vamp:sample_type    vamp:FixedSampleRate ;\n";
+		res+="    vamp:sample_rate    "+to_string(o.sampleRate)+" ;\n";
+	}
+	else if (o.sampleType == Plugin::OutputDescriptor::OneSamplePerStep)
+		res+="    vamp:sample_type    vamp:OneSamplePerStep ;\n";
+	else
+	{
+		cerr<<"Incomprehensible sampleType for output descriptor "+o.identifier<<" !"<<endl;
+		exit(1);
+	}
+
+	res+="    vamp:computes_feature_type  <FIXME feature type URI> ;\n";
+	res+="    vamp:computes_event_type    <FIXME event type URI> ;\n";
+	res+="    .\n";
+
+	return res;
+}
+string describe(Plugin* plugin, string pluginBundleBaseURI, string describerURI)
+{
+	string res = describe_namespaces(plugin, pluginBundleBaseURI);
+	
+	res += describe_doc(plugin, describerURI);
+	
+	res += describe_plugin(plugin);
+	
+	Plugin::ParameterList params = plugin->getParameterDescriptors();
+	for (Plugin::ParameterList::const_iterator i = params.begin(); i != params.end(); i++)
+		res += describe_param(*i);
+	
+	Plugin::OutputList outputs = plugin->getOutputDescriptors();
+	for (Plugin::OutputList::const_iterator i = outputs.begin(); i!= outputs.end(); i++)
+		res += describe_output(*i);
+	
+	return res;
+}
+
+int main(int argc, char **argv)
+{
+    if (argc != 2 && argc != 4) usage();
+
+    std::string pluginName = argv[argc-1];
+
+    if (pluginName.substr(0, 5) == "vamp:") {
+        pluginName = pluginName.substr(5);
+    }
+
+    Vamp::Plugin *plugin = PluginLoader::getInstance()->loadPlugin
+        (pluginName, size_t(44100), PluginLoader::ADAPT_ALL_SAFE);
+
+    if (!plugin) {
+        cerr << "ERROR: Plugin \"" << pluginName << "\" could not be loaded" << endl;
+        exit(1);
+    }
+
+    string pluginBundleBaseURI, describerURI;
+	
+    if (argc == 4)
+    {
+        pluginBundleBaseURI = argv[1];
+        describerURI = argv[2];
+    }
+    else
+    {
+        cerr << "Please enter the base URI for the plugin bundle : ";
+        getline(cin, pluginBundleBaseURI);
+        cerr << "Please enter your URI : ";
+        getline(cin, describerURI);
+    }
+	
+    cout << describe(plugin, pluginBundleBaseURI, describerURI) << endl;
+
+    return 0;
+}
+
+
--- a/rdf/vamp.n3	Mon Jun 16 12:22:16 2008 +0000
+++ b/rdf/vamp.n3	Thu Jun 19 09:37:31 2008 +0000
@@ -68,15 +68,6 @@
 	vs:term_status "stable";
 	.
 
-vamp:PluginDescription
-	a owl:Class;
-	rdfs:label "Vamp Plugin Descriptor";
-	rdfs:comment """
-			The plugin descriptor provides basic metadata of the plugin. We may remove this and link directly to the plugin instance.
-	""";
-	vs:term_status "unstable";
-	.
-
 vamp:ParameterDescriptor
 	a owl:Class;
 	rdfs:label "Vamp Plugin Parameter Descriptor";
@@ -167,18 +158,6 @@
 
 ##### Plugin properties
 
-vamp:plugin_description
-	a rdf:Property;
-	a owl:ObjectProperty;
-	rdfs:label "plugin description";
-	rdfs:comment """
-			Links the plugin descriptor to the plugin (it may be redundant for an RDF decription to have a plugin descriptor in between an actual plugin and its properties).
-	""";
-	rdfs:range vamp:PluginDescription;
-	rdfs:domain vamp:Plugin;
-	vs:term_status "stable";
-	.
-
 vamp:parameter_descriptor
 	a rdf:Property;
 	a owl:ObjectProperty;
@@ -226,7 +205,7 @@
 	rdfs:comment """
 		Machine-readable identifier for Vamp plugin classes (and Transform).
 	""";
-	rdfs:domain vamp:PluginDescription;
+	rdfs:domain vamp:Plugin;
 	rdfs:domain vamp:PluginProgram;
 	rdfs:domain vamp:PluginOutput;
 	rdfs:domain vamp:ParameterDescriptor;
@@ -240,7 +219,7 @@
 	rdfs:comment """
 		Human-readable identifier for the plugin.
 	""";
-	rdfs:domain vamp:PluginDescription;
+	rdfs:domain vamp:Plugin;
 	vs:term_status "stable";
 	.
 
@@ -251,7 +230,7 @@
 	rdfs:comment """
 			Version of the Vamp API used to implement this plugin.
 	""";
-	rdfs:domain vamp:PluginDescription;
+	rdfs:domain vamp:Plugin;
 	vs:term_status "stable";
 	.
 
@@ -324,6 +303,17 @@
 	vs:term_status "unstable";
 	.
 
+vamp:is_quantized
+	a rdf:Property;
+	a owl:DatatypeProperty;
+	rdfs:label "is quantised";
+	rdfs:comment """
+		Quantised. A boolean type.
+	""";
+	rdfs:domain vamp:PluginOutput;
+	vs:term_status "unstable";
+	.
+
 vamp:unit 
 	a rdf:Property;
 	a owl:DatatypeProperty;
@@ -348,13 +338,13 @@
 	vs:term_status "unstable";
 	.
 
-vamp:quantized_step
+vamp:quantize_step
 	a rdf:Property;
 	a owl:FunctionalProperty;
 	a owl:DatatypeProperty;
 	rdfs:label "quantized step";
 	rdfs:comment """
-		Quantized step (if any). We do not include isQuantized.
+		Quantize step. Only defined if is_quantised is true
 	""";
 	rdfs:domain vamp:PluginOutput;
 	rdfs:domain vamp:ParameterDescriptor;
@@ -407,16 +397,28 @@
 	rdfs:range af:AudioFeature;
 	vs:term_status "unstable";
 	.
+
+vamp:computes_event_type
+	a rdf:Property;
+	a owl:ObjectProperty;
+	rdfs:label "event type";
+	rdfs:comment """
+			Event Type output by the plugin.
+	""";
+	rdfs:domain vamp:PluginOutput;
+	rdfs:range event:Event;
+	vs:term_status "unstable";
+	.
 	
 ########################
 # INDIVIDUALS
 ########################
 
-vamp:time_domain 
+vamp:TimeDomain 
 	a vamp:InputDomain;
 	.
 
-vamp:frequency_domain
+vamp:FrequencyDomain
 	a vamp:InputDomain;
 	.
 
--- a/rdf/vamp.rdf	Mon Jun 16 12:22:16 2008 +0000
+++ b/rdf/vamp.rdf	Thu Jun 19 09:37:31 2008 +0000
@@ -35,13 +35,6 @@
 	</rdfs:comment>
     <vs:term_status>stable</vs:term_status>
   </owl:Class>
-  <owl:Class rdf:about="http://purl.org/ontology/vamp/PluginDescription">
-    <rdfs:label>Vamp Plugin Descriptor</rdfs:label>
-    <rdfs:comment>
-			The plugin descriptor provides basic metadata of the plugin. We may remove this and link directly to the plugin instance.
-	</rdfs:comment>
-    <vs:term_status>unstable</vs:term_status>
-  </owl:Class>
   <owl:Class rdf:about="http://purl.org/ontology/vamp/ParameterDescriptor">
     <rdfs:label>Vamp Plugin Parameter Descriptor</rdfs:label>
     <rdfs:comment>
@@ -106,16 +99,6 @@
 	</rdfs:comment>
     <vs:term_status>stable</vs:term_status>
   </owl:Class>
-  <rdf:Property rdf:about="http://purl.org/ontology/vamp/plugin_description">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
-    <rdfs:label>plugin description</rdfs:label>
-    <rdfs:comment>
-			Links the plugin descriptor to the plugin (it may be redundant for an RDF decription to have a plugin descriptor in between an actual plugin and its properties).
-	</rdfs:comment>
-    <rdfs:range rdf:resource="http://purl.org/ontology/vamp/PluginDescription"/>
-    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Plugin"/>
-    <vs:term_status>stable</vs:term_status>
-  </rdf:Property>
   <rdf:Property rdf:about="http://purl.org/ontology/vamp/parameter_descriptor">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
     <rdfs:label>parameter descriptor</rdfs:label>
@@ -161,7 +144,7 @@
     <rdfs:comment>
 		Machine-readable identifier for Vamp plugin classes (and Transform).
 	</rdfs:comment>
-    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginDescription"/>
+    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Plugin"/>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginProgram"/>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginOutput"/>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/ParameterDescriptor"/>
@@ -174,7 +157,7 @@
     <rdfs:comment>
 		Human-readable identifier for the plugin.
 	</rdfs:comment>
-    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginDescription"/>
+    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Plugin"/>
     <vs:term_status>stable</vs:term_status>
   </rdf:Property>
   <rdf:Property rdf:about="http://purl.org/ontology/vamp/vamp_API_version">
@@ -183,7 +166,7 @@
     <rdfs:comment>
 			Version of the Vamp API used to implement this plugin.
 	</rdfs:comment>
-    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginDescription"/>
+    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Plugin"/>
     <vs:term_status>stable</vs:term_status>
   </rdf:Property>
   <rdf:Property rdf:about="http://purl.org/ontology/vamp/input_domain">
@@ -237,6 +220,15 @@
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginOutput"/>
     <vs:term_status>unstable</vs:term_status>
   </rdf:Property>
+  <rdf:Property rdf:about="http://purl.org/ontology/vamp/is_quantized">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:label>is quantised</rdfs:label>
+    <rdfs:comment>
+		Quantised. A boolean type.
+	</rdfs:comment>
+    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginOutput"/>
+    <vs:term_status>unstable</vs:term_status>
+  </rdf:Property>
   <rdf:Property rdf:about="http://purl.org/ontology/vamp/unit">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
@@ -266,12 +258,12 @@
 	</rdfs:comment>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Transform"/>
   </rdf:Property>
-  <rdf:Property rdf:about="http://purl.org/ontology/vamp/quantized_step">
+  <rdf:Property rdf:about="http://purl.org/ontology/vamp/quantize_step">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:label>quantized step</rdfs:label>
     <rdfs:comment>
-		Quantized step (if any). We do not include isQuantized.
+		Quantize step. Only defined if is_quantised is true
 	</rdfs:comment>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginOutput"/>
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/ParameterDescriptor"/>
@@ -316,8 +308,18 @@
     <rdfs:range rdf:resource="http://purl.org/ontology/af/AudioFeature"/>
     <vs:term_status>unstable</vs:term_status>
   </rdf:Property>
-  <vamp:InputDomain rdf:about="http://purl.org/ontology/vamp/time_domain"/>
-  <vamp:InputDomain rdf:about="http://purl.org/ontology/vamp/frequency_domain"/>
+  <rdf:Property rdf:about="http://purl.org/ontology/vamp/computes_event_type">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:label>event type</rdfs:label>
+    <rdfs:comment>
+			Event Type output by the plugin.
+	</rdfs:comment>
+    <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/PluginOutput"/>
+    <rdfs:range rdf:resource="http://purl.org/NET/c4dm/event.owl#Event"/>
+    <vs:term_status>unstable</vs:term_status>
+  </rdf:Property>
+  <vamp:InputDomain rdf:about="http://purl.org/ontology/vamp/TimeDomain"/>
+  <vamp:InputDomain rdf:about="http://purl.org/ontology/vamp/FrequencyDomain"/>
   <vamp:SampleType rdf:about="http://purl.org/ontology/vamp/OneSamplePerStep"/>
   <vamp:SampleType rdf:about="http://purl.org/ontology/vamp/FixedSampleRate"/>
   <vamp:SampleType rdf:about="http://purl.org/ontology/vamp/VariableSampleRate"/>
@@ -475,4 +477,3 @@
     <rdfs:domain rdf:resource="http://purl.org/ontology/vamp/Parameter"/>
   </rdf:Property>
 </rdf:RDF>
-