RythmGame/SimpleGame/FMOD/doc/FMOD API User Manual/plugin-api-codec.html
2025-06-11 16:50:48 +02:00

1040 lines
66 KiB
HTML

<html>
<head>
<title>Plug-in API Reference | Codec</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 class="manual-current-chapter manual-active-chapter"><a href="plugin-api-codec.html">Codec</a></li><li><a href="plugin-api-dsp.html">DSP</a></li><li><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 | Codec</h1>
<p>An interface that manages codec plug-ins.</p>
<p><strong>General:</strong></p>
<ul>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_description" title="Codec description.">FMOD_CODEC_DESCRIPTION</a> Codec description.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_state" title="Codec state structure that is passed into each callback.">FMOD_CODEC_STATE</a> Codec state structure that is passed into each callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_state_functions" title="Struct containing functions to give plug-in developers the ability to query system state and access system level functionality and helpers.">FMOD_CODEC_STATE_FUNCTIONS</a> Struct containing functions to give plug-in developers the ability to query system state and access system level functionality and helpers.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat" title="Codec wave format.">FMOD_CODEC_WAVEFORMAT</a> Codec wave format.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_close_callback" title="Codec close callback.">FMOD_CODEC_CLOSE_CALLBACK</a> Codec close callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_getlength_callback" title="Codec get length callback.">FMOD_CODEC_GETLENGTH_CALLBACK</a> Codec get length callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_getposition_callback" title="Codec get position callback.">FMOD_CODEC_GETPOSITION_CALLBACK</a> Codec get position callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_getwaveformat_callback" title="Codec get wave format callback.">FMOD_CODEC_GETWAVEFORMAT_CALLBACK</a> Codec get wave format callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_open_callback" title="Codec open callback.">FMOD_CODEC_OPEN_CALLBACK</a> Codec open callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_read_callback" title="Codec read callback.">FMOD_CODEC_READ_CALLBACK</a> Codec read callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_setposition_callback" title="Codec set position callback.">FMOD_CODEC_SETPOSITION_CALLBACK</a> Codec set position callback.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_soundcreate_callback" title="Codec sound create callback.">FMOD_CODEC_SOUNDCREATE_CALLBACK</a> Codec sound create callback.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_alloc_func" title="Codec allocate memory function.">FMOD_CODEC_ALLOC_FUNC</a> Codec allocate memory function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_free_func" title="Codec free memory function.">FMOD_CODEC_FREE_FUNC</a> Codec free memory function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_file_read_func" title="Codec file read function.">FMOD_CODEC_FILE_READ_FUNC</a> Codec file read function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func" title="Codec file seek function.">FMOD_CODEC_FILE_SEEK_FUNC</a> Codec file seek function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_file_size_func" title="Codec file size function.">FMOD_CODEC_FILE_SIZE_FUNC</a> Codec file size function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_file_tell_func" title="Codec file function to retrieve the current file position.">FMOD_CODEC_FILE_TELL_FUNC</a> Codec file function to retrieve the current file position.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_log_func" title="Codec log function.">FMOD_CODEC_LOG_FUNC</a> Codec log function.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_metadata_func" title="Codec metadata function.">FMOD_CODEC_METADATA_FUNC</a> Codec metadata function.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_plugin_version" title="The codec plug-in API version the plug-in was built with.">FMOD_CODEC_PLUGIN_VERSION</a> The codec plug-in API version the plug-in was built with.</span></li>
<li><span><a class="apilink" href="plugin-api-codec.html#fmod_codec_seek_method" title="File seek methods.">FMOD_CODEC_SEEK_METHOD</a> File seek methods.</span></li>
</ul>
<h2 api="callback" id="fmod_codec_alloc_func"><a href="#fmod_codec_alloc_func">FMOD_CODEC_ALLOC_FUNC</a></h2>
<p>Codec 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_CODEC_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-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a></p>
<h2 api="callback" id="fmod_codec_close_callback"><a href="#fmod_codec_close_callback">FMOD_CODEC_CLOSE_CALLBACK</a></h2>
<p>Codec close callback.</p>
<p>This callback is called to shut down and release memory for the codec instance.</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_CODEC_CLOSE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-sound.html#sound_release">Sound::release</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_open_callback">FMOD_CODEC_OPEN_CALLBACK</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_soundcreate_callback">FMOD_CODEC_SOUNDCREATE_CALLBACK</a></p>
<h2 api="struct" id="fmod_codec_description"><a href="#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></h2>
<p>Codec description.</p>
<p>This description structure allows the plug-in writer to define all functionality required for a user-defined codec.</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_CODEC_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="kt">int</span> <span class="n">defaultasstream</span><span class="p">;</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">timeunits</span><span class="p">;</span>
<span class="n">FMOD_CODEC_OPEN_CALLBACK</span> <span class="n">open</span><span class="p">;</span>
<span class="n">FMOD_CODEC_CLOSE_CALLBACK</span> <span class="n">close</span><span class="p">;</span>
<span class="n">FMOD_CODEC_READ_CALLBACK</span> <span class="n">read</span><span class="p">;</span>
<span class="n">FMOD_CODEC_GETLENGTH_CALLBACK</span> <span class="n">getlength</span><span class="p">;</span>
<span class="n">FMOD_CODEC_SETPOSITION_CALLBACK</span> <span class="n">setposition</span><span class="p">;</span>
<span class="n">FMOD_CODEC_GETPOSITION_CALLBACK</span> <span class="n">getposition</span><span class="p">;</span>
<span class="n">FMOD_CODEC_SOUNDCREATE_CALLBACK</span> <span class="n">soundcreate</span><span class="p">;</span>
<span class="n">FMOD_CODEC_GETWAVEFORMAT_CALLBACK</span> <span class="n">getwaveformat</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_CODEC_DESCRIPTION</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_CODEC_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">defaultasstream</span><span class="p">,</span>
<span class="nx">timeunits</span><span class="p">,</span>
<span class="nx">open</span><span class="p">,</span>
<span class="nx">close</span><span class="p">,</span>
<span class="nx">read</span><span class="p">,</span>
<span class="nx">getlength</span><span class="p">,</span>
<span class="nx">setposition</span><span class="p">,</span>
<span class="nx">getposition</span><span class="p">,</span>
<span class="nx">soundcreate</span><span class="p">,</span>
<span class="nx">getwaveformat</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<div class="admonition language-csharp">
<p>Currently not supported for C#.</p>
</div>
<dl>
<dt id="fmod_codec_description_apiversion">apiversion</dt>
<dd>The codec plug-in API version this plug-in is built for. Set to this to <a class="apilink" href="plugin-api-codec.html#fmod_codec_plugin_version">FMOD_CODEC_PLUGIN_VERSION</a>.</dd>
<dt id="fmod_codec_description_name">name</dt>
<dd>Name of the codec. </dd>
<dt id="fmod_codec_description_version">version</dt>
<dd>Plug-in's version number. </dd>
<dt id="fmod_codec_description_defaultasstream">defaultasstream</dt>
<dd>Defaults as stream. </dd>
<dt id="fmod_codec_description_timeunits">timeunits</dt>
<dd>Time units used with setposition codec. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
<dt id="fmod_codec_description_open">open</dt>
<dd>Open callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_open_callback">FMOD_CODEC_OPEN_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_close">close</dt>
<dd>Close callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_close_callback">FMOD_CODEC_CLOSE_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_read">read</dt>
<dd>Read callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_read_callback">FMOD_CODEC_READ_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_getlength">getlength</dt>
<dd>Get length callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_getlength_callback">FMOD_CODEC_GETLENGTH_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_setposition">setposition</dt>
<dd>Seek callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_setposition_callback">FMOD_CODEC_SETPOSITION_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_getposition">getposition</dt>
<dd>Get position callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_getposition_callback">FMOD_CODEC_GETPOSITION_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_soundcreate">soundcreate</dt>
<dd>Sound creation callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_soundcreate_callback">FMOD_CODEC_SOUNDCREATE_CALLBACK</a>)</dd>
<dt id="fmod_codec_description_getwaveformat">getwaveformat</dt>
<dd>Get wave format callback. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_getwaveformat_callback">FMOD_CODEC_GETWAVEFORMAT_CALLBACK</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a></p>
<h2 api="callback" id="fmod_codec_file_read_func"><a href="#fmod_codec_file_read_func">FMOD_CODEC_FILE_READ_FUNC</a></h2>
<p>Codec file read 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_CODEC_FILE_READ_FUNC</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_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">sizebytes</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">bytesread</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>buffer <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Buffer to read data into.</dd>
<dt>sizebytes</dt>
<dd>
<p>Number of bytes to read into <code>buffer</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>bytesread <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Number of bytes read into <code>buffer</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>If there is not enough data to read the requested number of bytes, return fewer bytes in the <code>bytesread</code> parameter and and return <a class="apilink" href="core-api-common.html#fmod_err_file_eof">FMOD_ERR_FILE_EOF</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_tell_func">FMOD_CODEC_FILE_TELL_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_size_func">FMOD_CODEC_FILE_SIZE_FUNC</a></p>
<h2 api="callback" id="fmod_codec_file_seek_func"><a href="#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a></h2>
<p>Codec file seek 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_CODEC_FILE_SEEK_FUNC</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">pos</span><span class="p">,</span>
<span class="n">FMOD_CODEC_SEEK_METHOD</span> <span class="n">method</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>pos</dt>
<dd>
<p>Absolute position to seek to in file with respect to the seek method.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>method</dt>
<dd>Method of seeking. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_seek_method">FMOD_CODEC_SEEK_METHOD</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_read_func">FMOD_CODEC_FILE_READ_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_tell_func">FMOD_CODEC_FILE_TELL_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_size_func">FMOD_CODEC_FILE_SIZE_FUNC</a></p>
<h2 api="callback" id="fmod_codec_file_size_func"><a href="#fmod_codec_file_size_func">FMOD_CODEC_FILE_SIZE_FUNC</a></h2>
<p>Codec file size 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_CODEC_FILE_SIZE_FUNC</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">size</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>size <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Size of the file.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_read_func">FMOD_CODEC_FILE_READ_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_tell_func">FMOD_CODEC_FILE_TELL_FUNC</a></p>
<h2 api="callback" id="fmod_codec_file_tell_func"><a href="#fmod_codec_file_tell_func">FMOD_CODEC_FILE_TELL_FUNC</a></h2>
<p>Codec file function to retrieve the current file position.</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_CODEC_FILE_TELL_FUNC</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">pos</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>pos <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Current absolute position in file.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_read_func">FMOD_CODEC_FILE_READ_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_size_func">FMOD_CODEC_FILE_SIZE_FUNC</a></p>
<h2 api="callback" id="fmod_codec_free_func"><a href="#fmod_codec_free_func">FMOD_CODEC_FREE_FUNC</a></h2>
<p>Codec 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_CODEC_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-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a></p>
<h2 api="callback" id="fmod_codec_getlength_callback"><a href="#fmod_codec_getlength_callback">FMOD_CODEC_GETLENGTH_CALLBACK</a></h2>
<p>Codec get length callback.</p>
<p>This callback is called to retrieve the length of the audio file of this codec type.</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_CODEC_GETLENGTH_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">length</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">lengthtype</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>length <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Length of the sound in units determined by <code>lengthtype</code>.</dd>
<dt>lengthtype</dt>
<dd>Timeunit type of <code>length</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-sound.html#sound_getlength">Sound::getLength</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_codec_getposition_callback"><a href="#fmod_codec_getposition_callback">FMOD_CODEC_GETPOSITION_CALLBACK</a></h2>
<p>Codec get position callback.</p>
<p>This callback is called to retrieve the current read position of the audio file of this codec type.</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_CODEC_GETPOSITION_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">position</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">postype</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>position <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Codec position in units determined by <code>postype</code>.</dd>
<dt>postype</dt>
<dd>Time units for <code>position</code>. This will be one of the timeunits supplied by the codec author in the <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a> structure. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-channel.html#channel_getposition">Channel::getPosition</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_codec_getwaveformat_callback"><a href="#fmod_codec_getwaveformat_callback">FMOD_CODEC_GETWAVEFORMAT_CALLBACK</a></h2>
<p>Codec get wave format callback.</p>
<p>This callback is called to allow FMOD to retrieve the format of the file the codec instance represents.</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_CODEC_GETWAVEFORMAT_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_CODEC_WAVEFORMAT</span> <span class="o">*</span><span class="n">waveformat</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>index</dt>
<dd>Subsound index. This is only used in file formats which can store multiple sounds within them, otherwise it will be 0.</dd>
<dt>waveformat <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Wave format of the sound object. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a>)</dd>
</dl>
<p>Useful to reduce memory usage by limiting the number of <a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a> structures.</p>
<h2 api="callback" id="fmod_codec_log_func"><a href="#fmod_codec_log_func">FMOD_CODEC_LOG_FUNC</a></h2>
<p>Codec log function.</p>
<p>Call this function in an codec plug-in context to utilize FMOD'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_CODEC_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 codec string. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a></p>
<h2 api="callback" id="fmod_codec_metadata_func"><a href="#fmod_codec_metadata_func">FMOD_CODEC_METADATA_FUNC</a></h2>
<p>Codec metadata function.</p>
<p>This function is to be called when a codec's metadata is updated.</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_CODEC_METADATA_FUNC</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE</span> <span class="n">tagtype</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">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">datalen</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE</span> <span class="n">datatype</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">unique</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>tagtype</dt>
<dd>Source type of tag being updated. (<a class="apilink" href="core-api-sound.html#fmod_tagtype">FMOD_TAGTYPE</a>)</dd>
<dt>name</dt>
<dd>Name of the tag being updated.</dd>
<dt>data</dt>
<dd>Contents of tag.</dd>
<dt>datalen</dt>
<dd>
<p>Data length of the tag data in bytes.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>datatype</dt>
<dd>Data type of tag. (<a class="apilink" href="core-api-sound.html#fmod_tagdatatype">FMOD_TAGDATATYPE</a>)</dd>
<dt>unique</dt>
<dd>Unique state. If this is true / non zero, then the tag (determined by the name) being updated is the only one of its type. If it is zero then there are multiple versions of this tag with the same name.</dd>
</dl>
<p>Codec metadata can be retrieved by the user with <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a></p>
<p>Codec metadata can be added during creation, or during playback. A common case for play time metadata is internet based streams.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_codec_open_callback"><a href="#fmod_codec_open_callback">FMOD_CODEC_OPEN_CALLBACK</a></h2>
<p>Codec open callback.</p>
<p>This callback is called to initialize a codec instance using the codec's file handle to verify if the file is of the type of the codec, and to do any file reading required for initialization of the codec.</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_CODEC_OPEN_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">usermode</span><span class="p">,</span>
<span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="o">*</span><span class="n">userexinfo</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>codec_state</dt>
<dd>Codec state. Use this to access codec specific variables, the FMOD file system for reading/seeking, and codec user data. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>usermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Mode that the user supplied via <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> or <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a>. (<a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a>)</p>
<ul>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-common.html#fmod_default">FMOD_DEFAULT</a></li>
</ul>
</dd>
<dt>userexinfo <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Extra info structure that the user supplied via <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> or <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a>. (<a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></li>
<li><a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a></li>
</ul>
<p><strong>Implementation detail:</strong></p>
<p>This callback is where the file format check is done, memory is allocated, and the codec is initialized.</p>
<p>The <code>usermode</code> and <code>userexinfo</code> parameters tell the codec what was passed in by the user. Generally these can be ignored, as the file format usually determines the format and frequency of the sound. If you have a flexible format codec (ie you don't mind what output format your codec writes to), you might want to use the parameter that was passed in by the user to specify the output sound format / frequency.</p>
<p>Read and seek within the file using the <code>fileread</code> and <code>fileseek</code> members of the <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a> structure that is passed in.</p>
<p><strong>Note!</strong>: Do not use your own filesystem.</p>
<p>The reasons for this are:</p>
<ul>
<li>The user may have set their own file system via user filesystem callbacks.</li>
<li>FMOD allows file reading via disk, memory and TCP/IP. If you use your own file routines you will lose this ability.</li>
</ul>
<p><strong>Important!</strong> FMOD will ping all codecs trying to find the right one for the file the user has passed in. Make sure the first line of your codec open is a FAST format check. Ie it reads an identifying string, checks it and returns an error <a class="apilink" href="core-api-common.html#fmod_err_format">FMOD_ERR_FORMAT</a> if it is not found.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_close_callback">FMOD_CODEC_CLOSE_CALLBACK</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_soundcreate_callback">FMOD_CODEC_SOUNDCREATE_CALLBACK</a></p>
<h2 api="define" id="fmod_codec_plugin_version"><a href="#fmod_codec_plugin_version">FMOD_CODEC_PLUGIN_VERSION</a></h2>
<p>The codec plug-in API version the plug-in was built 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_CODEC_PLUGIN_VERSION 1</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">CODEC_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-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></p>
<h2 api="callback" id="fmod_codec_read_callback"><a href="#fmod_codec_read_callback">FMOD_CODEC_READ_CALLBACK</a></h2>
<p>Codec read callback.</p>
<p>This callback is called to read PCM data from the codec instance.</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_CODEC_READ_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_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">samples_in</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">samples_out</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>buffer</dt>
<dd>
<p>Target PCM data buffer. Note that the format of this data is the format described in <a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a>.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>samples_in</dt>
<dd>
<p>Number of PCM samples to decode</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
<dt>samples_out</dt>
<dd>
<p>Number of PCM samples decoded</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
</dl>
<p>This callback is issued when FMOD tries to read some data from the file to the destination format (the format specified in the <a class="apilink" href="plugin-api-codec.html#fmod_codec_open_callback">FMOD_CODEC_OPEN_CALLBACK</a>).</p>
<p><strong>Implementation detail:</strong></p>
<p>If you cannot read number of samples requested, simply return <a class="apilink" href="core-api-common.html#fmod_ok">FMOD_OK</a> and give samples_out the number of samples you decoded.</p>
<p>Read and seek within the file using the <code>fileread</code> and <code>fileseek</code> members of the <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a> structure that is passed in.</p>
<p><strong>Note!</strong>: Do not use your own filesystem.</p>
<p>The reasons for this are:</p>
<ul>
<li>The user may have set their own file system via user filesystem callbacks.</li>
<li>FMOD allows file reading via disk, memory and TCP/IP. If you use your own file routines you will lose this ability.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a></p>
<h2 api="define" id="fmod_codec_seek_method"><a href="#fmod_codec_seek_method">FMOD_CODEC_SEEK_METHOD</a></h2>
<p>File seek methods.</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_CODEC_SEEK_METHOD_SET 0</span>
<span class="cp">#define FMOD_CODEC_SEEK_METHOD_CURRENT 1</span>
<span class="cp">#define FMOD_CODEC_SEEK_METHOD_END 2</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 id="fmod_codec_seek_method_set">FMOD_CODEC_SEEK_METHOD_SET</dt>
<dd>Seeks from the beginning.</dd>
<dt id="fmod_codec_seek_method_current">FMOD_CODEC_SEEK_METHOD_CURRENT</dt>
<dd>Seeks from the current position.</dd>
<dt id="fmod_codec_seek_method_end">FMOD_CODEC_SEEK_METHOD_END</dt>
<dd>Seeks from the end.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a></p>
<h2 api="callback" id="fmod_codec_setposition_callback"><a href="#fmod_codec_setposition_callback">FMOD_CODEC_SETPOSITION_CALLBACK</a></h2>
<p>Codec set position callback.</p>
<p>This callback is called to set the audible position of a codec instance.</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_CODEC_SETPOSITION_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">subsound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">position</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">postype</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>subsound</dt>
<dd>Subsound within which to seek. This is only used in file formats which can store multiple sounds within them, otherwise it will be 0.</dd>
<dt>position</dt>
<dd>Seek position in units determined by <code>postype</code>.</dd>
<dt>postype</dt>
<dd>Time units for <code>position</code>. This will be one of the timeunits supplied by the codec author in the <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a> structure. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a></li>
<li>Looping streams in the stream thread</li>
</ul>
<p><strong>Implementation detail:</strong></p>
<p>Read and seek within the file using the <code>fileread</code> and <code>fileseek</code> members of the <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a> structure that is passed in.</p>
<p><strong>Note!</strong>: Do not use your own filesystem.</p>
<p>The reasons for this are:</p>
<ul>
<li>The user may have set their own file system via user filesystem callbacks.</li>
<li>FMOD allows file reading via disk, memory and TCP/IP. If you use your own file routines you will lose this ability.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-channel.html#channel_getposition">Channel::getPosition</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_read_callback">FMOD_CODEC_READ_CALLBACK</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_getlength_callback">FMOD_CODEC_GETLENGTH_CALLBACK</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_getposition_callback">FMOD_CODEC_GETPOSITION_CALLBACK</a></p>
<h2 api="callback" id="fmod_codec_soundcreate_callback"><a href="#fmod_codec_soundcreate_callback">FMOD_CODEC_SOUNDCREATE_CALLBACK</a></h2>
<p>Codec sound create callback.</p>
<p>This callback is called after a <a class="apilink" href="core-api-sound.html">Sound</a> is created.</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_CODEC_SOUNDCREATE_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CODEC_STATE</span> <span class="o">*</span><span class="n">codec_state</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">subsound</span><span class="p">,</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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>codec_state</dt>
<dd>Codec state. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>)</dd>
<dt>subsound</dt>
<dd>Subsound index being created. This is only used in file formats which can store multiple sounds within them, otherwise it will be 0.</dd>
<dt>sound <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created Sound object. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></li>
<li><a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a></li>
</ul>
<p>Useful so the codec can set more parameters for the related created sound.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>, <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a></p>
<h2 api="struct" id="fmod_codec_state"><a href="#fmod_codec_state">FMOD_CODEC_STATE</a></h2>
<p>Codec state structure that is passed into each 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="k">typedef</span> <span class="k">struct</span> <span class="n">FMOD_CODEC_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_CODEC_WAVEFORMAT</span> <span class="o">*</span><span class="n">waveformat</span><span class="p">;</span>
<span class="n">FMOD_CODEC_STATE_FUNCTIONS</span> <span class="o">*</span><span class="n">functions</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">numsubsounds</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_CODEC_STATE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_CODEC_STATE</span>
<span class="p">{</span>
<span class="nx">plugindata</span><span class="p">;</span>
<span class="nx">waveformat</span><span class="p">;</span>
<span class="nx">functions</span><span class="p">;</span>
<span class="nx">numsubsounds</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_codec_state_plugindata">plugindata</dt>
<dd>Data that the plugin writer wants to attach to this object.</dd>
<dt id="fmod_codec_state_waveformat">waveformat <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Array of format structures containing information about each sound. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a>)</dd>
<dt id="fmod_codec_state_functions">functions <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Struct containing functions to give plug-in developers the ability to query system state, access system level functionality and helpers. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_state_functions">FMOD_CODEC_STATE_FUNCTIONS</a>)</dd>
<dt id="fmod_codec_state_numsubsounds">numsubsounds</dt>
<dd>Number of 'subsounds' in this sound. Anything other than 0 makes it a 'container' format.</dd>
</dl>
<p>'numsubsounds' should be 1+ if the file is a container format, and does not contain wav data itself. Examples of these types would be FSB (contains multiple sounds), DLS (contain instruments).</p>
<p>The waveformat value should point to an array of information based on how many subsounds are in the format. If the number of subsounds is 0 then it should point to 1 waveformat, the same as if the number of subsounds was 1. If subsounds was 100 for example, there should be a pointer to an array of 100 waveformat structures.</p>
<p>When a sound has 1 or more subsounds, the caller must play the individual sounds specified by first obtaining the subsound with <a class="apilink" href="core-api-sound.html#sound_getsubsound">Sound::getSubSound</a>.</p>
<h2 api="struct" id="fmod_codec_state_functions"><a href="#fmod_codec_state_functions">FMOD_CODEC_STATE_FUNCTIONS</a></h2>
<p>Struct containing functions to give plug-in developers the ability to query system state and access system level functionality and helpers.</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_CODEC_STATE_FUNCTIONS</span> <span class="p">{</span>
<span class="n">FMOD_CODEC_METADATA_FUNC</span> <span class="n">metadata</span><span class="p">;</span>
<span class="n">FMOD_CODEC_ALLOC_FUNC</span> <span class="n">alloc</span><span class="p">;</span>
<span class="n">FMOD_CODEC_FREE_FUNC</span> <span class="n">free</span><span class="p">;</span>
<span class="n">FMOD_CODEC_LOG_FUNC</span> <span class="n">log</span><span class="p">;</span>
<span class="n">FMOD_CODEC_FILE_READ_FUNC</span> <span class="n">read</span><span class="p">;</span>
<span class="n">FMOD_CODEC_FILE_SEEK_FUNC</span> <span class="n">seek</span><span class="p">;</span>
<span class="n">FMOD_CODEC_FILE_TELL_FUNC</span> <span class="n">tell</span><span class="p">;</span>
<span class="n">FMOD_CODEC_FILE_SIZE_FUNC</span> <span class="n">size</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_CODEC_STATE_FUNCTIONS</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 id="fmod_codec_state_functions_metadata">metadata <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>This will return a callable FMOD metadata function to use from codec. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_metadata_func">FMOD_CODEC_METADATA_FUNC</a>)</dd>
<dt id="fmod_codec_state_functions_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. (FMOD_CODEC_ALLOC_FUNC)</dd>
<dt id="fmod_codec_state_functions_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_CODEC_ALLOC_FUNC. (FMOD_CODEC_FREE_FUNC)</dd>
<dt id="fmod_codec_state_functions_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. (FMOD_CODEC_LOG_FUNC)</dd>
<dt id="fmod_codec_state_functions_read">read <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to read using a file handle. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_file_read_func">FMOD_CODEC_FILE_READ_FUNC</a>)</dd>
<dt id="fmod_codec_state_functions_seek">seek <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to seek using a file handle. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_file_seek_func">FMOD_CODEC_FILE_SEEK_FUNC</a>)</dd>
<dt id="fmod_codec_state_functions_tell">tell <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to get the current read cursor position of a file handle. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_file_tell_func">FMOD_CODEC_FILE_TELL_FUNC</a>)</dd>
<dt id="fmod_codec_state_functions_size">size <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Function to get the size using a file handle. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_file_size_func">FMOD_CODEC_FILE_SIZE_FUNC</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a></p>
<h2 api="struct" id="fmod_codec_waveformat"><a href="#fmod_codec_waveformat">FMOD_CODEC_WAVEFORMAT</a></h2>
<p>Codec wave format.</p>
<p>This structure defines the attributes of a sound, and determines the format of the <a class="apilink" href="core-api-sound.html">Sound</a> object when it is created with <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> or <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</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="k">typedef</span> <span class="k">struct</span> <span class="n">FMOD_CODEC_WAVEFORMAT</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="n">FMOD_SOUND_FORMAT</span> <span class="n">format</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">channels</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">frequency</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">lengthbytes</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">lengthpcm</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">pcmblocksize</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">loopstart</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">loopend</span><span class="p">;</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span><span class="p">;</span>
<span class="n">FMOD_CHANNELMASK</span> <span class="n">channelmask</span><span class="p">;</span>
<span class="n">FMOD_CHANNELORDER</span> <span class="n">channelorder</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">peakvolume</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_CODEC_WAVEFORMAT</span><span class="p">;</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_CODEC_WAVEFORMAT</span>
<span class="p">{</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">format</span><span class="p">,</span>
<span class="nx">channels</span><span class="p">,</span>
<span class="nx">frequency</span><span class="p">,</span>
<span class="nx">lengthbytes</span><span class="p">,</span>
<span class="nx">lengthpcm</span><span class="p">,</span>
<span class="nx">pcmblocksize</span><span class="p">,</span>
<span class="nx">loopstart</span><span class="p">,</span>
<span class="nx">loopend</span><span class="p">,</span>
<span class="nx">mode</span><span class="p">,</span>
<span class="nx">channelmask</span><span class="p">,</span>
<span class="nx">channelorder</span><span class="p">,</span>
<span class="nx">peakvolume</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<div class="admonition language-csharp">
<p>Currently not supported for C#.</p>
</div>
<dl>
<dt id="fmod_codec_waveformat_name">name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Name of sound. The codec must own the lifetime of the string memory until the codec is destroyed. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt id="fmod_codec_waveformat_format">format</dt>
<dd>Format for codec output. (<a class="apilink" href="core-api-sound.html#fmod_sound_format">FMOD_SOUND_FORMAT</a>)</dd>
<dt id="fmod_codec_waveformat_channels">channels</dt>
<dd>Number of channels.</dd>
<dt id="fmod_codec_waveformat_frequency">frequency</dt>
<dd>
<p>Default frequency of the codec.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_lengthbytes">lengthbytes <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Length of the source data. Used for <a class="apilink" href="core-api-common.html#fmod_timeunit_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_lengthpcm">lengthpcm</dt>
<dd>
<p>Length of the file. Used for <a class="apilink" href="core-api-sound.html#sound_getlength">Sound::getLength</a> and for memory allocation of static decompressed sample data.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_pcmblocksize">pcmblocksize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Minimum, optimal number of decompressed PCM samples codec can handle.</dd>
<dt id="fmod_codec_waveformat_loopstart">loopstart <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Loop start position.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_loopend">loopend <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Loop end position.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_mode">mode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Default sound loading mode. (<a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a>)</p>
<ul>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-common.html#fmod_default">FMOD_DEFAULT</a></li>
</ul>
</dd>
<dt id="fmod_codec_waveformat_channelmask">channelmask <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Channel bitmask to describe which speakers the channels in the codec map to, in order of channel count. (<a class="apilink" href="core-api-common.html#fmod_channelmask">FMOD_CHANNELMASK</a>)</dd>
<dt id="fmod_codec_waveformat_channelorder">channelorder <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Channel order type that describes where each <a href="glossary.html#audio-channel">audio channel</a> should pan for the number of channels specified. (<a class="apilink" href="core-api-common.html#fmod_channelorder">FMOD_CHANNELORDER</a>)</dd>
<dt id="fmod_codec_waveformat_peakvolume">peakvolume <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Peak volume of sound.</dd>
</dl>
<p>The format, channels, frequency and lengthpcm tell FMOD what sort of sound buffer to create when you initialize your code.</p>
<p>If you wrote an MP3 codec that decoded to stereo 16bit integer PCM for a 44khz sound, you would specify <a class="apilink" href="core-api-sound.html#fmod_sound_format_pcm16">FMOD_SOUND_FORMAT_PCM16</a>, and channels would be equal to 2, and frequency would be 44100.</p>
<p>1.07 Note. 'blockalign' member which was in bytes has been removed. 'pcmblocksize' is now the replacement, and is measured in PCM samples only, not bytes. This is purely to support buffering<br />
internal to FMOD for codecs that are not sample accurate.</p>
<p>Note: When registering a codec, format, channels, frequency and lengthpcm must be supplied, otherwise there will be an error.</p>
<p>This structure is optional if <a class="apilink" href="plugin-api-codec.html#fmod_codec_getwaveformat_callback">FMOD_CODEC_GETWAVEFORMAT_CALLBACK</a> is specified.</p>
<p>An array of these structures may be needed if <a class="apilink" href="plugin-api-codec.html#fmod_codec_state_numsubsounds">FMOD_CODEC_STATE::numsubsounds</a> is larger than 1.</p>
<p><strong>See Also:</strong> <a class="apilink" href="plugin-api-codec.html#fmod_codec_state">FMOD_CODEC_STATE</a>, <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</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>