<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ftconv</title> <link rel="stylesheet" type="text/css" href="csound.css" /> <link rel="stylesheet" type="text/css" href="syntax-highlighting.css" /> <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /> <link rel="home" href="index.html" title="The Canonical Csound Reference Manual" /> <link rel="up" href="OpcodesTop.html" title="Orchestra Opcodes and Operators" /> <link rel="prev" href="ftchnls.html" title="ftchnls" /> <link rel="next" href="ftcps.html" title="ftcps" /> </head> <body> <div class="navheader"> <table width="100%" summary="Navigation header"> <tr> <th colspan="3" align="center">ftconv</th> </tr> <tr> <td width="20%" align="left"><a accesskey="p" href="ftchnls.html">Prev</a> </td> <th width="60%" align="center">Orchestra Opcodes and Operators</th> <td width="20%" align="right"> <a accesskey="n" href="ftcps.html">Next</a></td> </tr> </table> <hr /> </div> <div class="refentry"> <a id="ftconv"></a> <div class="titlepage"></div> <a id="IndexFtconv" class="indexterm"></a> <div class="refnamediv"> <h2> <span class="refentrytitle">ftconv</span> </h2> <p>ftconv — Low latency multichannel convolution, using a function table as impulse response source. </p> </div> <div class="refsect1"> <a id="idm281472928878904"></a> <h2>Description</h2> <p> Low latency multichannel convolution, using a function table as impulse response source. The algorithm is to split the impulse response to partitions of length determined by the <span class="emphasis"><em>iplen</em></span> parameter, and delay and mix partitions so that the original, full length impulse response is reconstructed without gaps. The output delay (latency) is <span class="emphasis"><em>iplen</em></span> samples, and does not depend on the control rate, unlike in the case of other convolve opcodes. </p> </div> <div class="refsect1"> <a id="idm281472928874472"></a> <h2>Syntax</h2> <pre class="synopsis">a1[, a2[, a3[, ... a8]]] <span class="command"><strong>ftconv</strong></span> ain, ift, iplen[, iskipsamples \ [, iirlen[, iskipinit]]]</pre> </div> <div class="refsect1"> <a id="idm281472928872280"></a> <h2>Initialization</h2> <p> <span class="emphasis"><em>ift</em></span> -- source ftable number. The table is expected to contain interleaved multichannel audio data, with the number of channels equal to the number of output variables (a1, a2, etc.). An interleaved table can be created from a set of mono tables with <a class="link" href="GEN52.html" title="GEN52"><em class="citetitle">GEN52</em></a>. </p> <p> <span class="emphasis"><em>iplen</em></span> -- length of impulse response partitions, in sample frames; must be an integer power of two. Lower settings allow for shorter output delay, but will increase CPU usage. </p> <p> <span class="emphasis"><em>iskipsamples</em></span> (optional, defaults to zero) -- number of sample frames to skip at the beginning of the table. Useful for reverb responses that have some amount of initial delay. If this delay is not less than <span class="emphasis"><em>iplen</em></span> samples, then setting <span class="emphasis"><em>iskipsamples</em></span> to the same value as <span class="emphasis"><em>iplen</em></span> will eliminate any additional latency by <span class="emphasis"><em>ftconv</em></span>. </p> <p> <span class="emphasis"><em>iirlen</em></span> (optional) -- total length of impulse response, in sample frames. The default is to use all table data (not including the guard point). </p> <p> <span class="emphasis"><em>iskipinit</em></span> (optional, defaults to zero) -- if set to any non-zero value, skip initialization whenever possible without causing an error. </p> </div> <div class="refsect1"> <a id="idm281472928800520"></a> <h2>Performance</h2> <p> <span class="emphasis"><em>ain</em></span> -- input signal. </p> <p> <span class="emphasis"><em>a1 ... a8</em></span> -- output signal(s). </p> </div> <div class="refsect1"> <a id="idm281472928798056"></a> <h2>Example</h2> <p> Here is an example of the ftconv opcode. It uses the file <a class="ulink" href="examples/ftconv.csd" target="_top"><em class="citetitle">ftconv.csd</em></a>. </p> <div class="example"> <a id="idm281472928796200"></a> <p class="title"> <strong>Example 355. Example of the ftconv opcode.</strong> </p> <div class="example-contents"> <p>See the sections <a class="link" href="UsingRealTime.html" title="Real-Time Audio"><em class="citetitle">Real-time Audio</em></a> and <a class="link" href="CommandFlags.html" title="Csound command line"><em class="citetitle">Command Line Flags</em></a> for more information on using command line flags.</p> <div class="refsect1"> <a id="idm281472759759384"></a> <pre class="programlisting"> <span class="nt"><CsoundSynthesizer></span> <span class="nt"><CsOptions></span> <span class="c1">; Select audio/midi flags here according to platform</span> <span class="c1">; Audio out Audio in</span> -odac -iadc <span class="c1">;;;RT audio I/O</span> <span class="c1">; For Non-realtime ouput leave only the line below:</span> <span class="c1">; -o ftconv.wav -W ;;; for file output any platform</span> <span class="nt"></CsOptions></span> <span class="nt"><CsInstruments></span> <span class="vg">sr</span> <span class="o">=</span> <span class="mi">48000</span> <span class="vg">ksmps</span> <span class="o">=</span> <span class="mi">32</span> <span class="vg">nchnls</span> <span class="o">=</span> <span class="mi">2</span> <span class="vg">0dbfs</span> <span class="o">=</span> <span class="mi">1</span> ga<span class="n">rvb</span> <span class="nb">init</span> <span class="mi">0</span> ga<span class="n">W</span> <span class="nb">init</span> <span class="mi">0</span> ga<span class="n">X</span> <span class="nb">init</span> <span class="mi">0</span> ga<span class="n">Y</span> <span class="nb">init</span> <span class="mi">0</span> i<span class="n">tmp</span> <span class="nb">ftgen</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">64</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">13.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.50</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">2.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">16.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.35</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">9.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.35</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">12.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.35</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> \ <span class="mi">1</span><span class="p">,</span> <span class="mf">8.000</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">,</span> <span class="mf">0.85</span><span class="p">,</span> <span class="mf">20000.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.35</span><span class="p">,</span> <span class="mi">2</span> i<span class="n">tmp</span> <span class="nb">ftgen</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">262144</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span> <span class="nb">spat3dt</span> <span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mf">0.005</span> i<span class="n">tmp</span> <span class="nb">ftgen</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">262144</span><span class="p">,</span> <span class="o">-</span><span class="mi">52</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span> <span class="kd">instr</span> <span class="nf">1</span> a<span class="n">1</span> <span class="nb">vco2</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">440</span><span class="p">,</span> <span class="mi">10</span> k<span class="n">frq</span> <span class="nb">port</span> <span class="mi">100</span><span class="p">,</span> <span class="mf">0.008</span><span class="p">,</span> <span class="mi">20000</span> a<span class="n">1</span> <span class="nb">butterlp</span> a<span class="n">1</span><span class="p">,</span> k<span class="n">frq</span> a<span class="n">2</span> <span class="nb">linseg</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.003</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">,</span> <span class="mf">0.005</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span> a<span class="n">1</span> <span class="o">=</span> a<span class="n">1</span> <span class="o">*</span> a<span class="n">2</span> <span class="o">*</span> <span class="mi">2</span> <span class="nb">denorm</span> a<span class="n">1</span> <span class="nb">vincr</span> ga<span class="n">rvb</span><span class="p">,</span> a<span class="n">1</span> a<span class="n">w</span><span class="p">,</span> a<span class="n">x</span><span class="p">,</span> a<span class="n">y</span><span class="p">,</span> a<span class="n">z</span> <span class="nb">spat3di</span> a<span class="n">1</span><span class="p">,</span> <span class="nb">p4</span><span class="p">,</span> <span class="nb">p5</span><span class="p">,</span> <span class="nb">p6</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span> <span class="nb">vincr</span> ga<span class="n">W</span><span class="p">,</span> a<span class="n">w</span> <span class="nb">vincr</span> ga<span class="n">X</span><span class="p">,</span> a<span class="n">x</span> <span class="nb">vincr</span> ga<span class="n">Y</span><span class="p">,</span> a<span class="n">y</span> <span class="kd">endin</span> <span class="kd">instr</span> <span class="nf">2</span> <span class="nb">denorm</span> ga<span class="n">rvb</span> <span class="c1">; skip as many samples as possible without truncating the IR</span> a<span class="n">rW</span><span class="p">,</span> a<span class="n">rX</span><span class="p">,</span> a<span class="n">rY</span> <span class="nb">ftconv</span> ga<span class="n">rvb</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2048</span><span class="p">,</span> <span class="mi">2048</span><span class="p">,</span> <span class="p">(</span><span class="mi">65536</span> <span class="o">-</span> <span class="mi">2048</span><span class="p">)</span> a<span class="n">W</span> <span class="o">=</span> ga<span class="n">W</span> <span class="o">+</span> a<span class="n">rW</span> a<span class="n">X</span> <span class="o">=</span> ga<span class="n">X</span> <span class="o">+</span> a<span class="n">rX</span> a<span class="n">Y</span> <span class="o">=</span> ga<span class="n">Y</span> <span class="o">+</span> a<span class="n">rY</span> ga<span class="n">rvb</span> <span class="o">=</span> <span class="mi">0</span> ga<span class="n">W</span> <span class="o">=</span> <span class="mi">0</span> ga<span class="n">X</span> <span class="o">=</span> <span class="mi">0</span> ga<span class="n">Y</span> <span class="o">=</span> <span class="mi">0</span> a<span class="n">Wre</span><span class="p">,</span> a<span class="n">Wim</span> <span class="nb">hilbert</span> a<span class="n">W</span> a<span class="n">Xre</span><span class="p">,</span> a<span class="n">Xim</span> <span class="nb">hilbert</span> a<span class="n">X</span> a<span class="n">Yre</span><span class="p">,</span> a<span class="n">Yim</span> <span class="nb">hilbert</span> a<span class="n">Y</span> a<span class="n">WXr</span> <span class="o">=</span> <span class="mf">0.0928</span><span class="o">*</span>a<span class="n">Xre</span> <span class="o">+</span> <span class="mf">0.4699</span><span class="o">*</span>a<span class="n">Wre</span> a<span class="n">WXiYr</span> <span class="o">=</span> <span class="mf">0.2550</span><span class="o">*</span>a<span class="n">Xim</span> <span class="o">-</span> <span class="mf">0.1710</span><span class="o">*</span>a<span class="n">Wim</span> <span class="o">+</span> <span class="mf">0.3277</span><span class="o">*</span>a<span class="n">Yre</span> a<span class="n">L</span> <span class="o">=</span> a<span class="n">WXr</span> <span class="o">+</span> a<span class="n">WXiYr</span> a<span class="n">R</span> <span class="o">=</span> a<span class="n">WXr</span> <span class="o">-</span> a<span class="n">WXiYr</span> <span class="nb">outs</span> a<span class="n">L</span><span class="p">,</span> a<span class="n">R</span> <span class="kd">endin</span> <span class="nt"></CsInstruments></span> <span class="nt"><CsScore></span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">0</span> <span class="mf">0.5</span> <span class="mf">0.0</span> <span class="mf">2.0</span> <span class="o">-</span><span class="mf">0.8</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">1</span> <span class="mf">0.5</span> <span class="mf">1.4</span> <span class="mf">1.4</span> <span class="o">-</span><span class="mf">0.6</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mf">0.5</span> <span class="mf">2.0</span> <span class="mf">0.0</span> <span class="o">-</span><span class="mf">0.4</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mf">0.5</span> <span class="mf">1.4</span> <span class="o">-</span><span class="mf">1.4</span> <span class="o">-</span><span class="mf">0.2</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">4</span> <span class="mf">0.5</span> <span class="mf">0.0</span> <span class="o">-</span><span class="mf">2.0</span> <span class="mf">0.0</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">5</span> <span class="mf">0.5</span> <span class="o">-</span><span class="mf">1.4</span> <span class="o">-</span><span class="mf">1.4</span> <span class="mf">0.2</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">6</span> <span class="mf">0.5</span> <span class="o">-</span><span class="mf">2.0</span> <span class="mf">0.0</span> <span class="mf">0.4</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">7</span> <span class="mf">0.5</span> <span class="o">-</span><span class="mf">1.4</span> <span class="mf">1.4</span> <span class="mf">0.6</span> <span class="nb">i</span> <span class="mi">1</span> <span class="mi">8</span> <span class="mf">0.5</span> <span class="mf">0.0</span> <span class="mf">2.0</span> <span class="mf">0.8</span> <span class="nb">i</span> <span class="mi">2</span> <span class="mi">0</span> <span class="mi">10</span> <span class="nb">e</span> <span class="nt"></CsScore></span> <span class="nt"></CsoundSynthesizer></span> </pre> </div> </div> </div> <p><br class="example-break" /> </p> </div> <div class="refsect1"> <a id="idm281472928792008"></a> <h2>See also</h2> <p> <a class="link" href="pconvolve.html" title="pconvolve"><em class="citetitle">pconvolve</em></a>, <a class="link" href="convolve.html" title="convolve"><em class="citetitle">convolve</em></a>, <a class="link" href="dconv.html" title="dconv"><em class="citetitle">dconv</em></a>. </p> </div> <div class="refsect1"> <a id="idm281472928788008"></a> <h2>Credits</h2> <p> </p> <table border="0" summary="Simple list" class="simplelist"> <tr> <td>Author: Istvan Varga</td> </tr> <tr> <td>2005</td> </tr> </table> <p> </p> </div> </div> <div class="navfooter"> <hr /> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"><a accesskey="p" href="ftchnls.html">Prev</a> </td> <td width="20%" align="center"> <a accesskey="u" href="OpcodesTop.html">Up</a> </td> <td width="40%" align="right"> <a accesskey="n" href="ftcps.html">Next</a></td> </tr> <tr> <td width="40%" align="left" valign="top">ftchnls </td> <td width="20%" align="center"> <a accesskey="h" href="index.html">Home</a> </td> <td width="40%" align="right" valign="top"> ftcps</td> </tr> </table> </div> </body> </html>