<!-- Converted to DocBook/SGML by Kevin Conder -->
<refentry id="deltapx">
  <refmeta>
    <refentrytitle>deltapx</refentrytitle>
  </refmeta>

  <refnamediv>
    <refname>deltapx</refname>
    <refpurpose>
      Read to or write from a delay line with interpolation.
      <indexterm id="IndexDeltapx"><primary>deltapx</primary></indexterm>
    </refpurpose>
  </refnamediv>
  
  <refsect1>
    <title>Description</title>
    <para>
      <emphasis>deltapx</emphasis> is similar to <link linkend="deltapi"><citetitle>deltapi</citetitle></link> or <link linkend="deltap3"><citetitle>deltap3</citetitle></link>. However, it allows higher quality interpolation. This opcode can read from and write to a delayr/delayw delay line with interpolation. 
    </para>
  </refsect1>

  <refsect1>
    <title>Syntax</title>
    <synopsis>aout <command>deltapx</command> adel, iwsize</synopsis>
  </refsect1>

  <refsect1>
    <title>Initialization</title>
    <para>
      <emphasis>iwsize</emphasis> -- interpolation window size in samples. Allowed values are integer multiplies of 4 in the range 4 to 1024. iwsize = 4 uses cubic interpolation.  Increasing iwsize improves sound quality at the expense of CPU usage, and minimum delay time.
    </para>
  </refsect1>

  <refsect1>
    <title>Performance</title>
    <para>
      <emphasis>aout</emphasis> -- Output signal
    </para>

    <para>
      <emphasis>adel</emphasis> -- Delay time in seconds.
    </para>

    <para>
      <informalexample>
        <programlisting>
a1      delayr idlr
        deltapxw a2, adl1, iws1
a3      deltapx adl2, iws2
        deltapxw a4, adl3, iws3
        delayw a5
        </programlisting>
      </informalexample>
    </para>
 
    <para>
      Minimum and maximum delay times:

      <informalexample>
        <programlisting>
idlr &gt;= 1/kr                                Delay line length
 
adl1 &gt;= (iws1/2)/sr                         Write before read
adl1 &lt;= idlr - (1 + iws1/2)/sr              (allows shorter delays)
 
adl2 &gt;= 1/kr + (iws2/2)/sr                  Read time
adl2 &lt;= idlr - (1 + iws2/2)/sr
adl2 &gt;= adl1 + (iws1 + iws2) / (2*sr)
adl2 &gt;= 1/kr + adl3 + (iws2 + iws3) / (2*sr)
 
adl3 &gt;= (iws3/2)/sr                         Write after read
adl3 &lt;= idlr - (1 + iws3/2)/sr              (allows feedback)
        </programlisting>
      </informalexample>
    </para>

    <note>
      <title>Note</title>
      <para>
        Window sizes for opcodes other than deltapx are: deltap, deltapn: 1, deltapi: 2 (linear), deltap3: 4 (cubic)
      </para>
    </note>
  </refsect1>

  <refsect1>
    <title>Examples</title>
    <para>
      <informalexample>
        <programlisting>
a1      phasor 300.0
a1      =  a1 - 0.5
a_      delayr 1.0
adel    phasor 4.0
adel    =  sin (2.0 * 3.14159265 * adel) * 0.01 + 0.2
        deltapxw a1, adel, 32
adel    phasor 2.0
adel    =  sin (2.0 * 3.14159265 * adel) * 0.01 + 0.2
        deltapxw a1, adel, 32
adel    =  0.3
a2      deltapx adel, 32
a1      =  0
        delayw a1
 
        out a2 * 20000.0
        </programlisting>
      </informalexample>
    </para>
  </refsect1>

  <refsect1>
    <title>See Also</title>
    <para>
      <link linkend="deltapxw"><citetitle>deltapxw</citetitle></link>
    </para>
  </refsect1>

  <refsect1>
    <title>Credits</title>
    <para>
      <simplelist>
        <member>Author: &nameistvan;</member>
        <member>August 2001</member>
      </simplelist>
    </para>

    <para>New in version 4.13</para>
  </refsect1>
</refentry>
