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

3025 lines
208 KiB
HTML

<html>
<head>
<title>Core API Reference | Sound</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 class="manual-current-chapter manual-inactive-chapter"><a href="core-api.html">Core API Reference</a><ul class="subchapters"><li><a href="core-api-common.html">Common</a></li><li><a href="core-api-common-dsp-effects.html">Effect Parameters</a></li><li><a href="core-api-system.html">System</a></li><li class="manual-current-chapter manual-active-chapter"><a href="core-api-sound.html">Sound</a></li><li><a href="core-api-channelcontrol.html">ChannelControl</a></li><li><a href="core-api-channel.html">Channel</a></li><li><a href="core-api-channelgroup.html">ChannelGroup</a></li><li><a href="core-api-soundgroup.html">SoundGroup</a></li><li><a href="core-api-dsp.html">DSP</a></li><li><a href="core-api-dspconnection.html">DSPConnection</a></li><li><a href="core-api-geometry.html">Geometry</a></li><li><a href="core-api-reverb3d.html">Reverb3D</a></li><li><a href="core-api-platform-ios.html">iOS Specific</a></li><li><a href="core-api-platform-android.html">Android Specific</a></li></ul></li>
<li><a href="fsbank-api.html">FSBank API Reference</a></li>
<li><a href="plugin-api.html">Plug-in API Reference</a></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>7. Core API Reference | Sound</h1>
<p>Container for <a href="glossary.html#sample-data">sample data</a> that can be played on a <a class="apilink" href="core-api-channel.html">Channel</a>.</p>
<p>Create 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><strong>Format information:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_getname" title="Retrieves the name of a sound.">Sound::getName</a> Retrieves the name of a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getformat" title="Returns format information about the sound.">Sound::getFormat</a> Returns format information about the sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getlength" title="Retrieves the length using the specified time unit.">Sound::getLength</a> Retrieves the length using the specified time unit.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getnumtags" title="Retrieves the number of metadata tags.">Sound::getNumTags</a> Retrieves the number of metadata tags.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_gettag" title="Retrieves a metadata tag.">Sound::getTag</a> Retrieves a metadata tag.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-sound.html#fmod_tag" title="Tag data / metadata description.">FMOD_TAG</a> Tag data / metadata description.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-sound.html#fmod_sound_type" title="Recognized audio formats that can be loaded into a Sound.">FMOD_SOUND_TYPE</a> Recognized audio formats that can be loaded into a Sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#fmod_sound_format" title="These definitions describe the native format of the hardware or software buffer that will be used.">FMOD_SOUND_FORMAT</a> These definitions describe the native format of the hardware or software buffer that will be used.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#fmod_tagtype" title="List of tag data / metadata types that could be stored within a sound. These include id3 tags, metadata from netstreams and vorbis/asf data.">FMOD_TAGTYPE</a> List of tag data / metadata types that could be stored within a sound. These include id3 tags, metadata from netstreams and vorbis/asf data.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#fmod_tagdatatype" title="List of tag data / metadata types.">FMOD_TAGDATATYPE</a> List of tag data / metadata types.</span></li>
</ul>
<p><strong>Defaults when played:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_set3dconesettings" title="Sets the angles and attenuation levels of a 3D cone shape, for simulated occlusion which is based on direction.">Sound::set3DConeSettings</a> Sets the angles and attenuation levels of a 3D cone shape, for simulated occlusion which is based on direction.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_get3dconesettings" title="Retrieves the inside and outside angles of the 3D projection cone and the outside volume.">Sound::get3DConeSettings</a> Retrieves the inside and outside angles of the 3D projection cone and the outside volume.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_set3dcustomrolloff" title="Sets a custom roll-off shape for 3D distance attenuation.">Sound::set3DCustomRolloff</a> Sets a custom roll-off shape for 3D distance attenuation.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_get3dcustomrolloff" title="Retrieves the current custom roll-off shape for 3D distance attenuation.">Sound::get3DCustomRolloff</a> Retrieves the current custom roll-off shape for 3D distance attenuation.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_set3dminmaxdistance" title="Sets the minimum and maximum audible distance for a 3D sound.">Sound::set3DMinMaxDistance</a> Sets the minimum and maximum audible distance for a 3D sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_get3dminmaxdistance" title="Retrieve the minimum and maximum audible distance for a 3D sound.">Sound::get3DMinMaxDistance</a> Retrieve the minimum and maximum audible distance for a 3D sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setdefaults" title="Sets a sound's default playback attributes.">Sound::setDefaults</a> Sets a sound's default playback attributes.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getdefaults" title="Retrieves a sound's default playback attributes.">Sound::getDefaults</a> Retrieves a sound's default playback attributes.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setmode" title="Sets or alters the mode of a sound.">Sound::setMode</a> Sets or alters the mode of a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getmode" title="Retrieves the mode of a sound.">Sound::getMode</a> Retrieves the mode of a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setloopcount" title="Sets the sound to loop a specified number of times before stopping if the playback mode is set to looping.">Sound::setLoopCount</a> Sets the sound to loop a specified number of times before stopping if the playback mode is set to looping.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getloopcount" title="Retrieves the sound's loop count.">Sound::getLoopCount</a> Retrieves the sound's loop count.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setlooppoints" title="Sets the loop points within a sound.">Sound::setLoopPoints</a> Sets the loop points within a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getlooppoints" title="Retrieves the loop points for a sound.">Sound::getLoopPoints</a> Retrieves the loop points for a sound.</span></li>
</ul>
<p><strong>Relationship management:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_setsoundgroup" title="Moves the sound from its existing SoundGroup to the specified sound group.">Sound::setSoundGroup</a> Moves the sound from its existing SoundGroup to the specified sound group.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsoundgroup" title="Retrieves the sound's current sound group.">Sound::getSoundGroup</a> Retrieves the sound's current sound group.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getnumsubsounds" title="Retrieves the number of subsounds stored within a sound.">Sound::getNumSubSounds</a> Retrieves the number of subsounds stored within a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsubsound" title="Retrieves a handle to a Sound object that is contained within the parent sound.">Sound::getSubSound</a> Retrieves a handle to a Sound object that is contained within the parent sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsubsoundparent" title="Retrieves the parent Sound object that contains this subsound.">Sound::getSubSoundParent</a> Retrieves the parent Sound object that contains this subsound.</span></li>
</ul>
<p><strong>Data reading:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_getopenstate" title="Retrieves the state a sound is in after being opened with the non blocking flag, or the current state of the streaming buffer.">Sound::getOpenState</a> Retrieves the state a sound is in after being opened with the non blocking flag, or the current state of the streaming buffer.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_readdata" title="Reads data from an opened sound to a specified buffer, using FMOD's internal codecs.">Sound::readData</a> Reads data from an opened sound to a specified buffer, using FMOD's internal codecs.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_seekdata" title="Seeks a sound for use with data reading, using FMOD's internal codecs.">Sound::seekData</a> Seeks a sound for use with data reading, using FMOD's internal codecs.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_lock" title="Gives access to a portion or all the sample data of a sound for direct manipulation.">Sound::lock</a> Gives access to a portion or all the sample data of a sound for direct manipulation.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_unlock" title="Finalizes a previous sample data lock and submits it back to the Sound object.">Sound::unlock</a> Finalizes a previous sample data lock and submits it back to the Sound object.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-sound.html#fmod_openstate" title="These values describe what state a sound is in after FMOD_NONBLOCKING has been used to open it.">FMOD_OPENSTATE</a> These values describe what state a sound is in after FMOD_NONBLOCKING has been used to open it.</span></li>
</ul>
<p><strong>Music:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_getmusicnumchannels" title="Gets the number of music channels inside a MOD/S3M/XM/IT/MIDI file.">Sound::getMusicNumChannels</a> Gets the number of music channels inside a MOD/S3M/XM/IT/MIDI file.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setmusicchannelvolume" title="Sets the volume of a MOD/S3M/XM/IT/MIDI music channel volume.">Sound::setMusicChannelVolume</a> Sets the volume of a MOD/S3M/XM/IT/MIDI music channel volume.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getmusicchannelvolume" title="Retrieves the volume of a MOD/S3M/XM/IT/MIDI music channel volume.">Sound::getMusicChannelVolume</a> Retrieves the volume of a MOD/S3M/XM/IT/MIDI music channel volume.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setmusicspeed" title="Sets the relative speed of MOD/S3M/XM/IT/MIDI music.">Sound::setMusicSpeed</a> Sets the relative speed of MOD/S3M/XM/IT/MIDI music.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getmusicspeed" title="Gets the relative speed of MOD/S3M/XM/IT/MIDI music.">Sound::getMusicSpeed</a> Gets the relative speed of MOD/S3M/XM/IT/MIDI music.</span></li>
</ul>
<p><strong>Synchronization / markers:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsyncpoint" title="Retrieve a sync point.">Sound::getSyncPoint</a> Retrieve a sync point.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsyncpointinfo" title="Retrieves information on an embedded sync point.">Sound::getSyncPointInfo</a> Retrieves information on an embedded sync point.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints" title="Retrieves the number of sync points stored within a sound.">Sound::getNumSyncPoints</a> Retrieves the number of sync points stored within a sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_addsyncpoint" title="Adds a sync point at a specific time within the sound.">Sound::addSyncPoint</a> Adds a sync point at a specific time within the sound.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_deletesyncpoint" title="Deletes a sync point within the sound.">Sound::deleteSyncPoint</a> Deletes a sync point within the sound.</span></li>
</ul>
<p><strong>General:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-sound.html#sound_release" title="Frees a sound object.">Sound::release</a> Frees a sound object.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_setuserdata" title="Sets a user value associated with this object.">Sound::setUserData</a> Sets a user value associated with this object.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getuserdata" title="Retrieves a user value associated with this object.">Sound::getUserData</a> Retrieves a user value associated with this object.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#sound_getsystemobject" title="Retrieves the parent System object.">Sound::getSystemObject</a> Retrieves the parent System object.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-sound.html#fmod_sound_pcmread_callback" title="Read callback used for user created sounds or to intercept FMOD's decoder during a normal sound open.">FMOD_SOUND_PCMREAD_CALLBACK</a> Read callback used for user created sounds or to intercept FMOD's decoder during a normal sound open.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#fmod_sound_pcmsetpos_callback" title="Set position callback for user created sounds or to intercept FMOD's decoder during an API setPositon call.">FMOD_SOUND_PCMSETPOS_CALLBACK</a> Set position callback for user created sounds or to intercept FMOD's decoder during an API setPositon call.</span></li>
<li><span><a class="apilink" href="core-api-sound.html#fmod_sound_nonblock_callback" title="Callback to be called when a sound has finished loading, or a non blocking seek is occuring.">FMOD_SOUND_NONBLOCK_CALLBACK</a> Callback to be called when a sound has finished loading, or a non blocking seek is occuring.</span></li>
</ul>
<h2 api="enum" id="fmod_openstate"><a href="#fmod_openstate">FMOD_OPENSTATE</a></h2>
<p>These values describe what state a sound is in after FMOD_NONBLOCKING has been used to open it.</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-csharp">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">enum</span> <span class="n">FMOD_OPENSTATE</span> <span class="p">{</span>
<span class="n">FMOD_OPENSTATE_READY</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_LOADING</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_ERROR</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_CONNECTING</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_BUFFERING</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_SEEKING</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_PLAYING</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_SETPOSITION</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_OPENSTATE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">OPENSTATE</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">READY</span><span class="p">,</span>
<span class="n">LOADING</span><span class="p">,</span>
<span class="n">ERROR</span><span class="p">,</span>
<span class="n">CONNECTING</span><span class="p">,</span>
<span class="n">BUFFERING</span><span class="p">,</span>
<span class="n">SEEKING</span><span class="p">,</span>
<span class="n">PLAYING</span><span class="p">,</span>
<span class="n">SETPOSITION</span><span class="p">,</span>
<span class="n">MAX</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_READY</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_LOADING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_ERROR</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_CONNECTING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_BUFFERING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_SEEKING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_PLAYING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_SETPOSITION</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">OPENSTATE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_openstate_ready">FMOD_OPENSTATE_READY</dt>
<dd>Opened and ready to play. </dd>
<dt id="fmod_openstate_loading">FMOD_OPENSTATE_LOADING</dt>
<dd>Initial load in progress. </dd>
<dt id="fmod_openstate_error">FMOD_OPENSTATE_ERROR</dt>
<dd>Failed to open - file not found, out of memory etc. See return value of <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a> for what happened. </dd>
<dt id="fmod_openstate_connecting">FMOD_OPENSTATE_CONNECTING</dt>
<dd>Connecting to remote host (internet sounds only). </dd>
<dt id="fmod_openstate_buffering">FMOD_OPENSTATE_BUFFERING</dt>
<dd>Buffering data. </dd>
<dt id="fmod_openstate_seeking">FMOD_OPENSTATE_SEEKING</dt>
<dd>Seeking to subsound and re-flushing stream buffer. </dd>
<dt id="fmod_openstate_playing">FMOD_OPENSTATE_PLAYING</dt>
<dd>Ready and playing, but not possible to release at this time without stalling the main thread. </dd>
<dt id="fmod_openstate_setposition">FMOD_OPENSTATE_SETPOSITION</dt>
<dd>Seeking within a stream to a different position. </dd>
<dt id="fmod_openstate_max">FMOD_OPENSTATE_MAX</dt>
<dd>Maximum number of open state types. </dd>
</dl>
<p>With streams, if you are using <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a>, note that if the user calls <a class="apilink" href="core-api-sound.html#sound_getsubsound">Sound::getSubSound</a>, a stream will go into <a class="apilink" href="core-api-sound.html#fmod_openstate_seeking">FMOD_OPENSTATE_SEEKING</a> state and sound related commands will return <a class="apilink" href="core-api-common.html#fmod_err_notready">FMOD_ERR_NOTREADY</a>.</p>
<p>With streams, if you are using <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a>, note that if the user calls <a class="apilink" href="core-api-channel.html#channel_getposition">Channel::getPosition</a>, a stream will go into <a class="apilink" href="core-api-sound.html#fmod_openstate_setposition">FMOD_OPENSTATE_SETPOSITION</a> state and sound related commands will return <a class="apilink" href="core-api-common.html#fmod_err_notready">FMOD_ERR_NOTREADY</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a>, <a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a></p>
<h2 api="function" id="sound_addsyncpoint"><a href="#sound_addsyncpoint">Sound::addSyncPoint</a></h2>
<p>Adds a sync point at a specific time within the sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">addSyncPoint</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">offset</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">offsettype</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_SYNCPOINT</span> <span class="o">**</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_AddSyncPoint</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">offset</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">offsettype</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_SYNCPOINT</span> <span class="o">**</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">addSyncPoint</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">offset</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">offsettype</span><span class="p">,</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">addSyncPoint</span><span class="p">(</span>
<span class="nx">offset</span><span class="p">,</span>
<span class="nx">offsettype</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">point</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>offset</dt>
<dd>Offset value.</dd>
<dt>offsettype</dt>
<dd><code>offset</code> unit type. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Sync point name. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>point <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Sync point. (<a class="apilink" href="core-api-common.html#fmod_syncpoint">FMOD_SYNCPOINT</a>)</dd>
</dl>
<p>For more information on sync points see <a href="glossary.html#sync-points">Sync Points</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints">Sound::getNumSyncPoints</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpoint">Sound::getSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpointinfo">Sound::getSyncPointInfo</a>, <a class="apilink" href="core-api-sound.html#sound_deletesyncpoint">Sound::deleteSyncPoint</a></p>
<h2 api="function" id="sound_deletesyncpoint"><a href="#sound_deletesyncpoint">Sound::deleteSyncPoint</a></h2>
<p>Deletes a sync point within the sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">deleteSyncPoint</span><span class="p">(</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">*</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_DeleteSyncPoint</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">*</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">deleteSyncPoint</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">deleteSyncPoint</span><span class="p">(</span>
<span class="nx">point</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>point</dt>
<dd>Sync point. (<a class="apilink" href="core-api-common.html#fmod_syncpoint">FMOD_SYNCPOINT</a>)</dd>
</dl>
<p>For for more information on sync points see <a href="glossary.html#sync-points">Sync Points</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_addsyncpoint">Sound::addSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints">Sound::getNumSyncPoints</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpoint">Sound::getSyncPoint</a></p>
<h2 api="enum" id="fmod_sound_format"><a href="#fmod_sound_format">FMOD_SOUND_FORMAT</a></h2>
<p>These definitions describe the native format of the hardware or software buffer that will be used.</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-csharp">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">enum</span> <span class="n">FMOD_SOUND_FORMAT</span> <span class="p">{</span>
<span class="n">FMOD_SOUND_FORMAT_NONE</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_PCM8</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_PCM16</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_PCM24</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_PCM32</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_PCMFLOAT</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_BITSTREAM</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT_MAX</span>
<span class="p">}</span> <span class="n">FMOD_SOUND_FORMAT</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">SOUND_FORMAT</span>
<span class="p">{</span>
<span class="n">NONE</span><span class="p">,</span>
<span class="n">PCM8</span><span class="p">,</span>
<span class="n">PCM16</span><span class="p">,</span>
<span class="n">PCM24</span><span class="p">,</span>
<span class="n">PCM32</span><span class="p">,</span>
<span class="n">PCMFLOAT</span><span class="p">,</span>
<span class="n">BITSTREAM</span><span class="p">,</span>
<span class="n">MAX</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_NONE</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_PCM8</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_PCM16</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_PCM24</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_PCM32</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_PCMFLOAT</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_BITSTREAM</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_FORMAT_MAX</span>
</pre></div>
<dl>
<dt id="fmod_sound_format_none">FMOD_SOUND_FORMAT_NONE</dt>
<dd>Uninitalized / unknown.</dd>
<dt id="fmod_sound_format_pcm8">FMOD_SOUND_FORMAT_PCM8</dt>
<dd>8bit integer PCM data.</dd>
<dt id="fmod_sound_format_pcm16">FMOD_SOUND_FORMAT_PCM16</dt>
<dd>16bit integer PCM data.</dd>
<dt id="fmod_sound_format_pcm24">FMOD_SOUND_FORMAT_PCM24</dt>
<dd>24bit integer PCM data.</dd>
<dt id="fmod_sound_format_pcm32">FMOD_SOUND_FORMAT_PCM32</dt>
<dd>32bit integer PCM data.</dd>
<dt id="fmod_sound_format_pcmfloat">FMOD_SOUND_FORMAT_PCMFLOAT</dt>
<dd>32bit floating point PCM data.</dd>
<dt id="fmod_sound_format_bitstream">FMOD_SOUND_FORMAT_BITSTREAM</dt>
<dd>Sound data is in its native compressed format. See <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a></dd>
<dt id="fmod_sound_format_max">FMOD_SOUND_FORMAT_MAX</dt>
<dd>Maximum number of sound formats supported.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>, <a class="apilink" href="core-api-sound.html#sound_getformat">Sound::getFormat</a></p>
<h2 api="function" id="sound_get3dconesettings"><a href="#sound_get3dconesettings">Sound::get3DConeSettings</a></h2>
<p>Retrieves the inside and outside angles of the 3D projection cone and the outside volume.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">get3DConeSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">insideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">outsideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Get3DConeSettings</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">insideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">outsideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">get3DConeSettings</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">insideconeangle</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">outsideconeangle</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">get3DConeSettings</span><span class="p">(</span>
<span class="nx">insideconeangle</span><span class="p">,</span>
<span class="nx">outsideconeangle</span><span class="p">,</span>
<span class="nx">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>insideconeangle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Inside cone angle. This is the angle within which the sound is unattenuated.</p>
<ul>
<li><span class="label">Units:</span> Degrees</li>
<li><span class="label">Range:</span> [0, <code>outsideconeangle</code>]</li>
<li><span class="label">Default:</span> 360</li>
</ul>
</dd>
<dt>outsideconeangle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Outside cone angle. This is the angle outside of which the sound is attenuated to its outside volume.</p>
<ul>
<li><span class="label">Units:</span> Degrees</li>
<li><span class="label">Range:</span> [<code>insideconeangle</code>, 360]</li>
<li><span class="label">Default:</span> 360</li>
</ul>
</dd>
<dt>outsidevolume <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Cone outside volume.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Range:</span> [0, 1]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_set3dconesettings">Sound::set3DConeSettings</a></p>
<h2 api="function" id="sound_get3dcustomrolloff"><a href="#sound_get3dcustomrolloff">Sound::get3DCustomRolloff</a></h2>
<p>Retrieves the current custom roll-off shape for 3D distance attenuation.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">get3DCustomRolloff</span><span class="p">(</span>
<span class="n">FMOD_VECTOR</span> <span class="o">**</span><span class="n">points</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Get3DCustomRolloff</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">**</span><span class="n">points</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">get3DCustomRolloff</span><span class="p">(</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">points</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">get3DCustomRolloff</span><span class="p">(</span>
<span class="nx">points</span><span class="p">,</span>
<span class="nx">numpoints</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>points <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Array of points sorted by distance where x = distance and y = volume from 0 to 1. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>numpoints <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of <code>points</code>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_set3dcustomrolloff">Sound::set3DCustomRolloff</a></p>
<h2 api="function" id="sound_get3dminmaxdistance"><a href="#sound_get3dminmaxdistance">Sound::get3DMinMaxDistance</a></h2>
<p>Retrieve the minimum and maximum audible distance for a 3D sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">get3DMinMaxDistance</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">min</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Get3DMinMaxDistance</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">min</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">get3DMinMaxDistance</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">min</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">get3DMinMaxDistance</span><span class="p">(</span>
<span class="nx">min</span><span class="p">,</span>
<span class="nx">max</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>min <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Minimum volume distance for the sound.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
<dt>max <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum volume distance for the sound.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
<li><span class="label">Default:</span> 10000</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_set3dminmaxdistance">Sound::set3DMinMaxDistance</a></p>
<h2 api="function" id="sound_getdefaults"><a href="#sound_getdefaults">Sound::getDefaults</a></h2>
<p>Retrieves a sound's default playback attributes.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getDefaults</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">frequency</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetDefaults</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">frequency</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getDefaults</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">frequency</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getDefaults</span><span class="p">(</span>
<span class="nx">frequency</span><span class="p">,</span>
<span class="nx">priority</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>frequency <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Default playback frequency.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 48000</li>
</ul>
</dd>
<dt>priority <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Default priority where 0 is the highest priority.</p>
<ul>
<li><span class="label">Range:</span> [0, 256]</li>
<li><span class="label">Default:</span> 128</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setdefaults">Sound::setDefaults</a></p>
<h2 api="function" id="sound_getformat"><a href="#sound_getformat">Sound::getFormat</a></h2>
<p>Returns format information about the sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getFormat</span><span class="p">(</span>
<span class="n">FMOD_SOUND_TYPE</span> <span class="o">*</span><span class="n">type</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT</span> <span class="o">*</span><span class="n">format</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">channels</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">bits</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetFormat</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE</span> <span class="o">*</span><span class="n">type</span><span class="p">,</span>
<span class="n">FMOD_SOUND_FORMAT</span> <span class="o">*</span><span class="n">format</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">channels</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">bits</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getFormat</span><span class="p">(</span>
<span class="k">out</span> <span class="n">SOUND_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="k">out</span> <span class="n">SOUND_FORMAT</span> <span class="n">format</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">channels</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">bits</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getFormat</span><span class="p">(</span>
<span class="nx">type</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">bits</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>type <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Type of sound. (<a class="apilink" href="core-api-sound.html#fmod_sound_type">FMOD_SOUND_TYPE</a>)</dd>
<dt>format <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Format of the sound. (<a class="apilink" href="core-api-sound.html#fmod_sound_format">FMOD_SOUND_FORMAT</a>)</dd>
<dt>channels <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of channels.</dd>
<dt>bits <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of bits per sample, corresponding to <code>format</code>.</dd>
</dl>
<h2 api="function" id="sound_getlength"><a href="#sound_getlength">Sound::getLength</a></h2>
<p>Retrieves the length using the specified time unit.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getLength</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="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetLength</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getLength</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">length</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">lengthtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getLength</span><span class="p">(</span>
<span class="nx">length</span><span class="p">,</span>
<span class="nx">lengthtype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>length <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Sound length in units specified by <code>lengthtype</code>.</dd>
<dt>lengthtype</dt>
<dd>Time unit type to retrieve into <code>length</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p><code>lengthtype</code> must be valid for the file format. For example, an MP3 file does not support <a class="apilink" href="core-api-common.html#fmod_timeunit_modorder">FMOD_TIMEUNIT_MODORDER</a>.</p>
<p>A <code>length</code> of 0xFFFFFFFF means it is of unlimited length, such as an internet radio stream or MOD/S3M/XM/IT file which may loop forever.</p>
<p><strong>Note:</strong> Using a VBR (Variable Bit Rate) source that does not have metadata containing its accurate length (such as un-tagged MP3 or MOD/S3M/XM/IT) may return inaccurate length values.<br />
For these formats, use <a class="apilink" href="core-api-common.html#fmod_accuratetime">FMOD_ACCURATETIME</a> when creating the sound. This will cause a slight delay and memory increase, as FMOD will scan the whole during creation to find the correct length. This flag also creates a seek table to enable sample accurate seeking.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="function" id="sound_getloopcount"><a href="#sound_getloopcount">Sound::getLoopCount</a></h2>
<p>Retrieves the sound's loop count.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getLoopCount</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetLoopCount</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getLoopCount</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getLoopCount</span><span class="p">(</span>
<span class="nx">loopcount</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>loopcount <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Number of times to loop before final playback where -1 is always loop. 0 means no loop.</p>
<ul>
<li><span class="label">Range:</span> [-1, inf)</li>
<li><span class="label">Default:</span> -1</li>
</ul>
</dd>
</dl>
<p>Unlike the <a class="apilink" href="core-api-channel.html">Channel</a> loop count function, this function simply returns the value set with <a class="apilink" href="core-api-sound.html#sound_setloopcount">Sound::setLoopCount</a>. It does not decrement as it plays (especially seeing as one sound can be played multiple times).</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setloopcount">Sound::setLoopCount</a>, <a class="apilink" href="core-api-channel.html#channel_setloopcount">Channel::setLoopCount</a></p>
<h2 api="function" id="sound_getlooppoints"><a href="#sound_getlooppoints">Sound::getLoopPoints</a></h2>
<p>Retrieves the loop points for a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getLoopPoints</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">loopstart</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">loopend</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetLoopPoints</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">loopstart</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">loopend</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getLoopPoints</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">loopstart</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">loopend</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getLoopPoints</span><span class="p">(</span>
<span class="nx">loopstart</span><span class="p">,</span>
<span class="nx">loopstarttype</span><span class="p">,</span>
<span class="nx">loopend</span><span class="p">,</span>
<span class="nx">loopendtype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>loopstart <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Loop start point.</dd>
<dt>loopstarttype</dt>
<dd>Time format of <code>loopstart</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
<dt>loopend <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Loop end point.</dd>
<dt>loopendtype</dt>
<dd>Time format of <code>loopend</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>The values from <code>loopstart</code> and <code>loopend</code> are inclusive, which means these positions will be played.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setlooppoints">Sound::setLoopPoints</a></p>
<h2 api="function" id="sound_getmode"><a href="#sound_getmode">Sound::getMode</a></h2>
<p>Retrieves the mode of a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getMode</span><span class="p">(</span>
<span class="n">FMOD_MODE</span> <span class="o">*</span><span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetMode</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="o">*</span><span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getMode</span><span class="p">(</span>
<span class="k">out</span> <span class="n">MODE</span> <span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getMode</span><span class="p">(</span>
<span class="nx">mode</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>mode <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Current mode. (<a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a>)</dd>
</dl>
<p>The mode will be dependent on the mode set by a call to <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> or <a class="apilink" href="core-api-sound.html#sound_setmode">Sound::setMode</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setmode">ChannelControl::setMode</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_getmode">ChannelControl::getMode</a></p>
<h2 api="function" id="sound_getmusicchannelvolume"><a href="#sound_getmusicchannelvolume">Sound::getMusicChannelVolume</a></h2>
<p>Retrieves the volume of a MOD/S3M/XM/IT/MIDI music channel volume.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getMusicChannelVolume</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetMusicChannelVolume</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getMusicChannelVolume</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getMusicChannelVolume</span><span class="p">(</span>
<span class="nx">channel</span><span class="p">,</span>
<span class="nx">volume</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channel</dt>
<dd>MOD/S3M/XM/IT/MIDI music subchannel to retrieve the volume for.</dd>
<dt>volume <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Volume of the channel.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Range:</span> [0, 1]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setmusicchannelvolume">Sound::setMusicChannelVolume</a></p>
<h2 api="function" id="sound_getmusicnumchannels"><a href="#sound_getmusicnumchannels">Sound::getMusicNumChannels</a></h2>
<p>Gets the number of music channels inside a MOD/S3M/XM/IT/MIDI file.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getMusicNumChannels</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numchannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetMusicNumChannels</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numchannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getMusicNumChannels</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numchannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getMusicNumChannels</span><span class="p">(</span>
<span class="nx">numchannels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numchannels <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of music channels used in the song.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setmusicchannelvolume">Sound::setMusicChannelVolume</a>, <a class="apilink" href="core-api-sound.html#sound_getmusicchannelvolume">Sound::getMusicChannelVolume</a></p>
<h2 api="function" id="sound_getmusicspeed"><a href="#sound_getmusicspeed">Sound::getMusicSpeed</a></h2>
<p>Gets the relative speed of MOD/S3M/XM/IT/MIDI music.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getMusicSpeed</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetMusicSpeed</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getMusicSpeed</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getMusicSpeed</span><span class="p">(</span>
<span class="nx">speed</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>speed <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Speed of the song.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setmusicspeed">Sound::setMusicSpeed</a></p>
<h2 api="function" id="sound_getname"><a href="#sound_getname">Sound::getName</a></h2>
<p>Retrieves the name of a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getName</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>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetName</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getName</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getName</span><span class="p">(</span>
<span class="nx">name</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Name of the sound. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>
<p>Length of buffer to receive <code>name</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>if <a class="apilink" href="core-api-common.html#fmod_lowmem">FMOD_LOWMEM</a> has been specified in <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>, this function will return "(null)".</p>
<h2 api="function" id="sound_getnumsubsounds"><a href="#sound_getnumsubsounds">Sound::getNumSubSounds</a></h2>
<p>Retrieves the number of subsounds stored within a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getNumSubSounds</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsubsounds</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetNumSubSounds</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsubsounds</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getNumSubSounds</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numsubsounds</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getNumSubSounds</span><span class="p">(</span>
<span class="nx">numsubsounds</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numsubsounds <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of subsounds.</dd>
</dl>
<p>A format that has subsounds is a container format, such as FSB, DLS, MOD, S3M, XM, IT.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getsubsound">Sound::getSubSound</a></p>
<h2 api="function" id="sound_getnumsyncpoints"><a href="#sound_getnumsyncpoints">Sound::getNumSyncPoints</a></h2>
<p>Retrieves the number of sync points stored within a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getNumSyncPoints</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsyncpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetNumSyncPoints</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsyncpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getNumSyncPoints</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numsyncpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getNumSyncPoints</span><span class="p">(</span>
<span class="nx">numsyncpoints</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numsyncpoints <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of sync points.</dd>
</dl>
<p>For for more information on sync points see <a href="glossary.html#sync-points">Sync Points</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getsyncpoint">Sound::getSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpointinfo">Sound::getSyncPointInfo</a>, <a class="apilink" href="core-api-sound.html#sound_addsyncpoint">Sound::addSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_deletesyncpoint">Sound::deleteSyncPoint</a></p>
<h2 api="function" id="sound_getnumtags"><a href="#sound_getnumtags">Sound::getNumTags</a></h2>
<p>Retrieves the number of metadata tags.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getNumTags</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numtags</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numtagsupdated</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetNumTags</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numtags</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numtagsupdated</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getNumTags</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numtags</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numtagsupdated</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getNumTags</span><span class="p">(</span>
<span class="nx">numtags</span><span class="p">,</span>
<span class="nx">numtagsupdated</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numtags <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of tags.</dd>
<dt>numtagsupdated <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of tags updated since this function was last called.</dd>
</dl>
<p>'Tags' are metadata stored within a sound file. These can be things like a song's name, composer etc.</p>
<p><code>numtagsupdated</code> could be periodically checked to see if new tags are available in certain circumstances. This might be the case with internet based streams (i.e. shoutcast or icecast) where the name of the song or other attributes might change.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a></p>
<h2 api="function" id="sound_getopenstate"><a href="#sound_getopenstate">Sound::getOpenState</a></h2>
<p>Retrieves the state a sound is in after being opened with the non blocking flag, or the current state of the streaming buffer.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getOpenState</span><span class="p">(</span>
<span class="n">FMOD_OPENSTATE</span> <span class="o">*</span><span class="n">openstate</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">percentbuffered</span><span class="p">,</span>
<span class="kt">bool</span> <span class="o">*</span><span class="n">starving</span><span class="p">,</span>
<span class="kt">bool</span> <span class="o">*</span><span class="n">diskbusy</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetOpenState</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_OPENSTATE</span> <span class="o">*</span><span class="n">openstate</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">percentbuffered</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="o">*</span><span class="n">starving</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="o">*</span><span class="n">diskbusy</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getOpenState</span><span class="p">(</span>
<span class="k">out</span> <span class="n">OPENSTATE</span> <span class="n">openstate</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">percentbuffered</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">bool</span> <span class="n">starving</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">bool</span> <span class="n">diskbusy</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getOpenState</span><span class="p">(</span>
<span class="nx">openstate</span><span class="p">,</span>
<span class="nx">percentbuffered</span><span class="p">,</span>
<span class="nx">starving</span><span class="p">,</span>
<span class="nx">diskbusy</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>openstate <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Open state of a sound. (<a class="apilink" href="core-api-sound.html#fmod_openstate">FMOD_OPENSTATE</a>)</dd>
<dt>percentbuffered <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Filled percentage of a stream's file buffer.</p>
<ul>
<li><span class="label">Units:</span> Percent</li>
<li><span class="label">Range:</span> [0, 100]</li>
</ul>
</dd>
<dt>starving <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Starving state. true if a stream has decoded more than the stream file buffer has ready.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
<dt>diskbusy <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Disk is currently being accessed for this sound.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p>When a sound is opened with <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a>, it is opened and prepared in the background, or asynchronously. This allows the main application to execute without stalling on audio loads.<br />
This function will describe the state of the asynchronous load routine i.e. whether it has succeeded, failed or is still in progress.</p>
<p>If 'starving' is true, then you will most likely hear a stuttering/repeating sound as the decode buffer loops on itself and replays old data.<br />
With the ability to detect stream starvation, muting the sound with <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setmute">ChannelControl::setMute</a> will keep the stream quiet until it is not starving any more.</p>
<p><strong>Note:</strong> Always check 'openstate' to determine the state of the sound. Do not assume that if this function returns <a class="apilink" href="core-api-common.html#fmod_ok">FMOD_OK</a> then the sound has finished loading.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a></p>
<h2 api="function" id="sound_getsoundgroup"><a href="#sound_getsoundgroup">Sound::getSoundGroup</a></h2>
<p>Retrieves the sound's current sound group.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSoundGroup</span><span class="p">(</span>
<span class="n">SoundGroup</span> <span class="o">**</span><span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSoundGroup</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SOUNDGROUP</span> <span class="o">**</span><span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSoundGroup</span><span class="p">(</span>
<span class="k">out</span> <span class="n">SoundGroup</span> <span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSoundGroup</span><span class="p">(</span>
<span class="nx">soundgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>soundgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Sound's current sound group. (<a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setsoundgroup">Sound::setSoundGroup</a>, <a class="apilink" href="core-api-system.html#system_getmastersoundgroup">System::getMasterSoundGroup</a></p>
<h2 api="function" id="sound_getsubsound"><a href="#sound_getsubsound">Sound::getSubSound</a></h2>
<p>Retrieves a handle to a Sound object that is contained within the parent sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSubSound</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">Sound</span> <span class="o">**</span><span class="n">subsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSubSound</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_SOUND</span> <span class="o">**</span><span class="n">subsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSubSound</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">subsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSubSound</span><span class="p">(</span>
<span class="nx">index</span><span class="p">,</span>
<span class="nx">subsound</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>index</dt>
<dd>
<p>Index of the subsound.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-sound.html#sound_getnumsubsounds">Sound::getNumSubSounds</a>)</li>
</ul>
</dd>
<dt>subsound <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Subsound object. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
</dl>
<p>If the sound is a stream and <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> was not used, then this call will perform a blocking seek/flush to the specified subsound.</p>
<p>If <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> was used to open this sound and the sound is a stream, FMOD will do a non blocking seek/flush and set the state of the subsound to <a class="apilink" href="core-api-sound.html#fmod_openstate_seeking">FMOD_OPENSTATE_SEEKING</a>.</p>
<p>The sound won't be ready to be used when <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> is used, until the state of the sound becomes <a class="apilink" href="core-api-sound.html#fmod_openstate_ready">FMOD_OPENSTATE_READY</a> or <a class="apilink" href="core-api-sound.html#fmod_openstate_error">FMOD_OPENSTATE_ERROR</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getsubsoundparent">Sound::getSubSoundParent</a>, <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="function" id="sound_getsubsoundparent"><a href="#sound_getsubsoundparent">Sound::getSubSoundParent</a></h2>
<p>Retrieves the parent Sound object that contains this subsound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSubSoundParent</span><span class="p">(</span>
<span class="n">Sound</span> <span class="o">**</span><span class="n">parentsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSubSoundParent</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SOUND</span> <span class="o">**</span><span class="n">parentsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSubSoundParent</span><span class="p">(</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">parentsound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSubSoundParent</span><span class="p">(</span>
<span class="nx">parentsound</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>parentsound <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Parent sound object. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
</dl>
<p>If the sound is not a subsound, the <code>parentsound</code> will be null.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getnumsubsounds">Sound::getNumSubSounds</a>, <a class="apilink" href="core-api-sound.html#sound_getsubsound">Sound::getSubSound</a></p>
<h2 api="function" id="sound_getsyncpoint"><a href="#sound_getsyncpoint">Sound::getSyncPoint</a></h2>
<p>Retrieve a sync point.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSyncPoint</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">**</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSyncPoint</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">**</span><span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSyncPoint</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">point</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSyncPoint</span><span class="p">(</span>
<span class="nx">index</span><span class="p">,</span>
<span class="nx">point</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>index</dt>
<dd>
<p>Index of the sync point.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints">Sound::getNumSyncPoints</a>)</li>
</ul>
</dd>
<dt>point <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Sync point. (<a class="apilink" href="core-api-common.html#fmod_syncpoint">FMOD_SYNCPOINT</a>)</dd>
</dl>
<p>For for more information on sync points see <a href="glossary.html#sync-points">Sync Points</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints">Sound::getNumSyncPoints</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpointinfo">Sound::getSyncPointInfo</a>, <a class="apilink" href="core-api-sound.html#sound_addsyncpoint">Sound::addSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_deletesyncpoint">Sound::deleteSyncPoint</a></p>
<h2 api="function" id="sound_getsyncpointinfo"><a href="#sound_getsyncpointinfo">Sound::getSyncPointInfo</a></h2>
<p>Retrieves information on an embedded sync point.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSyncPointInfo</span><span class="p">(</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">*</span><span class="n">point</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="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">offset</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">offsettype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSyncPointInfo</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SYNCPOINT</span> <span class="o">*</span><span class="n">point</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="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">offset</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">offsettype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSyncPointInfo</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">point</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">string</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="k">out</span> <span class="kt">uint</span> <span class="n">offset</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">offsettype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSyncPointInfo</span><span class="p">(</span>
<span class="nx">point</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">namelen</span><span class="p">,</span>
<span class="nx">offset</span><span class="p">,</span>
<span class="nx">offsettype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>point</dt>
<dd>Sync point. (<a class="apilink" href="core-api-common.html#fmod_syncpoint">FMOD_SYNCPOINT</a>)</dd>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Name of the syncpoint. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>
<p>Size of <code>name</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>offset <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Offset of the syncpoint.</dd>
<dt>offsettype</dt>
<dd>Format of <code>offset</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>For for more information on sync points see <a href="glossary.html#sync-points">Sync Points</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getnumsyncpoints">Sound::getNumSyncPoints</a>, <a class="apilink" href="core-api-sound.html#sound_getsyncpoint">Sound::getSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_addsyncpoint">Sound::addSyncPoint</a>, <a class="apilink" href="core-api-sound.html#sound_deletesyncpoint">Sound::deleteSyncPoint</a></p>
<h2 api="function" id="sound_getsystemobject"><a href="#sound_getsystemobject">Sound::getSystemObject</a></h2>
<p>Retrieves the parent System 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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getSystemObject</span><span class="p">(</span>
<span class="n">System</span> <span class="o">**</span><span class="n">system</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetSystemObject</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">**</span><span class="n">system</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getSystemObject</span><span class="p">(</span>
<span class="k">out</span> <span class="n">System</span> <span class="n">system</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getSystemObject</span><span class="p">(</span>
<span class="nx">system</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>system <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>System object. (<a class="apilink" href="core-api-system.html">System</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="function" id="sound_gettag"><a href="#sound_gettag">Sound::getTag</a></h2>
<p>Retrieves a metadata tag.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getTag</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">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_TAG</span> <span class="o">*</span><span class="n">tag</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetTag</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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">int</span> <span class="n">index</span><span class="p">,</span>
<span class="n">FMOD_TAG</span> <span class="o">*</span><span class="n">tag</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getTag</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="k">out</span> <span class="n">TAG</span> <span class="n">tag</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getTag</span><span class="p">(</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">index</span><span class="p">,</span>
<span class="nx">tag</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name</dt>
<dd>Name of a type of tag to retrieve. (<a href="glossary.html#string-format">UTF-8 string</a>). Specify null to retrieve all types of tags.</dd>
<dt>index <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Index into the tag list as restricted by <code>name</code>.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-sound.html#sound_getnumtags">Sound::getNumTags</a>)</li>
</ul>
</dd>
<dt>tag <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Tag info structure. (<a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a>)</dd>
</dl>
<p>'Tags' are metadata stored within a sound file. These can be things like a song's name, composer etc.</p>
<p>The number of tags available can be found with <a class="apilink" href="core-api-sound.html#sound_getnumtags">Sound::getNumTags</a>.</p>
<p>The way to display or retrieve tags can be done in 3 different ways:</p>
<ul>
<li>All tags can be continuously retrieved by looping from 0 to the numtags value in <a class="apilink" href="core-api-sound.html#sound_getnumtags">Sound::getNumTags</a> - 1. Updated tags will refresh automatically, and the 'updated' member of the <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure will be set to true if a tag has been updated, due to something like a netstream changing the song name for example.</li>
<li>Tags can be retrieved by specifying -1 as the index and only updating tags that are returned. If all tags are retrieved and this function is called the function will return an error of <a class="apilink" href="core-api-common.html#fmod_err_tagnotfound">FMOD_ERR_TAGNOTFOUND</a>.</li>
<li>Specific tags can be retrieved by specifying a name parameter. The index can be 0 based or -1 in the same fashion as described previously.</li>
</ul>
<p>Note with netstreams an important consideration must be made between songs, a tag may occur that changes the playback rate of the song. It is up to the user to catch this and reset the playback rate with <a class="apilink" href="core-api-channel.html#channel_setfrequency">Channel::setFrequency</a>.<br />
A sample rate change will be signalled with a tag of type <a class="apilink" href="core-api-sound.html#fmod_tagtype_fmod">FMOD_TAGTYPE_FMOD</a>.</p>
<div class="highlight language-c"><pre><span></span> <span class="n">FMOD_TAG</span> <span class="n">tag</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">FMOD_Sound_GetTag</span><span class="p">(</span><span class="n">sound</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="n">FMOD_OK</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">tag</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">FMOD_TAGTYPE_FMOD</span><span class="p">)</span>
<span class="p">{</span>
<span class="cm">/* When a song changes, the sample rate may also change, so compensate here. */</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">tag</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&quot;Sample Rate Change&quot;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">channel</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">float</span> <span class="n">frequency</span> <span class="o">=</span> <span class="o">*</span><span class="p">((</span><span class="kt">float</span> <span class="o">*</span><span class="p">)</span><span class="n">tag</span><span class="p">.</span><span class="n">data</span><span class="p">);</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">FMOD_Channel_SetFrequency</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">frequency</span><span class="p">);</span>
<span class="n">ERRCHECK</span><span class="p">(</span><span class="n">result</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-cpp"><pre><span></span> <span class="n">FMOD_TAG</span> <span class="n">tag</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">sound</span><span class="o">-&gt;</span><span class="n">getTag</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">tag</span><span class="p">)</span> <span class="o">==</span> <span class="n">FMOD_OK</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">tag</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">FMOD_TAGTYPE_FMOD</span><span class="p">)</span>
<span class="p">{</span>
<span class="cm">/* When a song changes, the sample rate may also change, so compensate here. */</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">tag</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&quot;Sample Rate Change&quot;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">channel</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">float</span> <span class="n">frequency</span> <span class="o">=</span> <span class="o">*</span><span class="p">((</span><span class="kt">float</span> <span class="o">*</span><span class="p">)</span><span class="n">tag</span><span class="p">.</span><span class="n">data</span><span class="p">);</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">channel</span><span class="o">-&gt;</span><span class="n">setFrequency</span><span class="p">(</span><span class="n">frequency</span><span class="p">);</span>
<span class="n">ERRCHECK</span><span class="p">(</span><span class="n">result</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
<h2 api="function" id="sound_getuserdata"><a href="#sound_getuserdata">Sound::getUserData</a></h2>
<p>Retrieves a user value associated with this 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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">getUserData</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_GetUserData</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">getUserData</span><span class="p">(</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">getUserData</span><span class="p">(</span>
<span class="nx">userdata</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>User data set by calling <a class="apilink" href="core-api-sound.html#sound_setuserdata">Sound::setUserData</a></dd>
</dl>
<p>This function allows arbitrary user data to be retrieved from this object. See the <a href="glossary.html#user-data">User Data</a> section of the glossary for an example of how to get and set user data.</p>
<h2 api="function" id="sound_lock"><a href="#sound_lock">Sound::lock</a></h2>
<p>Gives access to a portion or all the sample data of a sound for direct manipulation.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">lock</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">offset</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">length</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">ptr1</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">ptr2</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">len1</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Lock</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">offset</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">length</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">ptr1</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">ptr2</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">len1</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="k">lock</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">offset</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">length</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">ptr1</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">ptr2</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">len1</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">lock</span><span class="p">(</span>
<span class="nx">offset</span><span class="p">,</span>
<span class="nx">length</span><span class="p">,</span>
<span class="nx">ptr1</span><span class="p">,</span>
<span class="nx">ptr2</span><span class="p">,</span>
<span class="nx">len1</span><span class="p">,</span>
<span class="nx">len2</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>offset</dt>
<dd>
<p>Offset into the sound's buffer to be retrieved.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>length</dt>
<dd>
<p>Length of the data required to be retrieved. If <code>offset</code> + <code>length</code> exceeds the length of the sample buffer, <code>ptr2</code> and <code>len2</code> will be valid.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>ptr1 <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>First part of the locked data.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>ptr2 <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Second part of the locked data if the <code>offset</code> + <code>length</code> has exceeded the length of the sample buffer.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>len1 <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Length of <code>ptr1</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>len2 <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Length of <code>ptr2</code></p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>You must always unlock the data again after you have finished with it, using <a class="apilink" href="core-api-sound.html#sound_unlock">Sound::unlock</a>.</p>
<p>With this function you get access to the raw audio data. If the data is 8, 16, 24 or 32bit PCM data, mono or stereo data, you must take this into consideration when processing the data. See <a href="glossary.html#sample-data">Sample Data</a> for more information.</p>
<p>If the sound is created with <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a> the data retrieved will be the compressed bitstream.</p>
<p>It is not possible to lock the following:</p>
<ul>
<li>A parent sound containing subsounds. A parent sound has no audio data and <a class="apilink" href="core-api-common.html#fmod_err_subsounds">FMOD_ERR_SUBSOUNDS</a> will be returned.</li>
<li>A stream / sound created with <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a>. <a class="apilink" href="core-api-common.html#fmod_err_badcommand">FMOD_ERR_BADCOMMAND</a> will be returned in this case.</li>
</ul>
<p>The names 'lock'/'unlock' are a legacy reference to older Operating System APIs that used to cause a mutex lock on the data, so that it could not be written to while the 'lock' was in place. This is no longer the case with FMOD and data can be 'locked' multiple times from different places/threads at once.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="callback" id="fmod_sound_nonblock_callback"><a href="#fmod_sound_nonblock_callback">FMOD_SOUND_NONBLOCK_CALLBACK</a></h2>
<p>Callback to be called when a sound has finished loading, or a non blocking seek is occuring.</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-csharp">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_SOUND_NONBLOCK_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_RESULT</span> <span class="n">result</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">delegate</span> <span class="n">RESULT</span> <span class="nf">SOUND_NONBLOCKCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">sound</span><span class="p">,</span>
<span class="n">RESULT</span> <span class="n">result</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>sound</dt>
<dd>Sound. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
<dt>result</dt>
<dd>Error code. (<a class="apilink" href="core-api-common.html#fmod_result">FMOD_RESULT</a>)</dd>
</dl>
<p>Invoked by:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> with <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> flag.</li>
<li><a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a> with <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> flag.</li>
<li><a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a> if <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> was opened with the <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> flag.</li>
</ul>
<p>Return code currently ignored.</p>
<p>Note that for non blocking streams a seek could occur when restarting the sound after the first playthrough. This will result in a callback being triggered again.</p>
<p>Since this callback can occur from the async thread, there are restrictions about what functions can be called during the callback. All Sound functions are safe to call, except for <a class="apilink" href="core-api-sound.html#sound_setsoundgroup">Sound::setSoundGroup</a> and <a class="apilink" href="core-api-sound.html#sound_release">Sound::release</a>. It is also safe to call <a class="apilink" href="core-api-system.html#system_getuserdata">System::getUserData</a>. The rest of the Core API and the Studio API is not allowed. Calling a non-allowed function will return <a class="apilink" href="core-api-common.html#fmod_err_invalid_thread">FMOD_ERR_INVALID_THREAD</a>.</p>
<div class="admonition language-cpp">
<p><code>sound</code> can be cast to <code>Sound *</code>.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a></p>
<h2 api="callback" id="fmod_sound_pcmread_callback"><a href="#fmod_sound_pcmread_callback">FMOD_SOUND_PCMREAD_CALLBACK</a></h2>
<p>Read callback used for user created sounds or to intercept FMOD's decoder during a normal sound open.</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-csharp">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_SOUND_PCMREAD_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">delegate</span> <span class="n">RESULT</span> <span class="nf">SOUND_PCMREADCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">sound</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">data</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">datalen</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="kd">function</span> <span class="nx">FMOD_SOUND_PCMREAD_CALLBACK</span><span class="p">(</span>
<span class="nx">sound</span><span class="p">,</span>
<span class="nx">data</span><span class="p">,</span>
<span class="nx">datalen</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>sound</dt>
<dd>Sound. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
<dt>data</dt>
<dd>PCM data that the user can either read or write to.</dd>
</dl>
<ul>
<li>Units: <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
<dl>
<dt>datalen</dt>
<dd>
<p>Length of the data.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</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>
<li><a class="apilink" href="core-api-sound.html#sound_readdata">Sound::readData</a></li>
</ul>
<p>Use cases:</p>
<ul>
<li>A <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> sound. The callback is used to write PCM data to a user created sound when requested.</li>
<li>During a normal <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>, the read callback will be issued with decoded pcm data, allowing it to be manipulated or copied somewhere else. The return value is ignored.</li>
</ul>
<p>The format of the sound can be retrieved with <a class="apilink" href="core-api-sound.html#sound_getformat">Sound::getFormat</a> from this callback. This will allow the user to determine what type of pointer to use if they are not sure what format the sound is.</p>
<div class="admonition language-cpp">
<p><code>sound</code> can be cast to <code>Sound *</code>.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#fmod_sound_pcmsetpos_callback">FMOD_SOUND_PCMSETPOS_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a></p>
<h2 api="callback" id="fmod_sound_pcmsetpos_callback"><a href="#fmod_sound_pcmsetpos_callback">FMOD_SOUND_PCMSETPOS_CALLBACK</a></h2>
<p>Set position callback for user created sounds or to intercept FMOD's decoder during an API setPositon call.</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-csharp">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_SOUND_PCMSETPOS_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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="highlight language-csharp"><pre><span></span><span class="k">delegate</span> <span class="n">RESULT</span> <span class="nf">SOUND_PCMSETPOSCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">subsound</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">position</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">postype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="kd">function</span> <span class="nx">FMOD_SOUND_PCMSETPOS_CALLBACK</span><span class="p">(</span>
<span class="nx">sound</span><span class="p">,</span>
<span class="nx">subsound</span><span class="p">,</span>
<span class="nx">position</span><span class="p">,</span>
<span class="nx">postype</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>sound</dt>
<dd>Sound. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
<dt>subsound</dt>
<dd>In a multi subsound type sound (ie .FSB or .DLS), this will contain the index into the list of sounds.</dd>
<dt>position</dt>
<dd>Requested seek position.</dd>
<dt>postype</dt>
<dd>
<p><code>position</code> type, or <a class="apilink" href="core-api-common.html#fmod_err_format">FMOD_ERR_FORMAT</a> if the sound is a user created sound and the seek type is unsupported. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</p>
<ul>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-common.html#fmod_timeunit_pcm">FMOD_TIMEUNIT_PCM</a></li>
</ul>
</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>
<li><a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a></li>
<li><a class="apilink" href="core-api-sound.html#sound_seekdata">Sound::seekData</a></li>
</ul>
<p>Use cases:</p>
<ul>
<li>A <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> created sound. The callback is used to allow seeking within the user's resource.</li>
<li>During a normal <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>, the setposition callback is purely informational and the return value is ignored.</li>
</ul>
<div class="admonition language-cpp">
<p><code>sound</code> can be cast to <code>Sound *</code>.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#fmod_sound_pcmread_callback">FMOD_SOUND_PCMREAD_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a></p>
<h2 api="function" id="sound_readdata"><a href="#sound_readdata">Sound::readData</a></h2>
<p>Reads data from an opened sound to a specified buffer, using FMOD's internal codecs.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">readData</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>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">read</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_ReadData</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</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>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">read</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">readData</span><span class="p">(</span>
<span class="kt">byte</span><span class="p">[]</span> <span class="n">buffer</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">readData</span><span class="p">(</span>
<span class="kt">byte</span><span class="p">[]</span> <span class="n">buffer</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">read</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">readData</span><span class="p">(</span>
<span class="nx">buffer</span><span class="p">,</span>
<span class="nx">length</span><span class="p">,</span>
<span class="nx">read</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>buffer</dt>
<dd>
<p>Buffer to read decoded data into.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>length</dt>
<dd>
<p>Amount of data to read into <code>buffer</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>read <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Actual amount of data read. May differ to <code>length</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>This can be used for decoding data offline in small pieces (or big pieces), rather than playing and capturing it, or loading the whole file at once and having to <a class="apilink" href="core-api-sound.html#sound_lock">Sound::lock</a> / <a class="apilink" href="core-api-sound.html#sound_unlock">Sound::unlock</a> the data.</p>
<p>If too much data is read, it is possible <a class="apilink" href="core-api-common.html#fmod_err_file_eof">FMOD_ERR_FILE_EOF</a> will be returned, meaning it is out of data. The 'read' parameter will reflect this by returning a smaller number of bytes read than was requested.</p>
<p>As a non streaming sound reads and decodes the whole file then closes it upon calling <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>, <a class="apilink" href="core-api-sound.html#sound_readdata">Sound::readData</a> will then not work because the file handle is closed. Use <a class="apilink" href="core-api-common.html#fmod_openonly">FMOD_OPENONLY</a> to stop FMOD reading/decoding the file.<br />
If <a class="apilink" href="core-api-common.html#fmod_openonly">FMOD_OPENONLY</a> flag is used when opening a sound, it will leave the file handle open, and FMOD will not read/decode any data internally, so the read cursor will stay at position 0. This will allow the user to read the data from the start.</p>
<p>For streams, the streaming engine will decode a small chunk of data and this will advance the read cursor. You need to either use <a class="apilink" href="core-api-common.html#fmod_openonly">FMOD_OPENONLY</a> to stop the stream pre-buffering or call <a class="apilink" href="core-api-sound.html#sound_seekdata">Sound::seekData</a> to reset the read cursor back to the start of the file, otherwise it will appear as if the start of the stream is missing.<br />
<a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a> will have the same result. These functions will flush the stream buffer and read in a chunk of audio internally. This is why if you want to read from an absolute position you should use <a class="apilink" href="core-api-sound.html#sound_seekdata">Sound::seekData</a> and not the previously mentioned functions.</p>
<p>If you are calling <a class="apilink" href="core-api-sound.html#sound_readdata">Sound::readData</a> and <a class="apilink" href="core-api-sound.html#sound_seekdata">Sound::seekData</a> on a stream, information functions such as <a class="apilink" href="core-api-channel.html#channel_getposition">Channel::getPosition</a> may give misleading results. Calling <a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a> will cause the streaming engine to reset and flush the stream, leading to the time values returning to their correct position.</p>
<p>NOTE! Thread safety. If you call this from another stream callback, or any other thread besides the main thread, make sure to mutex the callback with <a class="apilink" href="core-api-sound.html#sound_release">Sound::release</a> in case the sound is still being read from while releasing.</p>
<p>This function is thread safe to call from a stream callback or different thread as long as it doesnt conflict with a call to <a class="apilink" href="core-api-sound.html#sound_release">Sound::release</a>.</p>
<p><strong>See Also:</strong> <a href="core-guide.html#extracting-pcm-data-from-a-sound">Extracting PCM Data from a Sound</a>, <a class="apilink" href="core-api-sound.html#sound_lock">Sound::lock</a>, <a class="apilink" href="core-api-sound.html#sound_unlock">Sound::unlock</a></p>
<h2 api="function" id="sound_release"><a href="#sound_release">Sound::release</a></h2>
<p>Frees a sound 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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">release</span><span class="p">();</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Release</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="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">release</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">release</span><span class="p">();</span>
</pre></div>
<p>This will stop any instances of this sound, and free the sound object and its children if it is a multi-sound object.</p>
<p>If the sound was opened with <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> and hasn't finished opening yet, it will block. Additionally, if the sound is still playing or has recently been stopped, the release may stall, as the mixer may still be using the sound. Using <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a> and checking the open state for <a class="apilink" href="core-api-sound.html#fmod_openstate_ready">FMOD_OPENSTATE_READY</a> and <a class="apilink" href="core-api-sound.html#fmod_openstate_error">FMOD_OPENSTATE_ERROR</a> is a good way to avoid stalls.</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-sound.html#sound_getsubsound">Sound::getSubSound</a></p>
<h2 api="function" id="sound_seekdata"><a href="#sound_seekdata">Sound::seekData</a></h2>
<p>Seeks a sound for use with data reading, using FMOD's internal codecs.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">seekData</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">pcm</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SeekData</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">pcm</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">seekData</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">pcm</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">seekData</span><span class="p">(</span>
<span class="nx">pcm</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>pcm</dt>
<dd>
<p>Seek Offset.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
</ul>
</dd>
</dl>
<p>For use in conjunction with <a class="apilink" href="core-api-sound.html#sound_readdata">Sound::readData</a> and <a class="apilink" href="core-api-common.html#fmod_openonly">FMOD_OPENONLY</a>.</p>
<p>For streaming sounds, if this function is called, it will advance the internal file pointer but not update the streaming engine. This can lead to de-synchronization of position information for the stream and audible playback.</p>
<p>A stream can reset its stream buffer and position synchronization by calling <a class="apilink" href="core-api-channel.html#channel_setposition">Channel::setPosition</a>. This causes reset and flush of the stream buffer.</p>
<h2 api="function" id="sound_set3dconesettings"><a href="#sound_set3dconesettings">Sound::set3DConeSettings</a></h2>
<p>Sets the angles and attenuation levels of a 3D cone shape, for simulated occlusion which is based on direction.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">set3DConeSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">insideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Set3DConeSettings</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">insideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">set3DConeSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">insideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsideconeangle</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">set3DConeSettings</span><span class="p">(</span>
<span class="nx">insideconeangle</span><span class="p">,</span>
<span class="nx">outsideconeangle</span><span class="p">,</span>
<span class="nx">outsidevolume</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>insideconeangle</dt>
<dd>
<p>Inside cone angle. This is the angle spread within which the sound is unattenuated.</p>
<ul>
<li><span class="label">Units:</span> Degrees</li>
<li><span class="label">Range:</span> [0, <code>outsideconeangle</code>]</li>
<li><span class="label">Default:</span> 360</li>
</ul>
</dd>
<dt>outsideconeangle</dt>
<dd>
<p>Outside cone angle. This is the angle spread outside of which the sound is attenuated to its <code>outsidevolume</code>.</p>
<ul>
<li><span class="label">Units:</span> Degrees</li>
<li><span class="label">Range:</span> [<code>insideconeangle</code>, 360]</li>
<li><span class="label">Default:</span> 360</li>
</ul>
</dd>
<dt>outsidevolume</dt>
<dd>
<p>Cone outside volume.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Range:</span> [0, 1]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p>When <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dconeorientation">ChannelControl::set3DConeOrientation</a> is used and a 3D 'cone' is set up, attenuation will automatically occur for a sound based on the relative angle of the direction the cone is facing, vs the angle between the sound and the listener.</p>
<ul>
<li>If the relative angle is within the <code>insideconeangle</code>, the sound will not have any attenuation applied.</li>
<li>If the relative angle is between the <code>insideconeangle</code> and <code>outsideconeangle</code>, linear volume attenuation (between 1 and <code>outsidevolume</code>) is applied between the two angles until it reaches the <code>outsideconeangle</code>.</li>
<li>If the relative angle is outside of the <code>outsideconeangle</code> the volume does not attenuate any further.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_get3dconesettings">Sound::get3DConeSettings</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dconesettings">ChannelControl::set3DConeSettings</a></p>
<h2 api="function" id="sound_set3dcustomrolloff"><a href="#sound_set3dcustomrolloff">Sound::set3DCustomRolloff</a></h2>
<p>Sets a custom roll-off shape for 3D distance attenuation.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">set3DCustomRolloff</span><span class="p">(</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">points</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Set3DCustomRolloff</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">points</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">set3DCustomRolloff</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">points</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numpoints</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">set3DCustomRolloff</span><span class="p">(</span>
<span class="nx">points</span><span class="p">,</span>
<span class="nx">numpoints</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>points</dt>
<dd>Array of points sorted by distance, where <code>x</code> = distance and <code>y</code> = volume from 0 to 1. <code>z</code> should be set to 0. Pass null or equivalent to disable custom roll-off. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>numpoints</dt>
<dd>Number of <code>points</code>.</dd>
</dl>
<p>Must be used in conjunction with <a class="apilink" href="core-api-common.html#fmod_3d_customrolloff">FMOD_3D_CUSTOMROLLOFF</a> flag to be activated.</p>
<p>This function does not duplicate the memory for the points internally. The memory you pass to FMOD must remain valid while in use.</p>
<p>If <a class="apilink" href="core-api-common.html#fmod_3d_customrolloff">FMOD_3D_CUSTOMROLLOFF</a> is set and the roll-off shape is not set, FMOD will revert to <a class="apilink" href="core-api-common.html#fmod_3d_inverserolloff">FMOD_3D_INVERSEROLLOFF</a> roll-off mode.</p>
<p>When a custom roll-off is specified a sound's 3D 'minimum' and 'maximum' distances are ignored.</p>
<p>The distance in-between point values is linearly interpolated until the final point where the last value is held.</p>
<p>If the points are not sorted by distance, an error will result.</p>
<div class="highlight language-c-cpp"><pre><span></span><span class="c1">// Defining a custom array of points</span>
<span class="n">FMOD_VECTOR</span> <span class="n">curve</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span>
<span class="p">{</span>
<span class="p">{</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">0.0f</span> <span class="p">},</span>
<span class="p">{</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">0.2f</span><span class="p">,</span> <span class="mf">0.0f</span> <span class="p">},</span>
<span class="p">{</span> <span class="mf">20.0f</span><span class="p">,</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="mf">0.0f</span> <span class="p">}</span>
<span class="p">};</span>
</pre></div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_get3dcustomrolloff">Sound::get3DCustomRolloff</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dcustomrolloff">ChannelControl::set3DCustomRolloff</a></p>
<h2 api="function" id="sound_set3dminmaxdistance"><a href="#sound_set3dminmaxdistance">Sound::set3DMinMaxDistance</a></h2>
<p>Sets the minimum and maximum audible distance for a 3D sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">set3DMinMaxDistance</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">min</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Set3DMinMaxDistance</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">min</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">set3DMinMaxDistance</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">min</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">max</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">set3DMinMaxDistance</span><span class="p">(</span>
<span class="nx">min</span><span class="p">,</span>
<span class="nx">max</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>min</dt>
<dd>
<p>The sound's minimum volume distance, or the distance that the sound has no attenuation due to 3d positioning.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
<dt>max</dt>
<dd>
<p>The sound's maximum volume distance, or the distance that no additional attenuation will occur. See below for notes on different maxdistance behaviors.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
<li><span class="label">Default:</span> 10000</li>
</ul>
</dd>
</dl>
<p>The distances are meant to simulate the 'size' of a sound. Reducing the <code>min</code> distance will mean the sound appears smaller in the world, and in some modes makes the volume attenuate faster as the listener moves away from the sound.<br />
Increasing the <code>min</code> distance simulates a larger sound in the world, and in some modes makes the volume attenuate slower as the listener moves away from the sound.</p>
<p><code>max</code> will affect attenuation differently based on roll-off mode set in the <code>mode</code> parameter of <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>, <a class="apilink" href="core-api-sound.html#sound_setmode">Sound::setMode</a> or <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setmode">ChannelControl::setMode</a>.</p>
<p>For these modes the volume will attenuate to 0 volume (silence), when the distance from the sound is equal to or further than the <code>max</code> distance:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_3d_linearrolloff">FMOD_3D_LINEARROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_linearsquarerolloff">FMOD_3D_LINEARSQUAREROLLOFF</a></li>
</ul>
<p>For these modes the volume will stop attenuating at the point of the <code>max</code> distance, without affecting the <em>rate</em> of attenuation:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_3d_inverserolloff">FMOD_3D_INVERSEROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_inversetaperedrolloff">FMOD_3D_INVERSETAPEREDROLLOFF</a></li>
</ul>
<p>For this mode the <code>max</code> distance is ignored:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_3d_customrolloff">FMOD_3D_CUSTOMROLLOFF</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_get3dminmaxdistance">Sound::get3DMinMaxDistance</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dminmaxdistance">ChannelControl::set3DMinMaxDistance</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_get3dminmaxdistance">ChannelControl::get3DMinMaxDistance</a>, <a class="apilink" href="core-api-system.html#system_set3dsettings">System::set3DSettings</a></p>
<h2 api="function" id="sound_setdefaults"><a href="#sound_setdefaults">Sound::setDefaults</a></h2>
<p>Sets a sound's default playback attributes.</p>
<p>When the Sound is played it will use these values without having to specify them later on a per Channel basis.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setDefaults</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">frequency</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetDefaults</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">frequency</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setDefaults</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">frequency</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">priority</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setDefaults</span><span class="p">(</span>
<span class="nx">frequency</span><span class="p">,</span>
<span class="nx">priority</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>frequency</dt>
<dd>
<p>Default playback frequency.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 48000</li>
</ul>
</dd>
<dt>priority</dt>
<dd>
<p>Default priority where 0 is the highest priority.</p>
<ul>
<li><span class="label">Range:</span> [0, 256]</li>
<li><span class="label">Default:</span> 128</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getdefaults">Sound::getDefaults</a>, <a class="apilink" href="core-api-system.html#system_playsound">System::playSound</a>, <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="function" id="sound_setloopcount"><a href="#sound_setloopcount">Sound::setLoopCount</a></h2>
<p>Sets the sound to loop a specified number of times before stopping if the playback mode is set to looping.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setLoopCount</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetLoopCount</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setLoopCount</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">loopcount</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setLoopCount</span><span class="p">(</span>
<span class="nx">loopcount</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>loopcount</dt>
<dd>
<p>Number of times to loop before final playback where -1 is always loop. 0 means no loop.</p>
<ul>
<li><span class="label">Range:</span> [-1, inf)</li>
<li><span class="label">Default:</span> -1</li>
</ul>
</dd>
</dl>
<p>Changing loop count on an already buffered stream may not produced desired output. See <a href="glossary.html#streaming-issues">Streaming Issues</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_setlooppoints">Sound::setLoopPoints</a>, <a class="apilink" href="core-api-sound.html#sound_getloopcount">Sound::getLoopCount</a></p>
<h2 api="function" id="sound_setlooppoints"><a href="#sound_setlooppoints">Sound::setLoopPoints</a></h2>
<p>Sets the loop points within a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setLoopPoints</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">loopstart</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">loopend</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetLoopPoints</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">loopstart</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">loopend</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setLoopPoints</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">loopstart</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">loopstarttype</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">loopend</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">loopendtype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setLoopPoints</span><span class="p">(</span>
<span class="nx">loopstart</span><span class="p">,</span>
<span class="nx">loopstarttype</span><span class="p">,</span>
<span class="nx">loopend</span><span class="p">,</span>
<span class="nx">loopendtype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>loopstart</dt>
<dd>
<p>Loop start point.</p>
<ul>
<li><span class="label">Range:</span> [0, loopend)</li>
</ul>
</dd>
<dt>loopstarttype</dt>
<dd>Time format of <code>loopstart</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
<dt>loopend</dt>
<dd>
<p>Loop end point.</p>
<ul>
<li><span class="label">Range:</span> [loopstart, Sound::getLength)</li>
</ul>
</dd>
<dt>loopendtype</dt>
<dd>Time format of <code>loopend</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
</dl>
<p>The values used for <code>loopstart</code> and <code>loopend</code> are inclusive, which means these positions will be played.</p>
<p>If a <code>loopend</code> is smaller or equal to <code>loopstart</code> an error will be returned. The same will happen for any values that are equal or greater than the length of the sound.</p>
<p>Changing loop points on an already buffered stream may not produced desired output. See <a href="glossary.html#streaming-issues">Streaming Issues</a>.</p>
<p>The <a class="apilink" href="core-api-sound.html">Sound</a>'s mode must be set to <a class="apilink" href="core-api-common.html#fmod_loop_normal">FMOD_LOOP_NORMAL</a> or <a class="apilink" href="core-api-common.html#fmod_loop_bidi">FMOD_LOOP_BIDI</a> for loop points to affect playback.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getlooppoints">Sound::getLoopPoints</a>, <a class="apilink" href="core-api-sound.html#sound_setloopcount">Sound::setLoopCount</a>, <a class="apilink" href="core-api-sound.html#sound_setmode">Sound::setMode</a></p>
<h2 api="function" id="sound_setmode"><a href="#sound_setmode">Sound::setMode</a></h2>
<p>Sets or alters the mode of a sound.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setMode</span><span class="p">(</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetMode</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setMode</span><span class="p">(</span>
<span class="n">MODE</span> <span class="n">mode</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setMode</span><span class="p">(</span>
<span class="nx">mode</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>mode</dt>
<dd>
<p>Mode bits to set. (<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>
</dl>
<p>When calling this function, note that it will only take effect when the sound is played again with <a class="apilink" href="core-api-system.html#system_playsound">System::playSound</a>.<br />
This is the default for when the sound next plays, not a mode that will suddenly change all currently playing instances of this sound.</p>
<p>Flags supported:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_loop_off">FMOD_LOOP_OFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_loop_normal">FMOD_LOOP_NORMAL</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_loop_bidi">FMOD_LOOP_BIDI</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_headrelative">FMOD_3D_HEADRELATIVE</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_worldrelative">FMOD_3D_WORLDRELATIVE</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_2d">FMOD_2D</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d">FMOD_3D</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_inverserolloff">FMOD_3D_INVERSEROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_linearrolloff">FMOD_3D_LINEARROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_linearsquarerolloff">FMOD_3D_LINEARSQUAREROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_inversetaperedrolloff">FMOD_3D_INVERSETAPEREDROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_customrolloff">FMOD_3D_CUSTOMROLLOFF</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_3d_ignoregeometry">FMOD_3D_IGNOREGEOMETRY</a></li>
</ul>
<p>If <a class="apilink" href="core-api-common.html#fmod_3d_ignoregeometry">FMOD_3D_IGNOREGEOMETRY</a> is not specified, the flag will be cleared if it was specified previously.</p>
<p>Changing mode on an already buffered stream may not produced desired output. See <a href="glossary.html#streaming-issues">Streaming Issues</a>.</p>
<p><strong>See Also:</strong> <a href="glossary.html#streaming-issues">Streaming Issues</a>, <a class="apilink" href="core-api-sound.html#sound_getmode">Sound::getMode</a>, <a class="apilink" href="core-api-sound.html#sound_setlooppoints">Sound::setLoopPoints</a>, <a class="apilink" href="core-api-system.html#system_playsound">System::playSound</a></p>
<h2 api="function" id="sound_setmusicchannelvolume"><a href="#sound_setmusicchannelvolume">Sound::setMusicChannelVolume</a></h2>
<p>Sets the volume of a MOD/S3M/XM/IT/MIDI music channel volume.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setMusicChannelVolume</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetMusicChannelVolume</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setMusicChannelVolume</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channel</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">volume</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setMusicChannelVolume</span><span class="p">(</span>
<span class="nx">channel</span><span class="p">,</span>
<span class="nx">volume</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channel</dt>
<dd>MOD/S3M/XM/IT/MIDI music subchannel to set a linear volume for.</dd>
<dt>volume</dt>
<dd>
<p>Volume of the channel.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Range:</span> [0, 1]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getmusicnumchannels">Sound::getMusicNumChannels</a>, <a class="apilink" href="core-api-sound.html#sound_getmusicchannelvolume">Sound::getMusicChannelVolume</a></p>
<h2 api="function" id="sound_setmusicspeed"><a href="#sound_setmusicspeed">Sound::setMusicSpeed</a></h2>
<p>Sets the relative speed of MOD/S3M/XM/IT/MIDI music.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setMusicSpeed</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetMusicSpeed</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setMusicSpeed</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">speed</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setMusicSpeed</span><span class="p">(</span>
<span class="nx">speed</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>speed</dt>
<dd>
<p>Speed of the song.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Range:</span> [0.01, 100]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getmusicspeed">Sound::getMusicSpeed</a></p>
<h2 api="function" id="sound_setsoundgroup"><a href="#sound_setsoundgroup">Sound::setSoundGroup</a></h2>
<p>Moves the sound from its existing SoundGroup to the specified sound group.</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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setSoundGroup</span><span class="p">(</span>
<span class="n">SoundGroup</span> <span class="o">*</span><span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetSoundGroup</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">FMOD_SOUNDGROUP</span> <span class="o">*</span><span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setSoundGroup</span><span class="p">(</span>
<span class="n">SoundGroup</span> <span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setSoundGroup</span><span class="p">(</span>
<span class="nx">soundgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>soundgroup</dt>
<dd>Sound group to move the sound to. (<a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>)</dd>
</dl>
<p>By default, a sound is located in the 'master sound group'. This can be retrieved with <a class="apilink" href="core-api-system.html#system_getmastersoundgroup">System::getMasterSoundGroup</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getsoundgroup">Sound::getSoundGroup</a>, <a class="apilink" href="core-api-system.html#system_createsoundgroup">System::createSoundGroup</a>, <a class="apilink" href="core-api-soundgroup.html#soundgroup_setmaxaudible">SoundGroup::setMaxAudible</a></p>
<h2 api="function" id="sound_setuserdata"><a href="#sound_setuserdata">Sound::setUserData</a></h2>
<p>Sets a user value associated with this 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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">setUserData</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_SetUserData</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">setUserData</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">setUserData</span><span class="p">(</span>
<span class="nx">userdata</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>userdata</dt>
<dd>Value stored on this object.</dd>
</dl>
<p>This function allows arbitrary user data to be attached to this object. See the <a href="glossary.html#user-data">User Data</a> section of the glossary for an example of how to get and set user data.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getuserdata">Sound::getUserData</a></p>
<h2 api="enum" id="fmod_sound_type"><a href="#fmod_sound_type">FMOD_SOUND_TYPE</a></h2>
<p>Recognized audio formats that can be loaded into a Sound.</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-csharp">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">enum</span> <span class="n">FMOD_SOUND_TYPE</span> <span class="p">{</span>
<span class="n">FMOD_SOUND_TYPE_UNKNOWN</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_AIFF</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_ASF</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_DLS</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_FLAC</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_FSB</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_IT</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MIDI</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MOD</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MPEG</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_OGGVORBIS</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_PLAYLIST</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_RAW</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_S3M</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_USER</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_WAV</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_XM</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_XMA</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_AUDIOQUEUE</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_AT9</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_VORBIS</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MEDIA_FOUNDATION</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MEDIACODEC</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_FADPCM</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_OPUS</span><span class="p">,</span>
<span class="n">FMOD_SOUND_TYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_SOUND_TYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">SOUND_TYPE</span>
<span class="p">{</span>
<span class="n">UNKNOWN</span><span class="p">,</span>
<span class="n">AIFF</span><span class="p">,</span>
<span class="n">ASF</span><span class="p">,</span>
<span class="n">DLS</span><span class="p">,</span>
<span class="n">FLAC</span><span class="p">,</span>
<span class="n">FSB</span><span class="p">,</span>
<span class="n">IT</span><span class="p">,</span>
<span class="n">MIDI</span><span class="p">,</span>
<span class="n">MOD</span><span class="p">,</span>
<span class="n">MPEG</span><span class="p">,</span>
<span class="n">OGGVORBIS</span><span class="p">,</span>
<span class="n">PLAYLIST</span><span class="p">,</span>
<span class="n">RAW</span><span class="p">,</span>
<span class="n">S3M</span><span class="p">,</span>
<span class="n">USER</span><span class="p">,</span>
<span class="n">WAV</span><span class="p">,</span>
<span class="n">XM</span><span class="p">,</span>
<span class="n">XMA</span><span class="p">,</span>
<span class="n">AUDIOQUEUE</span><span class="p">,</span>
<span class="n">AT9</span><span class="p">,</span>
<span class="n">VORBIS</span><span class="p">,</span>
<span class="n">MEDIA_FOUNDATION</span><span class="p">,</span>
<span class="n">MEDIACODEC</span><span class="p">,</span>
<span class="n">FADPCM</span><span class="p">,</span>
<span class="n">OPUS</span><span class="p">,</span>
<span class="n">MAX</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_UNKNOWN</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_AIFF</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_ASF</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_DLS</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_FLAC</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_FSB</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_IT</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MIDI</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MOD</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MPEG</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_OGGVORBIS</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_PLAYLIST</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_RAW</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_S3M</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_USER</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_WAV</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_XM</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_XMA</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_AUDIOQUEUE</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_AT9</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_VORBIS</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MEDIA_FOUNDATION</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MEDIACODEC</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_FADPCM</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_OPUS</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">SOUND_TYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_sound_type_unknown">FMOD_SOUND_TYPE_UNKNOWN</dt>
<dd>Unknown or custom codec plug-in.</dd>
<dt id="fmod_sound_type_aiff">FMOD_SOUND_TYPE_AIFF</dt>
<dd>Audio Interchange File Format (.aif, .aiff). Uncompressed integer formats only.</dd>
<dt id="fmod_sound_type_asf">FMOD_SOUND_TYPE_ASF</dt>
<dd>Microsoft Advanced Systems Format (.asf, .wma, .wmv). Platform provided decoder, available only on Windows.</dd>
<dt id="fmod_sound_type_dls">FMOD_SOUND_TYPE_DLS</dt>
<dd>Downloadable Sound (.dls). Multi-sound bank format used by MIDI (.mid).</dd>
<dt id="fmod_sound_type_flac">FMOD_SOUND_TYPE_FLAC</dt>
<dd>Free Lossless Audio Codec (.flac).</dd>
<dt id="fmod_sound_type_fsb">FMOD_SOUND_TYPE_FSB</dt>
<dd>FMOD Sample Bank (.fsb). Proprietary multi-sound bank format. Supported encodings: PCM16, FADPCM, Vorbis, AT9, XMA, Opus.</dd>
<dt id="fmod_sound_type_it">FMOD_SOUND_TYPE_IT</dt>
<dd>Impulse Tracker (.it).</dd>
<dt id="fmod_sound_type_midi">FMOD_SOUND_TYPE_MIDI</dt>
<dd>Musical Instrument Digital Interface (.mid).</dd>
<dt id="fmod_sound_type_mod">FMOD_SOUND_TYPE_MOD</dt>
<dd>Protracker / Fasttracker Module File (.mod).</dd>
<dt id="fmod_sound_type_mpeg">FMOD_SOUND_TYPE_MPEG</dt>
<dd>Moving Picture Experts Group (.mp2, .mp3). Also supports .wav (RIFF) container format.</dd>
<dt id="fmod_sound_type_oggvorbis">FMOD_SOUND_TYPE_OGGVORBIS</dt>
<dd>Ogg Vorbis (.ogg).</dd>
<dt id="fmod_sound_type_playlist">FMOD_SOUND_TYPE_PLAYLIST</dt>
<dd>Play list information container (.asx, .pls, .m3u, .wax). No audio, tags only.</dd>
<dt id="fmod_sound_type_raw">FMOD_SOUND_TYPE_RAW</dt>
<dd>Raw uncompressed PCM data (.raw).</dd>
<dt id="fmod_sound_type_s3m">FMOD_SOUND_TYPE_S3M</dt>
<dd>ScreamTracker 3 Module (.s3m).</dd>
<dt id="fmod_sound_type_user">FMOD_SOUND_TYPE_USER</dt>
<dd>User created sound.</dd>
<dt id="fmod_sound_type_wav">FMOD_SOUND_TYPE_WAV</dt>
<dd>Microsoft Waveform Audio File Format (.wav). Supported encodings: Uncompressed PCM, IMA ADPCM. Platform provided ACM decoder extensions, available only on Windows.</dd>
<dt id="fmod_sound_type_xm">FMOD_SOUND_TYPE_XM</dt>
<dd>FastTracker 2 Extended Module (.xm).</dd>
<dt id="fmod_sound_type_xma">FMOD_SOUND_TYPE_XMA</dt>
<dd>Microsoft XMA bit-stream supported by FSB (.fsb) container format. Platform provided decoder, available only on Xbox.</dd>
<dt id="fmod_sound_type_audioqueue">FMOD_SOUND_TYPE_AUDIOQUEUE</dt>
<dd>Apple Audio Queue decoder (.mp4, .m4a, .mp3). Supported encodings: AAC, ALAC, MP3. Platform provided decoder, available only on iOS / tvOS devices.</dd>
<dt id="fmod_sound_type_at9">FMOD_SOUND_TYPE_AT9</dt>
<dd>Sony ATRAC9 bit-stream supported by FSB (.fsb) container format. Platform provided decoder, available only on PlayStation.</dd>
<dt id="fmod_sound_type_vorbis">FMOD_SOUND_TYPE_VORBIS</dt>
<dd>Vorbis bit-stream supported by FSB (.fsb) container format.</dd>
<dt id="fmod_sound_type_media_foundation">FMOD_SOUND_TYPE_MEDIA_FOUNDATION</dt>
<dd>Microsoft Media Foundation decoder (.asf, .wma, .wmv, .mp4, .m4a). Platform provided decoder, available only on UWP.</dd>
<dt id="fmod_sound_type_mediacodec">FMOD_SOUND_TYPE_MEDIACODEC</dt>
<dd>Google Media Codec decoder (.m4a, .mp4). Platform provided decoder, available only on Android.</dd>
<dt id="fmod_sound_type_fadpcm">FMOD_SOUND_TYPE_FADPCM</dt>
<dd>FMOD Adaptive Differential Pulse Code Modulation bit-stream supported by FSB (.fsb) container format.</dd>
<dt id="fmod_sound_type_opus">FMOD_SOUND_TYPE_OPUS</dt>
<dd>Opus bit-stream supported by FSB (.fsb) container format. Platform provided decoder, available only on Xbox Series X|S, PS5, and Switch.</dd>
<dt id="fmod_sound_type_max">FMOD_SOUND_TYPE_MAX</dt>
<dd>Maximum number of sound types supported.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_getformat">Sound::getFormat</a></p>
<h2 api="function" id="sound_unlock"><a href="#sound_unlock">Sound::unlock</a></h2>
<p>Finalizes a previous sample data lock and submits it back to the Sound 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-csharp">C#</div>
<div class="language-tab" data-language="language-javascript">JS</div>
</div>
</p>
<div class="highlight language-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">Sound</span><span class="o">::</span><span class="n">unlock</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">ptr1</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">ptr2</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">len1</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_Sound_Unlock</span><span class="p">(</span>
<span class="n">FMOD_SOUND</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">ptr1</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">ptr2</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">len1</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">Sound</span><span class="p">.</span><span class="n">unlock</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">ptr1</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">ptr2</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">len1</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">len2</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">Sound</span><span class="p">.</span><span class="nx">unlock</span><span class="p">(</span>
<span class="nx">ptr1</span><span class="p">,</span>
<span class="nx">ptr2</span><span class="p">,</span>
<span class="nx">len1</span><span class="p">,</span>
<span class="nx">len2</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>ptr1</dt>
<dd>
<p>First part of the locked data.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>ptr2</dt>
<dd>
<p>Second part of the locked data.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#sample-data">Sample Data</a></li>
</ul>
</dd>
<dt>len1</dt>
<dd>
<p>Length of <code>ptr1</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>len2</dt>
<dd>
<p>Length of <code>ptr2</code></p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>The data being 'unlocked' must first have been locked with <a class="apilink" href="core-api-sound.html#sound_lock">Sound::lock</a>.</p>
<p>If an unlock is not performed on PCM data, then sample loops may produce audible clicks.</p>
<p>The names 'lock'/'unlock' are a legacy reference to older Operating System APIs that used to cause a mutex lock on the data, so that it could not be written to while the 'lock' was in place. This is no longer the case with FMOD and data can be 'locked' multiple times from different places/threads at once.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_lock">Sound::lock</a></p>
<h2 api="struct" id="fmod_tag"><a href="#fmod_tag">FMOD_TAG</a></h2>
<p>Tag data / metadata description.</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-csharp">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_TAG</span> <span class="p">{</span>
<span class="n">FMOD_TAGTYPE</span> <span class="n">type</span><span class="p">;</span>
<span class="n">FMOD_TAGDATATYPE</span> <span class="n">datatype</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_BOOL</span> <span class="n">updated</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_TAG</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">TAG</span>
<span class="p">{</span>
<span class="n">TAGTYPE</span> <span class="n">type</span><span class="p">;</span>
<span class="n">TAGDATATYPE</span> <span class="n">datatype</span><span class="p">;</span>
<span class="n">StringWrapper</span> <span class="n">name</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">data</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">datalen</span><span class="p">;</span>
<span class="kt">bool</span> <span class="n">updated</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD_TAG</span>
<span class="p">{</span>
<span class="nx">type</span><span class="p">,</span>
<span class="nx">datatype</span><span class="p">,</span>
<span class="nx">data</span><span class="p">,</span>
<span class="nx">datalen</span><span class="p">,</span>
<span class="nx">updated</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<dl>
<dt id="fmod_tag_type">type <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Tag type. (<a class="apilink" href="core-api-sound.html#fmod_tagtype">FMOD_TAGTYPE</a>)</dd>
<dt id="fmod_tag_datatype">datatype <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Tag data type. (<a class="apilink" href="core-api-sound.html#fmod_tagdatatype">FMOD_TAGDATATYPE</a>)</dd>
<dt id="fmod_tag_name">name <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Name. </dd>
<dt id="fmod_tag_data">data <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Tag data.</dd>
<dt id="fmod_tag_datalen">datalen <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Size of <code>data</code>.
* Units: Bytes</dd>
<dt id="fmod_tag_updated">updated <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>
<p>True if this tag has been updated since last being accessed with <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a></p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a></p>
<h2 api="enum" id="fmod_tagdatatype"><a href="#fmod_tagdatatype">FMOD_TAGDATATYPE</a></h2>
<p>List of tag data / metadata types.</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-csharp">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">enum</span> <span class="n">FMOD_TAGDATATYPE</span> <span class="p">{</span>
<span class="n">FMOD_TAGDATATYPE_BINARY</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_INT</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_FLOAT</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_STRING</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_STRING_UTF16</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_STRING_UTF16BE</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_STRING_UTF8</span><span class="p">,</span>
<span class="n">FMOD_TAGDATATYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_TAGDATATYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">TAGDATATYPE</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">BINARY</span><span class="p">,</span>
<span class="n">INT</span><span class="p">,</span>
<span class="n">FLOAT</span><span class="p">,</span>
<span class="n">STRING</span><span class="p">,</span>
<span class="n">STRING_UTF16</span><span class="p">,</span>
<span class="n">STRING_UTF16BE</span><span class="p">,</span>
<span class="n">STRING_UTF8</span><span class="p">,</span>
<span class="n">MAX</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_BINARY</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_INT</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_FLOAT</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_STRING</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_STRING_UTF16</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_STRING_UTF16BE</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_STRING_UTF8</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGDATATYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_tagdatatype_binary">FMOD_TAGDATATYPE_BINARY</dt>
<dd>Raw binary data. see <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for length of data in bytes. </dd>
<dt id="fmod_tagdatatype_int">FMOD_TAGDATATYPE_INT</dt>
<dd>Integer - Note this integer could be 8bit / 16bit / 32bit / 64bit. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for integer size (1 vs 2 vs 4 vs 8 bytes). </dd>
<dt id="fmod_tagdatatype_float">FMOD_TAGDATATYPE_FLOAT</dt>
<dd>IEEE floating point number. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure to confirm if the float data is 32bit or 64bit (4 vs 8 bytes). </dd>
<dt id="fmod_tagdatatype_string">FMOD_TAGDATATYPE_STRING</dt>
<dd>8bit ASCII char string. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for string length in bytes. </dd>
<dt id="fmod_tagdatatype_string_utf16">FMOD_TAGDATATYPE_STRING_UTF16</dt>
<dd>16bit UTF string. Assume little endian byte order. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for string length in bytes.</dd>
<dt id="fmod_tagdatatype_string_utf16be">FMOD_TAGDATATYPE_STRING_UTF16BE</dt>
<dd>16bit UTF string Big endian byte order. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for string length in bytes.</dd>
<dt id="fmod_tagdatatype_string_utf8">FMOD_TAGDATATYPE_STRING_UTF8</dt>
<dd>8 bit UTF string. See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for string length in bytes. </dd>
<dt id="fmod_tagdatatype_max">FMOD_TAGDATATYPE_MAX</dt>
<dd>Maximum number of tag datatypes supported. </dd>
</dl>
<p>See <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a> structure for tag length in bytes.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a>, <a class="apilink" href="core-api-sound.html#fmod_tagtype">FMOD_TAGTYPE</a>, <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</a></p>
<h2 api="enum" id="fmod_tagtype"><a href="#fmod_tagtype">FMOD_TAGTYPE</a></h2>
<p>List of tag data / metadata types that could be stored within a sound. These include id3 tags, metadata from netstreams and vorbis/asf data.</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-csharp">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">enum</span> <span class="n">FMOD_TAGTYPE</span> <span class="p">{</span>
<span class="n">FMOD_TAGTYPE_UNKNOWN</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_ID3V1</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_ID3V2</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_VORBISCOMMENT</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_SHOUTCAST</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_ICECAST</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_ASF</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_MIDI</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_PLAYLIST</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_FMOD</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_USER</span><span class="p">,</span>
<span class="n">FMOD_TAGTYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_TAGTYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">TAGTYPE</span>
<span class="p">{</span>
<span class="n">UNKNOWN</span><span class="p">,</span>
<span class="n">ID3V1</span><span class="p">,</span>
<span class="n">ID3V2</span><span class="p">,</span>
<span class="n">VORBISCOMMENT</span><span class="p">,</span>
<span class="n">SHOUTCAST</span><span class="p">,</span>
<span class="n">ICECAST</span><span class="p">,</span>
<span class="n">ASF</span><span class="p">,</span>
<span class="n">MIDI</span><span class="p">,</span>
<span class="n">PLAYLIST</span><span class="p">,</span>
<span class="n">FMOD</span><span class="p">,</span>
<span class="n">USER</span><span class="p">,</span>
<span class="n">MAX</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_UNKNOWN</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_ID3V1</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_ID3V2</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_VORBISCOMMENT</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_SHOUTCAST</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_ICECAST</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_ASF</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_MIDI</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_PLAYLIST</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_FMOD</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_USER</span>
<span class="nx">FMOD</span><span class="p">.</span><span class="nx">TAGTYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_tagtype_unknown">FMOD_TAGTYPE_UNKNOWN</dt>
<dd>Tag type that is not recognized by FMOD</dd>
<dt id="fmod_tagtype_id3v1">FMOD_TAGTYPE_ID3V1</dt>
<dd>MP3 ID3 Tag 1.0. Typically 1 tag stored 128 bytes from end of an MP3 file.</dd>
<dt id="fmod_tagtype_id3v2">FMOD_TAGTYPE_ID3V2</dt>
<dd>MP3 ID3 Tag 2.0. Variable length tags with more than 1 possible. </dd>
<dt id="fmod_tagtype_vorbiscomment">FMOD_TAGTYPE_VORBISCOMMENT</dt>
<dd>Metadata container used in Vorbis, FLAC, Theora, Speex and Opus file formats.</dd>
<dt id="fmod_tagtype_shoutcast">FMOD_TAGTYPE_SHOUTCAST</dt>
<dd>SHOUTcast internet stream metadata which can be issued during playback.</dd>
<dt id="fmod_tagtype_icecast">FMOD_TAGTYPE_ICECAST</dt>
<dd>Icecast internet stream metadata which can be issued during playback.</dd>
<dt id="fmod_tagtype_asf">FMOD_TAGTYPE_ASF</dt>
<dd>Advanced Systems Format metadata typically associated with Windows Media formats such as WMA.</dd>
<dt id="fmod_tagtype_midi">FMOD_TAGTYPE_MIDI</dt>
<dd>Metadata stored inside a MIDI file.</dd>
<dt id="fmod_tagtype_playlist">FMOD_TAGTYPE_PLAYLIST</dt>
<dd>Playlist files such as PLS,M3U,ASX and WAX will populate playlist information through this tag type. </dd>
<dt id="fmod_tagtype_fmod">FMOD_TAGTYPE_FMOD</dt>
<dd>Tag type used by FMOD's MIDI, MOD, S3M, XM, IT format support, and netstreams to notify of internet stream events like a sample rate change.</dd>
<dt id="fmod_tagtype_user">FMOD_TAGTYPE_USER</dt>
<dd>For codec developers, this tag type can be used with <a class="apilink" href="plugin-api-codec.html#fmod_codec_metadata_func">FMOD_CODEC_METADATA_FUNC</a> to generate custom metadata. </dd>
<dt id="fmod_tagtype_max">FMOD_TAGTYPE_MAX</dt>
<dd>Maximum number of tag types supported. </dd>
</dl>
<p><a class="apilink" href="core-api-sound.html#fmod_tagtype_midi">FMOD_TAGTYPE_MIDI</a> remarks. A midi file contains 16 channels. Not all of them are used, or in order. Use the tag 'Channel mask' and 'Number of channels' to find the channels used, to use with <a class="apilink" href="core-api-sound.html#sound_setmusicchannelvolume">Sound::setMusicChannelVolume</a> / <a class="apilink" href="core-api-sound.html#sound_getmusicchannelvolume">Sound::getMusicChannelVolume</a>. For example if the mask is 1001b, there are 2 channels, and channel 0 and channel 3 are the 2 channels used with the above functions.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-sound.html#sound_gettag">Sound::getTag</a>, <a class="apilink" href="core-api-sound.html#fmod_tagdatatype">FMOD_TAGDATATYPE</a>, <a class="apilink" href="core-api-sound.html#fmod_tag">FMOD_TAG</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>