diff options
author | David Robillard <d@drobilla.net> | 2011-10-05 23:18:37 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-10-05 23:18:37 +0000 |
commit | 6b9edd25849f0022c09014fb4cca49e29df74020 (patch) | |
tree | e04f711af348716c2c869c8a76f235f1a7acf0ac /ext | |
parent | e27a9bb32ce311865264d00214e50f83e7078720 (diff) | |
download | lv2-6b9edd25849f0022c09014fb4cca49e29df74020.tar.xz |
Add preliminary time extension
Diffstat (limited to 'ext')
-rw-r--r-- | ext/time.lv2/manifest.ttl | 9 | ||||
-rw-r--r-- | ext/time.lv2/time.h | 128 | ||||
-rw-r--r-- | ext/time.lv2/time.ttl | 54 |
3 files changed, 191 insertions, 0 deletions
diff --git a/ext/time.lv2/manifest.ttl b/ext/time.lv2/manifest.ttl new file mode 100644 index 0000000..6057be7 --- /dev/null +++ b/ext/time.lv2/manifest.ttl @@ -0,0 +1,9 @@ +@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . + +<http://lv2plug.in/ns/ext/time> + a lv2:Specification ; + lv2:minorVersion 0 ; + lv2:microVersion 0 ; + rdfs:seeAlso <time.ttl> . + diff --git a/ext/time.lv2/time.h b/ext/time.lv2/time.h new file mode 100644 index 0000000..4ad844e --- /dev/null +++ b/ext/time.lv2/time.h @@ -0,0 +1,128 @@ +/* + Copyright 2011 David Robillard <http://drobilla.net> + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file time.h C header for the LV2 Time extension + <http://lv2plug.in/ns/ext/time>. +*/ + +#ifndef LV2_TIME_H +#define LV2_TIME_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Time states. +*/ +typedef enum { + LV2_TIME_STOPPED = 0, /**< Time halted */ + LV2_TIME_ROLLING = 1, /**< Time playing */ + LV2_TIME_LOOPING = 2, /**< For OLD_TIME, now ignored */ + LV2_TIME_STARTING = 3 /**< Waiting for sync ready */ +} LV2_Time_State; + +/** + Bits indicating which fields of LV2_Time_Position are valid. +*/ +typedef enum { + LV2_TIME_BBT = 1 /**< Bar, Beat, Tick */ +} LV2_Time_Fields; + +/** + Description of a position and/or tempo. + + This struct is used as the payload of an event to notify the plugin about + time state, such as position and tempo. +*/ +typedef struct { + /** + @{ + @name Mandatory Fields + */ + + /** + Frame number on the timeline. + */ + uint64_t frame; + + /** + Bit field of LV2_Time_Fields values indicating which fields + of this struct are valid. + */ + uint32_t valid; + + /** + @} + @{ + @name LV2_TIME_BBT fields + These fields are valid iff the LV2_TIME_BBT bit is set in @ref valid. + */ + + /** + Current bar. + The first bar is number 0 (but should be represented in a UI as bar 1). + */ + int64_t bar; + + /** + Beat within the current bar. + The first beat is number 0. + Always <= @ref beats_per_bar. + */ + int32_t beat; + + /** + Tick within the current beat. + The first tick is number 0. + Always <= @ref ticks_per_beat. + */ + int32_t tick; + + /** + Number of beats per bar (top of time signature). + */ + int32_t beats_per_bar; + + /** + Type of note that counts as one beat (bottom of time signature). + */ + int32_t beat_type; + + /** + Number of ticks per beat. + Typically this is a large integer with many even divisors. + */ + int32_t ticks_per_beat; + + /** + Current tempo, in beats per minute. + */ + double beats_per_minute; + + /** + @} + */ +} LV2_Time_Position; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* LV2_TIME_H */ diff --git a/ext/time.lv2/time.ttl b/ext/time.lv2/time.ttl new file mode 100644 index 0000000..13a7028 --- /dev/null +++ b/ext/time.lv2/time.ttl @@ -0,0 +1,54 @@ +# LV2 Time Extension +# Copyright 2011 David Robillard <d@drobilla.net> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +@prefix time: <http://lv2plug.in/ns/ext/time#> . +@prefix doap: <http://usefulinc.com/ns/doap#> . +@prefix foaf: <http://xmlns.com/foaf/0.1/> . +@prefix lv2: <http://lv2plug.in/ns/lv2core#> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . + +<http://lv2plug.in/ns/ext/time> + a lv2:Specification ; + doap:name "LV2 Time" ; + doap:maintainer [ + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:homepage <http://drobilla.net/> ; + rdfs:seeAlso <http://drobilla.net/drobilla.rdf> + ] ; + lv2:documentation """ +<p>This extension defines a structure type, LV2_Time_Position, which +describes a tempo and position along a timeline. This can be used as +an event payload by the host to notify plugins about the current +tempo and position.</p> +""" . + +time:Position + a rdfs:Class ; + rdfs:label "LV2 time position" ; + lv2:documentation """ +Type for an LV2_Time_Position struct. This can be mapped to an integer +and used as the type field of an event to indicate that the event payload +is an LV2_Time_Positon struct. Plugins can indicate that a port supports +time information using the ev:supports predicate, e.g.: +<pre> + <plugin> lv2:port [ + a ev:EventPort ; + ev:supports time:Position + ] +</pre> +""" .
\ No newline at end of file |