aboutsummaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-10-05 23:18:37 +0000
committerDavid Robillard <d@drobilla.net>2011-10-05 23:18:37 +0000
commit6b9edd25849f0022c09014fb4cca49e29df74020 (patch)
treee04f711af348716c2c869c8a76f235f1a7acf0ac /ext
parente27a9bb32ce311865264d00214e50f83e7078720 (diff)
downloadlv2-6b9edd25849f0022c09014fb4cca49e29df74020.tar.xz
Add preliminary time extension
Diffstat (limited to 'ext')
-rw-r--r--ext/time.lv2/manifest.ttl9
-rw-r--r--ext/time.lv2/time.h128
-rw-r--r--ext/time.lv2/time.ttl54
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