annotate capnproto/vamp.capnp @ 17:4a94e8a61d35

Instead of using separate values and b64values entries in JSON serialisations, allow numeric arrays to be replaced by b64 variants wherever they appear (discriminating by type). Also rename values to featureValues in feature throughout, as values turns out to be a hazardous name in a JS context. Finally use Array instead of Text for array encoding (seems clearer).
author Chris Cannam
date Tue, 27 Sep 2016 15:04:59 +0100
parents 6a74839fc7f0
children 91d03c115ea0
rev   line source
Chris@0 1
Chris@0 2 @0xc4b1c6c44c999206;
Chris@0 3
Chris@0 4 using Cxx = import "/capnp/c++.capnp";
Chris@0 5 $Cxx.namespace("vampipe");
Chris@0 6
Chris@0 7 enum InputDomain {
Chris@0 8 timeDomain @0;
Chris@0 9 frequencyDomain @1;
Chris@0 10 }
Chris@0 11
Chris@0 12 enum SampleType {
Chris@0 13 oneSamplePerStep @0;
Chris@0 14 fixedSampleRate @1;
Chris@0 15 variableSampleRate @2;
Chris@0 16 }
Chris@0 17
Chris@0 18 enum AdapterFlag {
Chris@0 19 adaptInputDomain @0;
Chris@0 20 adaptChannelCount @1;
Chris@0 21 adaptBufferSize @2;
Chris@0 22 }
Chris@0 23
Chris@0 24 const adaptAllSafe :List(AdapterFlag) =
Chris@0 25 [ adaptInputDomain, adaptChannelCount ];
Chris@0 26
Chris@0 27 const adaptAll :List(AdapterFlag) =
Chris@0 28 [ adaptInputDomain, adaptChannelCount, adaptBufferSize ];
Chris@0 29
Chris@0 30 struct RealTime {
Chris@0 31 sec @0 :Int32 = 0;
Chris@0 32 nsec @1 :Int32 = 0;
Chris@0 33 }
Chris@0 34
Chris@0 35 struct Basic {
Chris@0 36 identifier @0 :Text;
Chris@0 37 name @1 :Text;
Chris@0 38 description @2 :Text;
Chris@0 39 }
Chris@0 40
Chris@0 41 struct ParameterDescriptor {
Chris@0 42 basic @0 :Basic;
Chris@0 43 unit @1 :Text;
Chris@0 44 minValue @2 :Float32 = 0.0;
Chris@0 45 maxValue @3 :Float32 = 0.0;
Chris@0 46 defaultValue @4 :Float32 = 0.0;
Chris@0 47 isQuantized @5 :Bool = false;
Chris@0 48 quantizeStep @6 :Float32 = 0.0;
Chris@0 49 valueNames @7 :List(Text) = [];
Chris@0 50 }
Chris@0 51
Chris@15 52 struct ConfiguredOutputDescriptor {
Chris@15 53 unit @0 :Text;
Chris@15 54 hasFixedBinCount @1 :Bool = false;
Chris@15 55 binCount @2 :Int32 = 0;
Chris@15 56 binNames @3 :List(Text) = [];
Chris@15 57 hasKnownExtents @4 :Bool = false;
Chris@15 58 minValue @5 :Float32 = 0.0;
Chris@15 59 maxValue @6 :Float32 = 0.0;
Chris@15 60 isQuantized @7 :Bool = false;
Chris@15 61 quantizeStep @8 :Float32 = 0.0;
Chris@15 62 sampleType @9 :SampleType;
Chris@15 63 sampleRate @10 :Float32 = 0.0;
Chris@15 64 hasDuration @11 :Bool = false;
Chris@15 65 }
Chris@15 66
Chris@0 67 struct OutputDescriptor {
Chris@0 68 basic @0 :Basic;
Chris@15 69 configured @1 :ConfiguredOutputDescriptor;
Chris@0 70 }
Chris@0 71
Chris@0 72 struct PluginStaticData {
Chris@0 73 pluginKey @0 :Text;
Chris@0 74 basic @1 :Basic;
Chris@0 75 maker @2 :Text;
Chris@0 76 copyright @3 :Text;
Chris@0 77 pluginVersion @4 :Int32;
Chris@0 78 category @5 :List(Text);
Chris@0 79 minChannelCount @6 :Int32;
Chris@0 80 maxChannelCount @7 :Int32;
Chris@0 81 parameters @8 :List(ParameterDescriptor);
Chris@0 82 programs @9 :List(Text);
Chris@0 83 inputDomain @10 :InputDomain;
Chris@0 84 basicOutputInfo @11 :List(Basic);
Chris@0 85 }
Chris@0 86
Chris@0 87 struct ProcessInput {
Chris@0 88 inputBuffers @0 :List(List(Float32));
Chris@0 89 timestamp @1 :RealTime;
Chris@0 90 }
Chris@0 91
Chris@0 92 struct Feature {
Chris@0 93 hasTimestamp @0 :Bool = false;
Chris@0 94 timestamp @1 :RealTime;
Chris@0 95 hasDuration @2 :Bool = false;
Chris@0 96 duration @3 :RealTime;
Chris@0 97 label @4 :Text;
Chris@17 98 featureValues @5 :List(Float32) = [];
Chris@0 99 }
Chris@0 100
Chris@0 101 struct FeatureSet {
Chris@0 102 struct FSPair {
Chris@9 103 output @0 :Text;
Chris@0 104 features @1 :List(Feature) = [];
Chris@0 105 }
Chris@0 106 featurePairs @0 :List(FSPair);
Chris@0 107 }
Chris@0 108
Chris@0 109 struct PluginConfiguration {
Chris@0 110 struct PVPair {
Chris@0 111 parameter @0 :Text;
Chris@0 112 value @1 :Float32;
Chris@0 113 }
Chris@0 114 parameterValues @0 :List(PVPair);
Chris@0 115 currentProgram @1 :Text;
Chris@0 116 channelCount @2 :Int32;
Chris@0 117 stepSize @3 :Int32;
Chris@0 118 blockSize @4 :Int32;
Chris@0 119 }
Chris@0 120
Chris@8 121 struct ListResponse {
Chris@8 122 plugins @0 :List(PluginStaticData);
Chris@8 123 }
Chris@8 124
Chris@0 125 struct LoadRequest {
Chris@0 126 pluginKey @0 :Text;
Chris@0 127 inputSampleRate @1 :Float32;
Chris@0 128 adapterFlags @2 :List(AdapterFlag);
Chris@0 129 }
Chris@0 130
Chris@0 131 struct LoadResponse {
Chris@3 132 pluginHandle @0 :Int32;
Chris@0 133 staticData @1 :PluginStaticData;
Chris@0 134 defaultConfiguration @2 :PluginConfiguration;
Chris@0 135 }
Chris@0 136
Chris@0 137 struct ConfigurationRequest {
Chris@3 138 pluginHandle @0 :Int32;
Chris@0 139 configuration @1 :PluginConfiguration;
Chris@0 140 }
Chris@0 141
Chris@0 142 struct ConfigurationResponse {
Chris@11 143 pluginHandle @0 :Int32;
Chris@11 144 outputs @1 :List(OutputDescriptor);
Chris@0 145 }
Chris@0 146
Chris@2 147 struct ProcessRequest {
Chris@3 148 pluginHandle @0 :Int32;
Chris@13 149 processInput @1 :ProcessInput;
Chris@2 150 }
Chris@2 151
Chris@9 152 struct ProcessResponse {
Chris@9 153 pluginHandle @0 :Int32;
Chris@9 154 features @1 :FeatureSet;
Chris@9 155 }
Chris@9 156
Chris@7 157 struct FinishRequest {
Chris@7 158 pluginHandle @0 :Int32;
Chris@7 159 }
Chris@7 160
Chris@0 161 struct VampRequest {
Chris@0 162 request :union {
Chris@0 163 list @0 :Void;
Chris@0 164 load @1 :LoadRequest;
Chris@0 165 configure @2 :ConfigurationRequest;
Chris@2 166 process @3 :ProcessRequest;
Chris@7 167 finish @4 :FinishRequest; # getRemainingFeatures and unload
Chris@0 168 }
Chris@0 169 }
Chris@0 170
Chris@0 171 struct VampResponse {
Chris@0 172 success @0 :Bool;
Chris@0 173 errorText @1 :Text = "";
Chris@0 174 response :union {
Chris@8 175 list @2 :ListResponse;
Chris@0 176 load @3 :LoadResponse;
Chris@0 177 configure @4 :ConfigurationResponse;
Chris@6 178 process @5 :ProcessResponse;
Chris@6 179 finish @6 :ProcessResponse;
Chris@0 180 }
Chris@0 181 }
Chris@0 182