Chris@0: Chris@0: @0xc4b1c6c44c999206; Chris@0: Chris@0: using Cxx = import "/capnp/c++.capnp"; Chris@0: $Cxx.namespace("vampipe"); Chris@0: Chris@0: enum InputDomain { Chris@0: timeDomain @0; Chris@0: frequencyDomain @1; Chris@0: } Chris@0: Chris@0: enum SampleType { Chris@0: oneSamplePerStep @0; Chris@0: fixedSampleRate @1; Chris@0: variableSampleRate @2; Chris@0: } Chris@0: Chris@0: enum AdapterFlag { Chris@0: adaptInputDomain @0; Chris@0: adaptChannelCount @1; Chris@0: adaptBufferSize @2; Chris@0: } Chris@0: Chris@0: const adaptAllSafe :List(AdapterFlag) = Chris@0: [ adaptInputDomain, adaptChannelCount ]; Chris@0: Chris@0: const adaptAll :List(AdapterFlag) = Chris@0: [ adaptInputDomain, adaptChannelCount, adaptBufferSize ]; Chris@0: Chris@0: struct RealTime { Chris@0: sec @0 :Int32 = 0; Chris@0: nsec @1 :Int32 = 0; Chris@0: } Chris@0: Chris@0: struct Basic { Chris@0: identifier @0 :Text; Chris@0: name @1 :Text; Chris@0: description @2 :Text; Chris@0: } Chris@0: Chris@0: struct ParameterDescriptor { Chris@0: basic @0 :Basic; Chris@0: unit @1 :Text; Chris@0: minValue @2 :Float32 = 0.0; Chris@0: maxValue @3 :Float32 = 0.0; Chris@0: defaultValue @4 :Float32 = 0.0; Chris@0: isQuantized @5 :Bool = false; Chris@0: quantizeStep @6 :Float32 = 0.0; Chris@0: valueNames @7 :List(Text) = []; Chris@0: } Chris@0: Chris@15: struct ConfiguredOutputDescriptor { Chris@15: unit @0 :Text; Chris@15: hasFixedBinCount @1 :Bool = false; Chris@15: binCount @2 :Int32 = 0; Chris@15: binNames @3 :List(Text) = []; Chris@15: hasKnownExtents @4 :Bool = false; Chris@15: minValue @5 :Float32 = 0.0; Chris@15: maxValue @6 :Float32 = 0.0; Chris@15: isQuantized @7 :Bool = false; Chris@15: quantizeStep @8 :Float32 = 0.0; Chris@15: sampleType @9 :SampleType; Chris@15: sampleRate @10 :Float32 = 0.0; Chris@15: hasDuration @11 :Bool = false; Chris@15: } Chris@15: Chris@0: struct OutputDescriptor { Chris@0: basic @0 :Basic; Chris@15: configured @1 :ConfiguredOutputDescriptor; Chris@0: } Chris@0: Chris@0: struct PluginStaticData { Chris@0: pluginKey @0 :Text; Chris@0: basic @1 :Basic; Chris@0: maker @2 :Text; Chris@0: copyright @3 :Text; Chris@0: pluginVersion @4 :Int32; Chris@0: category @5 :List(Text); Chris@0: minChannelCount @6 :Int32; Chris@0: maxChannelCount @7 :Int32; Chris@0: parameters @8 :List(ParameterDescriptor); Chris@0: programs @9 :List(Text); Chris@0: inputDomain @10 :InputDomain; Chris@0: basicOutputInfo @11 :List(Basic); Chris@0: } Chris@0: Chris@0: struct ProcessInput { Chris@0: inputBuffers @0 :List(List(Float32)); Chris@0: timestamp @1 :RealTime; Chris@0: } Chris@0: Chris@0: struct Feature { Chris@0: hasTimestamp @0 :Bool = false; Chris@0: timestamp @1 :RealTime; Chris@0: hasDuration @2 :Bool = false; Chris@0: duration @3 :RealTime; Chris@0: label @4 :Text; Chris@17: featureValues @5 :List(Float32) = []; Chris@0: } Chris@0: Chris@0: struct FeatureSet { Chris@0: struct FSPair { Chris@9: output @0 :Text; Chris@0: features @1 :List(Feature) = []; Chris@0: } Chris@0: featurePairs @0 :List(FSPair); Chris@0: } Chris@0: Chris@0: struct PluginConfiguration { Chris@0: struct PVPair { Chris@0: parameter @0 :Text; Chris@0: value @1 :Float32; Chris@0: } Chris@0: parameterValues @0 :List(PVPair); Chris@0: currentProgram @1 :Text; Chris@0: channelCount @2 :Int32; Chris@0: stepSize @3 :Int32; Chris@0: blockSize @4 :Int32; Chris@0: } Chris@0: Chris@8: struct ListResponse { Chris@8: plugins @0 :List(PluginStaticData); Chris@8: } Chris@8: Chris@0: struct LoadRequest { Chris@0: pluginKey @0 :Text; Chris@0: inputSampleRate @1 :Float32; Chris@0: adapterFlags @2 :List(AdapterFlag); Chris@0: } Chris@0: Chris@0: struct LoadResponse { Chris@3: pluginHandle @0 :Int32; Chris@0: staticData @1 :PluginStaticData; Chris@0: defaultConfiguration @2 :PluginConfiguration; Chris@0: } Chris@0: Chris@0: struct ConfigurationRequest { Chris@3: pluginHandle @0 :Int32; Chris@0: configuration @1 :PluginConfiguration; Chris@0: } Chris@0: Chris@0: struct ConfigurationResponse { Chris@11: pluginHandle @0 :Int32; Chris@11: outputs @1 :List(OutputDescriptor); Chris@0: } Chris@0: Chris@2: struct ProcessRequest { Chris@3: pluginHandle @0 :Int32; Chris@13: processInput @1 :ProcessInput; Chris@2: } Chris@2: Chris@9: struct ProcessResponse { Chris@9: pluginHandle @0 :Int32; Chris@9: features @1 :FeatureSet; Chris@9: } Chris@9: Chris@7: struct FinishRequest { Chris@7: pluginHandle @0 :Int32; Chris@7: } Chris@7: Chris@0: struct VampRequest { Chris@0: request :union { Chris@0: list @0 :Void; Chris@0: load @1 :LoadRequest; Chris@0: configure @2 :ConfigurationRequest; Chris@2: process @3 :ProcessRequest; Chris@7: finish @4 :FinishRequest; # getRemainingFeatures and unload Chris@0: } Chris@0: } Chris@0: Chris@0: struct VampResponse { Chris@0: success @0 :Bool; Chris@0: errorText @1 :Text = ""; Chris@0: response :union { Chris@8: list @2 :ListResponse; Chris@0: load @3 :LoadResponse; Chris@0: configure @4 :ConfigurationResponse; Chris@6: process @5 :ProcessResponse; Chris@6: finish @6 :ProcessResponse; Chris@0: } Chris@0: } Chris@0: