SampleType » History » Version 26
Chris Cannam, 2014-02-10 02:28 PM
1 | 1 | Chris Cannam | h1. Output Sample Type and Sample Rate |
---|---|---|---|
2 | 1 | Chris Cannam | |
3 | 15 | Chris Cannam | {{>toc}} |
4 | 15 | Chris Cannam | |
5 | 12 | Chris Cannam | A Vamp plugin receives audio and produces a series of descriptive feature structures. |
6 | 1 | Chris Cannam | |
7 | 12 | Chris Cannam | The audio input is provided as a series of fixed-length sample blocks, equally spaced in time, provided to successive calls to the plugin's @process@ function. The plugin may return any number of features from each @process@ call, and may also return any number of features from @getRemainingFeatures@ after all the audio has been received. |
8 | 11 | Chris Cannam | |
9 | 11 | Chris Cannam | Features are each associated with a particular output of the plugin. The plugin declares that each output has certain properties, which constrain the sort of feature data the host can expect to see. (See diagram.) |
10 | 10 | Chris Cannam | |
11 | 7 | Chris Cannam | !/attachments/download/980/feature-structures-20pc.png! |
12 | 9 | Chris Cannam | |
13 | 22 | Chris Cannam | A feature may or may not have a timestamp (as well as, optionally, a duration). Whether a timestamp is needed -- and, if it is provided, what it means -- are determined by the @sampleType@ and @sampleRate@ properties of the output on which the feature is returned. |
14 | 7 | Chris Cannam | |
15 | 8 | Chris Cannam | h2. SampleType |
16 | 1 | Chris Cannam | |
17 | 22 | Chris Cannam | A plugin output's @sampleType@ property may be either @OneSamplePerStep@, @FixedSampleRate@, or @VariableSampleRate@. Here's what they mean. |
18 | 8 | Chris Cannam | |
19 | 1 | Chris Cannam | h3. OneSamplePerStep |
20 | 1 | Chris Cannam | |
21 | 23 | Chris Cannam | This is the simplest option. |
22 | 1 | Chris Cannam | |
23 | 23 | Chris Cannam | If an output is declared as having a @sampleType@ of @OneSamplePerStep@, then any features returned from a @process@ call are assumed to match up with the audio block provided to that @process@ call. |
24 | 23 | Chris Cannam | |
25 | 24 | Chris Cannam | The @sampleRate@ and @hasDuration@ output properties are ignored for outputs of this type. |
26 | 23 | Chris Cannam | |
27 | 14 | Chris Cannam | h4. What this means |
28 | 1 | Chris Cannam | |
29 | 14 | Chris Cannam | For any features returned through an output declared with @OneSamplePerStep@ type, |
30 | 14 | Chris Cannam | |
31 | 24 | Chris Cannam | * The plugin _should not_ set timestamps on these features and _should_ set their @hasTimestamp@ property to @false@; |
32 | 24 | Chris Cannam | * The plugin _should not_ set durations on these features and _should_ set their @hasDuration@ property to @false@; |
33 | 24 | Chris Cannam | * If the plugin does set either timestamps or durations, the host _must_ ignore them; |
34 | 1 | Chris Cannam | * The host _must_ treat all such features returned from a given @process@ call as if they had the same timestamp as it passed to that @process@ call; |
35 | 1 | Chris Cannam | * The host _must_ treat all such features returned from @getRemainingFeatures@ as if they were immediately following the final @process@ block (i.e. with the same time as the next equally-spaced @process@ block would have had if the input had not ended); |
36 | 22 | Chris Cannam | * The host _must_ treat all such features has having duration equal to the spacing between process blocks. |
37 | 22 | Chris Cannam | |
38 | 14 | Chris Cannam | h4. Examples |
39 | 14 | Chris Cannam | |
40 | 17 | Chris Cannam | @OneSamplePerStep@ is most often used for simple measurements and visualisations, in which some internal calculation is updated on each process call and a new result returned. For example: envelope trackers; power calculations; spectrograms. These outputs are typically visualised using line graphs or colour matrix plots. |
41 | 14 | Chris Cannam | |
42 | 14 | Chris Cannam | @OneSamplePerStep@ is often used for intermediate results calculated during processing of a more sophisticated feature. For example, a beat tracker might have an auxiliary output with @OneSamplePerStep@ type returning its internal onset detection function value. |
43 | 20 | Chris Cannam | |
44 | 20 | Chris Cannam | h3. VariableSampleRate |
45 | 1 | Chris Cannam | |
46 | 21 | Chris Cannam | If the @OneSamplePerStep@ output type essentially means that the plugin leaves all time calculations up to the host, @VariableSampleRate@ is the opposite. |
47 | 1 | Chris Cannam | |
48 | 22 | Chris Cannam | If an output is declared as having a @SampleType@ of @VariableSampleRate@, the features returned through it will have timestamps set by the plugin, and they won't necessarily have any relationship to the process block timestamps provided by the host. |
49 | 1 | Chris Cannam | |
50 | 1 | Chris Cannam | h4. What this means |
51 | 1 | Chris Cannam | |
52 | 25 | Chris Cannam | h5. Timestamps |
53 | 25 | Chris Cannam | |
54 | 1 | Chris Cannam | For any features returned through an output declared with @VariableSampleRate@ type, |
55 | 24 | Chris Cannam | |
56 | 24 | Chris Cannam | * The plugin _must_ set timestamps on these features and _must_ set their @hasTimestamp@ property to @true@; |
57 | 1 | Chris Cannam | * The host _must_ use the timestamps of such features as indicating their start times, independent of process block timing; |
58 | 25 | Chris Cannam | |
59 | 25 | Chris Cannam | h5. Durations |
60 | 25 | Chris Cannam | |
61 | 26 | Chris Cannam | Features returned through @VariableSampleRate@ outputs may optionally have durations. |
62 | 26 | Chris Cannam | |
63 | 26 | Chris Cannam | If the output's @hasDuration@ property is @true@, then |
64 | 26 | Chris Cannam | |
65 | 26 | Chris Cannam | * The plugin _may_ set the @hasDuration@ property of such features to @true@ and, if it does so, _must_ also set their durations; |
66 | 26 | Chris Cannam | * If a feature's @hasDuration@ property is true, then the host _must_ use the feature's duration rather than treating it as a point value. |
67 | 26 | Chris Cannam | |
68 | 26 | Chris Cannam | If the output's @hasDuration@ property is @false@, then the host _must_ ignore the @hasDuration@ and @duration@ properties of the features and treat them as point values instead. |
69 | 25 | Chris Cannam | |
70 | 22 | Chris Cannam | |
71 | 22 | Chris Cannam | h4. Examples |
72 | 22 | Chris Cannam | |
73 | 1 | Chris Cannam | h3. FixedSampleRate |
74 | 1 | Chris Cannam | |
75 | 1 | Chris Cannam | If an output is declared as having a @SampleType@ of @FixedSampleRate@ |
76 | 22 | Chris Cannam | |
77 | 22 | Chris Cannam | h4. What this means |
78 | 22 | Chris Cannam | |
79 | 22 | Chris Cannam | h4. Examples |