summaryrefslogtreecommitdiff
path: root/muse2/doc/html/split/developer_docs/node7.html
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/doc/html/split/developer_docs/node7.html')
-rw-r--r--muse2/doc/html/split/developer_docs/node7.html234
1 files changed, 234 insertions, 0 deletions
diff --git a/muse2/doc/html/split/developer_docs/node7.html b/muse2/doc/html/split/developer_docs/node7.html
new file mode 100644
index 00000000..100e7430
--- /dev/null
+++ b/muse2/doc/html/split/developer_docs/node7.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2008 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Automation</TITLE>
+<META NAME="description" CONTENT="Automation">
+<META NAME="keywords" CONTENT="developer_docs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2008">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="developer_docs.css">
+
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="node6.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<A NAME="tex2html148"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="/usr/share/latex2html/icons/next.png"></A>
+<A NAME="tex2html144"
+ HREF="node6.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="/usr/share/latex2html/icons/up.png"></A>
+<A NAME="tex2html140"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="/usr/share/latex2html/icons/prev.png"></A>
+<A NAME="tex2html146"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="/usr/share/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html149"
+ HREF="node8.html">Feature requests</A>
+<B> Up:</B> <A NAME="tex2html145"
+ HREF="node6.html">Design decisions</A>
+<B> Previous:</B> <A NAME="tex2html141"
+ HREF="node6.html">Design decisions</A>
+ &nbsp; <B> <A NAME="tex2html147"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL CLASS="ChildLinks">
+<LI><UL>
+<LI><UL>
+<LI><A NAME="tex2html150"
+ HREF="node7.html#SECTION00310010000000000000">Maintaining a slave control list</A>
+<LI><A NAME="tex2html151"
+ HREF="node7.html#SECTION00310020000000000000">Holding iterators</A>
+<LI><A NAME="tex2html152"
+ HREF="node7.html#SECTION00310030000000000000">Just use the current data access functions</A>
+</UL></UL></UL>
+<!--End of Table of Child-Links-->
+<HR>
+
+<H1><A NAME="SECTION00310000000000000000">
+Automation</A>
+</H1>
+As of revision 1490, automation is handled in two ways: User-generated
+(live) automation data (generated by the user moving sliders while playing)
+is fed into <TT>fterfirstP`P=95 _ `P=58 :
+ `P&gt;64
+ `P&lt;91 PPP
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>luginI::_controlFifo</TT>. Automation data is kept
+in <TT>fterfirstA`A=95 _ `A=58 :
+ `A&gt;64
+ `A&lt;91 AAA
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>udioTrack::_controller</TT>, which is a <TT>fterfirstC`C=95 _ `C=58 :
+ `C&gt;64
+ `C&lt;91 CCC
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>trlListList</TT>,
+that is, a list of <TT>fterfirstC`C=95 _ `C=58 :
+ `C&gt;64
+ `C&lt;91 CCC
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>trlList</TT>s, that is, a list of lists of
+controller-objects which hold the control points of the automation graph.
+The <TT>fterfirstC`C=95 _ `C=58 :
+ `C&gt;64
+ `C&lt;91 CCC
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>trlList</TT> also stores whether the list is meant discrete
+(a new control point results in a value-jump) or continous (a new control
+point results in the value slowly sloping to the new value).
+
+<P>
+While <TT>fterfirstP`P=95 _ `P=58 :
+ `P&gt;64
+ `P&lt;91 PPP
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>luginI::_controlFifo</TT> can be queried very quickly and
+thus is processed with a very high resolution (only limited by the
+minimum control period setting), the automation value are expensive to
+query, and are only processed once in an audio <SPAN CLASS="textit">driver</SPAN> period.
+This might lead to noticeable jumps in value.
+
+<P>
+This could possibly be solved in two ways:
+
+<H4><A NAME="SECTION00310010000000000000">
+Maintaining a slave control list</A>
+</H4>
+This approach would maintain a fully redundant slave control list,
+similar to <TT>fterfirstP`P=95 _ `P=58 :
+ `P&gt;64
+ `P&lt;91 PPP
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>luginI::_controlFifo</TT>. This list must be updated
+every time any automation-related thing is changed, and shall contain
+every controller change as a tuple of controller number and value.
+This could be processed in the same loop as <TT>fterfirstP`P=95 _ `P=58 :
+ `P&gt;64
+ `P&lt;91 PPP
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>luginI::_controlFifo</TT>,
+making it comfortable to implement; furthermore, it allows to cleanly
+offer automation-settings at other places in future (such as storing
+automation data in parts or similar).
+
+<P>
+
+<H4><A NAME="SECTION00310020000000000000">
+Holding iterators</A>
+</H4>
+We also could hold a list of iterators of the single <TT>fterfirstC`C=95 _ `C=58 :
+ `C&gt;64
+ `C&lt;91 CCC
+
+ <`<=95 _ `<=58 :
+ `<&gt;64
+ `<&lt;91 <<<
+
+ c@amelhyph<269>>trlList</TT>s.
+This would also cause low CPU usage, because usually, the iterators only
+need to be incremented once. However, it is pretty complex to implement,
+because the iterators may become totally wrong (because of a seek in the
+song), and we must iterate through a whole list of iterators.
+
+<P>
+
+<H4><A NAME="SECTION00310030000000000000">
+Just use the current data access functions</A>
+</H4>
+By just using the current functions for accessing automation data,
+we might get a quick-and-dirty solution, which however wastes way too
+much CPU ressources. This is because on <SPAN CLASS="textit">every single frame</SPAN>, we
+need to do a binary search on multiple controller lists.
+
+<P>
+
+<DIV CLASS="navigation"><HR>
+<!--Navigation Panel-->
+<A NAME="tex2html148"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="/usr/share/latex2html/icons/next.png"></A>
+<A NAME="tex2html144"
+ HREF="node6.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="/usr/share/latex2html/icons/up.png"></A>
+<A NAME="tex2html140"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="/usr/share/latex2html/icons/prev.png"></A>
+<A NAME="tex2html146"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="/usr/share/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html149"
+ HREF="node8.html">Feature requests</A>
+<B> Up:</B> <A NAME="tex2html145"
+ HREF="node6.html">Design decisions</A>
+<B> Previous:</B> <A NAME="tex2html141"
+ HREF="node6.html">Design decisions</A>
+ &nbsp; <B> <A NAME="tex2html147"
+ HREF="node1.html">Contents</A></B> </DIV>
+<!--End of Navigation Panel-->
+
+</BODY>
+</HTML>