Chris@0
|
1
|
Chris@0
|
2 @0xc4b1c6c44c999206;
|
Chris@0
|
3
|
Chris@0
|
4 using Cxx = import "/capnp/c++.capnp";
|
Chris@21
|
5 $Cxx.namespace("piper");
|
Chris@0
|
6
|
Chris@0
|
7 struct Basic {
|
Chris@0
|
8 identifier @0 :Text;
|
Chris@0
|
9 name @1 :Text;
|
Chris@0
|
10 description @2 :Text;
|
Chris@0
|
11 }
|
Chris@0
|
12
|
Chris@0
|
13 struct ParameterDescriptor {
|
Chris@0
|
14 basic @0 :Basic;
|
Chris@0
|
15 unit @1 :Text;
|
Chris@0
|
16 minValue @2 :Float32 = 0.0;
|
Chris@0
|
17 maxValue @3 :Float32 = 0.0;
|
Chris@0
|
18 defaultValue @4 :Float32 = 0.0;
|
Chris@0
|
19 isQuantized @5 :Bool = false;
|
Chris@0
|
20 quantizeStep @6 :Float32 = 0.0;
|
Chris@0
|
21 valueNames @7 :List(Text) = [];
|
Chris@0
|
22 }
|
Chris@0
|
23
|
Chris@22
|
24 enum SampleType {
|
Chris@22
|
25 oneSamplePerStep @0;
|
Chris@22
|
26 fixedSampleRate @1;
|
Chris@22
|
27 variableSampleRate @2;
|
Chris@22
|
28 }
|
Chris@22
|
29
|
Chris@15
|
30 struct ConfiguredOutputDescriptor {
|
Chris@15
|
31 unit @0 :Text;
|
Chris@15
|
32 hasFixedBinCount @1 :Bool = false;
|
Chris@15
|
33 binCount @2 :Int32 = 0;
|
Chris@15
|
34 binNames @3 :List(Text) = [];
|
Chris@15
|
35 hasKnownExtents @4 :Bool = false;
|
Chris@15
|
36 minValue @5 :Float32 = 0.0;
|
Chris@15
|
37 maxValue @6 :Float32 = 0.0;
|
Chris@15
|
38 isQuantized @7 :Bool = false;
|
Chris@15
|
39 quantizeStep @8 :Float32 = 0.0;
|
Chris@15
|
40 sampleType @9 :SampleType;
|
Chris@15
|
41 sampleRate @10 :Float32 = 0.0;
|
Chris@15
|
42 hasDuration @11 :Bool = false;
|
Chris@15
|
43 }
|
Chris@15
|
44
|
Chris@0
|
45 struct OutputDescriptor {
|
Chris@0
|
46 basic @0 :Basic;
|
Chris@15
|
47 configured @1 :ConfiguredOutputDescriptor;
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@22
|
50 enum InputDomain {
|
Chris@22
|
51 timeDomain @0;
|
Chris@22
|
52 frequencyDomain @1;
|
Chris@22
|
53 }
|
Chris@22
|
54
|
Chris@18
|
55 struct ExtractorStaticData {
|
Chris@18
|
56 key @0 :Text;
|
Chris@0
|
57 basic @1 :Basic;
|
Chris@0
|
58 maker @2 :Text;
|
Chris@0
|
59 copyright @3 :Text;
|
Chris@18
|
60 version @4 :Int32;
|
Chris@0
|
61 category @5 :List(Text);
|
Chris@0
|
62 minChannelCount @6 :Int32;
|
Chris@0
|
63 maxChannelCount @7 :Int32;
|
Chris@0
|
64 parameters @8 :List(ParameterDescriptor);
|
Chris@0
|
65 programs @9 :List(Text);
|
Chris@0
|
66 inputDomain @10 :InputDomain;
|
Chris@0
|
67 basicOutputInfo @11 :List(Basic);
|
Chris@0
|
68 }
|
Chris@0
|
69
|
Chris@22
|
70 struct RealTime {
|
Chris@22
|
71 sec @0 :Int32 = 0;
|
Chris@22
|
72 nsec @1 :Int32 = 0;
|
Chris@22
|
73 }
|
Chris@22
|
74
|
Chris@0
|
75 struct ProcessInput {
|
Chris@0
|
76 inputBuffers @0 :List(List(Float32));
|
Chris@0
|
77 timestamp @1 :RealTime;
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 struct Feature {
|
Chris@0
|
81 hasTimestamp @0 :Bool = false;
|
Chris@0
|
82 timestamp @1 :RealTime;
|
Chris@0
|
83 hasDuration @2 :Bool = false;
|
Chris@0
|
84 duration @3 :RealTime;
|
Chris@0
|
85 label @4 :Text;
|
Chris@17
|
86 featureValues @5 :List(Float32) = [];
|
Chris@0
|
87 }
|
Chris@0
|
88
|
Chris@0
|
89 struct FeatureSet {
|
Chris@0
|
90 struct FSPair {
|
Chris@9
|
91 output @0 :Text;
|
Chris@0
|
92 features @1 :List(Feature) = [];
|
Chris@0
|
93 }
|
Chris@0
|
94 featurePairs @0 :List(FSPair);
|
Chris@0
|
95 }
|
Chris@0
|
96
|
Chris@18
|
97 struct Configuration {
|
Chris@0
|
98 struct PVPair {
|
Chris@0
|
99 parameter @0 :Text;
|
Chris@0
|
100 value @1 :Float32;
|
Chris@0
|
101 }
|
Chris@0
|
102 parameterValues @0 :List(PVPair);
|
Chris@0
|
103 currentProgram @1 :Text;
|
Chris@0
|
104 channelCount @2 :Int32;
|
Chris@0
|
105 stepSize @3 :Int32;
|
Chris@0
|
106 blockSize @4 :Int32;
|
Chris@0
|
107 }
|
Chris@0
|
108
|
Chris@22
|
109 enum AdapterFlag {
|
Chris@22
|
110 adaptInputDomain @0;
|
Chris@22
|
111 adaptChannelCount @1;
|
Chris@22
|
112 adaptBufferSize @2;
|
Chris@22
|
113 }
|
Chris@22
|
114
|
Chris@22
|
115 const adaptAllSafe :List(AdapterFlag) =
|
Chris@22
|
116 [ adaptInputDomain, adaptChannelCount ];
|
Chris@22
|
117
|
Chris@22
|
118 const adaptAll :List(AdapterFlag) =
|
Chris@22
|
119 [ adaptInputDomain, adaptChannelCount, adaptBufferSize ];
|
Chris@22
|
120
|
Chris@18
|
121 struct ListRequest {
|
Chris@85
|
122 from @0 :List(Text);
|
Chris@18
|
123 }
|
Chris@18
|
124
|
Chris@8
|
125 struct ListResponse {
|
Chris@18
|
126 available @0 :List(ExtractorStaticData);
|
Chris@8
|
127 }
|
Chris@8
|
128
|
Chris@0
|
129 struct LoadRequest {
|
Chris@18
|
130 key @0 :Text;
|
Chris@0
|
131 inputSampleRate @1 :Float32;
|
Chris@0
|
132 adapterFlags @2 :List(AdapterFlag);
|
Chris@0
|
133 }
|
Chris@0
|
134
|
Chris@0
|
135 struct LoadResponse {
|
Chris@18
|
136 handle @0 :Int32;
|
Chris@18
|
137 staticData @1 :ExtractorStaticData;
|
Chris@18
|
138 defaultConfiguration @2 :Configuration;
|
Chris@0
|
139 }
|
Chris@0
|
140
|
Chris@0
|
141 struct ConfigurationRequest {
|
Chris@18
|
142 handle @0 :Int32;
|
Chris@18
|
143 configuration @1 :Configuration;
|
Chris@0
|
144 }
|
Chris@0
|
145
|
Chris@0
|
146 struct ConfigurationResponse {
|
Chris@18
|
147 handle @0 :Int32;
|
Chris@11
|
148 outputs @1 :List(OutputDescriptor);
|
Chris@0
|
149 }
|
Chris@0
|
150
|
Chris@2
|
151 struct ProcessRequest {
|
Chris@18
|
152 handle @0 :Int32;
|
Chris@13
|
153 processInput @1 :ProcessInput;
|
Chris@2
|
154 }
|
Chris@2
|
155
|
Chris@9
|
156 struct ProcessResponse {
|
Chris@18
|
157 handle @0 :Int32;
|
Chris@9
|
158 features @1 :FeatureSet;
|
Chris@9
|
159 }
|
Chris@9
|
160
|
Chris@7
|
161 struct FinishRequest {
|
Chris@18
|
162 handle @0 :Int32;
|
Chris@7
|
163 }
|
Chris@7
|
164
|
Chris@20
|
165 struct FinishResponse {
|
Chris@20
|
166 handle @0 :Int32;
|
Chris@20
|
167 features @1 :FeatureSet;
|
Chris@20
|
168 }
|
Chris@20
|
169
|
Chris@18
|
170 struct Error {
|
Chris@18
|
171 code @0 :Int32;
|
Chris@18
|
172 message @1 :Text;
|
Chris@18
|
173 }
|
Chris@18
|
174
|
Chris@18
|
175 struct RpcRequest {
|
Chris@20
|
176 # Request bundle for use when using Cap'n Proto serialisation without
|
Chris@22
|
177 # Cap'n Proto RPC layer. For Cap'n Proto RPC, see piper.rpc.capnp.
|
Chris@82
|
178 id :union {
|
Chris@82
|
179 number @0 :Int32;
|
Chris@82
|
180 tag @1 :Text;
|
Chris@82
|
181 none @2 :Void;
|
Chris@82
|
182 }
|
Chris@0
|
183 request :union {
|
Chris@82
|
184 list @3 :ListRequest;
|
Chris@82
|
185 load @4 :LoadRequest;
|
Chris@82
|
186 configure @5 :ConfigurationRequest;
|
Chris@82
|
187 process @6 :ProcessRequest;
|
Chris@84
|
188 finish @7 :FinishRequest;
|
Chris@84
|
189 # finish gets any remaining calculated features and unloads
|
Chris@84
|
190 # the feature extractor. Note that you can call finish at any
|
Chris@84
|
191 # time -- even if you haven't configured or used the extractor,
|
Chris@84
|
192 # it will unload any resources used and abandon the handle.
|
Chris@0
|
193 }
|
Chris@0
|
194 }
|
Chris@0
|
195
|
Chris@18
|
196 struct RpcResponse {
|
Chris@20
|
197 # Response bundle for use when using Cap'n Proto serialisation without
|
Chris@22
|
198 # Cap'n Proto RPC layer. For Cap'n Proto RPC, see piper.rpc.capnp.
|
Chris@82
|
199 id :union {
|
Chris@82
|
200 number @0 :Int32;
|
Chris@82
|
201 tag @1 :Text;
|
Chris@82
|
202 none @2 :Void;
|
Chris@82
|
203 }
|
Chris@0
|
204 response :union {
|
Chris@82
|
205 error @3 :Error;
|
Chris@82
|
206 list @4 :ListResponse;
|
Chris@82
|
207 load @5 :LoadResponse;
|
Chris@82
|
208 configure @6 :ConfigurationResponse;
|
Chris@82
|
209 process @7 :ProcessResponse;
|
Chris@82
|
210 finish @8 :FinishResponse;
|
Chris@0
|
211 }
|
Chris@0
|
212 }
|
Chris@0
|
213
|