Chris@0
|
1 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
2 // /*! \file FEAPI.h
|
Chris@0
|
3 // \brief interface of the feature extraction plugin.
|
Chris@0
|
4 // <br><br>
|
Chris@0
|
5 // In the following, context function pointers typedefs are referred to as
|
Chris@0
|
6 // functions.<br>
|
Chris@0
|
7 //
|
Chris@0
|
8 //
|
Chris@0
|
9 // Create a new instance of the plugin with the function
|
Chris@0
|
10 // ::FEAPI_CreatePluginInstance. The call of this function is mandatory.
|
Chris@0
|
11 // <br><br>
|
Chris@0
|
12 //
|
Chris@0
|
13 // Initialize the plugin with the call of function
|
Chris@0
|
14 // ::FEAPI_InitializePlugin.<br><br>
|
Chris@0
|
15 //
|
Chris@0
|
16 // Information about the plugin can be requested via the following
|
Chris@0
|
17 // functions:<br>
|
Chris@0
|
18 // ::FEAPI_GetPluginAPIVersion, <br>
|
Chris@0
|
19 // ::FEAPI_GetPluginName, <br>
|
Chris@0
|
20 // ::FEAPI_GetPluginVendor, <br>
|
Chris@0
|
21 // ::FEAPI_GetPluginVendorVersion, <br>
|
Chris@0
|
22 // ::FEAPI_GetPluginCopyright, <br>
|
Chris@0
|
23 // ::FEAPI_GetPluginDescription. <br>
|
Chris@0
|
24 // The call of these functions is optional. Combined with a call to
|
Chris@0
|
25 // ::FEAPI_GetPluginId, the plugin can be uniquely identified. <br><br>
|
Chris@0
|
26 //
|
Chris@0
|
27 // The technical capabilities of the plugin can be requested via the call
|
Chris@0
|
28 // of the function
|
Chris@0
|
29 // ::FEAPI_GetPluginProperty.<br><br>
|
Chris@0
|
30 //
|
Chris@0
|
31 // To get the number of the features resp. results that are computed
|
Chris@0
|
32 // by the plugin, call the function <br>
|
Chris@0
|
33 // ::FEAPI_GetPluginNumOfResults; <br>
|
Chris@0
|
34 // the function <br>
|
Chris@0
|
35 // ::FEAPI_GetPluginResultDescription gives you detailed information about the
|
Chris@0
|
36 // meaning and usage of every result (see structure ::_ResultDescription
|
Chris@0
|
37 // for details). <br><br>
|
Chris@0
|
38 //
|
Chris@0
|
39 // To get the number of the options/ parameter settings that can be
|
Chris@0
|
40 // done before processing, call the function <br>
|
Chris@0
|
41 // ::FEAPI_GetPluginNumOfParameters; <br>
|
Chris@0
|
42 // the function <br>
|
Chris@0
|
43 // ::FEAPI_GetPluginParamDescription gives you detailed information about
|
Chris@0
|
44 // the meaning and usage of every single parameter (see structure
|
Chris@0
|
45 // ::FEAPI_ParameterDescription_t for details).<br><br>
|
Chris@0
|
46 //
|
Chris@0
|
47 // To get or set a specific parameter value, call the function <br>
|
Chris@0
|
48 // ::FEAPI_GetPluginParameter resp. <br>
|
Chris@0
|
49 // ::FEAPI_SetPluginParameter. <br><br>
|
Chris@0
|
50 //
|
Chris@0
|
51 // After the plugin is initialized, the actual processing can begin.
|
Chris@0
|
52 // The ::FEAPI_ProcessPlugin <br>
|
Chris@0
|
53 // function can be called to do the actual feature/result
|
Chris@0
|
54 // calculation. ::FEAPI_ProcessPlugin expects subsequently new blocks
|
Chris@0
|
55 // of audio data. Note that ::FEAPI_ProcessPlugin does not return
|
Chris@0
|
56 // computed feature values.<br>
|
Chris@0
|
57 //
|
Chris@0
|
58 // After finishing one ::FEAPI_ProcessPlugin call, zero, one or more
|
Chris@0
|
59 // results can be available, depending on the plug-ins implementation.
|
Chris@0
|
60 // To query the available number of values for every feature/result,
|
Chris@0
|
61 // call <br>
|
Chris@0
|
62 // ::FEAPI_GetPluginSizeOfResult, <br>
|
Chris@0
|
63 // which returns the number of values for this
|
Chris@0
|
64 // result. Afterwards, the result values for each result can
|
Chris@0
|
65 // be requested via <br>
|
Chris@0
|
66 // ::FEAPI_GetPluginResult. Note that the memory for the results has to be
|
Chris@0
|
67 // allocated by the host.<br><br>
|
Chris@0
|
68 //
|
Chris@0
|
69 // To signal that no more audio data is available at the end (e.g. of
|
Chris@0
|
70 // the audio file), call <br>
|
Chris@0
|
71 // ::FEAPI_ProcessPluginDone and get the last results with
|
Chris@0
|
72 // ::FEAPI_GetPluginResult if available.<br><br>
|
Chris@0
|
73 //
|
Chris@0
|
74 // To flush the internal buffers, the function <br>
|
Chris@0
|
75 // ::FEAPI_ResetPlugin <br>
|
Chris@0
|
76 // may be called.
|
Chris@0
|
77 //
|
Chris@0
|
78 // After all processing has been done, destroy the instance of the
|
Chris@0
|
79 // plugin with the function <br>
|
Chris@0
|
80 // ::FEAPI_DestroyPluginInstance. <br>
|
Chris@0
|
81 // The call of this function is mandatory. <br><br>
|
Chris@0
|
82 //
|
Chris@0
|
83 // <br><br><br>
|
Chris@0
|
84 // The Feature Extraction plugin API is released under a BSD style
|
Chris@0
|
85 // license. Please make all changes available to the authors.<br>
|
Chris@0
|
86 // Contact information: lerch <at> zplane.de.
|
Chris@0
|
87 //
|
Chris@0
|
88 // */
|
Chris@0
|
89 //
|
Chris@0
|
90 // Copyright (c) 2004-2005, Alexander Lerch, zplane.development GbR
|
Chris@0
|
91 // All rights reserved.
|
Chris@0
|
92 //
|
Chris@0
|
93 // Redistribution and use in source and binary forms, with or without
|
Chris@0
|
94 // modification, are permitted provided that the following conditions
|
Chris@0
|
95 // are met:
|
Chris@0
|
96 //
|
Chris@0
|
97 // * Redistributions of source code must retain the above copyright
|
Chris@0
|
98 // notice, this list of conditions and the following disclaimer.
|
Chris@0
|
99 // * Redistributions in binary form must link to the FEAPI website
|
Chris@0
|
100 // http://www.sf.net/projects/feapi,
|
Chris@0
|
101 // reproduce this list of conditions and the following
|
Chris@0
|
102 // disclaimer in the documentation and/or other materials
|
Chris@0
|
103 // provided with the distribution.
|
Chris@0
|
104 // * The name of the contributors to this software must not be used
|
Chris@0
|
105 // to endorse or promote products derived from this software
|
Chris@0
|
106 // without specific prior written permission.
|
Chris@0
|
107 //
|
Chris@0
|
108 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
Chris@0
|
109 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
Chris@0
|
110 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
Chris@0
|
111 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
Chris@0
|
112 // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
Chris@0
|
113 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
Chris@0
|
114 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
Chris@0
|
115 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
Chris@0
|
116 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
Chris@0
|
117 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
Chris@0
|
118 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
Chris@0
|
119 // POSSIBILITY OF SUCH DAMAGE.
|
Chris@0
|
120 //
|
Chris@0
|
121 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
122 // CVS INFORMATION
|
Chris@0
|
123 //
|
Chris@0
|
124 // $RCSfile: FEAPI.h,v $
|
Chris@0
|
125 // $Author: alex_lerch $
|
Chris@0
|
126 // $Date: 2005/05/20 17:08:36 $
|
Chris@0
|
127 //
|
Chris@0
|
128 // $Log: FEAPI.h,v $
|
Chris@0
|
129 // Revision 1.2 2005/05/20 17:08:36 alex_lerch
|
Chris@0
|
130 // - updated documentation
|
Chris@0
|
131 // - added "signal" typedef for inputs and results
|
Chris@0
|
132 // - changed function PluginCanDo to PluginGetProperty and changed the function itself to return values instead of bools
|
Chris@0
|
133 // - cosmetic changes
|
Chris@0
|
134 //
|
Chris@0
|
135 // Revision 1.1.1.1 2005/03/30 14:54:40 alex_lerch
|
Chris@0
|
136 // first draft version requiring several updates:
|
Chris@0
|
137 // - interface check
|
Chris@0
|
138 // - check of plugin base class
|
Chris@0
|
139 // - implementation of host base class
|
Chris@0
|
140 // - update of outdated documentation
|
Chris@0
|
141 //
|
Chris@0
|
142 //
|
Chris@0
|
143 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
144 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
145 // !!!Do never ever edit this file!!!
|
Chris@0
|
146 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
147 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
148
|
Chris@0
|
149 /*! \brief avoid multiple header includes */
|
Chris@0
|
150 #if !defined(FEAPI_HEADER_INCLUDED)
|
Chris@0
|
151 #define FEAPI_HEADER_INCLUDED
|
Chris@0
|
152
|
Chris@0
|
153
|
Chris@0
|
154 #ifdef __cplusplus
|
Chris@0
|
155 extern "C" {
|
Chris@0
|
156 #endif
|
Chris@0
|
157
|
Chris@0
|
158 /* Maximum string lengths. */
|
Chris@0
|
159 const unsigned int FEAPI_uiMaxNameLength = 1024; //!< maximum number of characters for a name string (including null terminator)
|
Chris@0
|
160 const unsigned int FEAPI_uiMaxUnitLength = 1024; //!< maximum number of characters for a unit string (including null terminator)
|
Chris@0
|
161 const unsigned int FEAPI_uiMaxDescriptionLength = 4096; //!< maximum number of characters for a description string (including null terminator)
|
Chris@0
|
162
|
Chris@0
|
163 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
164 // interface structures and types
|
Chris@0
|
165 /** @defgroup types Interface Structures and Types
|
Chris@0
|
166 * @{
|
Chris@0
|
167 */
|
Chris@0
|
168
|
Chris@0
|
169
|
Chris@0
|
170 /*! Structure describing properties and other information about one result/feature. */
|
Chris@0
|
171 typedef struct FEAPI_SignalDescription_t_tag
|
Chris@0
|
172 {
|
Chris@0
|
173 char acName[FEAPI_uiMaxNameLength]; //!< name of the result/feature (e.g. "Spectral Centroid", "Loudness", etc.)
|
Chris@0
|
174 char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the result/feature (e.g. "dB", "sone", "Hz", etc.)
|
Chris@0
|
175 char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the result/feature (clear text description)
|
Chris@0
|
176 float fRangeMin; //!< minimum value of the result/feature (if no minimum value: minimum floating point value)
|
Chris@0
|
177 float fRangeMax; //!< maximum value of the result/feature (if no maximum value: maximum floating point value)
|
Chris@0
|
178 float fQuantizedTo; //!< quantization step size of the result/feature (e.g. 1 for integer result, -1 for no quantization)
|
Chris@0
|
179 float fSampleRate; //!< sample rate of the result/feature output in Hz; -1 if sample rate equals input block length, -2 for non-equidistant samples
|
Chris@0
|
180 } FEAPI_SignalDescription_t;
|
Chris@0
|
181
|
Chris@0
|
182
|
Chris@0
|
183 /*! Structure describing properties and other information about one parameter. */
|
Chris@0
|
184 typedef struct FEAPI_ParameterDescription_t_tag
|
Chris@0
|
185 {
|
Chris@0
|
186 char acName[FEAPI_uiMaxNameLength]; //!< name of the parameter (e.g. "Gain", "Sensitivity", etc.)
|
Chris@0
|
187 char acUnit[FEAPI_uiMaxUnitLength]; //!< unit of the parameter (e.g. "dB", "Hz", etc.)
|
Chris@0
|
188 char acDescription[FEAPI_uiMaxDescriptionLength]; //!< description of the parameter (clear text description)
|
Chris@0
|
189 float fRangeMin, //!< minimum value of the parameter (if no minimum value: minimum floating point value)
|
Chris@0
|
190 fRangeMax, //!< maximum value of the parameter (if no maximum value: maximum floating point value)
|
Chris@0
|
191 fDefaultValue; //!< default value for the parameter
|
Chris@0
|
192 float fQuantizedTo; //!< quantization step size of the parameter (e.g. 1 for integer quantization, -1 for no quantization)
|
Chris@0
|
193 int bIsChangeableInRealTime;//!< 0/false if the parameter has to be set before the processing starts and can not be changed during processing, 1 if the parameter can be changed during processing
|
Chris@0
|
194 } FEAPI_ParameterDescription_t;
|
Chris@0
|
195
|
Chris@0
|
196
|
Chris@0
|
197 /*! Structure for user/vendor defined commands. */
|
Chris@0
|
198 typedef struct FEAPI_UserData_t_tag
|
Chris@0
|
199 {
|
Chris@0
|
200 char *pcUserString; //!< user defined string value (memory could be freed by host after function call)
|
Chris@0
|
201 void *pcUserData; //!< pointer to user defined data
|
Chris@0
|
202 } FEAPI_UserData_t;
|
Chris@0
|
203
|
Chris@0
|
204
|
Chris@0
|
205 /*! Typedef for the plugin instance handle. */
|
Chris@0
|
206 typedef void* FEAPI_PluginInstance_t;
|
Chris@0
|
207
|
Chris@0
|
208
|
Chris@0
|
209 /*! This typedef is used for time stamps in seconds.
|
Chris@0
|
210 For a block of data, the time stamp is defined to be the time at the beginning of the block. */
|
Chris@0
|
211 typedef double FEAPI_TimeStamp_t;
|
Chris@0
|
212
|
Chris@0
|
213
|
Chris@0
|
214 /*! This typedef is used for input and output data.
|
Chris@0
|
215 At least for this version of the API, this is exactly float. */
|
Chris@0
|
216 typedef float FEAPI_Signal_t;
|
Chris@0
|
217
|
Chris@0
|
218
|
Chris@0
|
219 /*! Enumerator for possible error return values, if any other value than FEAPI_kNoError is returned,
|
Chris@0
|
220 the function was not able to execute the specified operation(s).<br>
|
Chris@0
|
221 All error defines are negative. */
|
Chris@0
|
222 typedef enum FEAPI_Error_t_tag
|
Chris@0
|
223 {
|
Chris@0
|
224 FEAPI_kNoError = 0, //!< no error occurred
|
Chris@0
|
225 FEAPI_kUnspecifiedError = -1, //!< an error occurred, but the type is not yet specified
|
Chris@0
|
226 FEAPI_kUnknownError = -9999 //!< an error occurred, but its type is not specifyable
|
Chris@0
|
227 } FEAPI_Error_t;
|
Chris@0
|
228
|
Chris@0
|
229
|
Chris@0
|
230 /*! Enumerator for retrieval of version info which can be resolved as major.minor.sub. */
|
Chris@0
|
231 typedef enum FEAPI_VersionInfo_t_tag
|
Chris@0
|
232 {
|
Chris@0
|
233 FEAPI_kMajorVersion = 0, //!< indicates the major version
|
Chris@0
|
234 FEAPI_kMinorVersion = 1, //!< indicates the minor version
|
Chris@0
|
235 FEAPI_kSubVersion = 2 //!< indicates the sub version or bug-fix version
|
Chris@0
|
236 } FEAPI_VersionInfo_t;
|
Chris@0
|
237
|
Chris@0
|
238
|
Chris@0
|
239 /*! Enumerator for retrieval of information about what the plug supports. */
|
Chris@0
|
240 typedef enum FEAPI_PluginProperty_t_tag
|
Chris@0
|
241 {
|
Chris@0
|
242 FEAPI_kMinSampleRate = 0, //!< indicates the minimum sample rate
|
Chris@0
|
243 FEAPI_kMaxSampleRate = 1, //!< indicates the maximum sample rate
|
Chris@0
|
244 FEAPI_kMinChannels = 2, //!< indicates minimum number of channels
|
Chris@0
|
245 FEAPI_kMaxChannels = 3, //!< indicates maximum number of channels
|
Chris@0
|
246 FEAPI_kMinFrameSize = 4, //!< indicates minimum number of frames per process call
|
Chris@0
|
247 FEAPI_kMaxFrameSize = 5, //!< indicates maximum number of frames per process call
|
Chris@0
|
248 FEAPI_kOptFrameSize = 6 //!< indicates optimal number of frames per process call
|
Chris@0
|
249 } FEAPI_PluginProperty_t;
|
Chris@0
|
250
|
Chris@0
|
251 /** @} */
|
Chris@0
|
252
|
Chris@0
|
253 ////////////////////////////////////////////////////////////////////////////////////
|
Chris@0
|
254 // API function declaration
|
Chris@0
|
255 /** @defgroup apifun API function pointers
|
Chris@0
|
256 * @{
|
Chris@0
|
257 */
|
Chris@0
|
258
|
Chris@0
|
259 /*!
|
Chris@0
|
260 * Creates a new instance of the plugin
|
Chris@0
|
261 *
|
Chris@0
|
262 * @param phInstanceHandle : handle to the instance to be created
|
Chris@0
|
263 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
264 */
|
Chris@0
|
265 typedef FEAPI_Error_t (*FEAPI_CreatePluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle );
|
Chris@0
|
266
|
Chris@0
|
267 /*!
|
Chris@0
|
268 * Destroys an instance of the plugin.
|
Chris@0
|
269 *
|
Chris@0
|
270 * @param phInstanceHandle : handle to the instance to be destroyed
|
Chris@0
|
271 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
272 */
|
Chris@0
|
273 typedef FEAPI_Error_t (*FEAPI_DestroyPluginInstance_t) ( FEAPI_PluginInstance_t *phInstanceHandle );
|
Chris@0
|
274
|
Chris@0
|
275 /*!
|
Chris@0
|
276 * initializes a new instance of the plugin
|
Chris@0
|
277 *
|
Chris@0
|
278 * @param hInstanceHandle : handle to the instance
|
Chris@0
|
279 * @param fInputSampleRate : sample rate of input(s) in Hz
|
Chris@0
|
280 * @param iNumberOfAudioChannels : number of input audio channels
|
Chris@0
|
281 * @param iHostApiMajorVersion : major version number of host
|
Chris@0
|
282 * @param pstUserData : pointer to user or vendor defined data (may be NULL)
|
Chris@0
|
283 *
|
Chris@0
|
284 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
285 */
|
Chris@0
|
286 typedef FEAPI_Error_t (*FEAPI_InitializePlugin_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
287 float fInputSampleRate,
|
Chris@0
|
288 int iNumberOfAudioChannels,
|
Chris@0
|
289 int iHostApiMajorVersion,
|
Chris@0
|
290 FEAPI_UserData_t *pstUserData);
|
Chris@0
|
291
|
Chris@0
|
292
|
Chris@0
|
293 /*!
|
Chris@0
|
294 * Gets the version number (major, minor or subversion) of the API used by the plugin.
|
Chris@0
|
295 * This is *not* the plugin version, therefore the function may be called without a previously
|
Chris@0
|
296 * created instance.
|
Chris@0
|
297 *
|
Chris@0
|
298 * @param eAPIMajorMinorOrSubVersion : flag which version type is requested
|
Chris@0
|
299 * @return int : requested version number
|
Chris@0
|
300 */
|
Chris@0
|
301 typedef int (*FEAPI_GetPluginAPIVersion_t) ( FEAPI_VersionInfo_t eAPIMajorMinorOrSubVersion ); //!< \todo change ints to (unsigned) ints where appropriate?
|
Chris@0
|
302
|
Chris@0
|
303
|
Chris@0
|
304 /*!
|
Chris@0
|
305 * Gets the name of the plugin.
|
Chris@0
|
306 *
|
Chris@0
|
307 * @param hInstanceHandle : handle to instance
|
Chris@0
|
308 * @param *pcPluginName : pointer to buffer of FEAPI_uiMaxNameLength chars, the name will be copied to this buffer
|
Chris@0
|
309 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
310 */
|
Chris@0
|
311 typedef FEAPI_Error_t (*FEAPI_GetPluginName_t) ( FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
312 char *pcPluginName);
|
Chris@0
|
313
|
Chris@0
|
314 /*!
|
Chris@0
|
315 * Gets the vendor name of the plugin.
|
Chris@0
|
316 *
|
Chris@0
|
317 * @param hInstanceHandle : handle to instance
|
Chris@0
|
318 * @param *pcPluginVendor : pointer to buffer of FEAPI_uiMaxNameLength chars, the vendor name will be copied to this buffer
|
Chris@0
|
319 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
320 */
|
Chris@0
|
321 typedef FEAPI_Error_t (*FEAPI_GetPluginVendor_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
322 char *pcPluginVendor);
|
Chris@0
|
323
|
Chris@0
|
324 /*!
|
Chris@0
|
325 * Gets an indication of the plugins capabilities.
|
Chris@0
|
326 *
|
Chris@0
|
327 * @param hInstanceHandle : handle to instance
|
Chris@0
|
328 * @param ePluginProperty : requested property
|
Chris@0
|
329 * @return float : corresponding value
|
Chris@0
|
330 */
|
Chris@0
|
331 typedef float (*FEAPI_GetPluginProperty_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
332 FEAPI_PluginProperty_t ePluginProperty);
|
Chris@0
|
333
|
Chris@0
|
334 /*!
|
Chris@0
|
335 * Gets the (vendor unique) plugin identification string.
|
Chris@0
|
336 *
|
Chris@0
|
337 * @param hInstanceHandle : handle to instance
|
Chris@0
|
338 * @param *pcPluginId : pointer to buffer of FEAPI_uiMaxNameLength chars, the id will be copied to this buffer
|
Chris@0
|
339 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
340 */
|
Chris@0
|
341 typedef FEAPI_Error_t (*FEAPI_GetPluginId_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
342 char *pcPluginId);
|
Chris@0
|
343
|
Chris@0
|
344 /*!
|
Chris@0
|
345 * Gets the vendor version of the plugin.
|
Chris@0
|
346 *
|
Chris@0
|
347 * @param hInstanceHandle : handle to instance
|
Chris@0
|
348 * @param ePluginMajorMinorOrSubVersion : flag which version type is requested
|
Chris@0
|
349 * @return int : requested version number
|
Chris@0
|
350 */
|
Chris@0
|
351 typedef int (*FEAPI_GetPluginVendorVersion_t) ( FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
352 FEAPI_VersionInfo_t ePluginMajorMinorOrSubVersion);
|
Chris@0
|
353
|
Chris@0
|
354 /*!
|
Chris@0
|
355 * Gets the description of the plugin, containing information about what the plugin actually does.
|
Chris@0
|
356 *
|
Chris@0
|
357 * @param hInstanceHandle : handle to instance
|
Chris@0
|
358 * @param *pcPluginDescription : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin description will be copied to this buffer
|
Chris@0
|
359 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
360 */
|
Chris@0
|
361 typedef FEAPI_Error_t (*FEAPI_GetPluginDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
362 char *pcPluginDescription);
|
Chris@0
|
363
|
Chris@0
|
364 /*!
|
Chris@0
|
365 * Gets the copyright information for the plugin.
|
Chris@0
|
366 *
|
Chris@0
|
367 * @param hInstanceHandle : handle to instance
|
Chris@0
|
368 * @param *pcPluginCopyright : pointer to buffer of FEAPI_uiMaxDescriptionLength chars, the plugin copyright information will be copied to this buffer
|
Chris@0
|
369 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
370 */
|
Chris@0
|
371 typedef FEAPI_Error_t (*FEAPI_GetPluginCopyright_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
372 char *pcPluginCopyright);
|
Chris@0
|
373
|
Chris@0
|
374 /*!
|
Chris@0
|
375 * Gets the number of inputs for the plugin. This number will equal the
|
Chris@0
|
376 * number of audio channels in many cases, otherwise exceed the number of audio channels.
|
Chris@0
|
377 * The additional input channels are plugin developer specific and not recommended. If used,
|
Chris@0
|
378 * they have to be routed host internally.
|
Chris@0
|
379 *
|
Chris@0
|
380 * @param hInstanceHandle : handle to instance
|
Chris@0
|
381 * @return int : number of inputs
|
Chris@0
|
382 */
|
Chris@0
|
383 typedef int (*FEAPI_GetPluginNumOfInputs_t) (FEAPI_PluginInstance_t hInstanceHandle);
|
Chris@0
|
384
|
Chris@0
|
385 /*!
|
Chris@0
|
386 * Gets information about one of the possible inputs.
|
Chris@0
|
387 *
|
Chris@0
|
388 * @param hInstanceHandle : handle to instance
|
Chris@0
|
389 * @param iInputIndex : index of the input the description is requested for, index ranges from 0...NumOfInputs-1
|
Chris@0
|
390 * @param *pstInputDescription : the requested description will be copied to this structure
|
Chris@0
|
391 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
392 */
|
Chris@0
|
393 typedef FEAPI_Error_t (*FEAPI_GetPluginInputDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
394 int iInputIndex,
|
Chris@0
|
395 FEAPI_SignalDescription_t *pstInputDescription);
|
Chris@0
|
396
|
Chris@0
|
397 /*!
|
Chris@0
|
398 * Gets the number of parameters.
|
Chris@0
|
399 *
|
Chris@0
|
400 * @param hInstanceHandle : handle to instance
|
Chris@0
|
401 * @return int : number of parameters
|
Chris@0
|
402 */
|
Chris@0
|
403 typedef int (*FEAPI_GetPluginNumOfParameters_t) (FEAPI_PluginInstance_t hInstanceHandle);
|
Chris@0
|
404
|
Chris@0
|
405 /*!
|
Chris@0
|
406 * Gets information about one of the possible parameters.
|
Chris@0
|
407 *
|
Chris@0
|
408 * @param hInstanceHandle : handle to instance
|
Chris@0
|
409 * @param iParameterIndex : index of the parameter (setting) the description is requested for, index ranges from 0...NumOfParameters-1
|
Chris@0
|
410 * @param *pstParameterDescription : the requested description will be copied to this structure
|
Chris@0
|
411 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
412 */
|
Chris@0
|
413 typedef FEAPI_Error_t (*FEAPI_GetPluginParameterDescription_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
414 int iParameterIndex,
|
Chris@0
|
415 FEAPI_ParameterDescription_t *pstParameterDescription);
|
Chris@0
|
416
|
Chris@0
|
417 /*!
|
Chris@0
|
418 * Sets a parameter to a specified value.
|
Chris@0
|
419 *
|
Chris@0
|
420 * @param hInstanceHandle : handle to instance
|
Chris@0
|
421 * @param iParameterIndex : index of the parameter (setting) to be changed, index ranges from 0...NumOfParameters-1
|
Chris@0
|
422 * @param fValue : new value of the parameter
|
Chris@0
|
423 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
424 */
|
Chris@0
|
425 typedef FEAPI_Error_t (*FEAPI_SetPluginParameter_t) ( FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
426 int iParameterIndex,
|
Chris@0
|
427 float fValue);
|
Chris@0
|
428
|
Chris@0
|
429 /*!
|
Chris@0
|
430 * Gets the current value of a parameter.
|
Chris@0
|
431 *
|
Chris@0
|
432 * @param hInstanceHandle : handle to instance
|
Chris@0
|
433 * @param iParameterIndex : index of the parameter (setting) requested, index ranges from 0...NumOfParameters-1
|
Chris@0
|
434 * @return float : value of the parameter with index iParameterIndex
|
Chris@0
|
435 */
|
Chris@0
|
436 typedef float (*FEAPI_GetPluginParameter_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
437 int iParameterIndex);
|
Chris@0
|
438
|
Chris@0
|
439 /*!
|
Chris@0
|
440 * Processes a block of audio data.
|
Chris@0
|
441 *
|
Chris@0
|
442 * @param hInstanceHandle : handle to instance
|
Chris@0
|
443 * @param **ppfInputBuffer : input audio data in the format [channels][samples]; audio samples have a range from -1.0...+1.0
|
Chris@0
|
444 * @param *ptFEAPI_TimeStamp : time stamps in seconds for every input, may be NULL
|
Chris@0
|
445 * @param iNumberOfFrames : number of frames in ppfInputBuffer
|
Chris@0
|
446 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
447 */
|
Chris@0
|
448 typedef FEAPI_Error_t (*FEAPI_ProcessPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
449 const FEAPI_Signal_t **ppfInputBuffer,
|
Chris@0
|
450 const FEAPI_TimeStamp_t *ptFEAPI_TimeStamp,
|
Chris@0
|
451 int iNumberOfFrames);
|
Chris@0
|
452
|
Chris@0
|
453 /*!
|
Chris@0
|
454 * Signals that no more input data is available (does the final processing).
|
Chris@0
|
455 *
|
Chris@0
|
456 * @param hInstanceHandle : handle to instance
|
Chris@0
|
457 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
458 */
|
Chris@0
|
459 typedef FEAPI_Error_t (*FEAPI_ProcessPluginDone_t) (FEAPI_PluginInstance_t hInstanceHandle);
|
Chris@0
|
460
|
Chris@0
|
461 /*!
|
Chris@0
|
462 * Gets the number of results/features to be calculated.
|
Chris@0
|
463 *
|
Chris@0
|
464 * @param hInstanceHandle : handle to instance
|
Chris@0
|
465 * @return int : number of results
|
Chris@0
|
466 */
|
Chris@0
|
467 typedef int (*FEAPI_GetPluginNumOfResults_t) (FEAPI_PluginInstance_t hInstanceHandle);
|
Chris@0
|
468
|
Chris@0
|
469 /*!
|
Chris@0
|
470 * Gets information about one of the possible results/features.
|
Chris@0
|
471 *
|
Chris@0
|
472 * @param hInstanceHandle : handle to instance
|
Chris@0
|
473 * @param iResultIndex : index of the result (feature) the description is requested for, index ranges from 0...NumOfResults-1
|
Chris@0
|
474 * @param *pstResultDescription : the requested description will be copied to this structure
|
Chris@0
|
475 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
476 */
|
Chris@0
|
477 typedef FEAPI_Error_t (*FEAPI_GetPluginResultDescription_t) ( FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
478 int iResultIndex,
|
Chris@0
|
479 FEAPI_SignalDescription_t *pstResultDescription);
|
Chris@0
|
480
|
Chris@0
|
481 /*!
|
Chris@0
|
482 * Gets the size of one result in FEAPI_Signal_t values (4 bytes per value).
|
Chris@0
|
483 *
|
Chris@0
|
484 * @param hInstanceHandle : handle to instance
|
Chris@0
|
485 * @param iResultIndex : index of the result/feature the size is requested for, index ranges from 0...NumOfResults-1
|
Chris@0
|
486 * @return int : size of result in FEAPI_Signal_t values (4 bytes per value)
|
Chris@0
|
487 */
|
Chris@0
|
488 typedef int (*FEAPI_GetPluginSizeOfResult_t) (FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
489 int iResultIndex);
|
Chris@0
|
490
|
Chris@0
|
491 /*!
|
Chris@0
|
492 * Gets one result.
|
Chris@0
|
493 *
|
Chris@0
|
494 * @param hInstanceHandle : handle to instance
|
Chris@0
|
495 * @param iResultIndex : index of the requested result/feature, index ranges from 0...NumOfResults-1
|
Chris@0
|
496 * @param *pfResult : the result data is copied into this buffer
|
Chris@0
|
497 * @param *ptFEAPI_TimeStamp : the time stamp of the result
|
Chris@0
|
498 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
499 */
|
Chris@0
|
500 typedef FEAPI_Error_t (*FEAPI_GetPluginResult_t) ( FEAPI_PluginInstance_t hInstanceHandle,
|
Chris@0
|
501 int iResultIndex,
|
Chris@0
|
502 FEAPI_Signal_t *pfResult,
|
Chris@0
|
503 FEAPI_TimeStamp_t *ptFEAPI_TimeStamp);
|
Chris@0
|
504
|
Chris@0
|
505 /*!
|
Chris@0
|
506 * Gets the maximum latency of one result. Since the host buffer size may vary, this is only the
|
Chris@0
|
507 * *internal* latency.
|
Chris@0
|
508 *
|
Chris@0
|
509 * @param hInstanceHandle : handle to instance
|
Chris@0
|
510 * @param iResultIndex : index of the requested result (feature), index ranges from 0...NumOfResults-1
|
Chris@0
|
511 * @return int : number of samples (at audio input sample rate) which is required to calculate this result the first time (negative values are not allowed, 0 means undefined)
|
Chris@0
|
512 */
|
Chris@0
|
513 typedef int (*FEAPI_GetPluginResultLatency_t) (FEAPI_PluginInstance_t hInstanceHandle, int iResultIndex);
|
Chris@0
|
514
|
Chris@0
|
515 /*!
|
Chris@0
|
516 * Resets/clears all internal buffers and states, so that the plugin is in a state where it can start processing a new audio stream.
|
Chris@0
|
517 *
|
Chris@0
|
518 * @param hInstanceHandle : handle to instance
|
Chris@0
|
519 * @return FEAPI_Error_t : FEAPI_kNoError when no error
|
Chris@0
|
520 */
|
Chris@0
|
521 typedef FEAPI_Error_t (*FEAPI_ResetPlugin_t) (FEAPI_PluginInstance_t hInstanceHandle);
|
Chris@0
|
522
|
Chris@0
|
523 /** @} */
|
Chris@0
|
524
|
Chris@0
|
525
|
Chris@0
|
526 #ifdef __cplusplus
|
Chris@0
|
527 }
|
Chris@0
|
528 #endif
|
Chris@0
|
529
|
Chris@0
|
530
|
Chris@0
|
531 #endif // #if !defined(FEAPI_HEADER_INCLUDED)
|