From 6b9edd25849f0022c09014fb4cca49e29df74020 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 5 Oct 2011 23:18:37 +0000 Subject: Add preliminary time extension --- Doxyfile | 7 +-- ext/time.lv2/manifest.ttl | 9 ++++ ext/time.lv2/time.h | 128 ++++++++++++++++++++++++++++++++++++++++++++++ ext/time.lv2/time.ttl | 54 +++++++++++++++++++ 4 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 ext/time.lv2/manifest.ttl create mode 100644 ext/time.lv2/time.h create mode 100644 ext/time.lv2/time.ttl diff --git a/Doxyfile b/Doxyfile index 01b5104..d75ef34 100644 --- a/Doxyfile +++ b/Doxyfile @@ -567,8 +567,8 @@ WARN_LOGFILE = INPUT = \ doc/mainpage.dox \ core.lv2/lv2.h \ - ext/atom.lv2/atom.h \ ext/atom.lv2/atom-helpers.h \ + ext/atom.lv2/atom.h \ ext/contexts.lv2/contexts.h \ ext/data-access.lv2/data-access.h \ ext/dyn-manifest.lv2/dyn-manifest.h \ @@ -579,10 +579,11 @@ INPUT = \ ext/osc.lv2/osc-print.h \ ext/osc.lv2/osc.h \ ext/persist.lv2/persist.h \ - ext/string-port.lv2/string-port.h \ - ext/pui.lv2/pui.h \ ext/pui-event.lv2/pui-event.h \ ext/pui-gtk.lv2/pui-gtk.h \ + ext/pui.lv2/pui.h \ + ext/string-port.lv2/string-port.h \ + ext/time.lv2/time.h \ ext/uri-map.lv2/uri-map.h \ ext/uri-unmap.lv2/uri-unmap.h \ ext/urid.lv2/urid.h \ 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: . +@prefix rdfs: . + + + a lv2:Specification ; + lv2:minorVersion 0 ; + lv2:microVersion 0 ; + rdfs:seeAlso . + 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 + + 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 + . +*/ + +#ifndef LV2_TIME_H +#define LV2_TIME_H + +#include + +#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 +# +# 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: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . + + + a lv2:Specification ; + doap:name "LV2 Time" ; + doap:maintainer [ + a foaf:Person ; + foaf:name "David Robillard" ; + foaf:homepage ; + rdfs:seeAlso + ] ; + lv2:documentation """ +

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.

+""" . + +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.: +
+	 lv2:port [
+		a ev:EventPort ;
+		ev:supports time:Position
+	]
+
+""" . \ No newline at end of file -- cgit v1.2.1