RythmGame/SimpleGame/fmodstudioapi20307linux/doc/FMOD API User Manual/plugin-api-output.html
2025-06-10 17:40:16 +02:00

1164 lines
84 KiB
HTML

<html>
<head>
<title>Plug-in API Reference | Output</title>
<link rel="stylesheet" href="style/docs.css">
<link rel="stylesheet" href="style/code_highlight.css">
<script type="text/javascript" src="scripts/language-selector.js"></script></head>
<body>
<div class="docs-body">
<div class="manual-toc">
<p>FMOD Engine User Manual 2.03</p>
<ul>
<li><a href="welcome.html">Welcome to the FMOD Engine</a></li>
<li><a href="studio-guide.html">Studio API Guide</a></li>
<li><a href="core-guide.html">Core API Guide</a></li>
<li><a href="platforms.html">Platform Details</a></li>
<li><a href="white-papers.html">White Papers</a></li>
<li><a href="studio-api.html">Studio API Reference</a></li>
<li><a href="core-api.html">Core API Reference</a></li>
<li><a href="fsbank-api.html">FSBank API Reference</a></li>
<li class="manual-current-chapter manual-inactive-chapter"><a href="plugin-api.html">Plug-in API Reference</a><ul class="subchapters"><li><a href="plugin-api-codec.html">Codec</a></li><li><a href="plugin-api-dsp.html">DSP</a></li><li class="manual-current-chapter manual-active-chapter"><a href="plugin-api-output.html">Output</a></li></ul></li>
<li><a href="effects-reference.html">Effects Reference</a></li>
<li><a href="troubleshooting.html">Troubleshooting</a></li>
<li><a href="glossary.html">Glossary</a></li>
</ul>
</div>
<div class="manual-content api">
<h1>9. Plug-in API Reference | Output</h1>
<p>An interface that manages output plug-ins.</p>
<p><strong>Object 3D:</strong></p>
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_object3dinfo" title="Output 3D Object Info.">FMOD_OUTPUT_OBJECT3DINFO</a> Output 3D Object Info.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback" title="Output 3D Object alloc callback.">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a> Output 3D Object alloc callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_object3dfree_callback" title="Output 3D Object free callback.">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a> Output 3D Object free callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_object3dgetinfo_callback" title="Output 3D Object get info callback.">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a> Output 3D Object get info callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback" title="Output 3D Object update callback.">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a> Output 3D Object update callback.</span></li>
</ul>
<p><strong>General:</strong></p>
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_description" title="Output description.">FMOD_OUTPUT_DESCRIPTION</a> Output description.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_state" title="Output object state passed into every callback provides access to plug-in developers data and system functionality.">FMOD_OUTPUT_STATE</a> Output object state passed into every callback provides access to plug-in developers data and system functionality.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_close_callback" title="Output close callback.">FMOD_OUTPUT_CLOSE_CALLBACK</a> Output close callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_closeport_callback" title="Output close port callback.">FMOD_OUTPUT_CLOSEPORT_CALLBACK</a> Output close port callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_devicelistchanged_callback" title="Output device list change callback.">FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK</a> Output device list change callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_getdriverinfo_callback" title="Output get driver info callback.">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</a> Output get driver info callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_gethandle_callback" title="Output get output handle callback.">FMOD_OUTPUT_GETHANDLE_CALLBACK</a> Output get output handle callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_getnumdrivers_callback" title="Output get number of drivers callback.">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</a> Output get number of drivers callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_init_callback" title="Output initialization callback.">FMOD_OUTPUT_INIT_CALLBACK</a> Output initialization callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_mixer_callback" title="Output mixer callback.">FMOD_OUTPUT_MIXER_CALLBACK</a> Output mixer callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_openport_callback" title="Output open port callback.">FMOD_OUTPUT_OPENPORT_CALLBACK</a> Output open port callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_start_callback" title="Output start callback.">FMOD_OUTPUT_START_CALLBACK</a> Output start callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_stop_callback" title="Output stop callback.">FMOD_OUTPUT_STOP_CALLBACK</a> Output stop callback.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_update_callback" title="Output update callback.">FMOD_OUTPUT_UPDATE_CALLBACK</a> Output update callback.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_alloc_func" title="Output allocate memory function.">FMOD_OUTPUT_ALLOC_FUNC</a> Output allocate memory function.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_copyport_func" title="Output copy port function.">FMOD_OUTPUT_COPYPORT_FUNC</a> Output copy port function.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_free_func" title="Output free memory function.">FMOD_OUTPUT_FREE_FUNC</a> Output free memory function.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_log_func" title="Output log function.">FMOD_OUTPUT_LOG_FUNC</a> Output log function.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func" title="Output read from mixer function.">FMOD_OUTPUT_READFROMMIXER_FUNC</a> Output read from mixer function.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_requestreset_func" title="Output request reset function.">FMOD_OUTPUT_REQUESTRESET_FUNC</a> Output request reset function.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_method" title="Output method used to interact with the mixer.">FMOD_OUTPUT_METHOD</a> Output method used to interact with the mixer.</span></li>
<li><span><a class="apilink" href="plugin-api-output.html#fmod_output_plugin_version" title="The output plug-in API version the plug-in was created with.">FMOD_OUTPUT_PLUGIN_VERSION</a> The output plug-in API version the plug-in was created with.</span></li>
</ul>
<h2 api="callback" id="fmod_output_alloc_func"><a href="#fmod_output_alloc_func">FMOD_OUTPUT_ALLOC_FUNC</a></h2>
<p>Output allocate memory function.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="kt">void</span> <span class="o">*</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_ALLOC_FUNC</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">size</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">align</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">line</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>size</dt>
<dd>
<p>Allocation size.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>align</dt>
<dd>
<p>Memory alignment.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>file</dt>
<dd>Source code file name where the allocation was requested.</dd>
<dt>line</dt>
<dd>Line of allocation in <code>file</code>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="callback" id="fmod_output_closeport_callback"><a href="#fmod_output_closeport_callback">FMOD_OUTPUT_CLOSEPORT_CALLBACK</a></h2>
<p>Output close port callback.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_CLOSEPORT_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">portId</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>portId</dt>
<dd>Port ID.</dd>
</dl>
<p>Main thread callback to close an auxiliary output port on the device.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_close_callback"><a href="#fmod_output_close_callback">FMOD_OUTPUT_CLOSE_CALLBACK</a></h2>
<p>Output close callback.</p>
<p>This callback is called to shut down and release the output driver's audio interface.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_CLOSE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_close">System::close</a>.</li>
<li><a class="apilink" href="core-api-system.html#system_release">System::release</a> calls <a class="apilink" href="core-api-system.html#system_close">System::close</a> internally.</li>
</ul>
<p>To stop the output stream, rather than closing and shutting it down, <a class="apilink" href="plugin-api-output.html#fmod_output_stop_callback">FMOD_OUTPUT_STOP_CALLBACK</a> would be used.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_copyport_func"><a href="#fmod_output_copyport_func">FMOD_OUTPUT_COPYPORT_FUNC</a></h2>
<p>Output copy port function.</p>
<p>Function to copy the output from the mixer for the given auxiliary port.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_COPYPORT_FUNC</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">portId</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">length</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>portId</dt>
<dd>Auxiliary port.</dd>
<dt>buffer</dt>
<dd>Output buffer.</dd>
<dt>length</dt>
<dd>Length of <code>buffer</code></dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="struct" id="fmod_output_description"><a href="#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></h2>
<p>Output description.</p>
<p>This description structure allows the plug-in writer to define all functionality required for a user-defined output device.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span> <span class="p">{</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">apiversion</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">version</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_METHOD</span> <span class="n">method</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</span> <span class="n">getnumdrivers</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</span> <span class="n">getdriverinfo</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_INIT_CALLBACK</span> <span class="n">init</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_START_CALLBACK</span> <span class="n">start</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_STOP_CALLBACK</span> <span class="n">stop</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_CLOSE_CALLBACK</span> <span class="n">close</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_UPDATE_CALLBACK</span> <span class="n">update</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_GETHANDLE_CALLBACK</span> <span class="n">gethandle</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_MIXER_CALLBACK</span> <span class="n">mixer</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</span> <span class="n">object3dgetinfo</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</span> <span class="n">object3dalloc</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</span> <span class="n">object3dfree</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</span> <span class="n">object3dupdate</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_OPENPORT_CALLBACK</span> <span class="n">openport</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_CLOSEPORT_CALLBACK</span> <span class="n">closeport</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK</span> <span class="n">devicelistchanged</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_OUTPUT_DESCRIPTION</span>
<span class="p">{</span>
<span class="nx">apiversion</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">version</span><span class="p">,</span>
<span class="nx">method</span><span class="p">,</span>
<span class="nx">getnumdrivers</span><span class="p">,</span>
<span class="nx">getdriverinfo</span><span class="p">,</span>
<span class="nx">init</span><span class="p">,</span>
<span class="nx">start</span><span class="p">,</span>
<span class="nx">stop</span><span class="p">,</span>
<span class="nx">close</span><span class="p">,</span>
<span class="nx">update</span><span class="p">,</span>
<span class="nx">gethandle</span><span class="p">,</span>
<span class="nx">mixer</span><span class="p">,</span>
<span class="nx">object3dgetinfo</span><span class="p">,</span>
<span class="nx">object3dalloc</span><span class="p">,</span>
<span class="nx">object3dfree</span><span class="p">,</span>
<span class="nx">object3dupdate</span><span class="p">,</span>
<span class="nx">openport</span><span class="p">,</span>
<span class="nx">closeport</span><span class="p">,</span>
<span class="nx">devicelistchanged</span>
<span class="p">};</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<dl>
<dt id="fmod_output_description_apiversion">apiversion</dt>
<dd>The output plug-in API version this plug-in is built for. Set to this to <a class="apilink" href="plugin-api-output.html#fmod_output_plugin_version">FMOD_OUTPUT_PLUGIN_VERSION</a>. </dd>
<dt id="fmod_output_description_name">name</dt>
<dd>The name of the output plug-in, encoded as a UTF-8 string.</dd>
<dt id="fmod_output_description_version">version</dt>
<dd>The version of the output plug-in. </dd>
<dt id="fmod_output_description_method">method</dt>
<dd>The method by which the mixer is executed and buffered. (<a class="apilink" href="plugin-api-output.html#fmod_output_method">FMOD_OUTPUT_METHOD</a>)</dd>
<dt id="fmod_output_description_getnumdrivers">getnumdrivers</dt>
<dd>A user thread callback to provide the number of attached sound devices. Called from <a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_getnumdrivers_callback">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</a>)</dd>
<dt id="fmod_output_description_getdriverinfo">getdriverinfo</dt>
<dd>A user thread callback to provide information about a particular sound device. Called from <a class="apilink" href="core-api-system.html#system_getdriverinfo">System::getDriverInfo</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_getdriverinfo_callback">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</a>)</dd>
<dt id="fmod_output_description_init">init</dt>
<dd>A user thread callback to allocate resources and provide information about hardware capabilities. Called from <a class="apilink" href="core-api-system.html#system_init">System::init</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_init_callback">FMOD_OUTPUT_INIT_CALLBACK</a>)</dd>
<dt id="fmod_output_description_start">start <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A user thread callback just before mixing should begin, calls to <a class="apilink" href="plugin-api-output.html#fmod_output_mixer_callback">FMOD_OUTPUT_MIXER_CALLBACK</a> will start, you may call <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a> after this point. Called from <a class="apilink" href="core-api-system.html#system_init">System::init</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_start_callback">FMOD_OUTPUT_START_CALLBACK</a>)</dd>
<dt id="fmod_output_description_stop">stop <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A user thread callback just after mixing has finished, calls to <a class="apilink" href="plugin-api-output.html#fmod_output_mixer_callback">FMOD_OUTPUT_MIXER_CALLBACK</a> have stopped, you may not call <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a> after this point. Called from <a class="apilink" href="core-api-system.html#system_close">System::close</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_stop_callback">FMOD_OUTPUT_STOP_CALLBACK</a>)</dd>
<dt id="fmod_output_description_close">close <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A user thread callback to clean up resources allocated during <a class="apilink" href="plugin-api-output.html#fmod_output_init_callback">FMOD_OUTPUT_INIT_CALLBACK</a>. Called from <a class="apilink" href="core-api-system.html#system_init">System::init</a> and <a class="apilink" href="core-api-system.html#system_close">System::close</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_close_callback">FMOD_OUTPUT_CLOSE_CALLBACK</a>)</dd>
<dt id="fmod_output_description_update">update <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A user thread callback once per frame to update internal state. Called from <a class="apilink" href="core-api-system.html#system_update">System::update</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_update_callback">FMOD_OUTPUT_UPDATE_CALLBACK</a>)</dd>
<dt id="fmod_output_description_gethandle">gethandle <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A user thread callback to provide a pointer to the internal device object used to share with other audio systems. Called from <a class="apilink" href="core-api-system.html#system_getoutputhandle">System::getOutputHandle</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_gethandle_callback">FMOD_OUTPUT_GETHANDLE_CALLBACK</a>)</dd>
<dt id="fmod_output_description_mixer">mixer <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A mixer thread callback called repeatedly to give a thread for waiting on an audio hardware synchronization primitive (see remarks for details). Ensure you have a reasonable timeout (~200ms) on your synchronization primitive and allow this callback to return once per wakeup to avoid deadlocks. (<a class="apilink" href="plugin-api-output.html#fmod_output_mixer_callback">FMOD_OUTPUT_MIXER_CALLBACK</a>)</dd>
<dt id="fmod_output_description_object3dgetinfo">object3dgetinfo <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A mixer thread callback to provide information about the capabilities of 3D object hardware. Called during a mix. (<a class="apilink" href="plugin-api-output.html#fmod_output_object3dgetinfo_callback">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a>)</dd>
<dt id="fmod_output_description_object3dalloc">object3dalloc <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A mixer thread callback to reserve a hardware resources for a single 3D object. Called during a mix. (<a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>)</dd>
<dt id="fmod_output_description_object3dfree">object3dfree <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A mixer thread callback to release a hardware resource previously acquired with <a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>. Called during a mix. (<a class="apilink" href="plugin-api-output.html#fmod_output_object3dfree_callback">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a>)</dd>
<dt id="fmod_output_description_object3dupdate">object3dupdate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A mixer thread callback once for every acquired 3D object every mix to provide 3D information and buffered audio. Called during a mix. (<a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a>)</dd>
<dt id="fmod_output_description_openport">openport <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A main thread callback to open an auxiliary output port on the device. (<a class="apilink" href="plugin-api-output.html#fmod_output_openport_callback">FMOD_OUTPUT_OPENPORT_CALLBACK</a>)</dd>
<dt id="fmod_output_description_closeport">closeport <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A main thread callback to close an auxiliary output port on the device. (<a class="apilink" href="plugin-api-output.html#fmod_output_closeport_callback">FMOD_OUTPUT_CLOSEPORT_CALLBACK</a>)</dd>
<dt id="fmod_output_description_devicelistchanged">devicelistchanged <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>A main thread callback to notify that a change to the device list may have occurred. (<a class="apilink" href="plugin-api-output.html#fmod_output_devicelistchanged_callback">FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK</a>)</dd>
</dl>
<p>Pass this structure to <a class="apilink" href="core-api-system.html#system_registeroutput">System::registerOutput</a> to create a new output type, or if defining a dynamically loadable plug-in, return it in a function called <code>FMODGetOutputDescription</code>. FMOD's plug-in loader will look for this function in a dynamic library.</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="cm">/*</span>
<span class="cm"> Plug-in setup example</span>
<span class="cm">*/</span>
<span class="k">extern</span> <span class="s">&quot;C&quot;</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span><span class="o">*</span> <span class="n">F_CALL</span> <span class="n">FMODGetOutputDescription</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">static</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span> <span class="n">desc</span><span class="p">;</span>
<span class="cm">/*</span>
<span class="cm"> Fill members of structure</span>
<span class="cm"> */</span>
<span class="k">return</span> <span class="o">&amp;</span><span class="n">desc</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>There are several methods for driving the FMOD mixer to service the audio hardware.</p>
<ul>
<li>Callback: if the audio hardware provides a callback where you must provide a buffer of samples then set 'method' to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a> and directly call <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>.</li>
<li>Synchronization: if the audio hardware provides a synchronization primitive to wait on then set 'method' to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</a> and give a <a class="apilink" href="plugin-api-output.html#fmod_output_mixer_callback">FMOD_OUTPUT_MIXER_CALLBACK</a> pointer. FMOD will create a mixer thread and call you repeatedly once <a class="apilink" href="plugin-api-output.html#fmod_output_start_callback">FMOD_OUTPUT_START_CALLBACK</a> has finished, you must wait on your primitive in this callback and upon wake call <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>.</li>
<li>Non-realtime: if you are writing a file or driving a non-realtime output call <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a> from <a class="apilink" href="plugin-api-output.html#fmod_output_update_callback">FMOD_OUTPUT_UPDATE_CALLBACK</a>.</li>
</ul>
<p>Callbacks marked with 'user thread' will be called in response to the user of the Core API. In the case of the Studio API, the user is the Studio update thread.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="callback" id="fmod_output_devicelistchanged_callback"><a href="#fmod_output_devicelistchanged_callback">FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK</a></h2>
<p>Output device list change callback.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_DEVICELISTCHANGED_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_free_func"><a href="#fmod_output_free_func">FMOD_OUTPUT_FREE_FUNC</a></h2>
<p>Output free memory function.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="kt">void</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_FREE_FUNC</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">ptr</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">line</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>ptr</dt>
<dd>Allocation pointer.</dd>
<dt>file</dt>
<dd>Source code file name where the allocation is freed.</dd>
<dt>line</dt>
<dd>Line of free call in <code>file</code>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="callback" id="fmod_output_getdriverinfo_callback"><a href="#fmod_output_getdriverinfo_callback">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</a></h2>
<p>Output get driver info callback.</p>
<p>This callback is called to provide the user with information about the selected audio driver.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span><span class="p">,</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">guid</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">systemrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>id</dt>
<dd>The index into the total number of outputs possible, provided by the <a class="apilink" href="plugin-api-output.html#fmod_output_getnumdrivers_callback">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</a> callback.</dd>
<dt>name</dt>
<dd>The driver name relevant to the index passed in. Fill this in. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>
<p>The length of name buffer being passed in by the user.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>guid</dt>
<dd>The <a href="glossary.html#guid">GUID</a> structure. (<a class="apilink" href="core-api-common.html#fmod_guid">FMOD_GUID</a>)</dd>
<dt>systemrate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>The rate the output device prefers. Leave 0 to remain flexible.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
</ul>
</dd>
<dt>speakermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>The speaker mode the output device prefers. Leave <a class="apilink" href="core-api-common.html#fmod_speakermode_default">FMOD_SPEAKERMODE_DEFAULT</a> to remain flexible. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>speakermodechannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>The speaker mode associated channels the output device prefers. Leave at 0 to remain flexible. Only used for <a class="apilink" href="core-api-common.html#fmod_speakermode_raw">FMOD_SPEAKERMODE_RAW</a>.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_getdriverinfo">System::getDriverInfo</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_getnumdrivers_callback">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_gethandle_callback"><a href="#fmod_output_gethandle_callback">FMOD_OUTPUT_GETHANDLE_CALLBACK</a></h2>
<p>Output get output handle callback.</p>
<p>This callback is called to provide the user with a low level audio interface handle that may be used to pass to other middleware.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_GETHANDLE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Plug-in's output 'handle'.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_getoutputhandle">System::getOutputHandle</a></li>
</ul>
<p>This callback is only needed if the plug-in writer wants to allow the user access to the main handle behind the plug-in (for example the file handle in a file writer plug-in). The plug-in writer needs to document and publish the type of the handle, as is done in the documentation for <a class="apilink" href="core-api-system.html#system_getoutputhandle">System::getOutputHandle</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_getnumdrivers_callback"><a href="#fmod_output_getnumdrivers_callback">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</a></h2>
<p>Output get number of drivers callback.</p>
<p>This callback is called to provide the user with the number of devices usable for the output mode.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_GETNUMDRIVERS_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numdrivers</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>numdrivers</dt>
<dd>Number of output drivers in your plug-in.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a></li>
</ul>
<p>Optional. FMOD will assume 0 if this is not specified.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="core-api-system.html#system_getdriverinfo">System::getDriverInfo</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_getdriverinfo_callback">FMOD_OUTPUT_GETDRIVERINFO_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_init_callback"><a href="#fmod_output_init_callback">FMOD_OUTPUT_INIT_CALLBACK</a></h2>
<p>Output initialization callback.</p>
<p>This callback is called to allow initialization of the output stream for mixing.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_INIT_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">selecteddriver</span><span class="p">,</span>
<span class="n">FMOD_INITFLAGS</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">outputrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT</span> <span class="o">*</span><span class="n">outputformat</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">dspbufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">dspnumbuffers</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">dspnumadditionalbuffers</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">extradriverdata</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>selecteddriver</dt>
<dd>Selected driver id that the user chose from calling <a class="apilink" href="core-api-system.html#system_setdriver">System::setDriver</a>.</dd>
<dt>flags</dt>
<dd>Initialization flags passed in by the user. (<a class="apilink" href="core-api-system.html#fmod_initflags">FMOD_INITFLAGS</a>)</dd>
<dt>outputrate</dt>
<dd>
<p>Output rate selected by the user. If not possible, change the rate to the closest match. FMOD will resample from the rate requested to your rate if they do not match.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
</ul>
</dd>
<dt>speakermode</dt>
<dd>Speaker mode selected by the user. If not possible, change the speaker mode to the closest match. FMOD will upmix or downmix to the requested speaker mode if they do not match. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>speakermodechannels</dt>
<dd>Speaker mode channel count selected by the user. For example 1 = mono output. 2 = stereo output. Needed if supporting <a class="apilink" href="core-api-common.html#fmod_speakermode_raw">FMOD_SPEAKERMODE_RAW</a>, otherwise it is informational.</dd>
<dt>outputformat</dt>
<dd>Sound format supported by output mode. For example, <a class="apilink" href="core-api-sound.html#fmod_sound_format_pcm16">FMOD_SOUND_FORMAT_PCM16</a> would be normal. FMOD will convert from <a class="apilink" href="core-api-sound.html#fmod_sound_format_pcmfloat">FMOD_SOUND_FORMAT_PCMFLOAT</a> (the mixer buffer format) to whatever you specify. (<a class="apilink" href="core-api-sound.html#fmod_sound_format">FMOD_SOUND_FORMAT</a>)</dd>
<dt>dspbufferlength</dt>
<dd>
<p>Size of the buffer fmod will mix to in one mix update.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
<dt>dspnumbuffers</dt>
<dd>The number of buffers the FMOD Engine mixes the <a href="glossary.html#signal">signal</a> to in a circular fashion. Multiply this by dspbufferlength to get the total size of the output sound buffer to allocate. This can be set by the plug-in when <a class="apilink" href="plugin-api-output.html#fmod_output_description_method">FMOD_OUTPUT_DESCRIPTION::method</a> is set to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a>.</dd>
<dt>dspnumadditionalbuffers <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of additional buffers that a plug-in with <a class="apilink" href="plugin-api-output.html#fmod_output_description_method">FMOD_OUTPUT_DESCRIPTION::method</a> set to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a> requires. These will be allocated up front to allow the number of used buffers to grow when an internal buffer starvation is detected.</dd>
<dt>extradriverdata</dt>
<dd>Data passed in by the user specific to this driver.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_init">System::init</a></li>
<li><a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a>, if the output is set after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="core-api-system.html#system_setdriver">System::setDriver</a></p>
<h2 api="callback" id="fmod_output_log_func"><a href="#fmod_output_log_func">FMOD_OUTPUT_LOG_FUNC</a></h2>
<p>Output log function.</p>
<p>Call this function in an output plug-in context to utilize the <a href="glossary.html#fmod-engine">FMOD Engine</a>'s debugging system.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="kt">void</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_LOG_FUNC</span><span class="p">(</span>
<span class="n">FMOD_DEBUG_FLAGS</span> <span class="n">level</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">line</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">function</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">,</span>
<span class="p">...</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>level</dt>
<dd>Log type or level. (<a class="apilink" href="core-api-common.html#fmod_debug_flags">FMOD_DEBUG_FLAGS</a>)</dd>
<dt>file</dt>
<dd>Source code file name from where the log is called. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>line</dt>
<dd>Line of log call in <code>file</code>.</dd>
<dt>function</dt>
<dd>Name of the logging function. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>string</dt>
<dd>Log output string. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="define" id="fmod_output_method"><a href="#fmod_output_method">FMOD_OUTPUT_METHOD</a></h2>
<p>Output method used to interact with the mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="cp">#define FMOD_OUTPUT_METHOD_MIX_DIRECT 0</span>
<span class="cp">#define FMOD_OUTPUT_METHOD_MIX_BUFFERED 2</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">OUTPUT_METHOD_MIX_DIRECT</span> <span class="o">=</span> <span class="mi">0</span>
<span class="nx">OUTPUT_METHOD_MIX_BUFFERED</span> <span class="o">=</span> <span class="mi">1</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<dl>
<dt id="fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</dt>
<dd>When calling <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>, the mixer executes directly. Buffering must be performed by plug-in code.</dd>
<dt id="fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</dt>
<dd>Mixer will execute and buffer automatically (on a separate thread) and can be read from with <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>.</dd>
</dl>
<p>For hardware that presents a callback that must be filled immediately <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a> is recommended as buffering occurs in a separate thread, reading from the mixer is simply a memcpy. Using <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</a> is recommended if you want to take direct control of how and when the mixer runs.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_mixer_callback"><a href="#fmod_output_mixer_callback">FMOD_OUTPUT_MIXER_CALLBACK</a></h2>
<p>Output mixer callback.</p>
<p>This callback can be used to stall the FMOD mixer thread until it is ready to call the FMOD mixer directly.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_MIXER_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li>The FMOD mixer thread, only when the 'method' member of <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a> is set to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</a> or <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a>.</li>
</ul>
<p>This callback must use the <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a> function to produce the audio stream needed by the output.</p>
<p>This callback is optional in <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</a> or <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_buffered">FMOD_OUTPUT_METHOD_MIX_BUFFERED</a> mode. An output mode may avoid this callback, and instead use its own timing system to call the FMOD mixer with <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>.</p>
<p>If this callback is used, it will be triggered immediately from the FMOD mixer thread. The callback can then stall with its own synchronization primitive (ie a wait on a semaphore), until something else <a href="glossary.html#signal">signals</a> the primitive to execute a mix with <a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>.</p>
<p>Ensure you have a reasonable timeout (~200ms) on your synchronization primitive and allow this callback to return regularly, to avoid deadlocks.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a></p>
<h2 api="callback" id="fmod_output_object3dalloc_callback"><a href="#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a></h2>
<p>Output 3D Object alloc callback.</p>
<p>This callback is called to reserve hardware resources for a single 3D object.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">object3d</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>object3d</dt>
<dd>3D audio object.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li>FMOD mixer thread.</li>
</ul>
<p>This callback is used for 'Object based audio' where sound hardware can receive individual audio streams and position them in 3D space natively, separate from the FMOD mixer. A typical implementation would be something like Dolby Atmos or Playstation VR.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dgetinfo_callback">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dfree_callback">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_object3dfree_callback"><a href="#fmod_output_object3dfree_callback">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a></h2>
<p>Output 3D Object free callback.</p>
<p>This callback is called to release a hardware resource previously acquired with <a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">object3d</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>object3d</dt>
<dd>3D audio object.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li>FMOD mixer thread.</li>
</ul>
<p>This callback is used for 'Object based audio' where sound hardware can receive individual audio streams and position them in 3D space natively, separate from the FMOD mixer. A typical implementation would be something like Dolby Atmos or Atmos or Playstation VR.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dgetinfo_callback">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_object3dgetinfo_callback"><a href="#fmod_output_object3dgetinfo_callback">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a></h2>
<p>Output 3D Object get info callback.</p>
<p>Called from the mixer thread to provide information about the capabilities of 3D object hardware.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">maxhardwareobjects</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>maxhardwareobjects</dt>
<dd>Maximum number of 3D objects supported.</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li>FMOD mixer thread.</li>
</ul>
<p>This callback is used for 'Object based audio' where sound hardware can receive individual audio streams and position them in 3D space natively, separate from the FMOD mixer. A typical implementation would be something like Dolby Atmos or Atmos or Playstation VR.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dfree_callback">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a></p>
<h2 api="struct" id="fmod_output_object3dinfo"><a href="#fmod_output_object3dinfo">FMOD_OUTPUT_OBJECT3DINFO</a></h2>
<p>Output 3D Object Info.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="n">FMOD_OUTPUT_OBJECT3DINFO</span> <span class="p">{</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">buffer</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">bufferlength</span><span class="p">;</span>
<span class="n">FMOD_VECTOR</span> <span class="n">position</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">gain</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">spread</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">priority</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_OUTPUT_OBJECT3DINFO</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_OUTPUT_OBJECT3DINFO</span>
<span class="p">{</span>
<span class="nx">buffer</span><span class="p">,</span>
<span class="nx">bufferlength</span><span class="p">,</span>
<span class="nx">position</span><span class="p">,</span>
<span class="nx">gain</span><span class="p">,</span>
<span class="nx">spread</span><span class="p">,</span>
<span class="nx">priority</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<dl>
<dt id="fmod_output_object3dinfo_buffer">buffer <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Mono PCM floating point buffer. This buffer needs to be scaled by the gain value to get distance attenuation. </dd>
<dt id="fmod_output_object3dinfo_bufferlength">bufferlength <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Length in PCM samples of buffer. </dd>
<dt id="fmod_output_object3dinfo_position">position <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Vector relative between object and listener. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt id="fmod_output_object3dinfo_gain">gain <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>0.0 to 1.0 - 1 = 'buffer' is not attenuated, 0 = 'buffer' is fully attenuated. </dd>
<dt id="fmod_output_object3dinfo_spread">spread <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>0 - 360 degrees. 0 = point source, 360 = sound is spread around all speakers </dd>
<dt id="fmod_output_object3dinfo_priority">priority <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>0.0 to 1.0 - 0 = most important, 1 = least important. Based on height and distance (height is more important). </dd>
</dl>
<p>This callback is used for 'Object mixing' where sound hardware can receive individual audio streams and position them in 3D space natively, separate from the FMOD mixer. A typical implementation would be something like Dolby Atmos or Atmos or Playstation VR.</p>
<p>This structure is passed to the plug-in via <a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a>, so that any object-based panning solution available can position it in the speakers correctly.<br />
Object based panning is a 3D panning solution that sends a mono-only <a href="glossary.html#signal">signal</a> to a hardware device, such as Dolby Atmos or other similar panning solutions.</p>
<p>FMOD does not attenuate the buffer, but provides a 'gain' parameter that the user must use to scale the buffer by. Rather than pre-attenuating the buffer, the plug-in developer can access untouched data for other purposes, like reverb sending for example.<br />
The 'gain' parameter is based on the user's 3D custom roll-off model.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_object3dupdate_callback"><a href="#fmod_output_object3dupdate_callback">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</a></h2>
<p>Output 3D Object update callback.</p>
<p>Called from the mixer thread once for every acquired 3D object every mix to provide 3D information and buffered audio.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_OBJECT3DUPDATE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">object3d</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_OUTPUT_OBJECT3DINFO</span> <span class="o">*</span><span class="n">info</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>object3d</dt>
<dd>3D audio object.</dd>
<dt>info</dt>
<dd>3D object characteristics. (<a class="apilink" href="plugin-api-output.html#fmod_output_object3dinfo">FMOD_OUTPUT_OBJECT3DINFO</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li>FMOD mixer</li>
</ul>
<p>This callback is used for 'Object based audio' where sound hardware can receive individual audio streams and position them in 3D space natively, separate from the FMOD mixer. A typical implementation would be something like Dolby Atmos or Atmos or Playstation VR.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dgetinfo_callback">FMOD_OUTPUT_OBJECT3DGETINFO_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dalloc_callback">FMOD_OUTPUT_OBJECT3DALLOC_CALLBACK</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_object3dfree_callback">FMOD_OUTPUT_OBJECT3DFREE_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_openport_callback"><a href="#fmod_output_openport_callback">FMOD_OUTPUT_OPENPORT_CALLBACK</a></h2>
<p>Output open port callback.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_OPENPORT_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE</span> <span class="n">portType</span><span class="p">,</span>
<span class="n">FMOD_PORT_INDEX</span> <span class="n">portIndex</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">portId</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">portRate</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">portChannels</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT</span> <span class="o">*</span><span class="n">portFormat</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>portType</dt>
<dd>Port type. (FMOD_PORT_TYPE)</dd>
<dt>portIndex</dt>
<dd>Port index. (FMOD_PORT_INDEX)</dd>
<dt>portId <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Port ID.</dd>
<dt>portRate <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Port rate.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
</ul>
</dd>
<dt>portChannels <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of channels.</dd>
<dt>portFormat</dt>
<dd>Port sound format. (<a class="apilink" href="core-api-sound.html#fmod_sound_format">FMOD_SOUND_FORMAT</a>)</dd>
</dl>
<p>Main thread callback to open an auxiliary output port on the device.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="define" id="fmod_output_plugin_version"><a href="#fmod_output_plugin_version">FMOD_OUTPUT_PLUGIN_VERSION</a></h2>
<p>The output plug-in API version the plug-in was created with.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="cp">#define FMOD_OUTPUT_PLUGIN_VERSION 5</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">OUTPUT_PLUGIN_VERSION</span>
</pre></div>
<div class="admonition language-csharp">
<p>Currently not supported for C#.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_readfrommixer_func"><a href="#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a></h2>
<p>Output read from mixer function.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_READFROMMIXER_FUNC</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">length</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
<dt>buffer</dt>
<dd>Memory for the Studio API mixer to write to, provided by the plug-in writer.</dd>
<dt>length</dt>
<dd>Length of the buffer in samples.</dd>
</dl>
<p>Called by the plug-in. Use this function from your own driver irq/timer to read some data from <a href="glossary.html#dsp-engine">FMOD's DSP engine</a>. All of the resulting output caused by playing sounds and specifying <a href="glossary.html#effect">effects</a> by the user of the plug-in is mixed here and written to the memory provided by you.</p>
<h2 api="callback" id="fmod_output_requestreset_func"><a href="#fmod_output_requestreset_func">FMOD_OUTPUT_REQUESTRESET_FUNC</a></h2>
<p>Output request reset function.</p>
<p>Request the output to shut down and restart. </p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_REQUESTRESET_FUNC</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>If this is issued, the output will not reset immediately, but on the next udpate the output will first shut down with a call to the <a class="apilink" href="plugin-api-output.html#fmod_output_stop_callback">FMOD_OUTPUT_STOP_CALLBACK</a> then <a class="apilink" href="plugin-api-output.html#fmod_output_close_callback">FMOD_OUTPUT_CLOSE_CALLBACK</a>, followed by a restart with <a class="apilink" href="plugin-api-output.html#fmod_output_init_callback">FMOD_OUTPUT_INIT_CALLBACK</a> and <a class="apilink" href="plugin-api-output.html#fmod_output_start_callback">FMOD_OUTPUT_START_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_start_callback"><a href="#fmod_output_start_callback">FMOD_OUTPUT_START_CALLBACK</a></h2>
<p>Output start callback.</p>
<p>Called just before mixing should begin. This callback is called to start the output driver's audio stream.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_START_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_init">System::init</a></li>
<li><a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a>, if the output is set after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
<li><a class="apilink" href="core-api-system.html#system_setdriver">System::setDriver</a>, if the driver is set after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
</ul>
<p>This function is meant for starting the output audio rather than allocating memory and initializing interfaces like <a class="apilink" href="plugin-api-output.html#fmod_output_init_callback">FMOD_OUTPUT_INIT_CALLBACK</a> would.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_stop_callback">FMOD_OUTPUT_STOP_CALLBACK</a></p>
<h2 api="struct" id="fmod_output_state"><a href="#fmod_output_state">FMOD_OUTPUT_STATE</a></h2>
<p>Output object state passed into every callback provides access to plug-in developers data and system functionality.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="k">typedef</span> <span class="k">struct</span> <span class="n">FMOD_OUTPUT_STATE</span> <span class="p">{</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">plugindata</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_READFROMMIXER_FUNC</span> <span class="n">readfrommixer</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_ALLOC_FUNC</span> <span class="n">alloc</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_FREE_FUNC</span> <span class="n">free</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_LOG_FUNC</span> <span class="n">log</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_COPYPORT_FUNC</span> <span class="n">copyport</span><span class="p">;</span>
<span class="n">FMOD_OUTPUT_REQUESTRESET_FUNC</span> <span class="n">requestreset</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_OUTPUT_STATE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_OUTPUT_STATE</span>
<span class="p">{</span>
<span class="nx">plugindata</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<dl>
<dt id="fmod_output_state_plugindata">plugindata</dt>
<dd>Plug-in state data.</dd>
<dt id="fmod_output_state_readfrommixer">readfrommixer <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to read a buffer of audio from the mixer. Used to control when the mix occurs manually when <a class="apilink" href="plugin-api-output.html#fmod_output_description_method">FMOD_OUTPUT_DESCRIPTION::method</a> set to <a class="apilink" href="plugin-api-output.html#fmod_output_method_mix_direct">FMOD_OUTPUT_METHOD_MIX_DIRECT</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_readfrommixer_func">FMOD_OUTPUT_READFROMMIXER_FUNC</a>)</dd>
<dt id="fmod_output_state_alloc">alloc <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to allocate memory using the FMOD memory system. (<a class="apilink" href="plugin-api-output.html#fmod_output_alloc_func">FMOD_OUTPUT_ALLOC_FUNC</a>)</dd>
<dt id="fmod_output_state_free">free <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to free memory allocated with FMOD_OUTPUT_ALLOC. (<a class="apilink" href="plugin-api-output.html#fmod_output_free_func">FMOD_OUTPUT_FREE_FUNC</a>)</dd>
<dt id="fmod_output_state_log">log <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to write to the FMOD logging system. (<a class="apilink" href="plugin-api-output.html#fmod_output_log_func">FMOD_OUTPUT_LOG_FUNC</a>)</dd>
<dt id="fmod_output_state_copyport">copyport <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to copy the output from the mixer for the given auxiliary port. (<a class="apilink" href="plugin-api-output.html#fmod_output_copyport_func">FMOD_OUTPUT_COPYPORT_FUNC</a>)</dd>
<dt id="fmod_output_state_requestreset">requestreset <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to request the output plug-in be shutdown then restarted during the next <a class="apilink" href="core-api-system.html#system_update">System::update</a>. (<a class="apilink" href="plugin-api-output.html#fmod_output_requestreset_func">FMOD_OUTPUT_REQUESTRESET_FUNC</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_output_stop_callback"><a href="#fmod_output_stop_callback">FMOD_OUTPUT_STOP_CALLBACK</a></h2>
<p>Output stop callback.</p>
<p>Called just after mixing has ended. This callback is called to stop the output driver's audio stream.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_STOP_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_close">System::close</a> (which can be invoked by [<a class="apilink" href="core-api-system.html#system_release">System::release</a>])</li>
<li><a class="apilink" href="core-api-system.html#system_release">System::release</a>.</li>
<li><a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a>, if the output is set after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
<li><a class="apilink" href="core-api-system.html#system_setdriver">System::setDriver</a>, if the driver is set after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
</ul>
<p>This function is meant for stopping the output audio rather than freeing memory and shutting down audio interfaces like <a class="apilink" href="plugin-api-output.html#fmod_output_close_callback">FMOD_OUTPUT_CLOSE_CALLBACK</a> would.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="plugin-api-output.html#fmod_output_start_callback">FMOD_OUTPUT_START_CALLBACK</a></p>
<h2 api="callback" id="fmod_output_update_callback"><a href="#fmod_output_update_callback">FMOD_OUTPUT_UPDATE_CALLBACK</a></h2>
<p>Output update callback.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_OUTPUT_UPDATE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_OUTPUT_STATE</span> <span class="o">*</span><span class="n">output_state</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>output_state</dt>
<dd>Plug-in state. (<a class="apilink" href="plugin-api-output.html#fmod_output_state">FMOD_OUTPUT_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_update">System::update</a></li>
</ul>
<p>This callback is invoked from the main application update which allows the output to process data in sync with the application, rather than the mixer thread.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>, <a class="apilink" href="core-api-system.html#system_update">System::update</a></p></div>
<p class="manual-footer">FMOD Engine User Manual 2.03.07 (2025-04-02). &copy; 2025 Firelight Technologies Pty Ltd.</p>
</body>
</html>
</div>