<!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> <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>64 `P<91 PPP <`<=95 _ `<=58 : `<>64 `<<91 <<< c@amelhyph<269>>luginI::_controlFifo</TT>. Automation data is kept in <TT>fterfirstA`A=95 _ `A=58 : `A>64 `A<91 AAA <`<=95 _ `<=58 : `<>64 `<<91 <<< c@amelhyph<269>>udioTrack::_controller</TT>, which is a <TT>fterfirstC`C=95 _ `C=58 : `C>64 `C<91 CCC <`<=95 _ `<=58 : `<>64 `<<91 <<< c@amelhyph<269>>trlListList</TT>, that is, a list of <TT>fterfirstC`C=95 _ `C=58 : `C>64 `C<91 CCC <`<=95 _ `<=58 : `<>64 `<<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>64 `C<91 CCC <`<=95 _ `<=58 : `<>64 `<<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>64 `P<91 PPP <`<=95 _ `<=58 : `<>64 `<<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>64 `P<91 PPP <`<=95 _ `<=58 : `<>64 `<<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>64 `P<91 PPP <`<=95 _ `<=58 : `<>64 `<<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>64 `C<91 CCC <`<=95 _ `<=58 : `<>64 `<<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> <B> <A NAME="tex2html147" HREF="node1.html">Contents</A></B> </DIV> <!--End of Navigation Panel--> </BODY> </HTML>