changeset 172:ee9d66f669d2

Merge JSON and Cap'n Proto schema
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 07 Oct 2016 15:42:12 +0100
parents 5cd428fc703c (current diff) 4c2ff04a89cf (diff)
children 2a05c8380e8a
files
diffstat 59 files changed, 948 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,2 @@
+syntax: glob
+*~
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/COPYING	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,29 @@
+
+    Vamp JSON Schema
+    Copyright (c) 2015-2016 Queen Mary, University of London
+
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use, copy,
+    modify, merge, publish, distribute, sublicense, and/or sell copies
+    of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+    CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+    Except as contained in this notice, the names of the Centre for
+    Digital Music; Queen Mary, University of London; and Chris Cannam
+    shall not be used in advertising or otherwise to promote the sale,
+    use or other dealings in this Software without prior written
+    authorization.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/basic.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"description": "Power values of the frequency spectrum bins calculated from the input signal", "identifier": "powerspectrum", "name": "Power Spectrum"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/configuration.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"blockSize": 512, "channelCount": 2, "parameterValues": {"sensitivity": 40, "threshold": 3}, "stepSize": 1024}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/configurationrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"handle":12345,"configuration":{"blockSize": 512, "channelCount": 2, "parameterValues": {"sensitivity": 40, "threshold": 3}, "stepSize": 1024}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/configurationresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"outputList": [{"basic": {"description": "Percussive note onset locations", "identifier": "onsets", "name": "Onsets"}, "configured": { "binCount": 0, "binNames": [], "hasDuration": false, "sampleRate": 44100, "sampleType": "VariableSampleRate", "unit": ""}}, {"basic": {"description": "Broadband energy rise detection function", "identifier": "detectionfunction", "name": "Detection Function"}, "configured": { "binCount": 1, "binNames": [""], "hasDuration": false, "quantizeStep": 1, "sampleRate": 44100, "sampleType": "OneSamplePerStep", "unit": ""}}]}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/configuredoutputdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,2 @@
+{"binCount": 513, "binNames": [], "hasDuration": false, "sampleRate": 0, "sampleType": "OneSamplePerStep", "unit": ""}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/enums.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/error.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"code": 6, "message": "An error occurred!" }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/extractorstaticdata.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"basic": {"description": "Detect percussive note onsets by identifying broadband energy rises", "identifier": "percussiononsets", "name": "Simple Percussion Onset Detector"}, "basicOutputInfo": [{"description": "Percussive note onset locations", "identifier": "onsets", "name": "Onsets"}, {"description": "Broadband energy rise detection function", "identifier": "detectionfunction", "name": "Detection Function"}], "category": ["Time", "Onsets"], "copyright": "Code copyright 2006 Queen Mary, University of London, after Dan Barry et al 2005.  Freely redistributable (BSD license)", "inputDomain": "FrequencyDomain", "key": "vamp-example-plugins:percussiononsets", "maker": "Vamp SDK Example Plugins", "maxChannelCount": 1, "minChannelCount": 1, "parameters": [{"basic": {"description": "Energy rise within a frequency bin necessary to count toward broadband total", "identifier": "threshold", "name": "Energy rise threshold"}, "defaultValue": 3, "extents": {"max": 20, "min": 0}, "unit": "dB", "valueNames": []}, {"basic": {"description": "Sensitivity of peak detector applied to broadband detection function", "identifier": "sensitivity", "name": "Sensitivity"}, "defaultValue": 40, "extents": {"max": 100, "min": 0}, "unit": "%", "valueNames": []}], "programs": [], "version": 2}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/feature-array.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"featureValues": [ 1.0, -1.0, 4.0, 1505050.50 ], "label": "A feature", "timestamp": {"n": 141590000, "s": 3}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/feature-base64.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"featureValues": "AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA", "label": "A feature", "timestamp": {"n": 141590000, "s": 3}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/featureset.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"outputid": [{"featureValues": "AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA", "label": "A feature", "timestamp": {"n": 141590000, "s": 3}}]}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/finishrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"handle": 1}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/finishresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,2 @@
+{"handle":12345,"features":{"outputid": [{"featureValues": [1,2,3], "timestamp": {"n": 141590000, "s": 3}}]}}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/listrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/listresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,284 @@
+{
+    "available": [
+        {
+            "basic": {
+                "description": "Track the amplitude of the audio signal",
+                "identifier": "amplitudefollower",
+                "name": "Amplitude Follower"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "The peak tracked amplitude for the current processing block",
+                    "identifier": "amplitude",
+                    "name": "Amplitude"
+                }
+            ],
+            "category": [],
+            "copyright": "Code copyright 2006 Dan Stowell; method from SuperCollider.  Freely redistributable (BSD license)",
+            "inputDomain": "TimeDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [
+                {
+                    "basic": {
+                        "description": "The 60dB convergence time for an increase in amplitude",
+                        "identifier": "attack",
+                        "name": "Attack time"
+                    },
+                    "defaultValue": 0.0099999997764825821,
+                    "extents": {
+                        "max": 1,
+                        "min": 0
+                    },
+                    "unit": "s",
+                    "valueNames": []
+                },
+                {
+                    "basic": {
+                        "description": "The 60dB convergence time for a decrease in amplitude",
+                        "identifier": "release",
+                        "name": "Release time"
+                    },
+                    "defaultValue": 0.0099999997764825821,
+                    "extents": {
+                        "max": 1,
+                        "min": 0
+                    },
+                    "unit": "s",
+                    "valueNames": []
+                }
+            ],
+            "key": "vamp-example-plugins:amplitudefollower",
+            "version": 1,
+            "programs": []
+        },
+        {
+            "basic": {
+                "description": "Study a short section of audio and estimate its tempo, assuming the tempo is constant",
+                "identifier": "fixedtempo",
+                "name": "Simple Fixed Tempo Estimator"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "Estimated tempo",
+                    "identifier": "tempo",
+                    "name": "Tempo"
+                },
+                {
+                    "description": "Possible tempo estimates, one per bin with the most likely in the first bin",
+                    "identifier": "candidates",
+                    "name": "Tempo candidates"
+                },
+                {
+                    "description": "Onset detection function",
+                    "identifier": "detectionfunction",
+                    "name": "Detection Function"
+                },
+                {
+                    "description": "Autocorrelation of onset detection function",
+                    "identifier": "acf",
+                    "name": "Autocorrelation Function"
+                },
+                {
+                    "description": "Filtered autocorrelation of onset detection function",
+                    "identifier": "filtered_acf",
+                    "name": "Filtered Autocorrelation"
+                }
+            ],
+            "category": [],
+            "copyright": "Code copyright 2008 Queen Mary, University of London.  Freely redistributable (BSD license)",
+            "inputDomain": "FrequencyDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [
+                {
+                    "basic": {
+                        "description": "Minimum beat-per-minute value which the tempo estimator is able to return",
+                        "identifier": "minbpm",
+                        "name": "Minimum estimated tempo"
+                    },
+                    "defaultValue": 50,
+                    "extents": {
+                        "max": 360,
+                        "min": 10
+                    },
+                    "unit": "bpm",
+                    "valueNames": []
+                },
+                {
+                    "basic": {
+                        "description": "Maximum beat-per-minute value which the tempo estimator is able to return",
+                        "identifier": "maxbpm",
+                        "name": "Maximum estimated tempo"
+                    },
+                    "defaultValue": 190,
+                    "extents": {
+                        "max": 360,
+                        "min": 10
+                    },
+                    "unit": "bpm",
+                    "valueNames": []
+                },
+                {
+                    "basic": {
+                        "description": "Length of audio input, in seconds, which should be taken into account when estimating tempo.  There is no need to supply the plugin with any further input once this time has elapsed since the start of the audio.  The tempo estimator may use only the first part of this, up to eight times the slowest beat duration: increasing this value further than that is unlikely to improve results.",
+                        "identifier": "maxdflen",
+                        "name": "Input duration to study"
+                    },
+                    "defaultValue": 10,
+                    "extents": {
+                        "max": 40,
+                        "min": 2
+                    },
+                    "unit": "s",
+                    "valueNames": []
+                }
+            ],
+            "key": "vamp-example-plugins:fixedtempo",
+            "version": 1,
+            "programs": []
+        },
+        {
+            "basic": {
+                "description": "Detect percussive note onsets by identifying broadband energy rises",
+                "identifier": "percussiononsets",
+                "name": "Simple Percussion Onset Detector"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "Percussive note onset locations",
+                    "identifier": "onsets",
+                    "name": "Onsets"
+                },
+                {
+                    "description": "Broadband energy rise detection function",
+                    "identifier": "detectionfunction",
+                    "name": "Detection Function"
+                }
+            ],
+            "category": [],
+            "copyright": "Code copyright 2006 Queen Mary, University of London, after Dan Barry et al 2005.  Freely redistributable (BSD license)",
+            "inputDomain": "FrequencyDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [
+                {
+                    "basic": {
+                        "description": "Energy rise within a frequency bin necessary to count toward broadband total",
+                        "identifier": "threshold",
+                        "name": "Energy rise threshold"
+                    },
+                    "defaultValue": 3,
+                    "extents": {
+                        "max": 20,
+                        "min": 0
+                    },
+                    "unit": "dB",
+                    "valueNames": []
+                },
+                {
+                    "basic": {
+                        "description": "Sensitivity of peak detector applied to broadband detection function",
+                        "identifier": "sensitivity",
+                        "name": "Sensitivity"
+                    },
+                    "defaultValue": 40,
+                    "extents": {
+                        "max": 100,
+                        "min": 0
+                    },
+                    "unit": "%",
+                    "valueNames": []
+                }
+            ],
+            "key": "vamp-example-plugins:percussiononsets",
+            "version": 2,
+            "programs": []
+        },
+        {
+            "basic": {
+                "description": "Return the power spectrum of a signal",
+                "identifier": "powerspectrum",
+                "name": "Simple Power Spectrum"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "Power values of the frequency spectrum bins calculated from the input signal",
+                    "identifier": "powerspectrum",
+                    "name": "Power Spectrum"
+                }
+            ],
+            "category": [],
+            "copyright": "Freely redistributable (BSD license)",
+            "inputDomain": "FrequencyDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [],
+            "key": "vamp-example-plugins:powerspectrum",
+            "version": 1,
+            "programs": []
+        },
+        {
+            "basic": {
+                "description": "Calculate the centroid frequency of the spectrum of the input signal",
+                "identifier": "spectralcentroid",
+                "name": "Spectral Centroid"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "Centroid of the log weighted frequency spectrum",
+                    "identifier": "logcentroid",
+                    "name": "Log Frequency Centroid"
+                },
+                {
+                    "description": "Centroid of the linear frequency spectrum",
+                    "identifier": "linearcentroid",
+                    "name": "Linear Frequency Centroid"
+                }
+            ],
+            "category": [],
+            "copyright": "Freely redistributable (BSD license)",
+            "inputDomain": "FrequencyDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [],
+            "key": "vamp-example-plugins:spectralcentroid",
+            "version": 2,
+            "programs": []
+        },
+        {
+            "basic": {
+                "description": "Detect and count zero crossing points",
+                "identifier": "zerocrossing",
+                "name": "Zero Crossings"
+            },
+            "basicOutputInfo": [
+                {
+                    "description": "The number of zero crossing points per processing block",
+                    "identifier": "counts",
+                    "name": "Zero Crossing Counts"
+                },
+                {
+                    "description": "The locations of zero crossing points",
+                    "identifier": "zerocrossings",
+                    "name": "Zero Crossings"
+                }
+            ],
+            "category": [],
+            "copyright": "Freely redistributable (BSD license)",
+            "inputDomain": "TimeDomain",
+            "maker": "Vamp SDK Example Plugins",
+            "maxChannelCount": 1,
+            "minChannelCount": 1,
+            "parameters": [],
+            "key": "vamp-example-plugins:zerocrossing",
+            "version": 2,
+            "programs": []
+        }
+    ]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/loadrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"key":"vamp-example-plugins:percussiononsets","inputSampleRate":44100,"adapterFlags":["AdaptInputDomain","AdaptBufferSize"]}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/loadresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"handle":12345,"staticData":{"basic": {"description": "Detect percussive note onsets by identifying broadband energy rises", "identifier": "percussiononsets", "name": "Simple Percussion Onset Detector"}, "basicOutputInfo": [{"description": "Percussive note onset locations", "identifier": "onsets", "name": "Onsets"}, {"description": "Broadband energy rise detection function", "identifier": "detectionfunction", "name": "Detection Function"}], "category": ["Time", "Onsets"], "copyright": "Code copyright 2006 Queen Mary, University of London, after Dan Barry et al 2005.  Freely redistributable (BSD license)", "inputDomain": "FrequencyDomain", "key": "vamp-example-plugins:percussiononsets", "maker": "Vamp SDK Example Plugins", "maxChannelCount": 1, "minChannelCount": 1, "parameters": [{"basic": {"description": "Energy rise within a frequency bin necessary to count toward broadband total", "identifier": "threshold", "name": "Energy rise threshold"}, "defaultValue": 3, "extents": {"max": 20, "min": 0}, "unit": "dB", "valueNames": []}, {"basic": {"description": "Sensitivity of peak detector applied to broadband detection function", "identifier": "sensitivity", "name": "Sensitivity"}, "defaultValue": 40, "extents": {"max": 100, "min": 0}, "unit": "%", "valueNames": []}], "programs": [], "version": 2},"defaultConfiguration":{"blockSize": 512, "channelCount": 2, "parameterValues": {"sensitivity": 40, "threshold": 3}, "stepSize": 1024}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/outputdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"basic": {"description": "Power values of the frequency spectrum bins calculated from the input signal", "identifier": "powerspectrum", "name": "Power Spectrum"}, "configured": { "binCount": 513, "binNames": [], "hasDuration": false, "sampleRate": 0, "sampleType": "OneSamplePerStep", "unit": ""}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/parameterdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"basic": {"description": "Energy rise within a frequency bin necessary to count toward broadband total", "identifier": "threshold", "name": "Energy rise threshold"}, "defaultValue": 3, "extents": {"max": 20.5, "min": 0}, "unit": "dB", "valueNames": []}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/processinput-array.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"inputBuffers":[[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0]], "timestamp": {"n": 141590000, "s": 3}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/processinput-base64.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"inputBuffers":["AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA"], "timestamp": {"n": 141590000, "s": 3}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/processrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"handle":12345,"processInput":{"inputBuffers":["AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA"], "timestamp": {"n": 141590000, "s": 3}}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/processresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,2 @@
+{"handle":12345,"features":{"outputid": [{"featureValues": "AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA", "label": "A feature", "timestamp": {"n": 141590000, "s": 3}}]}}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/realtime.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"s":14,"n":500000}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/rpcrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,2 @@
+{"method": "load", "params": {"key":"vamp-example-plugins:percussiononsets","inputSampleRate":44100,"adapterFlags":["AdaptInputDomain","AdaptBufferSize"]}, "id": 6, "jsonrpc": "2.0"}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/rpcresponse-error.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"method": "process", "error": {"code": 6, "message": "An error occurred!" },"id": "6"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/rpcresponse-ok.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{"method": "load", "result": {"handle":12345,"staticData":{"basic": {"description": "Detect percussive note onsets by identifying broadband energy rises", "identifier": "percussiononsets", "name": "Simple Percussion Onset Detector"}, "basicOutputInfo": [{"description": "Percussive note onset locations", "identifier": "onsets", "name": "Onsets"}, {"description": "Broadband energy rise detection function", "identifier": "detectionfunction", "name": "Detection Function"}], "category": ["Time", "Onsets"], "copyright": "Code copyright 2006 Queen Mary, University of London, after Dan Barry et al 2005.  Freely redistributable (BSD license)", "inputDomain": "FrequencyDomain", "key": "vamp-example-plugins:percussiononsets", "maker": "Vamp SDK Example Plugins", "maxChannelCount": 1, "minChannelCount": 1, "parameters": [{"basic": {"description": "Energy rise within a frequency bin necessary to count toward broadband total", "identifier": "threshold", "name": "Energy rise threshold"}, "defaultValue": 3, "extents": {"max": 20, "min": 0}, "unit": "dB", "valueNames": []}, {"basic": {"description": "Sensitivity of peak detector applied to broadband detection function", "identifier": "sensitivity", "name": "Sensitivity"}, "defaultValue": 40, "extents": {"max": 100, "min": 0}, "unit": "%", "valueNames": []}], "programs": [], "version": 2},"defaultConfiguration":{"blockSize": 512, "channelCount": 2, "parameterValues": {"sensitivity": 40, "threshold": 3}, "stepSize": 1024}},"id": "6"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/serialisedarray-array.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+[1,2,-3,3.1415926537]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/serialisedarray-base64.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+"AACAPwAAAEAEAEBAAACAQAAAoEAAAMBAAADQQAAA4EA"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/examples/valueextents.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,1 @@
+{ "min": 0.1, "max": 0.9 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/basic.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,20 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/basic#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a common unit of basic metadata",
+    "type": "object",
+    "properties": {
+	"identifier": {
+	    "type": "string",
+	    "pattern": "^[a-zA-Z0-9_-]+$"
+	},
+	"name": {
+	    "type": "string"
+	},
+	"description": {
+	    "type": "string"
+	}
+    },
+    "required": [ "identifier" ],
+    "additionalProperties": false
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/configuration.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,32 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/pluginconfiguration#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a bundle of configuration data capturing the setup of a feature extractor",
+    "type": "object",
+    "properties": {
+	"parameterValues": {
+	    "type": "object",
+	    "patternProperties": {
+		"^[a-zA-Z0-9_-]+$": {
+		    "type": "number"
+		}
+	    },
+	    "additionalProperties": false
+	},
+	"currentProgram": {
+	    "type": "string"
+	},
+	"channelCount": {
+	    "type": "integer"
+	},
+	"stepSize": {
+	    "type": "integer"
+	},
+	"blockSize": {
+	    "type": "integer"
+	}
+    },
+    "required": [ "channelCount", "stepSize", "blockSize" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/configurationrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/configurationrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a request to configure a feature extractor; may be served in the params field of a configure-method rpcrequest",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"configuration": {
+	    "$ref": "http://vamp-plugins.org/json/schema/configuration#"
+	}
+    },
+    "required": [ "handle", "configuration" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/configurationresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,18 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/configurationresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a response to a request to configure a feature extractor; may be served in the result field of a configure-method rpcresponse",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"outputList": {
+	    "type": "array",
+	    "items": { "$ref": "http://vamp-plugins.org/json/schema/outputdescriptor#" }
+	}
+    },
+    "required": [ "outputList" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/configuredoutputdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,42 @@
+{
+  "id": "http://vamp-plugins.org/json/schema/configuredoutputdescriptor#",
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "description": "schema for the non-static metadata fields of an output descriptor belonging to a feature extractor",
+  "type": "object",
+  "properties": {
+  "unit": {
+    "type": "string"
+  },
+  "binCount": {
+    "type": "integer"
+  },
+  "binNames": {
+    "type": "array",
+    "items": { "type": "string" }
+  },
+  "extents": {
+    "type": "object",
+    "properties": {
+      "min": { "type": "number" },
+      "max": { "type": "number" }
+    },
+    "required": [ "min", "max" ],
+    "additionalProperties": false
+  },
+  "quantizeStep": {
+    "type": "number"
+  },
+  "sampleType": {
+    "$ref": "http://vamp-plugins.org/json/schema/enums#/definitions/sample_type"
+  },
+  "sampleRate": {
+    "type": "number"
+  },
+  "hasDuration": {
+    "type": "boolean"
+  }
+  },
+  "required": [ "sampleType", "hasDuration" ],
+  "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/enums.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,20 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/enums#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for common feature extractor enum types",
+    "definitions": {
+	"input_domain": {
+	    "type": "string",
+	    "enum": [ "TimeDomain", "FrequencyDomain" ]
+	},
+	"sample_type": {
+	    "type": "string",
+	    "enum": [ "OneSamplePerStep", "FixedSampleRate", "VariableSampleRate" ]
+	},
+	"adapter_flags": {
+	    "type": "string",
+	    "enum": [ "AdaptNone", "AdaptInputDomain", "AdaptChannelCount",
+		      "AdaptBufferSize", "AdaptAllSafe", "AdaptAll" ]
+	}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/error.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,16 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/error#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for an error object in a response to an rpcrequest",
+    "type": "object",
+    "properties": {
+	"code": {
+            "type": "number"
+        },
+        "message": {
+            "type": "string"
+        }
+    },
+    "required": [ "code", "message" ]
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/extractorstaticdata.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,53 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/pluginstaticdata#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for the static metadata associated with a feature extractor",
+    "type": "object",
+    "properties": {
+	"key": {
+	    "type": "string"
+	},
+	"basic": {
+	    "$ref": "http://vamp-plugins.org/json/schema/basic#"
+	},
+	"maker": {
+	    "type": "string"
+	},
+	"copyright": {
+	    "type": "string"
+	},
+	"version": {
+	    "type": "integer"
+	},
+	"category": {
+	    "type": "array",
+	    "items": { "type": "string" }
+	},
+	"minChannelCount": {
+	    "type": "integer"
+	},
+	"maxChannelCount": {
+	    "type": "integer"
+	},
+	"parameters": {
+	    "type": "array",
+	    "items": { "$ref": "http://vamp-plugins.org/json/schema/parameterdescriptor#" }
+	},
+	"programs": {
+	    "type": "array",
+	    "items": { "type": "string" }
+	},
+	"inputDomain": {
+	    "$ref": "http://vamp-plugins.org/json/schema/enums#/definitions/input_domain"
+	},
+	"basicOutputInfo": {
+	    "type": "array",
+	    "items": { "$ref": "http://vamp-plugins.org/json/schema/basic#" }
+	}
+    },
+    "required": [ "key", "basic", "version",
+		  "minChannelCount", "maxChannelCount",
+		  "inputDomain", "basicOutputInfo" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/feature.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,23 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/feature#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a single feature returned by a feature extractor",
+    "type": "object",
+    "properties": {
+	"timestamp": {
+	    "$ref": "http://vamp-plugins.org/json/schema/realtime#"
+	},
+	"duration": {
+	    "$ref": "http://vamp-plugins.org/json/schema/realtime#"
+	},
+	"label": {
+	    "type": "string"
+	},
+	"featureValues": {
+            "$ref": "http://vamp-plugins.org/json/schema/serialisedarray#"
+	}
+    },
+    "additionalProperties": false
+}
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/featureset.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,13 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/featureset#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a set of features returned by a feature extractor, associating an output id with an array of features from that output",
+    "type": "object",
+    "patternProperties": {
+	"^[a-zA-Z0-9_-]+$": {
+	    "type": "array",
+	    "items": { "$ref": "http://vamp-plugins.org/json/schema/feature#" }
+	}
+    },
+    "additionalProperties": false
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/finishrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,13 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/finishrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a serialised request to finish processing with a feature extractor; may be served in the params field of a finish-method rpcrequest",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	}
+    },
+    "required": [ "handle" ],
+    "additionalProperties": false
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/finishresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/finishresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a response to a request to finishing processing with a feature extractor; may be served in the result field of a finish-method rpcresponse",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"features": {
+	    "$ref": "http://vamp-plugins.org/json/schema/featureset#"
+	}
+    },
+    "required": [ "handle", "features" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/listrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,9 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/listrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a list request for feature extractors; may be served in the params field of a list-method rpcrequest",
+    "type": "object",
+    "properties": {
+    },
+    "additionalProperties": false
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/listresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,14 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/listresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a response to a request to list available feature extractors; may be served in the result field of a list-method rpcresponse",
+    "type": "object",
+    "properties": {
+	"available": {
+            "type": "array",
+            "items": { "$ref": "http://vamp-plugins.org/json/schema/extractorstaticdata#" }
+	}
+    },
+    "required": [ "available" ],
+    "additionalProperties": false
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/loadrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,23 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/loadrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a request to load a feature extractor; may be served in the params field of a load-method rpcrequest",
+    "type": "object",
+    "properties": {
+	"key": {
+	    "type": "string"
+	},
+	"inputSampleRate": {
+	    "type": "number"
+	},
+	"adapterFlags": {
+	    "type": "array",
+	    "items": {
+		"$ref": "http://vamp-plugins.org/json/schema/enums#/definitions/adapter_flags"
+	    }
+	}
+    },
+    "required": [ "key", "inputSampleRate" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/loadresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,19 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/loadresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a response to a request to load a feature extractor; may be served in the result field of a load-method rpcresponse",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"staticData": {
+	    "$ref": "http://vamp-plugins.org/json/schema/extractorstaticdata#"
+	},
+	"defaultConfiguration": {
+	    "$ref": "http://vamp-plugins.org/json/schema/configuration#"
+	}
+    },
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/outputdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/outputdescriptor#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for an output descriptor belonging to a feature extractor",
+    "type": "object",
+    "properties": {
+	"basic": {
+	    "$ref": "http://vamp-plugins.org/json/schema/basic#"
+	},
+	"configured": {
+	    "$ref": "http://vamp-plugins.org/json/schema/configuredoutputdescriptor#"
+	}
+    },
+    "required": [ "basic", "configured" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/parameterdescriptor.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,30 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/parameterdescriptor#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a metadata about an adjustable parameter of a feature extractor",
+    "type": "object",
+    "properties": {
+	"basic": {
+	    "$ref": "http://vamp-plugins.org/json/schema/basic#"
+	},
+	"unit": {
+	    "type": "string"
+	},
+	"extents": {
+	    "$ref": "http://vamp-plugins.org/json/schema/valueextents#"
+	},
+	"defaultValue": {
+	    "type": "number"
+	},
+	"quantizeStep": {
+	    "type": "number"
+	},
+	"valueNames": {
+	    "type": "array",
+	    "items": { "type": "string" }
+	}
+    },
+    "required": [ "basic", "extents", "defaultValue" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/processinput.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,20 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/processinput#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a chunk of input data provided to a process request",
+    "type": "object",
+    "properties": {
+	"timestamp": {
+	    "$ref": "http://vamp-plugins.org/json/schema/realtime#"
+	},
+	"inputBuffers": {
+	    "type": "array",
+	    "items": {
+                "$ref": "http://vamp-plugins.org/json/schema/serialisedarray#"
+            }
+        }
+    },
+    "additionalProperties": false
+}
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/processrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/processrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a request to process a chunk of data using a feature extractor; may be served in the params field of a process-method rpcrequest",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"processInput": {
+	    "$ref": "http://vamp-plugins.org/json/schema/processinput#"
+	}
+    },
+    "required": [ "handle", "processInput" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/processresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/processresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a response to a request to process a chunk of data using a feature extractor; may be served in the result field of a process-method rpcresponse",
+    "type": "object",
+    "properties": {
+	"handle": {
+	    "type": "number"
+	},
+	"features": {
+	    "$ref": "http://vamp-plugins.org/json/schema/featureset#"
+	}
+    },
+    "required": [ "handle", "features" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/realtime.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,13 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/realtime#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a timestamp given in seconds and nanoseconds",
+    "type": "object",
+    "properties": {
+	"s": { "type": "integer" },
+	"n": { "type": "integer" }
+    },
+    "required": [ "s", "n" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/rpcrequest.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,32 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/rpcrequest#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a serialised request compatible with JSON-RPC",
+    "type": "object",
+    "properties": {
+	"method": {
+	    "type": "string"
+	},
+	"params": {
+            "anyOf": [
+                { "$ref": "http://vamp-plugins.org/json/schema/listrequest#" },
+                { "$ref": "http://vamp-plugins.org/json/schema/loadrequest#" },
+                { "$ref": "http://vamp-plugins.org/json/schema/configurationrequest#" },
+                { "$ref": "http://vamp-plugins.org/json/schema/processrequest#" },
+                { "$ref": "http://vamp-plugins.org/json/schema/finishrequest#" }
+            ]                
+	},
+        "id": {
+            "anyOf": [
+                { "type": "string" },
+                { "type": "number" }
+            ]
+        },
+        "jsonrpc": {
+            "type": "string"
+        }
+    },
+    "required": [ "method" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/rpcresponse.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,55 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/rpcresponse#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a serialised response to an RPC request; compatible with JSON-RPC, except that the method name must be included here as well as in the request",
+    "type": "object",
+    "oneOf": [ {
+        "properties": {
+	    "method": {
+	        "type": "string"
+	    },
+	    "result": {
+                "anyOf": [
+                    { "$ref": "http://vamp-plugins.org/json/schema/listresponse#" },
+                    { "$ref": "http://vamp-plugins.org/json/schema/loadresponse#" },
+                    { "$ref": "http://vamp-plugins.org/json/schema/configurationresponse#" },
+                    { "$ref": "http://vamp-plugins.org/json/schema/processresponse#" },
+                    { "$ref": "http://vamp-plugins.org/json/schema/finishresponse#" }
+                ]                
+	    },
+            "id": {
+                "anyOf": [
+                    { "type": "string" },
+                    { "type": "number" }
+                ]
+            },
+            "jsonrpc": {
+                "type": "string"
+            }
+        },
+        "required": [ "method", "result" ],
+        "additionalProperties": false
+    }, {
+        "properties": {
+	    "method": {
+	        "type": "string"
+	    },
+	    "error": {
+                "$ref": "http://vamp-plugins.org/json/schema/error#"
+	    },
+            "id": {
+                "anyOf": [
+                    { "type": "string" },
+                    { "type": "number" }
+                ]
+            },
+            "jsonrpc": {
+                "type": "string"
+            }
+        },
+        "required": [ "method", "error" ],
+        "additionalProperties": false
+    } ]
+}
+    
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/serialisedarray.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,20 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/serialisedarray#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for alternate serialisations of an array of floating-point values",
+    "anyOf": [
+        {
+	    "type": "array",
+	    "items": { "type": "number" }
+	},
+        {
+	    "type": "string",
+            "media": {
+                "binaryEncoding": "base64",
+                "type": "application/octet-stream"
+            }
+	}
+    ]
+}
+
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/schema/valueextents.json	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,13 @@
+{
+    "id": "http://vamp-plugins.org/json/schema/valueextents#",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "description": "schema for a structure giving the extents of a value range",
+    "type": "object",
+    "properties": {
+	"min": { "type": "number" },
+	"max": { "type": "number" }
+    },
+    "required": [ "min", "max" ],
+    "additionalProperties": false
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/json/test.sh	Fri Oct 07 15:42:12 2016 +0100
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -eu
+
+for ex in examples/*.json ; do
+    echo "Checking $ex..." 1>&2
+    jsonschema -i "$ex" schema/$(basename "$ex" | sed 's/-[^.]*//')
+done
+
+for s in schema/*.json ; do
+    if [ ! -f examples/$(basename "$s") ]; then
+        if ! ls -1 examples/$(basename "$s" .json)-*.json >/dev/null 2>&1; then
+	    echo "WARNING: No example file for schema $s"
+        fi
+    fi
+done
+