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

7019 lines
537 KiB
HTML

<html>
<head>
<title>Core API Reference | System</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 class="manual-current-chapter manual-active-chapter"><a href="core-api-system.html">System</a></li><li><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 | System</h1>
<p>Management object from which all resources are created and played.</p>
<p>Create with <a class="apilink" href="core-api-system.html#system_create">System_Create</a>.</p>
<p><strong>Lifetime management:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_create" title="Creates an instance of the FMOD system.">System_Create</a> Creates an instance of the FMOD system.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_init" title="Initialize the system object and prepare FMOD for playback.">System::init</a> Initialize the system object and prepare FMOD for playback.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_close" title="Close the connection to the output and return to an uninitialized state without releasing the object.">System::close</a> Close the connection to the output and return to an uninitialized state without releasing the object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_release" title="Closes and frees this object and its resources.">System::release</a> Closes and frees this object and its resources.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_update" title="Updates the FMOD system.">System::update</a> Updates the FMOD system.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_mixersuspend" title="Suspend mixer thread and relinquish usage of audio hardware while maintaining internal state.">System::mixerSuspend</a> Suspend mixer thread and relinquish usage of audio hardware while maintaining internal state.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_mixerresume" title="Resume mixer thread and reacquire access to audio hardware.">System::mixerResume</a> Resume mixer thread and reacquire access to audio hardware.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_initflags" title="Configuration flags used when initializing the System object.">FMOD_INITFLAGS</a> Configuration flags used when initializing the System object.</span></li>
</ul>
<p><strong>Device selection:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_setoutput" title="Sets the type of output interface used to run the mixer.">System::setOutput</a> Sets the type of output interface used to run the mixer.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getoutput" title="Retrieves the type of output interface used to run the mixer.">System::getOutput</a> Retrieves the type of output interface used to run the mixer.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnumdrivers" title="Retrieves the number of output drivers available for the selected output type.">System::getNumDrivers</a> Retrieves the number of output drivers available for the selected output type.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdriverinfo" title="Retrieves identification information about a sound device specified by its index, and specific to the selected output mode.">System::getDriverInfo</a> Retrieves identification information about a sound device specified by its index, and specific to the selected output mode.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setdriver" title="Sets the output driver for the selected output type.">System::setDriver</a> Sets the output driver for the selected output type.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdriver" title="Retrieves the output driver for the selected output type.">System::getDriver</a> Retrieves the output driver for the selected output type.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_outputtype" title="Built-in output types that can be used to run the mixer.">FMOD_OUTPUTTYPE</a> Built-in output types that can be used to run the mixer.</span></li>
</ul>
<p><strong>Setup:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_setsoftwarechannels" title="Sets the maximum number of software mixed Channels possible.">System::setSoftwareChannels</a> Sets the maximum number of software mixed Channels possible.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getsoftwarechannels" title="Retrieves the maximum number of software mixed Channels possible.">System::getSoftwareChannels</a> Retrieves the maximum number of software mixed Channels possible.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setsoftwareformat" title="Sets the output format for the software mixer.">System::setSoftwareFormat</a> Sets the output format for the software mixer.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getsoftwareformat" title="Retrieves the output format for the software mixer.">System::getSoftwareFormat</a> Retrieves the output format for the software mixer.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setdspbuffersize" title="Sets the buffer size for the FMOD software mixing engine.">System::setDSPBufferSize</a> Sets the buffer size for the FMOD software mixing engine.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdspbuffersize" title="Retrieves the buffer size settings for the FMOD software mixing engine.">System::getDSPBufferSize</a> Retrieves the buffer size settings for the FMOD software mixing engine.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setstreambuffersize" title="Sets the default file buffer size for newly opened streams.">System::setStreamBufferSize</a> Sets the default file buffer size for newly opened streams.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getstreambuffersize" title="Retrieves the default file buffer size for newly opened streams.">System::getStreamBufferSize</a> Retrieves the default file buffer size for newly opened streams.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setadvancedsettings" title="Sets advanced settings for the system object, typically to allow adjusting of settings related to resource usage or audio quality.">System::setAdvancedSettings</a> Sets advanced settings for the system object, typically to allow adjusting of settings related to resource usage or audio quality.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getadvancedsettings" title="Retrieves the advanced settings for the system object.">System::getAdvancedSettings</a> Retrieves the advanced settings for the system object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setspeakerposition" title="Sets the position of the specified speaker for the current speaker mode.">System::setSpeakerPosition</a> Sets the position of the specified speaker for the current speaker mode.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getspeakerposition" title="Retrieves the position of the specified speaker for the current speaker mode.">System::getSpeakerPosition</a> Retrieves the position of the specified speaker for the current speaker mode.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_set3dsettings" title="Sets the global doppler scale, distance factor and log roll-off scale for all 3D sound in FMOD.">System::set3DSettings</a> Sets the global doppler scale, distance factor and log roll-off scale for all 3D sound in FMOD.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_get3dsettings" title="Retrieves the global doppler scale, distance factor and roll-off scale for all 3D sounds.">System::get3DSettings</a> Retrieves the global doppler scale, distance factor and roll-off scale for all 3D sounds.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_set3dnumlisteners" title="Sets the number of 3D 'listeners' in the 3D sound scene.">System::set3DNumListeners</a> Sets the number of 3D 'listeners' in the 3D sound scene.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_get3dnumlisteners" title="Retrieves the number of 3D listeners.">System::get3DNumListeners</a> Retrieves the number of 3D listeners.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_set3drolloffcallback" title="Sets a callback to allow custom calculation of distance attenuation.">System::set3DRolloffCallback</a> Sets a callback to allow custom calculation of distance attenuation.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_advancedsettings" title="Advanced configuration settings.">FMOD_ADVANCEDSETTINGS</a> Advanced configuration settings.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_3d_rolloff_callback" title="Callback to allow custom calculation of distance attenuation.">FMOD_3D_ROLLOFF_CALLBACK</a> Callback to allow custom calculation of distance attenuation.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_dsp_resampler" title="List of interpolation types used for resampling.">FMOD_DSP_RESAMPLER</a> List of interpolation types used for resampling.</span></li>
</ul>
<p><strong>File system setup:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_setfilesystem" title="Set callbacks to implement all file I/O instead of using the platform native method.">System::setFileSystem</a> Set callbacks to implement all file I/O instead of using the platform native method.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_attachfilesystem" title="'Piggyback' on FMOD file reading routines to capture data as it's read.">System::attachFileSystem</a> 'Piggyback' on FMOD file reading routines to capture data as it's read.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_asyncreadinfo" title="Information about a single asynchronous file operation.">FMOD_ASYNCREADINFO</a> Information about a single asynchronous file operation.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_asyncdone_func" title="Function to be called when asynchronous reading is finished.">FMOD_FILE_ASYNCDONE_FUNC</a> Function to be called when asynchronous reading is finished.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_open_callback" title="Callback for opening a file.">FMOD_FILE_OPEN_CALLBACK</a> Callback for opening a file.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_close_callback" title="Calback for closing a file.">FMOD_FILE_CLOSE_CALLBACK</a> Calback for closing a file.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_read_callback" title="Callback for reading from a file.">FMOD_FILE_READ_CALLBACK</a> Callback for reading from a file.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_seek_callback" title="Callback for seeking within a file.">FMOD_FILE_SEEK_CALLBACK</a> Callback for seeking within a file.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback" title="Callback for reading from a file asynchronously.">FMOD_FILE_ASYNCREAD_CALLBACK</a> Callback for reading from a file asynchronously.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback" title="Callback for cancelling a pending asynchronous read.">FMOD_FILE_ASYNCCANCEL_CALLBACK</a> Callback for cancelling a pending asynchronous read.</span></li>
</ul>
<p><strong>Plug-in support:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_setpluginpath" title="Specify a base search path for plug-ins so they can be placed somewhere else than the directory of the main executable.">System::setPluginPath</a> Specify a base search path for plug-ins so they can be placed somewhere else than the directory of the main executable.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_loadplugin" title="Loads an FMOD plug-in (DSP, output or codec) from a file.">System::loadPlugin</a> Loads an FMOD plug-in (<a href="glossary.html#dsp">DSP</a>, output or codec) from a file.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_unloadplugin" title="Unloads an FMOD (DSP, Output or Codec) plug-in.">System::unloadPlugin</a> Unloads an FMOD (<a href="glossary.html#dsp">DSP</a>, Output or Codec) plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnumnestedplugins" title="Retrieves the number of nested plug-ins from the selected plug-in.">System::getNumNestedPlugins</a> Retrieves the number of nested plug-ins from the selected plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnestedplugin" title="Retrieves the handle of a nested plug-in.">System::getNestedPlugin</a> Retrieves the handle of a nested plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnumplugins" title="Retrieves the number of loaded plug-ins.">System::getNumPlugins</a> Retrieves the number of loaded plug-ins.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getpluginhandle" title="Retrieves the handle of a plug-in based on its type and relative index.">System::getPluginHandle</a> Retrieves the handle of a plug-in based on its type and relative index.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getplugininfo" title="Retrieves information for the selected plug-in.">System::getPluginInfo</a> Retrieves information for the selected plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setoutputbyplugin" title="Selects an output type given a plug-in handle.">System::setOutputByPlugin</a> Selects an output type given a plug-in handle.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getoutputbyplugin" title="Retrieves the plug-in handle for the currently selected output type.">System::getOutputByPlugin</a> Retrieves the plug-in handle for the currently selected output type.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createdspbyplugin" title="Create a DSP unit with a specified plug-in handle.">System::createDSPByPlugin</a> Create a <a href="glossary.html#dsp">DSP unit</a> with a specified plug-in handle.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdspinfobyplugin" title="Retrieve the description structure for a pre-existing DSP plug-in.">System::getDSPInfoByPlugin</a> Retrieve the description structure for a pre-existing <a href="glossary.html#dsp">DSP</a> plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_registercodec" title="Register a Codec plug-in description structure for later use.">System::registerCodec</a> Register a Codec plug-in description structure for later use.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_registerdsp" title="Register a DSP plug-in description structure for later use.">System::registerDSP</a> Register a <a href="glossary.html#dsp">DSP</a> plug-in description structure for later use.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_registeroutput" title="Register an Output plug-in description structure for later use.">System::registerOutput</a> Register an Output plug-in description structure for later use.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_pluginlist" title="Used to support lists of plug-ins within the one dynamic library.">FMOD_PLUGINLIST</a> Used to support lists of plug-ins within the one dynamic library.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_plugintype" title="Types of plug-in used to extend functionality.">FMOD_PLUGINTYPE</a> Types of plug-in used to extend functionality.</span></li>
</ul>
<p><strong>Network configuration:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_setnetworkproxy" title="Set a proxy server to use for all subsequent internet connections.">System::setNetworkProxy</a> Set a proxy server to use for all subsequent internet connections.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnetworkproxy" title="Retrieves the URL of the proxy server used in internet streaming.">System::getNetworkProxy</a> Retrieves the URL of the proxy server used in internet streaming.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setnetworktimeout" title="Set the timeout for network streams.">System::setNetworkTimeout</a> Set the timeout for network streams.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getnetworktimeout" title="Retrieve the timeout value for network streams.">System::getNetworkTimeout</a> Retrieve the timeout value for network streams.</span></li>
</ul>
<p><strong>Information:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_getversion" title="Retrieves the FMOD version and build number.">System::getVersion</a> Retrieves the FMOD version and build number.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getoutputhandle" title="Retrieves an output type specific internal native interface.">System::getOutputHandle</a> Retrieves an output type specific internal native interface.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getchannelsplaying" title="Retrieves the number of currently playing Channels.">System::getChannelsPlaying</a> Retrieves the number of currently playing Channels.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getcpuusage" title="Retrieves the amount of CPU used for different parts of the Core API.">System::getCPUUsage</a> Retrieves the amount of CPU used for different parts of the Core API.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getfileusage" title="Retrieves information about file reads.">System::getFileUsage</a> Retrieves information about file reads.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdefaultmixmatrix" title="Retrieves the default matrix used to convert from one speaker mode to another.">System::getDefaultMixMatrix</a> Retrieves the default matrix used to convert from one speaker mode to another.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getspeakermodechannels" title="Retrieves the channel count for a given speaker mode.">System::getSpeakerModeChannels</a> Retrieves the channel count for a given speaker mode.</span></li>
</ul>
<p><strong>Creation and retrieval:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_createsound" title="Loads a sound into memory, opens it for streaming or sets it up for callback based sounds.">System::createSound</a> Loads a sound into memory, opens it for streaming or sets it up for callback based sounds.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createstream" title="Opens a sound for streaming.">System::createStream</a> Opens a sound for streaming.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createdsp" title="Create a DSP unit given a plug-in description structure.">System::createDSP</a> Create a <a href="glossary.html#dsp">DSP unit</a> given a plug-in description structure.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createdspbytype" title="Create a DSP unit with a specified built-in type index.">System::createDSPByType</a> Create a <a href="glossary.html#dsp">DSP unit</a> with a specified built-in type index.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createchannelgroup" title="Create a ChannelGroup object.">System::createChannelGroup</a> Create a ChannelGroup object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createsoundgroup" title="Creates a SoundGroup object.">System::createSoundGroup</a> Creates a SoundGroup object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_createreverb3d" title="Creates a 'virtual reverb' object. This object reacts to 3D location and morphs the reverb environment based on how close it is to the reverb object's center.">System::createReverb3D</a> Creates a 'virtual reverb' object. This object reacts to 3D location and morphs the reverb environment based on how close it is to the reverb object's center.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_playsound" title="Plays a Sound on a Channel.">System::playSound</a> Plays a Sound on a Channel.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_playdsp" title="Plays a DSP along with any of its inputs on a Channel.">System::playDSP</a> Plays a <a href="glossary.html#dsp">DSP</a> along with any of its inputs on a <a href="core-api-channel.html">Channel</a>.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getchannel" title="Retrieves a handle to a Channel by ID.">System::getChannel</a> Retrieves a handle to a Channel by ID.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getdspinfobytype" title="Retrieve the description structure for a built-in DSP plug-in.">System::getDSPInfoByType</a> Retrieve the description structure for a built-in <a href="glossary.html#dsp">DSP</a> plug-in.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getmasterchannelgroup" title="Retrieves the master ChannelGroup that all sounds ultimately route to.">System::getMasterChannelGroup</a> Retrieves the master ChannelGroup that all sounds ultimately route to.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getmastersoundgroup" title="Retrieves the default SoundGroup, where all sounds are placed when they are created.">System::getMasterSoundGroup</a> Retrieves the default SoundGroup, where all sounds are placed when they are created.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_createsoundexinfo" title="Additional options for creating a Sound.">FMOD_CREATESOUNDEXINFO</a> Additional options for creating a Sound.</span></li>
</ul>
<p><strong>Runtime control:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_set3dlistenerattributes" title="Sets the position, velocity and orientation of the specified 3D sound listener.">System::set3DListenerAttributes</a> Sets the position, velocity and orientation of the specified 3D sound listener.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_get3dlistenerattributes" title="Retrieves the position, velocity and orientation of the specified 3D sound listener.">System::get3DListenerAttributes</a> Retrieves the position, velocity and orientation of the specified 3D sound listener.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setreverbproperties" title="Sets parameters for the global reverb environment.">System::setReverbProperties</a> Sets parameters for the global reverb environment.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getreverbproperties" title="Retrieves the current reverb environment for the specified reverb instance.">System::getReverbProperties</a> Retrieves the current reverb environment for the specified reverb instance.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_attachchannelgrouptoport" title="Connect the output of the specified ChannelGroup to an audio port on the output driver.">System::attachChannelGroupToPort</a> Connect the output of the specified ChannelGroup to an audio port on the output driver.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_detachchannelgroupfromport" title="Disconnect the output of the specified ChannelGroup from an audio port on the output driver.">System::detachChannelGroupFromPort</a> Disconnect the output of the specified ChannelGroup from an audio port on the output driver.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_reverb_properties" title="Structure defining a reverb environment.">FMOD_REVERB_PROPERTIES</a> Structure defining a reverb environment.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_port_index" title="Output type specific index for when there are multiple instances or destinations for a port type.">FMOD_PORT_INDEX</a> Output type specific index for when there are multiple instances or destinations for a port type.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_port_type" title="Port types available for routing audio.">FMOD_PORT_TYPE</a> Port types available for routing audio.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_reverb_maxinstances" title="The maximum number of global reverb instances.">FMOD_REVERB_MAXINSTANCES</a> The maximum number of global reverb instances.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_reverb_presets" title="Predefined reverb configurations. To simplify usage, and avoid manually selecting reverb parameters, a table of common presets is supplied for ease of use.">FMOD_REVERB_PRESETS</a> Predefined reverb configurations. To simplify usage, and avoid manually selecting reverb parameters, a table of common presets is supplied for ease of use.</span></li>
</ul>
<p><strong>Recording:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_getrecordnumdrivers" title="Retrieves the number of recording devices available for this output mode. Use this to enumerate all recording devices possible so that the user can select one.">System::getRecordNumDrivers</a> Retrieves the number of recording devices available for this output mode. Use this to enumerate all recording devices possible so that the user can select one.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getrecorddriverinfo" title="Retrieves identification information about an audio device specified by its index, and specific to the output mode.">System::getRecordDriverInfo</a> Retrieves identification information about an audio device specified by its index, and specific to the output mode.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getrecordposition" title="Retrieves the current recording position of the record buffer in PCM samples.">System::getRecordPosition</a> Retrieves the current recording position of the record buffer in PCM samples.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_recordstart" title="Starts the recording engine recording to a pre-created Sound object.">System::recordStart</a> Starts the recording engine recording to a pre-created Sound object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_recordstop" title="Stops the recording engine from recording to a pre-created Sound object.">System::recordStop</a> Stops the recording engine from recording to a pre-created Sound object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_isrecording" title="Retrieves the state of the FMOD recording API, ie if it is currently recording or not.">System::isRecording</a> Retrieves the state of the FMOD recording API, ie if it is currently recording or not.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_driver_state" title="Flags that provide additional information about a particular driver.">FMOD_DRIVER_STATE</a> Flags that provide additional information about a particular driver.</span></li>
</ul>
<p><strong>Geometry management:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_creategeometry" title="Geometry creation function. This function will create a base geometry object which can then have polygons added to it.">System::createGeometry</a> Geometry creation function. This function will create a base geometry object which can then have polygons added to it.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setgeometrysettings" title="Sets the maximum world size for the geometry engine for performance / precision reasons.">System::setGeometrySettings</a> Sets the maximum world size for the geometry engine for performance / precision reasons.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getgeometrysettings" title="Retrieves the maximum world size for the geometry engine.">System::getGeometrySettings</a> Retrieves the maximum world size for the geometry engine.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_loadgeometry" title="Creates a geometry object from a block of memory which contains pre-saved geometry data.">System::loadGeometry</a> Creates a geometry object from a block of memory which contains pre-saved geometry data.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getgeometryocclusion" title="Calculates geometry occlusion between a listener and a sound source.">System::getGeometryOcclusion</a> Calculates geometry occlusion between a listener and a sound source.</span></li>
</ul>
<p><strong>General:</strong></p>
<ul>
<li><span><a class="apilink" href="core-api-system.html#system_lockdsp" title="Mutual exclusion function to lock the DSP engine (which runs asynchronously in another thread), so that it will not execute.">System::lockDSP</a> Mutual exclusion function to lock the <a href="glossary.html#dsp-engine">DSP engine</a> (which runs asynchronously in another thread), so that it will not execute.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_unlockdsp" title="Mutual exclusion function to unlock the DSP engine (which runs asynchronously in another thread) and let it continue executing.">System::unlockDSP</a> Mutual exclusion function to unlock the <a href="glossary.html#dsp-engine">DSP engine</a> (which runs asynchronously in another thread) and let it continue executing.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setcallback" title="Sets the callback for System level notifications.">System::setCallback</a> Sets the callback for System level notifications.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_setuserdata" title="Sets a user value associated with a System object.">System::setUserData</a> Sets a user value associated with a System object.</span></li>
<li><span><a class="apilink" href="core-api-system.html#system_getuserdata" title="Retrieves a user value associated with a System object.">System::getUserData</a> Retrieves a user value associated with a System object.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_errorcallback_info" title="Information describing an error that has occurred.">FMOD_ERRORCALLBACK_INFO</a> Information describing an error that has occurred.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_system_callback" title="Callback for System notifications.">FMOD_SYSTEM_CALLBACK</a> Callback for System notifications.</span></li>
</ul>
<hr />
<ul>
<li><span><a class="apilink" href="core-api-system.html#fmod_errorcallback_instancetype" title="Identifier used to represent the different types of instance in the error callback.">FMOD_ERRORCALLBACK_INSTANCETYPE</a> Identifier used to represent the different types of instance in the error callback.</span></li>
<li><span><a class="apilink" href="core-api-system.html#fmod_system_callback_type" title="Types of callbacks called by the System.">FMOD_SYSTEM_CALLBACK_TYPE</a> Types of callbacks called by the System.</span></li>
</ul>
<h2 api="callback" id="fmod_3d_rolloff_callback"><a href="#fmod_3d_rolloff_callback">FMOD_3D_ROLLOFF_CALLBACK</a></h2>
<p>Callback to allow custom calculation of 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-c-cpp"><pre><span></span><span class="kt">float</span> <span class="n">F_CALL</span> <span class="nf">FMOD_3D_ROLLOFF_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_CHANNELCONTROL</span> <span class="o">*</span><span class="n">channelcontrol</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">distance</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">delegate</span> <span class="kt">float</span> <span class="nf">CB_3D_ROLLOFFCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">channelcontrol</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">distance</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>channelcontrol</dt>
<dd><a class="apilink" href="core-api-channel.html">Channel</a> being evaluated. (<a class="apilink" href="core-api-channelcontrol.html">ChannelControl</a>)</dd>
<dt>distance</dt>
<dd>
<p>Distance from the listener.</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
</ul>
</dd>
</dl>
<div class="admonition language-cpp">
<p><code>channelcontrol</code> can be cast to <code>Channel *</code>.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_set3drolloffcallback">System::set3DRolloffCallback</a>, <a class="apilink" href="core-api-system.html#system_set3dlistenerattributes">System::set3DListenerAttributes</a>, <a class="apilink" href="core-api-system.html#system_get3dlistenerattributes">System::get3DListenerAttributes</a></p>
<h2 api="struct" id="fmod_advancedsettings"><a href="#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a></h2>
<p>Advanced configuration settings.</p>
<p>Structure to allow configuration of lesser used system level settings. These tweaks generally allow the user to set resource limits and customize settings to better fit their application.</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_ADVANCEDSETTINGS</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">cbSize</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxMPEGCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxADPCMCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxXMACodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxVorbisCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxAT9Codecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxFADPCMCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxOpusCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ASIONumChannels</span><span class="p">;</span>
<span class="kt">char</span> <span class="o">**</span><span class="n">ASIOChannelList</span><span class="p">;</span>
<span class="n">FMOD_SPEAKER</span> <span class="o">*</span><span class="n">ASIOSpeakerList</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">vol0virtualvol</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">defaultDecodeBufferSize</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">profilePort</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">geometryMaxFadeTime</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">distanceFilterCenterFreq</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">reverb3Dinstance</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">DSPBufferPoolSize</span><span class="p">;</span>
<span class="n">FMOD_DSP_RESAMPLER</span> <span class="n">resamplerMethod</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">randomSeed</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxConvolutionThreads</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxSpatialObjects</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_ADVANCEDSETTINGS</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">ADVANCEDSETTINGS</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">cbSize</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxMPEGCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxADPCMCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxXMACodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxVorbisCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxAT9Codecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxFADPCMCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxOpusCodecs</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ASIONumChannels</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">ASIOChannelList</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">ASIOSpeakerList</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">vol0virtualvol</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">defaultDecodeBufferSize</span><span class="p">;</span>
<span class="kt">ushort</span> <span class="n">profilePort</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">geometryMaxFadeTime</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">distanceFilterCenterFreq</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">reverb3Dinstance</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">DSPBufferPoolSize</span><span class="p">;</span>
<span class="n">DSP_RESAMPLER</span> <span class="n">resamplerMethod</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">randomSeed</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxConvolutionThreads</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxSpatialObjects</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">ADVANCEDSETTINGS</span>
<span class="p">{</span>
<span class="nx">maxMPEGCodecs</span><span class="p">,</span>
<span class="nx">maxADPCMCodecs</span><span class="p">,</span>
<span class="nx">maxXMACodecs</span><span class="p">,</span>
<span class="nx">maxVorbisCodecs</span><span class="p">,</span>
<span class="nx">maxAT9Codecs</span><span class="p">,</span>
<span class="nx">maxFADPCMCodecs</span><span class="p">,</span>
<span class="nx">maxOpusCodecs</span><span class="p">,</span>
<span class="nx">ASIONumChannels</span><span class="p">,</span>
<span class="nx">vol0virtualvol</span><span class="p">,</span>
<span class="nx">defaultDecodeBufferSize</span><span class="p">,</span>
<span class="nx">profilePort</span><span class="p">,</span>
<span class="nx">geometryMaxFadeTime</span><span class="p">,</span>
<span class="nx">distanceFilterCenterFreq</span><span class="p">,</span>
<span class="nx">reverb3Dinstance</span><span class="p">,</span>
<span class="nx">DSPBufferPoolSize</span><span class="p">,</span>
<span class="nx">resamplerMethod</span><span class="p">,</span>
<span class="nx">randomSeed</span><span class="p">,</span>
<span class="nx">maxConvolutionThreads</span><span class="p">,</span>
<span class="nx">maxSpatialObjects</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<dl>
<dt id="fmod_advancedsettings_cbsize">cbSize</dt>
<dd>Size of this structure. Must be set to sizeof(<a class="apilink" href="core-api-system.html#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a>) before calling <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a> or <a class="apilink" href="core-api-system.html#system_getadvancedsettings">System::getAdvancedSettings</a>.</dd>
<dt id="fmod_advancedsettings_maxmpegcodecs">maxMPEGCodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum MPEG Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxadpcmcodecs">maxADPCMCodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum IMA-ADPCM Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxxmacodecs">maxXMACodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum XMA Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxvorbiscodecs">maxVorbisCodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum Vorbis Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxat9codecs">maxAT9Codecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum AT9 Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxfadpcmcodecs">maxFADPCMCodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum FADPCM Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxopuscodecs">maxOpusCodecs <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum Opus Sounds created as <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>.</p>
<ul>
<li><span class="label">Default:</span> 32</li>
<li><span class="label">Range:</span> [0, 256]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_asionumchannels">ASIONumChannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Number of elements in <code>ASIOSpeakerList</code> on input, number of elements in <code>ASIOChannelList</code> on output.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-common.html#fmod_max_channel_width">FMOD_MAX_CHANNEL_WIDTH</a>]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_asiochannellist">ASIOChannelList <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Read only list of strings representing ASIO channel names (<a href="glossary.html#string-format">UTF-8 string</a>), count is defined by <code>ASIONumChannels</code>. Only valid after <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</dd>
<dt id="fmod_advancedsettings_asiospeakerlist">ASIOSpeakerList <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>List of speakers that represent each ASIO channel used for remapping, count is defined by <code>ASIONumChannels</code>. Use FMOD_SPEAKER_NONE to indicate no output for a given speaker. (<a class="apilink" href="core-api-common.html#fmod_speaker">FMOD_SPEAKER</a>)</dd>
<dt id="fmod_advancedsettings_vol0virtualvol">vol0virtualvol <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with <a class="apilink" href="core-api-system.html#fmod_init_vol0_becomes_virtual">FMOD_INIT_VOL0_BECOMES_VIRTUAL</a>, <a class="apilink" href="core-api-channel.html">Channel</a>s with audibility below this will become virtual. See the <a href="white-papers-virtual-voices.html">Virtual Voices</a> guide for more information.</p>
<ul>
<li><span class="label">Units:</span> Linear</li>
<li><span class="label">Default:</span> 0</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_defaultdecodebuffersize">defaultDecodeBufferSize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with Streams, the default size of the double buffer.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 400</li>
<li><span class="label">Range:</span> [0, 30000]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_profileport">profilePort <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with <a class="apilink" href="core-api-system.html#fmod_init_profile_enable">FMOD_INIT_PROFILE_ENABLE</a>, specify the port to listen on for connections by <a href="glossary.html#fmod-studio">FMOD Studio</a> or <a href="glossary.html#core-api-profiler-tool">FMOD Profiler</a>.</p>
<ul>
<li><span class="label">Default:</span> 9264</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_geometrymaxfadetime">geometryMaxFadeTime <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with <a class="apilink" href="core-api-geometry.html">Geometry</a>, the maximum time it takes for a <a class="apilink" href="core-api-channel.html">Channel</a> to fade to the new volume level when its occlusion changes.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 500</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_distancefiltercenterfreq">distanceFilterCenterFreq <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with <a class="apilink" href="core-api-system.html#fmod_init_channel_distancefilter">FMOD_INIT_CHANNEL_DISTANCEFILTER</a>, the default center frequency for the distance filter.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 1500</li>
<li><span class="label">Range:</span> [10, 22050]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_reverb3dinstance">reverb3Dinstance <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>For use with <a class="apilink" href="core-api-reverb3d.html">Reverb3D</a>, selects which global reverb instance to use.</p>
<ul>
<li><span class="label">Range:</span> [0, FMOD_REVERB_MAXINSTANCES)</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_dspbufferpoolsize">DSPBufferPoolSize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Number of intermediate mixing buffers in the <a href="glossary.html#dsp">DSP</a> buffer pool. Each buffer in bytes is <code>bufferlength</code> (See <a class="apilink" href="core-api-system.html#system_getdspbuffersize">System::getDSPBufferSize</a>) * sizeof(float) * output mode speaker count (See <a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>). ie 7.1 @ 1024 DSP block size = 1024 * 4 * 8 = 32KB.</p>
<ul>
<li><span class="label">Default:</span> 8</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_resamplermethod">resamplerMethod <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Resampling method used by <a class="apilink" href="core-api-channel.html">Channel</a>s. (<a class="apilink" href="core-api-system.html#fmod_dsp_resampler">FMOD_DSP_RESAMPLER</a>)</dd>
<dt id="fmod_advancedsettings_randomseed">randomSeed <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Seed value to initialize the internal random number generator.</dd>
<dt id="fmod_advancedsettings_maxconvolutionthreads">maxConvolutionThreads <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum number of CPU threads to use for <a class="apilink" href="core-api-common-dsp-effects.html#fmod_dsp_type_convolutionreverb">FMOD_DSP_TYPE_CONVOLUTIONREVERB</a> effect. 1 = effect is entirely processed inside the <a class="apilink" href="core-api-common.html#fmod_thread_type_mixer">FMOD_THREAD_TYPE_MIXER</a> thread. 2 and 3 offloads different parts of the convolution processing into different threads (<a class="apilink" href="core-api-common.html#fmod_thread_type_convolution1">FMOD_THREAD_TYPE_CONVOLUTION1</a> and <a class="apilink" href="core-api-common.html#fmod_thread_type_convolution2">FMOD_THREAD_TYPE_CONVOLUTION2</a> to increase throughput.</p>
<ul>
<li><span class="label">Default:</span> 3 </li>
<li><span class="label">Range:</span> [0, 3]</li>
</ul>
</dd>
<dt id="fmod_advancedsettings_maxspatialobjects">maxSpatialObjects <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum Spatial Objects that can be reserved per FMOD system. <a class="apilink" href="core-api-system.html#fmod_outputtype_audio3d">FMOD_OUTPUTTYPE_AUDIO3D</a> is a special case where multiple FMOD systems are not allowed. See the <a href="white-papers-spatial-audio.html#object-based-approach">Object based approach</a> section of the <a href="white-papers-spatial-audio.html">Spatial Audio</a> white paper. A value of -1 means no Spatial Objects will be reserved. A value of 0 means all available Spatial Objects will be reserved. Any other value means it will reserve that many Spatial Objects. </p>
<ul>
<li><span class="label">Default:</span> 0</li>
<li><span class="label">Range:</span> [-1, 65535]</li>
</ul>
</dd>
</dl>
<p>All members have a default of 0 except for <code>cbSize</code>, so clearing the whole structure to zeroes first then setting <code>cbSize</code> is a common use pattern. </p>
<p>Specifying one of the codec maximums will help determine the maximum CPU usage of playing <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a> Sounds of that type as well as the memory requirements. Memory will be allocated for 'up front' (during <a class="apilink" href="core-api-system.html#system_init">System::init</a>) if these values are specified as non zero. If any are zero, it allocates memory for the codec whenever a file of the type in question is loaded. So if <code>maxMPEGCodecs</code> is 0 for example, it will allocate memory for the MPEG codecs the first time an MP3 is loaded or an MP3 based .FSB file is loaded.</p>
<p>Setting <code>DSPBufferPoolSize</code> pre-allocates memory for the <a href="glossary.html#dsp-graph">FMOD DSP graph</a>. See the <a href="white-papers-dsp-architecture.html">DSP architecture guide</a>. By default, eight buffers are created up front. A large graph might require more if the aim is to avoid real-time allocations from the FMOD mixer thread.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a>, <a class="apilink" href="core-api-system.html#system_getadvancedsettings">System::getAdvancedSettings</a></p>
<h2 api="struct" id="fmod_asyncreadinfo"><a href="#fmod_asyncreadinfo">FMOD_ASYNCREADINFO</a></h2>
<p>Information about a single asynchronous file operation.</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_ASYNCREADINFO</span> <span class="p">{</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">handle</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">sizebytes</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">priority</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">userdata</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">bytesread</span><span class="p">;</span>
<span class="n">FMOD_FILE_ASYNCDONE_FUNC</span> <span class="n">done</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_ASYNCREADINFO</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">ASYNCREADINFO</span>
<span class="p">{</span>
<span class="n">IntPtr</span> <span class="n">handle</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">sizebytes</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">priority</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">userdata</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">buffer</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">bytesread</span><span class="p">;</span>
<span class="n">FILE_ASYNCDONE_FUNC</span> <span class="n">done</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt id="fmod_asyncreadinfo_handle">handle <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>File handle that was returned in <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>.</dd>
<dt id="fmod_asyncreadinfo_offset">offset <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Offset within the file where the read operation should occur.</dd>
</dl>
<ul>
<li>Units: Bytes</li>
</ul>
<dl>
<dt id="fmod_asyncreadinfo_sizebytes">sizebytes <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Number of bytes to read.</dd>
</dl>
<ul>
<li>Units: Bytes</li>
</ul>
<dl>
<dt id="fmod_asyncreadinfo_priority">priority <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Priority hint for how quickly this operation should be serviced where 0 represents low importance and 100 represents extreme importance. This could be used to prioritize the read order of a file job queue for example. FMOD decides the importance of the read based on if it could degrade audio or not.</dd>
<dt id="fmod_asyncreadinfo_userdata">userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User value associated with this async operation, passed to <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a>.</dd>
<dt id="fmod_asyncreadinfo_buffer">buffer</dt>
<dd>Buffer to read data into.</dd>
<dt id="fmod_asyncreadinfo_bytesread">bytesread</dt>
<dd>Number of bytes read into <code>buffer</code>.</dd>
</dl>
<ul>
<li>Units: Bytes</li>
</ul>
<dl>
<dt id="fmod_asyncreadinfo_done">done <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Completion function to signal the async read is done. (<a class="apilink" href="core-api-system.html#fmod_file_asyncdone_func">FMOD_FILE_ASYNCDONE_FUNC</a>)</dd>
</dl>
<p>When servicing the async read operation, read from <code>handle</code> at the given <code>offset</code> for <code>sizebytes</code> into <code>buffer</code>. Write the number of bytes read into <code>bytesread</code> then call <code>done</code> with the <a class="apilink" href="core-api-common.html#fmod_result">FMOD_RESULT</a> that matches the success of the operation.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a></p>
<h2 api="struct" id="fmod_createsoundexinfo"><a href="#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a></h2>
<p>Additional options for creating 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">struct</span> <span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">cbsize</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="n">fileoffset</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">numchannels</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">defaultfrequency</span><span class="p">;</span>
<span class="n">FMOD_SOUND_FORMAT</span> <span class="n">format</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">decodebuffersize</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">initialsubsound</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">numsubsounds</span><span class="p">;</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">inclusionlist</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">inclusionlistnum</span><span class="p">;</span>
<span class="n">FMOD_SOUND_PCMREAD_CALLBACK</span> <span class="n">pcmreadcallback</span><span class="p">;</span>
<span class="n">FMOD_SOUND_PCMSETPOS_CALLBACK</span> <span class="n">pcmsetposcallback</span><span class="p">;</span>
<span class="n">FMOD_SOUND_NONBLOCK_CALLBACK</span> <span class="n">nonblockcallback</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">dlsname</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">encryptionkey</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxpolyphony</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">;</span>
<span class="n">FMOD_SOUND_TYPE</span> <span class="n">suggestedsoundtype</span><span class="p">;</span>
<span class="n">FMOD_FILE_OPEN_CALLBACK</span> <span class="n">fileuseropen</span><span class="p">;</span>
<span class="n">FMOD_FILE_CLOSE_CALLBACK</span> <span class="n">fileuserclose</span><span class="p">;</span>
<span class="n">FMOD_FILE_READ_CALLBACK</span> <span class="n">fileuserread</span><span class="p">;</span>
<span class="n">FMOD_FILE_SEEK_CALLBACK</span> <span class="n">fileuserseek</span><span class="p">;</span>
<span class="n">FMOD_FILE_ASYNCREAD_CALLBACK</span> <span class="n">fileuserasyncread</span><span class="p">;</span>
<span class="n">FMOD_FILE_ASYNCCANCEL_CALLBACK</span> <span class="n">fileuserasynccancel</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">fileuserdata</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">filebuffersize</span><span class="p">;</span>
<span class="n">FMOD_CHANNELORDER</span> <span class="n">channelorder</span><span class="p">;</span>
<span class="n">FMOD_SOUNDGROUP</span> <span class="o">*</span><span class="n">initialsoundgroup</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">initialseekposition</span><span class="p">;</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">initialseekpostype</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ignoresetfilesystem</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">audioqueuepolicy</span><span class="p">;</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">minmidigranularity</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">nonblockthreadid</span><span class="p">;</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">fsbguid</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_CREATESOUNDEXINFO</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">CREATESOUNDEXINFO</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">cbsize</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">length</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">fileoffset</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">numchannels</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">defaultfrequency</span><span class="p">;</span>
<span class="n">SOUND_FORMAT</span> <span class="n">format</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">decodebuffersize</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">initialsubsound</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">numsubsounds</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">inclusionlist</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">inclusionlistnum</span><span class="p">;</span>
<span class="n">SOUND_PCMREADCALLBACK</span> <span class="n">pcmreadcallback</span><span class="p">;</span>
<span class="n">SOUND_PCMSETPOSCALLBACK</span> <span class="n">pcmsetposcallback</span><span class="p">;</span>
<span class="n">SOUND_NONBLOCKCALLBACK</span> <span class="n">nonblockcallback</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">dlsname</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">encryptionkey</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">maxpolyphony</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">userdata</span><span class="p">;</span>
<span class="n">SOUND_TYPE</span> <span class="n">suggestedsoundtype</span><span class="p">;</span>
<span class="n">FILE_OPENCALLBACK</span> <span class="n">fileuseropen</span><span class="p">;</span>
<span class="n">FILE_CLOSECALLBACK</span> <span class="n">fileuserclose</span><span class="p">;</span>
<span class="n">FILE_READCALLBACK</span> <span class="n">fileuserread</span><span class="p">;</span>
<span class="n">FILE_SEEKCALLBACK</span> <span class="n">fileuserseek</span><span class="p">;</span>
<span class="n">FILE_ASYNCREADCALLBACK</span> <span class="n">fileuserasyncread</span><span class="p">;</span>
<span class="n">FILE_ASYNCCANCELCALLBACK</span> <span class="n">fileuserasynccancel</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">fileuserdata</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">filebuffersize</span><span class="p">;</span>
<span class="n">CHANNELORDER</span> <span class="n">channelorder</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">initialsoundgroup</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">initialseekposition</span><span class="p">;</span>
<span class="n">TIMEUNIT</span> <span class="n">initialseekpostype</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ignoresetfilesystem</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">audioqueuepolicy</span><span class="p">;</span>
<span class="kt">uint</span> <span class="n">minmidigranularity</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">nonblockthreadid</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">fsbguid</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">CREATESOUNDEXINFO</span>
<span class="p">{</span>
<span class="nx">length</span><span class="p">,</span>
<span class="nx">fileoffset</span><span class="p">,</span>
<span class="nx">numchannels</span><span class="p">,</span>
<span class="nx">defaultfrequency</span><span class="p">,</span>
<span class="nx">format</span><span class="p">,</span>
<span class="nx">decodebuffersize</span><span class="p">,</span>
<span class="nx">initialsubsound</span><span class="p">,</span>
<span class="nx">numsubsounds</span><span class="p">,</span>
<span class="nx">inclusionlist</span><span class="p">,</span>
<span class="nx">inclusionlistnum</span><span class="p">,</span>
<span class="nx">pcmreadcallback</span><span class="p">,</span>
<span class="nx">pcmsetposcallback</span><span class="p">,</span>
<span class="nx">nonblockcallback</span><span class="p">,</span>
<span class="nx">dlsname</span><span class="p">,</span>
<span class="nx">encryptionkey</span><span class="p">,</span>
<span class="nx">maxpolyphony</span><span class="p">,</span>
<span class="nx">userdata</span><span class="p">,</span>
<span class="nx">suggestedsoundtype</span><span class="p">,</span>
<span class="nx">fileuseropen</span><span class="p">,</span>
<span class="nx">fileuserclose</span><span class="p">,</span>
<span class="nx">fileuserread</span><span class="p">,</span>
<span class="nx">fileuserseek</span><span class="p">,</span>
<span class="nx">fileuserasyncread</span><span class="p">,</span>
<span class="nx">fileuserasynccancel</span><span class="p">,</span>
<span class="nx">fileuserdata</span><span class="p">,</span>
<span class="nx">filebuffersize</span><span class="p">,</span>
<span class="nx">channelorder</span><span class="p">,</span>
<span class="nx">initialsoundgroup</span><span class="p">,</span>
<span class="nx">initialseekposition</span><span class="p">,</span>
<span class="nx">initialseekpostype</span><span class="p">,</span>
<span class="nx">ignoresetfilesystem</span><span class="p">,</span>
<span class="nx">audioqueuepolicy</span><span class="p">,</span>
<span class="nx">minmidigranularity</span><span class="p">,</span>
<span class="nx">nonblockthreadid</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<dl>
<dt id="fmod_createsoundexinfo_cbsize">cbsize</dt>
<dd>Size of this structure. Must be set to sizeof(<a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a>) before calling <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>.</dd>
<dt id="fmod_createsoundexinfo_length">length <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Bytes to read starting at <code>fileoffset</code>, or length of Sound to create for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>, or length of <code>name_or_data</code> for <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> / <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_fileoffset">fileoffset <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>File offset to start reading from.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_numchannels">numchannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Number of channels in sound data for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> / <a class="apilink" href="core-api-common.html#fmod_openraw">FMOD_OPENRAW</a>.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-common.html#fmod_max_channel_width">FMOD_MAX_CHANNEL_WIDTH</a>]</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_defaultfrequency">defaultfrequency <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Default frequency of sound data for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> / <a class="apilink" href="core-api-common.html#fmod_openraw">FMOD_OPENRAW</a>.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_format">format <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Format of sound data for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> / <a class="apilink" href="core-api-common.html#fmod_openraw">FMOD_OPENRAW</a>. (<a class="apilink" href="core-api-sound.html#fmod_sound_format">FMOD_SOUND_FORMAT</a>)</dd>
<dt id="fmod_createsoundexinfo_decodebuffersize">decodebuffersize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Size of the decoded buffer for <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a>, or the block size used with <code>pcmreadcallback</code> for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-system.html#fmod_advancedsettings_defaultdecodebuffersize">FMOD_ADVANCEDSETTINGS::defaultDecodeBufferSize</a> based on <code>defaultfrequency</code>.</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_initialsubsound">initialsubsound <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Initial subsound to seek to for <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a>.</dd>
<dt id="fmod_createsoundexinfo_numsubsounds">numsubsounds <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of subsounds available for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>, or maximum subsounds to load from file.</dd>
<dt id="fmod_createsoundexinfo_inclusionlist">inclusionlist <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>List of subsound indices to load from file.</dd>
<dt id="fmod_createsoundexinfo_inclusionlistnum">inclusionlistnum <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Number of items in <code>inclusionlist</code>.</dd>
<dt id="fmod_createsoundexinfo_pcmreadcallback">pcmreadcallback <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback to provide audio for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>, or capture audio as it is decoded. (<a class="apilink" href="core-api-sound.html#fmod_sound_pcmread_callback">FMOD_SOUND_PCMREAD_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_pcmsetposcallback">pcmsetposcallback <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback to perform seeking for <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>, or capture seek requests. (<a class="apilink" href="core-api-sound.html#fmod_sound_pcmsetpos_callback">FMOD_SOUND_PCMSETPOS_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_nonblockcallback">nonblockcallback <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback to notify completion for <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a>, occurs during creation and seeking / restarting streams. (<a class="apilink" href="core-api-sound.html#fmod_sound_nonblock_callback">FMOD_SOUND_NONBLOCK_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_dlsname">dlsname <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>File path for a <a class="apilink" href="core-api-sound.html#fmod_sound_type_dls">FMOD_SOUND_TYPE_DLS</a> sample set to use when loading a <a class="apilink" href="core-api-sound.html#fmod_sound_type_midi">FMOD_SOUND_TYPE_MIDI</a> file, see below for defaults.</dd>
<dt id="fmod_createsoundexinfo_encryptionkey">encryptionkey <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Key for encrypted <a class="apilink" href="core-api-sound.html#fmod_sound_type_fsb">FMOD_SOUND_TYPE_FSB</a> file, cannot be used in conjunction with <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a>.</dd>
<dt id="fmod_createsoundexinfo_maxpolyphony">maxpolyphony <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Maximum voice count for <a class="apilink" href="core-api-sound.html#fmod_sound_type_midi">FMOD_SOUND_TYPE_MIDI</a> / <a class="apilink" href="core-api-sound.html#fmod_sound_type_it">FMOD_SOUND_TYPE_IT</a>.</p>
<ul>
<li><span class="label">Default:</span> 64</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_userdata">userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User data to be attached to the Sound during creation, access via <a class="apilink" href="core-api-sound.html#sound_getuserdata">Sound::getUserData</a>.</dd>
<dt id="fmod_createsoundexinfo_suggestedsoundtype">suggestedsoundtype <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Attempt to load using the specified type first instead of loading in codec priority order. (<a class="apilink" href="core-api-sound.html#fmod_sound_type">FMOD_SOUND_TYPE</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuseropen">fileuseropen <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for opening this file. (<a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserclose">fileuserclose <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for closing this file. (<a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserread">fileuserread <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for reading from this file. (<a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserseek">fileuserseek <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for seeking within this file. (<a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserasyncread">fileuserasyncread <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for seeking within this file. (<a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserasynccancel">fileuserasynccancel <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for seeking within this file. (<a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a>)</dd>
<dt id="fmod_createsoundexinfo_fileuserdata">fileuserdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User data to be passed into the file callbacks.</dd>
<dt id="fmod_createsoundexinfo_filebuffersize">filebuffersize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Buffer size for reading the file, -1 to disable buffering.</dd>
<dt id="fmod_createsoundexinfo_channelorder">channelorder <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Custom ordering of speakers for this sound data. (<a class="apilink" href="core-api-common.html#fmod_channelorder">FMOD_CHANNELORDER</a>)</dd>
<dt id="fmod_createsoundexinfo_initialsoundgroup">initialsoundgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>SoundGroup to place this Sound in once created. (<a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>)</dd>
<dt id="fmod_createsoundexinfo_initialseekposition">initialseekposition <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Initial position to seek to for <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a>.</dd>
<dt id="fmod_createsoundexinfo_initialseekpostype">initialseekpostype <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Time units for <code>initialseekposition</code>. (<a class="apilink" href="core-api-common.html#fmod_timeunit">FMOD_TIMEUNIT</a>)</dd>
<dt id="fmod_createsoundexinfo_ignoresetfilesystem">ignoresetfilesystem <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Ignore <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a> and <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a> file callbacks.</dd>
<dt id="fmod_createsoundexinfo_audioqueuepolicy">audioqueuepolicy <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Hardware / software decoding policy for <a class="apilink" href="core-api-sound.html#fmod_sound_type_audioqueue">FMOD_SOUND_TYPE_AUDIOQUEUE</a>, see <a class="apilink" href="core-api-platform-ios.html#fmod_audioqueue_codecpolicy">FMOD_AUDIOQUEUE_CODECPOLICY</a>.</dd>
<dt id="fmod_createsoundexinfo_minmidigranularity">minmidigranularity <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Mixer granularity for <a class="apilink" href="core-api-sound.html#fmod_sound_type_midi">FMOD_SOUND_TYPE_MIDI</a> sounds, smaller numbers give a more accurate reproduction at the cost of higher CPU usage.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
<li><span class="label">Default:</span> 512</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_nonblockthreadid">nonblockthreadid <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Thread index to execute <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> loads on for parallel Sound loading.</p>
<ul>
<li><span class="label">Range:</span> [0, 4]</li>
</ul>
</dd>
<dt id="fmod_createsoundexinfo_fsbguid">fsbguid <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>On input, <a href="glossary.html#guid">GUID</a> of already loaded <a class="apilink" href="core-api-sound.html#fmod_sound_type_fsb">FMOD_SOUND_TYPE_FSB</a> file to reduce disk access, on output, GUID of loaded FSB. (<a class="apilink" href="core-api-common.html#fmod_guid">FMOD_GUID</a>)</dd>
</dl>
<p>Loading a file from memory:</p>
<ul>
<li>Create the sound using the <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> flag.</li>
<li>Specify <code>length</code> for the size of the memory block in bytes.</li>
</ul>
<p>Loading a file from within another larger (possibly wad/pak) file, by giving the loader an offset and length:</p>
<ul>
<li>Specify <code>fileoffset</code> and <code>length</code>.</li>
</ul>
<p>Create a user created / non-file based sound:</p>
<ul>
<li>Create the sound using the <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> flag.</li>
<li>Specify <code>defaultfrequency</code>, <code>numchannels</code> and <code>format</code>.</li>
</ul>
<p>Load an FSB stream seeking to a specific subsound in one file operation:</p>
<ul>
<li>Create the sound using the <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a> flag.</li>
<li>Specify <code>initialsubsound</code>.</li>
</ul>
<p>Load a subset of the Sounds in an FSB saving memory:</p>
<ul>
<li>Specify <code>inclusionlist</code> and <code>inclusionlistnum</code>.</li>
<li>Optionally set <code>numsubsounds</code> to match 'inclusionlistnum', saves memory and causes <a class="apilink" href="core-api-sound.html#sound_getsubsound">Sound::getSubSound</a> to index into <code>inclusionlist</code>.</li>
</ul>
<p>Capture sound data as it is decoded:</p>
<ul>
<li>Specify <code>pcmreadcallback</code> and <code>pcmseekcallback</code>.</li>
</ul>
<p>Provide a custom DLS for MIDI playback:</p>
<ul>
<li>Specify <code>dlsname</code>.</li>
</ul>
<p>Setting the <code>decodebuffersize</code> is for CPU intensive codecs that may be causing stuttering, not file intensive codecs (i.e. those from CD or net streams) which are normally altered with <a class="apilink" href="core-api-system.html#system_setstreambuffersize">System::setStreamBufferSize</a>. As an example of CPU intensive codecs, an MP3 file will take more CPU to decode than a PCM wav file.</p>
<p>If you hear stuttering, then the codec is using more CPU than the decode buffer playback rate can keep up with. Increasing the <code>decodebuffersize</code> is likely to solve this problem.</p>
<p>FSB codec. If <code>inclusionlist</code> and <code>numsubsounds</code> are used together, this will trigger a special mode where subsounds are shuffled down to save memory (useful for large FSB files where you only want to load 1 sound). There will be no gaps, ie no null subsounds. As an example, if there are 10,000 subsounds and there is an <code>inclusionlist</code> with only 1 entry, and <code>numsubsounds</code> = 1, then subsound 0 will be that entry, and there will only be the memory allocated for 1 subsound. Previously there would still be 10,000 subsound pointers and other associated codec entries allocated along with it multiplied by 10,000.</p>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a>, <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a></p>
<h2 api="define" id="fmod_driver_state"><a href="#fmod_driver_state">FMOD_DRIVER_STATE</a></h2>
<p>Flags that provide additional information about a particular driver.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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="cp">#define FMOD_DRIVER_STATE_CONNECTED 0x00000001</span>
<span class="cp">#define FMOD_DRIVER_STATE_DEFAULT 0x00000002</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="na">[Flags]</span>
<span class="k">enum</span> <span class="n">DRIVER_STATE</span> <span class="p">:</span> <span class="kt">uint</span>
<span class="p">{</span>
<span class="n">CONNECTED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000001</span><span class="p">,</span>
<span class="n">DEFAULT</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000002</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">DRIVER_STATE_CONNECTED</span> <span class="o">=</span> <span class="mh">0x00000001</span>
<span class="nx">DRIVER_STATE_DEFAULT</span> <span class="o">=</span> <span class="mh">0x00000002</span>
</pre></div>
<dl>
<dt id="fmod_driver_state_connected">FMOD_DRIVER_STATE_CONNECTED</dt>
<dd>Device is currently plugged in.</dd>
<dt id="fmod_driver_state_default">FMOD_DRIVER_STATE_DEFAULT</dt>
<dd>Device is the users preferred choice.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getrecorddriverinfo">System::getRecordDriverInfo</a></p>
<h2 api="enum" id="fmod_dsp_resampler"><a href="#fmod_dsp_resampler">FMOD_DSP_RESAMPLER</a></h2>
<p>List of interpolation types used for resampling.</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_DSP_RESAMPLER</span> <span class="p">{</span>
<span class="n">FMOD_DSP_RESAMPLER_DEFAULT</span><span class="p">,</span>
<span class="n">FMOD_DSP_RESAMPLER_NOINTERP</span><span class="p">,</span>
<span class="n">FMOD_DSP_RESAMPLER_LINEAR</span><span class="p">,</span>
<span class="n">FMOD_DSP_RESAMPLER_CUBIC</span><span class="p">,</span>
<span class="n">FMOD_DSP_RESAMPLER_SPLINE</span><span class="p">,</span>
<span class="n">FMOD_DSP_RESAMPLER_MAX</span>
<span class="p">}</span> <span class="n">FMOD_DSP_RESAMPLER</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">DSP_RESAMPLER</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">DEFAULT</span><span class="p">,</span>
<span class="n">NOINTERP</span><span class="p">,</span>
<span class="n">LINEAR</span><span class="p">,</span>
<span class="n">CUBIC</span><span class="p">,</span>
<span class="n">SPLINE</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">DSP_RESAMPLER_DEFAULT</span>
<span class="nx">DSP_RESAMPLER_NOINTERP</span>
<span class="nx">DSP_RESAMPLER_LINEAR</span>
<span class="nx">DSP_RESAMPLER_CUBIC</span>
<span class="nx">DSP_RESAMPLER_SPLINE</span>
<span class="nx">DSP_RESAMPLER_MAX</span>
</pre></div>
<dl>
<dt id="fmod_dsp_resampler_default">FMOD_DSP_RESAMPLER_DEFAULT</dt>
<dd>Default interpolation method, same as <a class="apilink" href="core-api-system.html#fmod_dsp_resampler_linear">FMOD_DSP_RESAMPLER_LINEAR</a>.</dd>
<dt id="fmod_dsp_resampler_nointerp">FMOD_DSP_RESAMPLER_NOINTERP</dt>
<dd>No interpolation. High frequency aliasing hiss will be audible depending on the sample rate of the sound.</dd>
<dt id="fmod_dsp_resampler_linear">FMOD_DSP_RESAMPLER_LINEAR</dt>
<dd>Linear interpolation (default method). Fast and good quality, causes very slight lowpass effect on low frequency sounds.</dd>
<dt id="fmod_dsp_resampler_cubic">FMOD_DSP_RESAMPLER_CUBIC</dt>
<dd>Cubic interpolation. Slower than linear interpolation but better quality.</dd>
<dt id="fmod_dsp_resampler_spline">FMOD_DSP_RESAMPLER_SPLINE</dt>
<dd>5 point spline interpolation. Slowest resampling method but best quality.</dd>
<dt id="fmod_dsp_resampler_max">FMOD_DSP_RESAMPLER_MAX</dt>
<dd>Maximum number of resample methods supported.</dd>
</dl>
<p>Use <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a> and <a class="apilink" href="core-api-system.html#fmod_advancedsettings_resamplermethod">FMOD_ADVANCEDSETTINGS::resamplerMethod</a> to configure the resampling quality you require for sample rate conversion during sound playback.</p>
<h2 api="struct" id="fmod_errorcallback_info"><a href="#fmod_errorcallback_info">FMOD_ERRORCALLBACK_INFO</a></h2>
<p>Information describing an error that has occurred.</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_ERRORCALLBACK_INFO</span> <span class="p">{</span>
<span class="n">FMOD_RESULT</span> <span class="n">result</span><span class="p">;</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE</span> <span class="n">instancetype</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">instance</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">functionname</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">functionparams</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_ERRORCALLBACK_INFO</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">ERRORCALLBACK_INFO</span>
<span class="p">{</span>
<span class="n">RESULT</span> <span class="n">result</span><span class="p">;</span>
<span class="n">ERRORCALLBACK_INSTANCETYPE</span> <span class="n">instancetype</span><span class="p">;</span>
<span class="n">IntPtr</span> <span class="n">instance</span><span class="p">;</span>
<span class="n">StringWrapper</span> <span class="n">functionname</span><span class="p">;</span>
<span class="n">StringWrapper</span> <span class="n">functionparams</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">ERRORCALLBACK_INFO</span>
<span class="p">{</span>
<span class="nx">result</span><span class="p">,</span>
<span class="nx">instancetype</span><span class="p">,</span>
<span class="nx">instance</span><span class="p">,</span>
<span class="nx">functionname</span><span class="p">,</span>
<span class="nx">functionparams</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<dl>
<dt id="fmod_errorcallback_info_result">result</dt>
<dd>Error code result. (<a class="apilink" href="core-api-common.html#fmod_result">FMOD_RESULT</a>)</dd>
<dt id="fmod_errorcallback_info_instancetype">instancetype</dt>
<dd>Type of instance the error occurred on. (<a class="apilink" href="core-api-system.html#fmod_errorcallback_instancetype">FMOD_ERRORCALLBACK_INSTANCETYPE</a>)</dd>
<dt id="fmod_errorcallback_info_instance">instance</dt>
<dd>Instance pointer.</dd>
<dt id="fmod_errorcallback_info_functionname">functionname</dt>
<dd>Function that the error occurred on. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt id="fmod_errorcallback_info_functionparams">functionparams</dt>
<dd>Function parameters that the error ocurred on. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
</dl>
<p>The instance pointer will be a type corresponding to the instanceType enum.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_system_callback_error">FMOD_SYSTEM_CALLBACK_ERROR</a></p>
<h2 api="enum" id="fmod_errorcallback_instancetype"><a href="#fmod_errorcallback_instancetype">FMOD_ERRORCALLBACK_INSTANCETYPE</a></h2>
<p>Identifier used to represent the different types of instance in the error callback.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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_ERRORCALLBACK_INSTANCETYPE</span> <span class="p">{</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_NONE</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_SYSTEM</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNEL</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNELGROUP</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNELCONTROL</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_SOUND</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_SOUNDGROUP</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_DSP</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_DSPCONNECTION</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_GEOMETRY</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_REVERB3D</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_SYSTEM</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTDESCRIPTION</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTINSTANCE</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_PARAMETERINSTANCE</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_BUS</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_VCA</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_BANK</span><span class="p">,</span>
<span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_COMMANDREPLAY</span>
<span class="p">}</span> <span class="n">FMOD_ERRORCALLBACK_INSTANCETYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">ERRORCALLBACK_INSTANCETYPE</span>
<span class="p">{</span>
<span class="n">NONE</span><span class="p">,</span>
<span class="n">SYSTEM</span><span class="p">,</span>
<span class="n">CHANNEL</span><span class="p">,</span>
<span class="n">CHANNELGROUP</span><span class="p">,</span>
<span class="n">CHANNELCONTROL</span><span class="p">,</span>
<span class="n">SOUND</span><span class="p">,</span>
<span class="n">SOUNDGROUP</span><span class="p">,</span>
<span class="n">DSP</span><span class="p">,</span>
<span class="n">DSPCONNECTION</span><span class="p">,</span>
<span class="n">GEOMETRY</span><span class="p">,</span>
<span class="n">REVERB3D</span><span class="p">,</span>
<span class="n">STUDIO_SYSTEM</span><span class="p">,</span>
<span class="n">STUDIO_EVENTDESCRIPTION</span><span class="p">,</span>
<span class="n">STUDIO_EVENTINSTANCE</span><span class="p">,</span>
<span class="n">STUDIO_PARAMETERINSTANCE</span><span class="p">,</span>
<span class="n">STUDIO_BUS</span><span class="p">,</span>
<span class="n">STUDIO_VCA</span><span class="p">,</span>
<span class="n">STUDIO_BANK</span><span class="p">,</span>
<span class="n">STUDIO_COMMANDREPLAY</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">ERRORCALLBACK_INSTANCETYPE_NONE</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_SYSTEM</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_CHANNEL</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_CHANNELGROUP</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_CHANNELCONTROL</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_SOUND</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_SOUNDGROUP</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_DSP</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_DSPCONNECTION</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_GEOMETRY</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_REVERB3D</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_SYSTEM</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTDESCRIPTION</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTINSTANCE</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_PARAMETERINSTANCE</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_BUS</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_VCA</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_BANK</span>
<span class="nx">ERRORCALLBACK_INSTANCETYPE_STUDIO_COMMANDREPLAY</span>
</pre></div>
<dl>
<dt id="fmod_errorcallback_instancetype_none">FMOD_ERRORCALLBACK_INSTANCETYPE_NONE</dt>
<dd>Type representing no known instance type.</dd>
<dt id="fmod_errorcallback_instancetype_system">FMOD_ERRORCALLBACK_INSTANCETYPE_SYSTEM</dt>
<dd>Type representing <a class="apilink" href="core-api-system.html">System</a>.</dd>
<dt id="fmod_errorcallback_instancetype_channel">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNEL</dt>
<dd>Type representing <a class="apilink" href="core-api-channel.html">Channel</a>.</dd>
<dt id="fmod_errorcallback_instancetype_channelgroup">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNELGROUP</dt>
<dd>Type representing <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>.</dd>
<dt id="fmod_errorcallback_instancetype_channelcontrol">FMOD_ERRORCALLBACK_INSTANCETYPE_CHANNELCONTROL</dt>
<dd>Type representing <a class="apilink" href="core-api-channelcontrol.html">ChannelControl</a>.</dd>
<dt id="fmod_errorcallback_instancetype_sound">FMOD_ERRORCALLBACK_INSTANCETYPE_SOUND</dt>
<dd>Type representing <a class="apilink" href="core-api-sound.html">Sound</a>.</dd>
<dt id="fmod_errorcallback_instancetype_soundgroup">FMOD_ERRORCALLBACK_INSTANCETYPE_SOUNDGROUP</dt>
<dd>Type representing <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>.</dd>
<dt id="fmod_errorcallback_instancetype_dsp">FMOD_ERRORCALLBACK_INSTANCETYPE_DSP</dt>
<dd>Type representing <a class="apilink" href="core-api-dsp.html">DSP</a>.</dd>
<dt id="fmod_errorcallback_instancetype_dspconnection">FMOD_ERRORCALLBACK_INSTANCETYPE_DSPCONNECTION</dt>
<dd>Type representing <a class="apilink" href="core-api-dspconnection.html">DSPConnection</a>.</dd>
<dt id="fmod_errorcallback_instancetype_geometry">FMOD_ERRORCALLBACK_INSTANCETYPE_GEOMETRY</dt>
<dd>Type representing <a class="apilink" href="core-api-geometry.html">Geometry</a>.</dd>
<dt id="fmod_errorcallback_instancetype_reverb3d">FMOD_ERRORCALLBACK_INSTANCETYPE_REVERB3D</dt>
<dd>Type representing <a class="apilink" href="core-api-reverb3d.html">Reverb3D</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_system">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_SYSTEM</dt>
<dd>Type representing <a class="apilink" href="studio-api-system.html">Studio::System</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_eventdescription">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTDESCRIPTION</dt>
<dd>Type representing <a class="apilink" href="studio-api-eventdescription.html">Studio::EventDescription</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_eventinstance">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_EVENTINSTANCE</dt>
<dd>Type representing <a class="apilink" href="studio-api-eventinstance.html">Studio::EventInstance</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_parameterinstance">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_PARAMETERINSTANCE</dt>
<dd>Deprecated.</dd>
<dt id="fmod_errorcallback_instancetype_studio_bus">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_BUS</dt>
<dd>Type representing <a class="apilink" href="studio-api-bus.html">Studio::Bus</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_vca">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_VCA</dt>
<dd>Type representing <a class="apilink" href="studio-api-vca.html">Studio::VCA</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_bank">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_BANK</dt>
<dd>Type representing <a class="apilink" href="studio-api-bank.html">Studio::Bank</a>.</dd>
<dt id="fmod_errorcallback_instancetype_studio_commandreplay">FMOD_ERRORCALLBACK_INSTANCETYPE_STUDIO_COMMANDREPLAY</dt>
<dd>Type representing <a class="apilink" href="studio-api-commandreplay.html">Studio::CommandReplay</a>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#fmod_errorcallback_info">FMOD_ERRORCALLBACK_INFO</a>, <a class="apilink" href="core-api-system.html#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_system_callback_error">FMOD_SYSTEM_CALLBACK_ERROR</a></p>
<h2 api="callback" id="fmod_file_asynccancel_callback"><a href="#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></h2>
<p>Callback for cancelling a pending asynchronous read.</p>
<p>This callback is called to stop/release or shut down the resource that is holding the file, for example: releasing a <a class="apilink" href="core-api-sound.html">Sound</a> stream.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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_FILE_ASYNCCANCEL_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_ASYNCREADINFO</span> <span class="o">*</span><span class="n">info</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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_ASYNCCANCELCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">info</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>info</dt>
<dd>Information describing the asynchronous read operation to cancel. (<a class="apilink" href="core-api-system.html#fmod_asyncreadinfo">FMOD_ASYNCREADINFO</a>)</dd>
<dt>userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>Before returning from this callback the implementation must ensure that all references to <code>info</code> are relinquished.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a></p>
<h2 api="callback" id="fmod_file_asyncdone_func"><a href="#fmod_file_asyncdone_func">FMOD_FILE_ASYNCDONE_FUNC</a></h2>
<p>Function to be called when asynchronous reading is finished.</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="kt">void</span> <span class="n">F_CALL</span> <span class="nf">FMOD_FILE_ASYNCDONE_FUNC</span><span class="p">(</span>
<span class="n">FMOD_ASYNCREADINFO</span> <span class="o">*</span><span class="n">info</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="k">void</span> <span class="nf">FILE_ASYNCDONE_FUNC</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">info</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>info</dt>
<dd>Async info for the completed operation. (<a class="apilink" href="core-api-system.html#fmod_asyncreadinfo">FMOD_ASYNCREADINFO</a>)</dd>
<dt>result</dt>
<dd>The result of the read operation. (<a class="apilink" href="core-api-common.html#fmod_result">FMOD_RESULT</a>)</dd>
</dl>
<p>Relevant result codes to use with this function include:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_ok">FMOD_OK</a> Read was successful.</li>
<li><a class="apilink" href="core-api-common.html#fmod_err_file_eof">FMOD_ERR_FILE_EOF</a> End of file was reached, partial read success.</li>
<li><a class="apilink" href="core-api-common.html#fmod_err_file_diskejected">FMOD_ERR_FILE_DISKEJECTED</a> Read was cancelled before being serviced.</li>
<li><a class="apilink" href="core-api-common.html#fmod_err_file_bad">FMOD_ERR_FILE_BAD</a> Read operation failed for any other reason.</li>
</ul>
<h2 api="callback" id="fmod_file_asyncread_callback"><a href="#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a></h2>
<p>Callback for reading from a file asynchronously.</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_FILE_ASYNCREAD_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_ASYNCREADINFO</span> <span class="o">*</span><span class="n">info</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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_ASYNCREADCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">info</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">userdata</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>info</dt>
<dd>Information describing the requested asynchronous read operation. (<a class="apilink" href="core-api-system.html#fmod_asyncreadinfo">FMOD_ASYNCREADINFO</a>)</dd>
<dt>userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>This callback allows you to accept a file I/O request without servicing it immediately. The callback can queue or store the <a class="apilink" href="core-api-system.html#fmod_asyncreadinfo">FMOD_ASYNCREADINFO</a> structure pointer, so that a 'servicing routine' can read the data and mark the job as done.</p>
<p>Marking an asynchronous job as 'done' outside of this callback can be done by calling the <a class="apilink" href="core-api-system.html#fmod_asyncreadinfo_done">FMOD_ASYNCREADINFO::done</a> function pointer with the file read result as a parameter.</p>
<p>If the servicing routine is processed in the same thread as the thread that invokes this callback (for example the thread that calls <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> or <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a>), a deadlock will occur because while <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> waits for the file data, the servicing routine in the main thread won't be able to execute.</p>
<p>This typically means an outside servicing routine should typically be run in a separate thread.</p>
<p>The read request can be queued or stored and this callback can return immediately with <a class="apilink" href="core-api-common.html#fmod_ok">FMOD_OK</a>. Returning an error at this point will cause FMOD to stop what it was doing and return back to the caller. If it is from FMOD's stream thread, the stream will typically stop.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></p>
<h2 api="callback" id="fmod_file_close_callback"><a href="#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a></h2>
<p>Calback for closing a 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-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_FILE_CLOSE_CALLBACK</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">handle</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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_CLOSECALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">handle</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="kd">function</span> <span class="nx">FMOD_FILE_CLOSE_CALLBACK</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">userdata</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>File handle that was returned in <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>.</dd>
<dt>userdata</dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>Close any user created file handle and perform any cleanup necessary for the file here. If the callback is from <a class="apilink" href="core-api-system.html#system_attachfilesystem">System::attachFileSystem</a>, then the return value is ignored.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></p>
<h2 api="callback" id="fmod_file_open_callback"><a href="#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a></h2>
<p>Callback for opening a 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-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_FILE_OPEN_CALLBACK</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">filesize</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">handle</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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_OPENCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">name</span><span class="p">,</span>
<span class="k">ref</span> <span class="kt">uint</span> <span class="n">filesize</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">IntPtr</span> <span class="n">handle</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="kd">function</span> <span class="nx">FMOD_FILE_OPEN_CALLBACK</span><span class="p">(</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">filesize</span><span class="p">,</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">userdata</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>name</dt>
<dd>File name or identifier. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>filesize <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Size of the file.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle to identify this file in future file callbacks.</dd>
<dt>userdata</dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>Return the appropriate error code such as <a class="apilink" href="core-api-common.html#fmod_err_file_notfound">FMOD_ERR_FILE_NOTFOUND</a> if the file fails to open. If the callback is from <a class="apilink" href="core-api-system.html#system_attachfilesystem">System::attachFileSystem</a>, then the return value is ignored.</p>
<div class="admonition language-csharp">
<p>The 'name' argument can be used via <code>StringWrapper</code> by using <code>FMOD.StringWrapper nameStr = new FMOD.StringWrapper(name);</code></p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></p>
<h2 api="callback" id="fmod_file_read_callback"><a href="#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a></h2>
<p>Callback for reading from a 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-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_FILE_READ_CALLBACK</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">sizebytes</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">bytesread</span><span class="p">,</span>
<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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_READCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">handle</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">buffer</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">sizebytes</span><span class="p">,</span>
<span class="k">ref</span> <span class="kt">uint</span> <span class="n">bytesread</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="kd">function</span> <span class="nx">FMOD_FILE_READ_CALLBACK</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">buffer</span><span class="p">,</span>
<span class="nx">sizebytes</span><span class="p">,</span>
<span class="nx">bytesread</span><span class="p">,</span>
<span class="nx">userdata</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>File handle that was returned in <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>.</dd>
<dt>buffer <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Buffer to read data into.</dd>
<dt>sizebytes</dt>
<dd>
<p>Number of bytes to read into <code>buffer</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>bytesread <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Number of bytes read into <code>buffer</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>userdata</dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>If the callback is from <a class="apilink" href="core-api-system.html#system_attachfilesystem">System::attachFileSystem</a>, then the return value is ignored.</p>
<p>If there is not enough data to read the requested number of bytes, return fewer bytes in the <code>bytesread</code> parameter and and return <a class="apilink" href="core-api-common.html#fmod_err_file_eof">FMOD_ERR_FILE_EOF</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></p>
<h2 api="callback" id="fmod_file_seek_callback"><a href="#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a></h2>
<p>Callback for seeking within a 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-c-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">F_CALL</span> <span class="nf">FMOD_FILE_SEEK_CALLBACK</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">pos</span><span class="p">,</span>
<span class="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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">FILE_SEEKCALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">pos</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="kd">function</span> <span class="nx">FMOD_FILE_SEEK_CALLBACK</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">pos</span><span class="p">,</span>
<span class="nx">userdata</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>File handle that returned in <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>.</dd>
<dt>pos</dt>
<dd>
<p>Absolute position to seek to in file.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>userdata</dt>
<dd>User value set by <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo_fileuserdata">FMOD_CREATESOUNDEXINFO::fileuserdata</a> or <a class="apilink" href="studio-api-system.html#fmod_studio_bank_info_userdata">FMOD_STUDIO_BANK_INFO::userData</a>.</dd>
</dl>
<p>If the callback is from <a class="apilink" href="core-api-system.html#system_attachfilesystem">System::attachFileSystem</a>, then the return value is ignored.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>, <a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>, <a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a></p>
<h2 api="define" id="fmod_initflags"><a href="#fmod_initflags">FMOD_INITFLAGS</a></h2>
<p>Configuration flags used when initializing the 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-c-cpp"><pre><span></span><span class="cp">#define FMOD_INIT_NORMAL 0x00000000</span>
<span class="cp">#define FMOD_INIT_STREAM_FROM_UPDATE 0x00000001</span>
<span class="cp">#define FMOD_INIT_MIX_FROM_UPDATE 0x00000002</span>
<span class="cp">#define FMOD_INIT_3D_RIGHTHANDED 0x00000004</span>
<span class="cp">#define FMOD_INIT_CLIP_OUTPUT 0x00000008</span>
<span class="cp">#define FMOD_INIT_CHANNEL_LOWPASS 0x00000100</span>
<span class="cp">#define FMOD_INIT_CHANNEL_DISTANCEFILTER 0x00000200</span>
<span class="cp">#define FMOD_INIT_PROFILE_ENABLE 0x00010000</span>
<span class="cp">#define FMOD_INIT_VOL0_BECOMES_VIRTUAL 0x00020000</span>
<span class="cp">#define FMOD_INIT_GEOMETRY_USECLOSEST 0x00040000</span>
<span class="cp">#define FMOD_INIT_PREFER_DOLBY_DOWNMIX 0x00080000</span>
<span class="cp">#define FMOD_INIT_THREAD_UNSAFE 0x00100000</span>
<span class="cp">#define FMOD_INIT_PROFILE_METER_ALL 0x00200000</span>
<span class="cp">#define FMOD_INIT_MEMORY_TRACKING 0x00400000</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="na">[Flags]</span>
<span class="k">enum</span> <span class="n">INITFLAGS</span> <span class="p">:</span> <span class="kt">uint</span>
<span class="p">{</span>
<span class="n">NORMAL</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000000</span><span class="p">,</span>
<span class="n">STREAM_FROM_UPDATE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000001</span><span class="p">,</span>
<span class="n">MIX_FROM_UPDATE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000002</span><span class="p">,</span>
<span class="n">_3D_RIGHTHANDED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000004</span><span class="p">,</span>
<span class="n">CLIP_OUTPUT</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000008</span><span class="p">,</span>
<span class="n">CHANNEL_LOWPASS</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000100</span><span class="p">,</span>
<span class="n">CHANNEL_DISTANCEFILTER</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000200</span><span class="p">,</span>
<span class="n">PROFILE_ENABLE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00010000</span><span class="p">,</span>
<span class="n">VOL0_BECOMES_VIRTUAL</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00020000</span><span class="p">,</span>
<span class="n">GEOMETRY_USECLOSEST</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00040000</span><span class="p">,</span>
<span class="n">PREFER_DOLBY_DOWNMIX</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00080000</span><span class="p">,</span>
<span class="n">THREAD_UNSAFE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00100000</span><span class="p">,</span>
<span class="n">PROFILE_METER_ALL</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00200000</span><span class="p">,</span>
<span class="n">MEMORY_TRACKING</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00400000</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">INIT_NORMAL</span> <span class="o">=</span> <span class="mh">0x00000000</span>
<span class="nx">INIT_STREAM_FROM_UPDATE</span> <span class="o">=</span> <span class="mh">0x00000001</span>
<span class="nx">INIT_MIX_FROM_UPDATE</span> <span class="o">=</span> <span class="mh">0x00000002</span>
<span class="nx">INIT_3D_RIGHTHANDED</span> <span class="o">=</span> <span class="mh">0x00000004</span>
<span class="nx">INIT_CLIP_OUTPUT</span> <span class="o">=</span> <span class="mh">0x00000008</span>
<span class="nx">INIT_CHANNEL_LOWPASS</span> <span class="o">=</span> <span class="mh">0x00000100</span>
<span class="nx">INIT_CHANNEL_DISTANCEFILTER</span> <span class="o">=</span> <span class="mh">0x00000200</span>
<span class="nx">INIT_PROFILE_ENABLE</span> <span class="o">=</span> <span class="mh">0x00010000</span>
<span class="nx">INIT_VOL0_BECOMES_VIRTUAL</span> <span class="o">=</span> <span class="mh">0x00020000</span>
<span class="nx">INIT_GEOMETRY_USECLOSEST</span> <span class="o">=</span> <span class="mh">0x00040000</span>
<span class="nx">INIT_PREFER_DOLBY_DOWNMIX</span> <span class="o">=</span> <span class="mh">0x00080000</span>
<span class="nx">INIT_THREAD_UNSAFE</span> <span class="o">=</span> <span class="mh">0x00100000</span>
<span class="nx">INIT_PROFILE_METER_ALL</span> <span class="o">=</span> <span class="mh">0x00200000</span>
<span class="nx">INIT_MEMORY_TRACKING</span> <span class="o">=</span> <span class="mh">0x00400000</span>
</pre></div>
<dl>
<dt id="fmod_init_normal">FMOD_INIT_NORMAL</dt>
<dd>Initialize normally</dd>
<dt id="fmod_init_stream_from_update">FMOD_INIT_STREAM_FROM_UPDATE</dt>
<dd>No stream thread is created internally. Streams are driven from <a class="apilink" href="core-api-system.html#system_update">System::update</a>. Mainly used with non-realtime outputs.</dd>
<dt id="fmod_init_mix_from_update">FMOD_INIT_MIX_FROM_UPDATE</dt>
<dd>No mixer thread is created internally. Mixing is driven from <a class="apilink" href="core-api-system.html#system_update">System::update</a>. Only applies to polling based output modes such as <a class="apilink" href="core-api-system.html#fmod_outputtype_nosound">FMOD_OUTPUTTYPE_NOSOUND</a>, <a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter">FMOD_OUTPUTTYPE_WAVWRITER</a>.</dd>
<dt id="fmod_init_3d_righthanded">FMOD_INIT_3D_RIGHTHANDED</dt>
<dd>3D calculations will be performed in right-handed coordinates, instead of the default of left-handed coordinates. See the <a href="glossary.html#handedness">Handedness</a> section of the Glossary for more information.</dd>
<dt id="fmod_init_clip_output">FMOD_INIT_CLIP_OUTPUT</dt>
<dd>Enables hard clipping of output values greater than 1.0f or less than -1.0f.</dd>
<dt id="fmod_init_channel_lowpass">FMOD_INIT_CHANNEL_LOWPASS</dt>
<dd>Enables usage of <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setlowpassgain">ChannelControl::setLowPassGain</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3docclusion">ChannelControl::set3DOcclusion</a>, or automatic usage by the <a class="apilink" href="core-api-geometry.html">Geometry</a> API. All voices will add a software lowpass filter effect into the <a href="glossary.html#dsp-chain">DSP chain</a> which is idle unless one of the previous functions/features are used.</dd>
<dt id="fmod_init_channel_distancefilter">FMOD_INIT_CHANNEL_DISTANCEFILTER</dt>
<dd>All <a class="apilink" href="core-api-common.html#fmod_3d">FMOD_3D</a> based voices add a software <a href="effects-reference.html#low-pass">low pass</a> and <a href="effects-reference.html#high-pass">highpass filter effect</a> into the <a href="glossary.html#dsp-chain">DSP chain</a>, which acts as a distance-automated bandpass filter. Use <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a> to adjust the center frequency.</dd>
<dt id="fmod_init_profile_enable">FMOD_INIT_PROFILE_ENABLE</dt>
<dd>Enable TCP/IP based host which allows <a href="glossary.html#fmod-studio">FMOD Studio</a> or <a href="glossary.html#core-api-profiler-tool">FMOD Profiler</a> to connect to it, and view memory, CPU and the <a href="glossary.html#dsp-graph">DSP graph</a> in real-time.</dd>
<dt id="fmod_init_vol0_becomes_virtual">FMOD_INIT_VOL0_BECOMES_VIRTUAL</dt>
<dd>Any sounds that are 0 volume will go virtual and not be processed except for having their positions updated virtually. Use <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a> to adjust what volume besides zero to switch to virtual at.</dd>
<dt id="fmod_init_geometry_useclosest">FMOD_INIT_GEOMETRY_USECLOSEST</dt>
<dd>With the geometry engine, only process the closest polygon rather than accumulating all polygons the sound to listener line intersects.</dd>
<dt id="fmod_init_prefer_dolby_downmix">FMOD_INIT_PREFER_DOLBY_DOWNMIX</dt>
<dd>When using <a class="apilink" href="core-api-common.html#fmod_speakermode_5point1">FMOD_SPEAKERMODE_5POINT1</a> with a stereo output device, use the Dolby Pro Logic II downmix algorithm instead of the default stereo downmix algorithm.</dd>
<dt id="fmod_init_thread_unsafe">FMOD_INIT_THREAD_UNSAFE</dt>
<dd>Disables thread safety for API calls. Only use this if FMOD is being called from a single thread, and if Studio API is not being used!</dd>
<dt id="fmod_init_profile_meter_all">FMOD_INIT_PROFILE_METER_ALL</dt>
<dd>Slower, but adds level metering for every single DSP unit in the graph. Use <a class="apilink" href="core-api-dsp.html#dsp_setmeteringenabled">DSP::setMeteringEnabled</a> to turn meters off individually. Setting this flag implies <a class="apilink" href="core-api-system.html#fmod_init_profile_enable">FMOD_INIT_PROFILE_ENABLE</a>.</dd>
<dt id="fmod_init_memory_tracking">FMOD_INIT_MEMORY_TRACKING</dt>
<dd>Enables memory allocation tracking. Currently this is only useful when using the Studio API. Increases memory footprint and reduces performance. This flag is implied by <a class="apilink" href="studio-api-system.html#fmod_studio_init_memory_tracking">FMOD_STUDIO_INIT_MEMORY_TRACKING</a>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a></p>
<h2 api="enum" id="fmod_outputtype"><a href="#fmod_outputtype">FMOD_OUTPUTTYPE</a></h2>
<p>Built-in output types that can be used to run the mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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_OUTPUTTYPE</span> <span class="p">{</span>
<span class="n">FMOD_OUTPUTTYPE_AUTODETECT</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_UNKNOWN</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_NOSOUND</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_WAVWRITER</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_NOSOUND_NRT</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_WAVWRITER_NRT</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_WASAPI</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_ASIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_PULSEAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_ALSA</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_COREAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_AUDIOTRACK</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_OPENSL</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_AUDIOOUT</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_AUDIO3D</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_WEBAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_NNAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_WINSONIC</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_AAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_AUDIOWORKLET</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_PHASE</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_OHAUDIO</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_OUTPUTTYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">OUTPUTTYPE</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">AUTODETECT</span><span class="p">,</span>
<span class="n">UNKNOWN</span><span class="p">,</span>
<span class="n">NOSOUND</span><span class="p">,</span>
<span class="n">WAVWRITER</span><span class="p">,</span>
<span class="n">NOSOUND_NRT</span><span class="p">,</span>
<span class="n">WAVWRITER_NRT</span><span class="p">,</span>
<span class="n">WASAPI</span><span class="p">,</span>
<span class="n">ASIO</span><span class="p">,</span>
<span class="n">PULSEAUDIO</span><span class="p">,</span>
<span class="n">ALSA</span><span class="p">,</span>
<span class="n">COREAUDIO</span><span class="p">,</span>
<span class="n">AUDIOTRACK</span><span class="p">,</span>
<span class="n">OPENSL</span><span class="p">,</span>
<span class="n">AUDIOOUT</span><span class="p">,</span>
<span class="n">AUDIO3D</span><span class="p">,</span>
<span class="n">WEBAUDIO</span><span class="p">,</span>
<span class="n">NNAUDIO</span><span class="p">,</span>
<span class="n">WINSONIC</span><span class="p">,</span>
<span class="n">AAUDIO</span><span class="p">,</span>
<span class="n">AUDIOWORKLET</span><span class="p">,</span>
<span class="n">PHASE</span><span class="p">,</span>
<span class="n">OHAUDIO</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">OUTPUTTYPE_AUTODETECT</span>
<span class="nx">OUTPUTTYPE_UNKNOWN</span>
<span class="nx">OUTPUTTYPE_NOSOUND</span>
<span class="nx">OUTPUTTYPE_WAVWRITER</span>
<span class="nx">OUTPUTTYPE_NOSOUND_NRT</span>
<span class="nx">OUTPUTTYPE_WAVWRITER_NRT</span>
<span class="nx">OUTPUTTYPE_WASAPI</span>
<span class="nx">OUTPUTTYPE_ASIO</span>
<span class="nx">OUTPUTTYPE_PULSEAUDIO</span>
<span class="nx">OUTPUTTYPE_ALSA</span>
<span class="nx">OUTPUTTYPE_COREAUDIO</span>
<span class="nx">OUTPUTTYPE_AUDIOTRACK</span>
<span class="nx">OUTPUTTYPE_OPENSL</span>
<span class="nx">OUTPUTTYPE_AUDIOOUT</span>
<span class="nx">OUTPUTTYPE_AUDIO3D</span>
<span class="nx">OUTPUTTYPE_WEBAUDIO</span>
<span class="nx">OUTPUTTYPE_NNAUDIO</span>
<span class="nx">OUTPUTTYPE_WINSONIC</span>
<span class="nx">OUTPUTTYPE_AAUDIO</span>
<span class="nx">OUTPUTTYPE_AUDIOWORKLET</span>
<span class="nx">OUTPUTTYPE_PHASE</span>
<span class="nx">OUTPUTTYPE_OHAUDIO</span>
<span class="nx">OUTPUTTYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_outputtype_autodetect">FMOD_OUTPUTTYPE_AUTODETECT</dt>
<dd>Picks the best output mode for the platform. This is the default.</dd>
<dt id="fmod_outputtype_unknown">FMOD_OUTPUTTYPE_UNKNOWN</dt>
<dd>All - 3rd party plug-in, unknown. This is for use with <a class="apilink" href="core-api-system.html#system_getoutput">System::getOutput</a> only.</dd>
<dt id="fmod_outputtype_nosound">FMOD_OUTPUTTYPE_NOSOUND</dt>
<dd>All - Perform all mixing but discard the final output.</dd>
<dt id="fmod_outputtype_wavwriter">FMOD_OUTPUTTYPE_WAVWRITER</dt>
<dd>All - Writes output to a .wav file.</dd>
<dt id="fmod_outputtype_nosound_nrt">FMOD_OUTPUTTYPE_NOSOUND_NRT</dt>
<dd>All - Non-realtime version of <a class="apilink" href="core-api-system.html#fmod_outputtype_nosound">FMOD_OUTPUTTYPE_NOSOUND</a>, one mix per <a class="apilink" href="core-api-system.html#system_update">System::update</a>.</dd>
<dt id="fmod_outputtype_wavwriter_nrt">FMOD_OUTPUTTYPE_WAVWRITER_NRT</dt>
<dd>All - Non-realtime version of <a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter">FMOD_OUTPUTTYPE_WAVWRITER</a>, one mix per <a class="apilink" href="core-api-system.html#system_update">System::update</a>.</dd>
<dt id="fmod_outputtype_wasapi">FMOD_OUTPUTTYPE_WASAPI</dt>
<dd>Win / UWP / Xbox One / Game Core - Windows Audio Session API. (Default on Windows, Xbox One, Game Core and UWP)</dd>
<dt id="fmod_outputtype_asio">FMOD_OUTPUTTYPE_ASIO</dt>
<dd>Win - Low latency ASIO 2.0.</dd>
<dt id="fmod_outputtype_pulseaudio">FMOD_OUTPUTTYPE_PULSEAUDIO</dt>
<dd>Linux - Pulse Audio. (Default on Linux if available)</dd>
<dt id="fmod_outputtype_alsa">FMOD_OUTPUTTYPE_ALSA</dt>
<dd>Linux - Advanced Linux Sound Architecture. (Default on Linux if PulseAudio isn't available)</dd>
<dt id="fmod_outputtype_coreaudio">FMOD_OUTPUTTYPE_COREAUDIO</dt>
<dd>Mac / iOS - Core Audio. (Default on Mac and iOS)</dd>
<dt id="fmod_outputtype_audiotrack">FMOD_OUTPUTTYPE_AUDIOTRACK</dt>
<dd>Android - Java Audio Track. (Default on Android 2.2 and below)</dd>
<dt id="fmod_outputtype_opensl">FMOD_OUTPUTTYPE_OPENSL</dt>
<dd>Android - OpenSL ES. (Default on Android 2.3 up to 7.1)</dd>
<dt id="fmod_outputtype_audioout">FMOD_OUTPUTTYPE_AUDIOOUT</dt>
<dd>PS4 / PS5 - Audio Out. (Default on PS4, PS5)</dd>
<dt id="fmod_outputtype_audio3d">FMOD_OUTPUTTYPE_AUDIO3D</dt>
<dd>PS4 - Audio3D.</dd>
<dt id="fmod_outputtype_webaudio">FMOD_OUTPUTTYPE_WEBAUDIO</dt>
<dd>HTML5 - Web Audio ScriptProcessorNode output. (Default on HTML5 if AudioWorkletNode isn't available)</dd>
<dt id="fmod_outputtype_nnaudio">FMOD_OUTPUTTYPE_NNAUDIO</dt>
<dd>Switch - nn::audio. (Default on Switch)</dd>
<dt id="fmod_outputtype_winsonic">FMOD_OUTPUTTYPE_WINSONIC</dt>
<dd>Win10 / Xbox One / Game Core - Windows Sonic.</dd>
<dt id="fmod_outputtype_aaudio">FMOD_OUTPUTTYPE_AAUDIO</dt>
<dd>Android - AAudio. (Default on Android 8.1 and above)</dd>
<dt id="fmod_outputtype_audioworklet">FMOD_OUTPUTTYPE_AUDIOWORKLET</dt>
<dd>HTML5 - Web Audio AudioWorkletNode output. (Default on HTML5 if available)</dd>
<dt id="fmod_outputtype_phase">FMOD_OUTPUTTYPE_PHASE</dt>
<dd>iOS - PHASE framework. (Disabled)</dd>
<dt id="fmod_outputtype_ohaudio">FMOD_OUTPUTTYPE_OHAUDIO</dt>
<dd>OpenHarmony - OHAudio.</dd>
<dt id="fmod_outputtype_max">FMOD_OUTPUTTYPE_MAX</dt>
<dd>Maximum number of output types supported.</dd>
</dl>
<p>To pass information to the driver when initializing use the <code>extradriverdata</code> parameter in <a class="apilink" href="core-api-system.html#system_init">System::init</a> for the following reasons:</p>
<ul>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter">FMOD_OUTPUTTYPE_WAVWRITER</a> - const char* file name that the wav writer will output to.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter_nrt">FMOD_OUTPUTTYPE_WAVWRITER_NRT</a> - const char* file name that the wav writer will output to.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_pulseaudio">FMOD_OUTPUTTYPE_PULSEAUDIO</a> - const char* application name to display in OS audio mixer.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_asio">FMOD_OUTPUTTYPE_ASIO</a> - void* application window handle.</li>
</ul>
<p>Currently these are the only FMOD drivers that take extra information. Other unknown plug-ins may have different requirements.</p>
<p>If <a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter_nrt">FMOD_OUTPUTTYPE_WAVWRITER_NRT</a> or <a class="apilink" href="core-api-system.html#fmod_outputtype_nosound_nrt">FMOD_OUTPUTTYPE_NOSOUND_NRT</a> are used, and if the <a class="apilink" href="core-api-system.html#system_update">System::update</a> function is being called very quickly (ie for a non realtime decode) it may be being called too quickly for the FMOD streamer thread to respond to. The result will be a skipping/stuttering output in the captured audio. To remedy this, disable the FMOD streamer thread, and use <a class="apilink" href="core-api-system.html#fmod_init_stream_from_update">FMOD_INIT_STREAM_FROM_UPDATE</a> to avoid skipping in the output stream, as it will lock the mixer and the streamer together in the same thread.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a>, <a class="apilink" href="core-api-system.html#system_getoutput">System::getOutput</a></p>
<h2 api="struct" id="fmod_pluginlist"><a href="#fmod_pluginlist">FMOD_PLUGINLIST</a></h2>
<p>Used to support lists of plug-ins within the one dynamic library.</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_PLUGINLIST</span> <span class="p">{</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="n">type</span><span class="p">;</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">description</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_PLUGINLIST</span><span class="p">;</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt id="fmod_pluginlist_type">type <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>Plug-in type. (<a class="apilink" href="core-api-system.html#fmod_plugintype">FMOD_PLUGINTYPE</a>)</dd>
<dt id="fmod_pluginlist_description">description <span><a class="token" href="glossary.html#documentation-conventions" title="Read-only">R/O</a></span></dt>
<dd>One of the plug-in description structures. (<a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>) (<a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>) (<a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a>).</dd>
</dl>
<p>This structure is returned from a plugin as a pointer to a list where the last entry has <a class="apilink" href="core-api-system.html#fmod_plugintype_max">FMOD_PLUGINTYPE_MAX</a> and a NULL description.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumnestedplugins">System::getNumNestedPlugins</a>, <a class="apilink" href="core-api-system.html#system_getnestedplugin">System::getNestedPlugin</a></p>
<h2 api="enum" id="fmod_plugintype"><a href="#fmod_plugintype">FMOD_PLUGINTYPE</a></h2>
<p>Types of plug-in used to extend functionality.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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_PLUGINTYPE</span> <span class="p">{</span>
<span class="n">FMOD_PLUGINTYPE_OUTPUT</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE_CODEC</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE_DSP</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_PLUGINTYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">PLUGINTYPE</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">OUTPUT</span><span class="p">,</span>
<span class="n">CODEC</span><span class="p">,</span>
<span class="n">DSP</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">PLUGINTYPE_OUTPUT</span>
<span class="nx">PLUGINTYPE_CODEC</span>
<span class="nx">PLUGINTYPE_DSP</span>
<span class="nx">PLUGINTYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_plugintype_output">FMOD_PLUGINTYPE_OUTPUT</dt>
<dd>Audio output interface plug-in represented with <a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>.</dd>
<dt id="fmod_plugintype_codec">FMOD_PLUGINTYPE_CODEC</dt>
<dd>File format codec plug-in represented with <a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a>.</dd>
<dt id="fmod_plugintype_dsp">FMOD_PLUGINTYPE_DSP</dt>
<dd><a href="glossary.html#dsp">DSP unit</a> plug-in represented with <a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>.</dd>
<dt id="fmod_plugintype_max">FMOD_PLUGINTYPE_MAX</dt>
<dd>Maximum number of plug-in types supported.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>, <a class="apilink" href="core-api-system.html#system_getplugininfo">System::getPluginInfo</a>, <a class="apilink" href="core-api-system.html#system_unloadplugin">System::unloadPlugin</a></p>
<h2 api="define" id="fmod_port_index"><a href="#fmod_port_index">FMOD_PORT_INDEX</a></h2>
<p>Output type specific index for when there are multiple instances or destinations for a port type.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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="cp">#define FMOD_PORT_INDEX_NONE 0xFFFFFFFFFFFFFFFF</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">PORT_INDEX</span>
<span class="p">{</span>
<span class="k">const</span> <span class="kt">ulong</span> <span class="n">NONE</span> <span class="p">=</span> <span class="m">0</span><span class="n">xFFFFFFFFFFFFFFFF</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">PORT_INDEX_NONE</span> <span class="o">=</span> <span class="mh">0xFFFFFFFFFFFFFFFF</span>
</pre></div>
<dl>
<dt id="fmod_port_index_none">FMOD_PORT_INDEX_NONE</dt>
<dd>Use when a port index is not required</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_attachchannelgrouptoport">System::attachChannelGroupToPort</a>, <a class="apilink" href="core-api-system.html#fmod_port_type">FMOD_PORT_TYPE</a></p>
<h2 api="enum" id="fmod_port_type"><a href="#fmod_port_type">FMOD_PORT_TYPE</a></h2>
<p>Port types available for routing audio.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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_PORT_TYPE</span>
<span class="p">{</span>
<span class="n">FMOD_PORT_TYPE_MUSIC</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_COPYRIGHT_MUSIC</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_VOICE</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_CONTROLLER</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_PERSONAL</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_VIBRATION</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_AUX</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_PASSTHROUGH</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_VR_VIBRATION</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE_MAX</span>
<span class="p">}</span> <span class="n">FMOD_PORT_TYPE</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">enum</span> <span class="n">PORT_TYPE</span> <span class="p">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">MUSIC</span><span class="p">,</span>
<span class="n">COPYRIGHT_MUSIC</span><span class="p">,</span>
<span class="n">VOICE</span><span class="p">,</span>
<span class="n">CONTROLLER</span><span class="p">,</span>
<span class="n">PERSONAL</span><span class="p">,</span>
<span class="n">VIBRATION</span><span class="p">,</span>
<span class="n">AUX</span><span class="p">,</span>
<span class="n">PASSTHROUGH</span><span class="p">,</span>
<span class="n">VR_VIBRATION</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">PORT_TYPE_MUSIC</span>
<span class="nx">PORT_TYPE_COPYRIGHT_MUSIC</span>
<span class="nx">PORT_TYPE_VOICE</span>
<span class="nx">PORT_TYPE_CONTROLLER</span>
<span class="nx">PORT_TYPE_PERSONAL</span>
<span class="nx">PORT_TYPE_VIBRATION</span>
<span class="nx">PORT_TYPE_AUX</span>
<span class="nx">PORT_TYPE_PASSTHROUGH</span>
<span class="nx">PORT_TYPE_VR_VIBRATION</span>
<span class="nx">PORT_TYPE_MAX</span>
</pre></div>
<dl>
<dt id="fmod_port_type_music">FMOD_PORT_TYPE_MUSIC</dt>
<dd>Background music, pass <a class="apilink" href="core-api-system.html#fmod_port_index_none">FMOD_PORT_INDEX_NONE</a> as port index.</dd>
<dt id="fmod_port_type_copyright_music">FMOD_PORT_TYPE_COPYRIGHT_MUSIC</dt>
<dd>Copyright background music, pass <a class="apilink" href="core-api-system.html#fmod_port_index_none">FMOD_PORT_INDEX_NONE</a> as port index.</dd>
<dt id="fmod_port_type_voice">FMOD_PORT_TYPE_VOICE</dt>
<dd>Voice chat, pass platform specific user ID of desired user as port index.</dd>
<dt id="fmod_port_type_controller">FMOD_PORT_TYPE_CONTROLLER</dt>
<dd>Controller speaker, pass platform specific user ID of desired user as port index.</dd>
<dt id="fmod_port_type_personal">FMOD_PORT_TYPE_PERSONAL</dt>
<dd>Personal audio device, pass platform specific user ID of desired user as port index.</dd>
<dt id="fmod_port_type_vibration">FMOD_PORT_TYPE_VIBRATION</dt>
<dd>Controller vibration, pass platform specific user ID of desired user as port index.</dd>
<dt id="fmod_port_type_aux">FMOD_PORT_TYPE_AUX</dt>
<dd>Auxiliary output port, pass <a class="apilink" href="core-api-system.html#fmod_port_index_none">FMOD_PORT_INDEX_NONE</a> as port index.</dd>
<dt id="fmod_port_type_passthrough">FMOD_PORT_TYPE_PASSTHROUGH</dt>
<dd>Passthrough output port, pass <a class="apilink" href="core-api-system.html#fmod_port_index_none">FMOD_PORT_INDEX_NONE</a> as port index.</dd>
<dt id="fmod_port_type_vr_vibration">FMOD_PORT_TYPE_VR_VIBRATION</dt>
<dd>VR Controller vibration, pass platform specific user ID of desired user as port index.</dd>
<dt id="fmod_port_type_max">FMOD_PORT_TYPE_MAX</dt>
<dd>Maximum number of port types supported.</dd>
</dl>
<p>Not all platforms support all port types. See platform specific guides for a list of supported port types on each platform.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_attachchannelgrouptoport">System::attachChannelGroupToPort</a></p>
<h2 api="define" id="fmod_reverb_maxinstances"><a href="#fmod_reverb_maxinstances">FMOD_REVERB_MAXINSTANCES</a></h2>
<p>The maximum number of global reverb instances.</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="cp">#define FMOD_REVERB_MAXINSTANCES 4</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">class</span> <span class="nc">CONSTANTS</span>
<span class="p">{</span>
<span class="k">const</span> <span class="kt">int</span> <span class="n">REVERB_MAXINSTANCES</span> <span class="p">=</span> <span class="m">4</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">REVERB_MAXINSTANCES</span> <span class="o">=</span> <span class="mi">4</span>
</pre></div>
<dl>
<dt id="fmod_reverb_maxinstances">FMOD_REVERB_MAXINSTANCES</dt>
<dd>Maximum instances available.</dd>
</dl>
<p>Each instance of a reverb is an instance of an <a class="apilink" href="core-api-common-dsp-effects.html#fmod_dsp_sfxreverb">FMOD_DSP_SFXREVERB</a> DSP in the <a href="glossary.html#dsp-graph">DSP graph</a>. This is unrelated to the number of possible Reverb3D objects, which is unlimited.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setreverbproperties">ChannelControl::setReverbProperties</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setreverbproperties">ChannelControl::setReverbProperties</a>, <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a>, <a class="apilink" href="core-api-system.html#system_getreverbproperties">System::getReverbProperties</a></p>
<h2 api="define" id="fmod_reverb_presets"><a href="#fmod_reverb_presets">FMOD_REVERB_PRESETS</a></h2>
<p>Predefined reverb configurations. To simplify usage, and avoid manually selecting reverb parameters, a table of common presets is supplied for ease of use.</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="cp">#define FMOD_PRESET_OFF { 1000, 7, 11, 5000, 100, 100, 100, 250, 0, 20, 96, -80.0f }</span>
<span class="cp">#define FMOD_PRESET_GENERIC { 1500, 7, 11, 5000, 83, 100, 100, 250, 0, 14500, 96, -8.0f }</span>
<span class="cp">#define FMOD_PRESET_PADDEDCELL { 170, 1, 2, 5000, 10, 100, 100, 250, 0, 160, 84, -7.8f }</span>
<span class="cp">#define FMOD_PRESET_ROOM { 400, 2, 3, 5000, 83, 100, 100, 250, 0, 6050, 88, -9.4f }</span>
<span class="cp">#define FMOD_PRESET_BATHROOM { 1500, 7, 11, 5000, 54, 100, 60, 250, 0, 2900, 83, 0.5f }</span>
<span class="cp">#define FMOD_PRESET_LIVINGROOM { 500, 3, 4, 5000, 10, 100, 100, 250, 0, 160, 58, -19.0f }</span>
<span class="cp">#define FMOD_PRESET_STONEROOM { 2300, 12, 17, 5000, 64, 100, 100, 250, 0, 7800, 71, -8.5f }</span>
<span class="cp">#define FMOD_PRESET_AUDITORIUM { 4300, 20, 30, 5000, 59, 100, 100, 250, 0, 5850, 64, -11.7f }</span>
<span class="cp">#define FMOD_PRESET_CONCERTHALL { 3900, 20, 29, 5000, 70, 100, 100, 250, 0, 5650, 80, -9.8f }</span>
<span class="cp">#define FMOD_PRESET_CAVE { 2900, 15, 22, 5000, 100, 100, 100, 250, 0, 20000, 59, -11.3f }</span>
<span class="cp">#define FMOD_PRESET_ARENA { 7200, 20, 30, 5000, 33, 100, 100, 250, 0, 4500, 80, -9.6f }</span>
<span class="cp">#define FMOD_PRESET_HANGAR { 10000, 20, 30, 5000, 23, 100, 100, 250, 0, 3400, 72, -7.4f }</span>
<span class="cp">#define FMOD_PRESET_CARPETTEDHALLWAY { 300, 2, 30, 5000, 10, 100, 100, 250, 0, 500, 56, -24.0f }</span>
<span class="cp">#define FMOD_PRESET_HALLWAY { 1500, 7, 11, 5000, 59, 100, 100, 250, 0, 7800, 87, -5.5f }</span>
<span class="cp">#define FMOD_PRESET_STONECORRIDOR { 270, 13, 20, 5000, 79, 100, 100, 250, 0, 9000, 86, -6.0f }</span>
<span class="cp">#define FMOD_PRESET_ALLEY { 1500, 7, 11, 5000, 86, 100, 100, 250, 0, 8300, 80, -9.8f }</span>
<span class="cp">#define FMOD_PRESET_FOREST { 1500, 162, 88, 5000, 54, 79, 100, 250, 0, 760, 94, -12.3f }</span>
<span class="cp">#define FMOD_PRESET_CITY { 1500, 7, 11, 5000, 67, 50, 100, 250, 0, 4050, 66, -26.0f }</span>
<span class="cp">#define FMOD_PRESET_MOUNTAINS { 1500, 300, 100, 5000, 21, 27, 100, 250, 0, 1220, 82, -24.0f }</span>
<span class="cp">#define FMOD_PRESET_QUARRY { 1500, 61, 25, 5000, 83, 100, 100, 250, 0, 3400, 100, -5.0f }</span>
<span class="cp">#define FMOD_PRESET_PLAIN { 1500, 179, 100, 5000, 50, 21, 100, 250, 0, 1670, 65, -28.0f }</span>
<span class="cp">#define FMOD_PRESET_PARKINGLOT { 1700, 8, 12, 5000, 100, 100, 100, 250, 0, 20000, 56, -19.5f }</span>
<span class="cp">#define FMOD_PRESET_SEWERPIPE { 2800, 14, 21, 5000, 14, 80, 60, 250, 0, 3400, 66, 1.2f }</span>
<span class="cp">#define FMOD_PRESET_UNDERWATER { 1500, 7, 11, 5000, 10, 100, 100, 250, 0, 500, 92, 7.0f }</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">class</span> <span class="nc">PRESET</span>
<span class="p">{</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">OFF</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">GENERIC</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">PADDEDCELL</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">ROOM</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">BATHROOM</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">LIVINGROOM</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">STONEROOM</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">AUDITORIUM</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">CONCERTHALL</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">CAVE</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">ARENA</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">HANGAR</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">CARPETTEDHALLWAY</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">HALLWAY</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">STONECORRIDOR</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">ALLEY</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">FOREST</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">CITY</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">MOUNTAINS</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">QUARRY</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">PLAIN</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">PARKINGLOT</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">SEWERPIPE</span>
<span class="n">REVERB_PROPERTIES</span> <span class="n">UNDERWATER</span>
<span class="p">}</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt id="fmod_preset_off">FMOD_PRESET_OFF</dt>
<dd>Off / disabled</dd>
<dt id="fmod_preset_generic">FMOD_PRESET_GENERIC</dt>
<dd>Generic / default</dd>
<dt id="fmod_preset_paddedcell">FMOD_PRESET_PADDEDCELL</dt>
<dd>Padded cell</dd>
<dt id="fmod_preset_room">FMOD_PRESET_ROOM</dt>
<dd>Room</dd>
<dt id="fmod_preset_bathroom">FMOD_PRESET_BATHROOM</dt>
<dd>Bathroom</dd>
<dt id="fmod_preset_livingroom">FMOD_PRESET_LIVINGROOM</dt>
<dd>Living room</dd>
<dt id="fmod_preset_stoneroom">FMOD_PRESET_STONEROOM</dt>
<dd>Stone room</dd>
<dt id="fmod_preset_auditorium">FMOD_PRESET_AUDITORIUM</dt>
<dd>Auditorium</dd>
<dt id="fmod_preset_concerthall">FMOD_PRESET_CONCERTHALL</dt>
<dd>Convert hall</dd>
<dt id="fmod_preset_cave">FMOD_PRESET_CAVE</dt>
<dd>Cave</dd>
<dt id="fmod_preset_arena">FMOD_PRESET_ARENA</dt>
<dd>Arena</dd>
<dt id="fmod_preset_hangar">FMOD_PRESET_HANGAR</dt>
<dd>Hangar</dd>
<dt id="fmod_preset_carpettedhallway">FMOD_PRESET_CARPETTEDHALLWAY</dt>
<dd>Carpeted hallway</dd>
<dt id="fmod_preset_hallway">FMOD_PRESET_HALLWAY</dt>
<dd>Hallway</dd>
<dt id="fmod_preset_stonecorridor">FMOD_PRESET_STONECORRIDOR</dt>
<dd>Stone corridor</dd>
<dt id="fmod_preset_alley">FMOD_PRESET_ALLEY</dt>
<dd>Alley</dd>
<dt id="fmod_preset_forest">FMOD_PRESET_FOREST</dt>
<dd>Forest</dd>
<dt id="fmod_preset_city">FMOD_PRESET_CITY</dt>
<dd>City</dd>
<dt id="fmod_preset_mountains">FMOD_PRESET_MOUNTAINS</dt>
<dd>Mountains</dd>
<dt id="fmod_preset_quarry">FMOD_PRESET_QUARRY</dt>
<dd>Quarry</dd>
<dt id="fmod_preset_plain">FMOD_PRESET_PLAIN</dt>
<dd>Plain</dd>
<dt id="fmod_preset_parkinglot">FMOD_PRESET_PARKINGLOT</dt>
<dd>Parking lot</dd>
<dt id="fmod_preset_sewerpipe">FMOD_PRESET_SEWERPIPE</dt>
<dd>Sewer pipe</dd>
<dt id="fmod_preset_underwater">FMOD_PRESET_UNDERWATER</dt>
<dd>Underwater</dd>
</dl>
<p>Sets of predefined reverb properties used to initialize an <a class="apilink" href="core-api-system.html#fmod_reverb_properties">FMOD_REVERB_PROPERTIES</a> structure statically. <br />
For example:</p>
<pre><code>FMOD_REVERB_PROPERTIES prop = FMOD_PRESET_GENERIC;
</code></pre>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a>, <a class="apilink" href="core-api-system.html#system_getreverbproperties">System::getReverbProperties</a></p>
<h2 api="struct" id="fmod_reverb_properties"><a href="#fmod_reverb_properties">FMOD_REVERB_PROPERTIES</a></h2>
<p>Structure defining a reverb environment.</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_REVERB_PROPERTIES</span> <span class="p">{</span>
<span class="kt">float</span> <span class="n">DecayTime</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">EarlyDelay</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LateDelay</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HFReference</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HFDecayRatio</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">Diffusion</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">Density</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LowShelfFrequency</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LowShelfGain</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HighCut</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">EarlyLateMix</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">WetLevel</span><span class="p">;</span>
<span class="p">}</span> <span class="n">FMOD_REVERB_PROPERTIES</span><span class="p">;</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">struct</span> <span class="nc">REVERB_PROPERTIES</span>
<span class="p">{</span>
<span class="kt">float</span> <span class="n">DecayTime</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">EarlyDelay</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LateDelay</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HFReference</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HFDecayRatio</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">Diffusion</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">Density</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LowShelfFrequency</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">LowShelfGain</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">HighCut</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">EarlyLateMix</span><span class="p">;</span>
<span class="kt">float</span> <span class="n">WetLevel</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">REVERB_PROPERTIES</span>
<span class="p">{</span>
<span class="nx">DecayTime</span><span class="p">,</span>
<span class="nx">EarlyDelay</span><span class="p">,</span>
<span class="nx">LateDelay</span><span class="p">,</span>
<span class="nx">HFReference</span><span class="p">,</span>
<span class="nx">HFDecayRatio</span><span class="p">,</span>
<span class="nx">Diffusion</span><span class="p">,</span>
<span class="nx">Density</span><span class="p">,</span>
<span class="nx">LowShelfFrequency</span><span class="p">,</span>
<span class="nx">LowShelfGain</span><span class="p">,</span>
<span class="nx">HighCut</span><span class="p">,</span>
<span class="nx">EarlyLateMix</span><span class="p">,</span>
<span class="nx">WetLevel</span><span class="p">,</span>
<span class="p">};</span>
</pre></div>
<dl>
<dt id="fmod_reverb_properties_decaytime">DecayTime</dt>
<dd>
<p>Reverberation decay time.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 1500</li>
<li><span class="label">Range:</span> [0, 20000]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_earlydelay">EarlyDelay</dt>
<dd>
<p>Initial reflection delay time.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 7</li>
<li><span class="label">Range:</span> [0, 300]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_latedelay">LateDelay</dt>
<dd>
<p>Late reverberation delay time relative to initial reflection.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 11</li>
<li><span class="label">Range:</span> [0, 100]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_hfreference">HFReference</dt>
<dd>
<p>Reference high frequency.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 5000</li>
<li><span class="label">Range:</span> [20, 20000]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_hfdecayratio">HFDecayRatio</dt>
<dd>
<p>High-frequency to mid-frequency decay time ratio.</p>
<ul>
<li><span class="label">Units:</span> Percent</li>
<li><span class="label">Default:</span> 50</li>
<li><span class="label">Range:</span> [10, 100]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_diffusion">Diffusion</dt>
<dd>
<p>Value that controls the echo density in the late reverberation decay.</p>
<ul>
<li><span class="label">Units:</span> Percent</li>
<li><span class="label">Default:</span> 50</li>
<li><span class="label">Range:</span> [10, 100]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_density">Density</dt>
<dd>
<p>Value that controls the modal density in the late reverberation decay.</p>
<ul>
<li><span class="label">Units:</span> Percent</li>
<li><span class="label">Default:</span> 100</li>
<li><span class="label">Range:</span> [0, 100]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_lowshelffrequency">LowShelfFrequency</dt>
<dd>
<p>Reference low frequency</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 250</li>
<li><span class="label">Range:</span> [20, 1000]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_lowshelfgain">LowShelfGain</dt>
<dd>
<p>Relative room effect level at low frequencies.</p>
<ul>
<li><span class="label">Units:</span> Decibels</li>
<li><span class="label">Default:</span> 0</li>
<li><span class="label">Range:</span> [-36, 12]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_highcut">HighCut</dt>
<dd>
<p>Relative room effect level at high frequencies.</p>
<ul>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 200000</li>
<li><span class="label">Range:</span> [0, 20000]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_earlylatemix">EarlyLateMix</dt>
<dd>
<p>Early reflections level relative to room effect.</p>
<ul>
<li><span class="label">Units:</span> Percent</li>
<li><span class="label">Default:</span> 50</li>
<li><span class="label">Range:</span> [0, 100]</li>
</ul>
</dd>
<dt id="fmod_reverb_properties_wetlevel">WetLevel</dt>
<dd>
<p>Room effect level at mid frequencies.</p>
<ul>
<li><span class="label">Units:</span> Decibels</li>
<li><span class="label">Default:</span> -6</li>
<li><span class="label">Range:</span> [-80, 20]</li>
</ul>
</dd>
</dl>
<p>Note the default reverb properties are the same as the <a class="apilink" href="core-api-system.html#fmod_preset_generic">FMOD_PRESET_GENERIC</a> preset.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a>, <a class="apilink" href="core-api-system.html#system_getreverbproperties">System::getReverbProperties</a>, <a class="apilink" href="core-api-system.html#fmod_reverb_presets">FMOD_REVERB_PRESETS</a></p>
<h2 api="function" id="system_attachchannelgrouptoport"><a href="#system_attachchannelgrouptoport">System::attachChannelGroupToPort</a></h2>
<p>Connect the output of the specified ChannelGroup to an audio port on the output driver.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">attachChannelGroupToPort</span><span class="p">(</span>
<span class="n">FMOD_PORT_TYPE</span> <span class="n">portType</span><span class="p">,</span>
<span class="n">FMOD_PORT_INDEX</span> <span class="n">portIndex</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">passThru</span> <span class="o">=</span> <span class="nb">false</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_System_AttachChannelGroupToPort</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_PORT_TYPE</span> <span class="n">portType</span><span class="p">,</span>
<span class="n">FMOD_PORT_INDEX</span> <span class="n">portIndex</span><span class="p">,</span>
<span class="n">FMOD_CHANNELGROUP</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="n">passThru</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">attachChannelGroupToPort</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">portType</span><span class="p">,</span>
<span class="kt">ulong</span> <span class="n">portIndex</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">passThru</span> <span class="p">=</span> <span class="k">false</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">attachChannelGroupToPort</span><span class="p">(</span>
<span class="nx">portType</span><span class="p">,</span>
<span class="nx">portIndex</span><span class="p">,</span>
<span class="nx">channelgroup</span><span class="p">,</span>
<span class="nx">passThru</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>portType</dt>
<dd>Port type (output mode specific). (<a class="apilink" href="core-api-system.html#fmod_port_type">FMOD_PORT_TYPE</a>)</dd>
<dt>portIndex</dt>
<dd>Index to specify which instance of the specified <code>portType</code> to use (output mode specific) (<a class="apilink" href="core-api-system.html#fmod_port_index">FMOD_PORT_INDEX</a>)</dd>
<dt>channelgroup</dt>
<dd>Group to attach the port to. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
<dt>passThru</dt>
<dd>
<p>Whether the <a href="glossary.html#signal">signal</a> should additionally route to the existing <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> output.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p>Ports are additional outputs supported by some <a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a> plug-ins and can include things like controller headsets or dedicated background music streams. See the Port Support section (where applicable) of each platform's getting started guide found in the <a href="platforms.html">platform details</a> chapter.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_detachchannelgroupfromport">System::detachChannelGroupFromPort</a></p>
<h2 api="function" id="system_attachfilesystem"><a href="#system_attachfilesystem">System::attachFileSystem</a></h2>
<p>'Piggyback' on FMOD file reading routines to capture data as it's read.</p>
<p>This allows users to capture data as FMOD reads it, which may be useful for extracting the raw data that FMOD reads for hard to support sources (for example internet streams).</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">System</span><span class="o">::</span><span class="n">attachFileSystem</span><span class="p">(</span>
<span class="n">FMOD_FILE_OPEN_CALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FMOD_FILE_CLOSE_CALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FMOD_FILE_READ_CALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FMOD_FILE_SEEK_CALLBACK</span> <span class="n">userseek</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_System_AttachFileSystem</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_FILE_OPEN_CALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FMOD_FILE_CLOSE_CALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FMOD_FILE_READ_CALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FMOD_FILE_SEEK_CALLBACK</span> <span class="n">userseek</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">attachFileSystem</span><span class="p">(</span>
<span class="n">FILE_OPENCALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FILE_CLOSECALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FILE_READCALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FILE_SEEKCALLBACK</span> <span class="n">userseek</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">attachFileSystem</span><span class="p">(</span>
<span class="nx">useropen</span><span class="p">,</span>
<span class="nx">userclose</span><span class="p">,</span>
<span class="nx">userread</span><span class="p">,</span>
<span class="nx">userseek</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>useropen <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for after a file is opened. (<a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>)</dd>
<dt>userclose <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for after a file is closed. (<a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>)</dd>
<dt>userread <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for after a read operation. (<a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>)</dd>
<dt>userseek <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for after a seek operation. (<a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>)</dd>
</dl>
<p>To detach, pass null or equivalent as the callback parameters.</p>
<p>Note: This function is not to replace FMOD's file system. For this functionality, see <a class="apilink" href="core-api-system.html#system_setfilesystem">System::setFileSystem</a>.</p>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a></p>
<h2 api="callback" id="fmod_system_callback"><a href="#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a></h2>
<p>Callback for System notifications.</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_SYSTEM_CALLBACK</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SYSTEM_CALLBACK_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">commanddata1</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">commanddata2</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="k">delegate</span> <span class="n">RESULT</span> <span class="nf">SYSTEM_CALLBACK</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">system</span><span class="p">,</span>
<span class="n">SYSTEM_CALLBACK_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">commanddata1</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">commanddata2</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="kd">function</span> <span class="nx">FMOD_SYSTEM_CALLBACK</span><span class="p">(</span>
<span class="nx">system</span><span class="p">,</span>
<span class="nx">type</span><span class="p">,</span>
<span class="nx">commanddata1</span><span class="p">,</span>
<span class="nx">commanddata2</span><span class="p">,</span>
<span class="nx">userdata</span>
<span class="p">)</span>
</pre></div>
<dl>
<dt>system <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>System handle. (<a class="apilink" href="core-api-system.html">System</a>)</dd>
<dt>type</dt>
<dd>Type of callback. (<a class="apilink" href="core-api-system.html#fmod_system_callback_type">FMOD_SYSTEM_CALLBACK_TYPE</a>)</dd>
<dt>commanddata1 <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>First callback parameter, see <a class="apilink" href="core-api-system.html#fmod_system_callback_type">FMOD_SYSTEM_CALLBACK_TYPE</a> for details.</dd>
<dt>commanddata2 <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Second callback parameter, see <a class="apilink" href="core-api-system.html#fmod_system_callback_type">FMOD_SYSTEM_CALLBACK_TYPE</a> for details.</dd>
<dt>userdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>User data associated with <code>system</code> or the last value set with any call to <a class="apilink" href="core-api-system.html#system_setuserdata">System::setUserData</a> for global callbacks.</dd>
</dl>
<div class="admonition language-cpp">
<p>The 'system' argument can be cast to <code>FMOD::System *</code>.</p>
</div>
<div class="admonition language-csharp">
<p>The 'system' argument can be used via <code>System</code> by using <code>FMOD.System coreSystem = new FMOD.System(system);</code></p>
</div>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a>, <a href="glossary.html#user-data">User Data</a>, <a class="apilink" href="core-api-system.html#system_setcallback">System::setCallback</a></p>
<h2 api="define" id="fmod_system_callback_type"><a href="#fmod_system_callback_type">FMOD_SYSTEM_CALLBACK_TYPE</a></h2>
<p>Types of callbacks called by the System.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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="cp">#define FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED 0x00000001</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_DEVICELOST 0x00000002</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_MEMORYALLOCATIONFAILED 0x00000004</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_THREADCREATED 0x00000008</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_BADDSPCONNECTION 0x00000010</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_PREMIX 0x00000020</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_POSTMIX 0x00000040</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_ERROR 0x00000080</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_THREADDESTROYED 0x00000100</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_PREUPDATE 0x00000200</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_POSTUPDATE 0x00000400</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_RECORDLISTCHANGED 0x00000800</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_BUFFEREDNOMIX 0x00001000</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_DEVICEREINITIALIZE 0x00002000</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_OUTPUTUNDERRUN 0x00004000</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_RECORDPOSITIONCHANGED 0x00008000</span>
<span class="cp">#define FMOD_SYSTEM_CALLBACK_ALL 0xFFFFFFFF</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="na">[Flags]</span>
<span class="k">enum</span> <span class="n">SYSTEM_CALLBACK_TYPE</span> <span class="p">:</span> <span class="kt">uint</span>
<span class="p">{</span>
<span class="n">DEVICELISTCHANGED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000001</span><span class="p">,</span>
<span class="n">DEVICELOST</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000002</span><span class="p">,</span>
<span class="n">MEMORYALLOCATIONFAILED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000004</span><span class="p">,</span>
<span class="n">THREADCREATED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000008</span><span class="p">,</span>
<span class="n">BADDSPCONNECTION</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000010</span><span class="p">,</span>
<span class="n">PREMIX</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000020</span><span class="p">,</span>
<span class="n">POSTMIX</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000040</span><span class="p">,</span>
<span class="n">ERROR</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000080</span><span class="p">,</span>
<span class="n">THREADDESTROYED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000100</span><span class="p">,</span>
<span class="n">PREUPDATE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000200</span><span class="p">,</span>
<span class="n">POSTUPDATE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000400</span><span class="p">,</span>
<span class="n">RECORDLISTCHANGED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00000800</span><span class="p">,</span>
<span class="n">BUFFEREDNOMIX</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00001000</span><span class="p">,</span>
<span class="n">DEVICEREINITIALIZE</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00002000</span><span class="p">,</span>
<span class="n">OUTPUTUNDERRUN</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00004000</span><span class="p">,</span>
<span class="n">RECORDPOSITIONCHANGED</span> <span class="p">=</span> <span class="m">0</span><span class="n">x00008000</span><span class="p">,</span>
<span class="n">ALL</span> <span class="p">=</span> <span class="m">0</span><span class="n">xFFFFFFFF</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">SYSTEM_CALLBACK_DEVICELISTCHANGED</span> <span class="o">=</span> <span class="mh">0x00000001</span>
<span class="nx">SYSTEM_CALLBACK_DEVICELOST</span> <span class="o">=</span> <span class="mh">0x00000002</span>
<span class="nx">SYSTEM_CALLBACK_MEMORYALLOCATIONFAILED</span> <span class="o">=</span> <span class="mh">0x00000004</span>
<span class="nx">SYSTEM_CALLBACK_THREADCREATED</span> <span class="o">=</span> <span class="mh">0x00000008</span>
<span class="nx">SYSTEM_CALLBACK_BADDSPCONNECTION</span> <span class="o">=</span> <span class="mh">0x00000010</span>
<span class="nx">SYSTEM_CALLBACK_PREMIX</span> <span class="o">=</span> <span class="mh">0x00000020</span>
<span class="nx">SYSTEM_CALLBACK_POSTMIX</span> <span class="o">=</span> <span class="mh">0x00000040</span>
<span class="nx">SYSTEM_CALLBACK_ERROR</span> <span class="o">=</span> <span class="mh">0x00000080</span>
<span class="nx">SYSTEM_CALLBACK_THREADDESTROYED</span> <span class="o">=</span> <span class="mh">0x00000100</span>
<span class="nx">SYSTEM_CALLBACK_PREUPDATE</span> <span class="o">=</span> <span class="mh">0x00000200</span>
<span class="nx">SYSTEM_CALLBACK_POSTUPDATE</span> <span class="o">=</span> <span class="mh">0x00000400</span>
<span class="nx">SYSTEM_CALLBACK_RECORDLISTCHANGED</span> <span class="o">=</span> <span class="mh">0x00000800</span>
<span class="nx">SYSTEM_CALLBACK_BUFFEREDNOMIX</span> <span class="o">=</span> <span class="mh">0x00001000</span>
<span class="nx">SYSTEM_CALLBACK_DEVICEREINITIALIZE</span> <span class="o">=</span> <span class="mh">0x00002000</span>
<span class="nx">SYSTEM_CALLBACK_OUTPUTUNDERRUN</span> <span class="o">=</span> <span class="mh">0x00004000</span>
<span class="nx">SYSTEM_CALLBACK_RECORDPOSITIONCHANGED</span> <span class="o">=</span> <span class="mh">0x00008000</span>
<span class="nx">SYSTEM_CALLBACK_ALL</span> <span class="o">=</span> <span class="mh">0xFFFFFFFF</span>
</pre></div>
<dl>
<dt id="fmod_system_callback_devicelistchanged">FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED</dt>
<dd>Called from <a class="apilink" href="core-api-system.html#system_update">System::update</a> when the enumerated list of devices has changed. Called from the main (calling) thread when set from the Core API or Studio API in synchronous mode, and from the Studio Update Thread when in default / async mode.</dd>
<dt id="fmod_system_callback_devicelost">FMOD_SYSTEM_CALLBACK_DEVICELOST</dt>
<dd>Deprecated.</dd>
<dt id="fmod_system_callback_memoryallocationfailed">FMOD_SYSTEM_CALLBACK_MEMORYALLOCATIONFAILED</dt>
<dd>Called directly when a memory allocation fails.</dd>
<dt id="fmod_system_callback_threadcreated">FMOD_SYSTEM_CALLBACK_THREADCREATED</dt>
<dd>Called from the game thread when a thread is created.</dd>
<dt id="fmod_system_callback_baddspconnection">FMOD_SYSTEM_CALLBACK_BADDSPCONNECTION</dt>
<dd>Deprecated.</dd>
<dt id="fmod_system_callback_premix">FMOD_SYSTEM_CALLBACK_PREMIX</dt>
<dd>Called from the mixer thread before it starts the next block.</dd>
<dt id="fmod_system_callback_postmix">FMOD_SYSTEM_CALLBACK_POSTMIX</dt>
<dd>Called from the mixer thread after it finishes a block.</dd>
<dt id="fmod_system_callback_error">FMOD_SYSTEM_CALLBACK_ERROR</dt>
<dd>Called directly when an API function returns an error, including delayed async functions.</dd>
<dt id="fmod_system_callback_threaddestroyed">FMOD_SYSTEM_CALLBACK_THREADDESTROYED</dt>
<dd>Called from the game thread when a thread is destroyed.</dd>
<dt id="fmod_system_callback_preupdate">FMOD_SYSTEM_CALLBACK_PREUPDATE</dt>
<dd>Called at start of <a class="apilink" href="core-api-system.html#system_update">System::update</a> from the main (calling) thread when set from the Core API or Studio API in synchronous mode, and from the Studio Update Thread when in default / async mode.</dd>
<dt id="fmod_system_callback_postupdate">FMOD_SYSTEM_CALLBACK_POSTUPDATE</dt>
<dd>Called at end of <a class="apilink" href="core-api-system.html#system_update">System::update</a> from the main (calling) thread when set from the Core API or Studio API in synchronous mode, and from the Studio Update Thread when in default / async mode.</dd>
<dt id="fmod_system_callback_recordlistchanged">FMOD_SYSTEM_CALLBACK_RECORDLISTCHANGED</dt>
<dd>Called from <a class="apilink" href="core-api-system.html#system_update">System::update</a> when the enumerated list of recording devices has changed. Called from the main (calling) thread when set from the Core API or Studio API in synchronous mode, and from the Studio Update Thread when in default / async mode.</dd>
<dt id="fmod_system_callback_bufferednomix">FMOD_SYSTEM_CALLBACK_BUFFEREDNOMIX</dt>
<dd>Called from the feeder thread after audio was consumed from the ring buffer, but not enough to allow another mix to run.</dd>
<dt id="fmod_system_callback_devicereinitialize">FMOD_SYSTEM_CALLBACK_DEVICEREINITIALIZE</dt>
<dd>Called from <a class="apilink" href="core-api-system.html#system_update">System::update</a> when an output device is re-initialized. Called from the main (calling) thread when set from the Core API or Studio API in synchronous mode, and from the Studio Update Thread when in default / async mode.</dd>
<dt id="fmod_system_callback_outputunderrun">FMOD_SYSTEM_CALLBACK_OUTPUTUNDERRUN</dt>
<dd>Called from the mixer thread when the device output attempts to read more samples than are available in the output buffer.</dd>
<dt id="fmod_system_callback_recordpositionchanged">FMOD_SYSTEM_CALLBACK_RECORDPOSITIONCHANGED</dt>
<dd>Called from the mixer thread when the System record position changed.</dd>
<dt id="fmod_system_callback_all">FMOD_SYSTEM_CALLBACK_ALL</dt>
<dd>Mask representing all callback types.</dd>
</dl>
<p>For each callback type unless specified below it is assumed <code>commanddata1</code> and <code>commanddata2</code> are unused and <code>userdata</code> matches the value set with <a class="apilink" href="core-api-system.html#system_setuserdata">System::setUserData</a>.</p>
<p><a class="apilink" href="core-api-system.html#fmod_system_callback_memoryallocationfailed">FMOD_SYSTEM_CALLBACK_MEMORYALLOCATIONFAILED</a><br />
<code>commanddata1</code>: (const char *) representing the file and line of the failure.<br />
<code>commanddata2</code>: (int) representing the size of the requested allocation</p>
<p><a class="apilink" href="core-api-system.html#fmod_system_callback_error">FMOD_SYSTEM_CALLBACK_ERROR</a><br />
<code>commanddata1</code>: (<a class="apilink" href="core-api-system.html#fmod_errorcallback_info">FMOD_ERRORCALLBACK_INFO</a> *) with extra information about the error.<br />
<code>commanddata2</code>: Unused.</p>
<p><a class="apilink" href="core-api-system.html#fmod_system_callback_threadcreated">FMOD_SYSTEM_CALLBACK_THREADCREATED</a> / <a class="apilink" href="core-api-system.html#fmod_system_callback_threaddestroyed">FMOD_SYSTEM_CALLBACK_THREADDESTROYED</a><br />
<code>commanddata1</code>: Handle of the thread, see notes below for thread handle types.<br />
<code>commanddata2</code>: (const char *) representing the name of the thread.</p>
<p><a class="apilink" href="core-api-system.html#fmod_system_callback_devicereinitialize">FMOD_SYSTEM_CALLBACK_DEVICEREINITIALIZE</a><br />
<code>commanddata1</code>: (<a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a>) of the output device.<br />
<code>commanddata2</code>: (int) selected driver index.</p>
<p><a class="apilink" href="core-api-system.html#fmod_system_callback_recordpositionchanged">FMOD_SYSTEM_CALLBACK_RECORDPOSITIONCHANGED</a><br />
<code>commanddata1</code>: (<a class="apilink" href="core-api-sound.html">Sound</a>) that is being recorded to.<br />
<code>commanddata2</code>: (int) The new record position.</p>
<p>Thread handle types per platform:</p>
<ul>
<li>Mac, Linux, iOS, Android: pthread_t</li>
<li>PS4, PS5: ScePthread</li>
<li>Win, GameCore: HANDLE</li>
</ul>
<p>Using <a class="apilink" href="core-api-system.html#fmod_system_callback_all">FMOD_SYSTEM_CALLBACK_ALL</a> or <a class="apilink" href="core-api-system.html#fmod_system_callback_devicelistchanged">FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED</a> will disable any automated device ejection/insertion handling. Use this callback to control the behavior yourself.<br />
Using <a class="apilink" href="core-api-system.html#fmod_system_callback_devicelistchanged">FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED</a> (Mac only) requires the application to be running an event loop which will allow external changes to device list to be detected.</p>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a>, <a class="apilink" href="core-api-system.html#system_setcallback">System::setCallback</a>, <a class="apilink" href="core-api-system.html#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a></p>
<h2 api="function" id="system_close"><a href="#system_close">System::close</a></h2>
<p>Close the connection to the output and return to an uninitialized state without releasing the 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">System</span><span class="o">::</span><span class="n">close</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_System_Close</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">System</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span>
</pre></div>
<p>Closing renders objects created with this System invalid. Make sure any <a class="apilink" href="core-api-sound.html">Sound</a>, <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>, <a class="apilink" href="core-api-geometry.html">Geometry</a> and <a class="apilink" href="core-api-dsp.html">DSP</a> objects are released before calling this.</p>
<p>All pre-initialize configuration settings will remain and the System can be reinitialized as needed.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a>, <a class="apilink" href="core-api-system.html#system_release">System::release</a></p>
<h2 api="function" id="system_create"><a href="#system_create">System_Create</a></h2>
<p>Creates an instance of the FMOD system.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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="nf">System_Create</span><span class="p">(</span>
<span class="n">System</span> <span class="o">**</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">headerversion</span> <span class="o">=</span> <span class="n">FMOD_VERSION</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_System_Create</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">**</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">headerversion</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="k">static</span> <span class="n">RESULT</span> <span class="n">Factory</span><span class="p">.</span><span class="n">System_Create</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">System_Create</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>Newly created object. (<a class="apilink" href="core-api-system.html">System</a>)</dd>
<dt language-c-cpp="language-c-cpp">headerversion</dt>
<dd>Expected FMOD Engine version.</dd>
</dl>
<p>Pass FMOD_VERSION in <code>headerversion</code> to ensure the library and header versions being used match.</p>
<p>This must be called first to create an FMOD <a class="apilink" href="core-api-system.html">System</a> object before any other API calls (except for <a class="apilink" href="core-api-common.html#memory_initialize">Memory_Initialize</a> and <a class="apilink" href="core-api-common.html#debug_initialize">Debug_Initialize</a>). Use this function to create 1 or multiple instances of FMOD System objects.</p>
<p>Use <a class="apilink" href="core-api-system.html#system_release">System::release</a> to free a system object.</p>
<div class="admonition warning">
<p>Calls to <a class="apilink" href="core-api-system.html#system_create">System_Create</a> and <a class="apilink" href="core-api-system.html#system_release">System::release</a> are not thread-safe. Do not call these functions simultaneously from multiple threads at once.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a></p>
<h2 api="function" id="system_createchannelgroup"><a href="#system_createchannelgroup">System::createChannelGroup</a></h2>
<p>Create a ChannelGroup 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">System</span><span class="o">::</span><span class="n">createChannelGroup</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">ChannelGroup</span> <span class="o">**</span><span class="n">channelgroup</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_System_CreateChannelGroup</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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_CHANNELGROUP</span> <span class="o">**</span><span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createChannelGroup</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">ChannelGroup</span> <span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createChannelGroup</span><span class="p">(</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">channelgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Label for identification purposes. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>channelgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created group. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
</dl>
<p><a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>s can be used to assign / group <a class="apilink" href="core-api-channel.html">Channel</a>s, for things such as volume scaling. <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>s are also used for sub-mixing. Any <a class="apilink" href="core-api-channel.html">Channel</a>s that are assigned to a <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> get submixed into that <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>'s 'tail' <a class="apilink" href="core-api-dsp.html">DSP</a>. See <a class="apilink" href="core-api-channelcontrol.html#fmod_channelcontrol_dsp_tail">FMOD_CHANNELCONTROL_DSP_TAIL</a>.</p>
<p>If a <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> has an <a href="glossary.html#effect">effect</a> added to it, the effect is processed post-mix from the <a class="apilink" href="core-api-channel.html">Channel</a>s and <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>s below it in the mix hierarchy. See the <a href="white-papers-dsp-architecture.html">DSP architecture guide</a> for more information. </p>
<p>All <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>s will initially output directly to the master <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> (See <a class="apilink" href="core-api-system.html#system_getmasterchannelgroup">System::getMasterChannelGroup</a>). <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>s can be re-parented this with <a class="apilink" href="core-api-channelgroup.html#channelgroup_addgroup">ChannelGroup::addGroup</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-channelgroup.html#channelgroup_release">ChannelGroup::release</a></p>
<h2 api="function" id="system_createdsp"><a href="#system_createdsp">System::createDSP</a></h2>
<p>Create a <a href="glossary.html#dsp">DSP unit</a> given a plug-in description structure.</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">System</span><span class="o">::</span><span class="n">createDSP</span><span class="p">(</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="n">DSP</span> <span class="o">**</span><span class="n">dsp</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_System_CreateDSP</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="n">FMOD_DSP</span> <span class="o">**</span><span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createDSP</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">DSP_DESCRIPTION</span> <span class="n">description</span><span class="p">,</span>
<span class="k">out</span> <span class="n">DSP</span> <span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createDSP</span><span class="p">(</span>
<span class="nx">description</span><span class="p">,</span>
<span class="nx">dsp</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>description</dt>
<dd>Structure describing the DSP to create. (<a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>)</dd>
<dt>dsp <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created unit. (<a class="apilink" href="core-api-dsp.html">DSP</a>)</dd>
</dl>
<p>A DSP unit is a module that can be inserted into the <a href="glossary.html#dsp-graph">DSP graph</a> to allow sound filtering or sound generation. See the <a href="white-papers-dsp-architecture.html">DSP architecture guide</a> for more information.</p>
<p>DSPs must be attached to the DSP graph before they become active, either via <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_adddsp">ChannelControl::addDSP</a> or <a class="apilink" href="core-api-dsp.html#dsp_addinput">DSP::addInput</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createdspbytype">System::createDSPByType</a>, <a class="apilink" href="core-api-system.html#system_createdspbyplugin">System::createDSPByPlugin</a></p>
<h2 api="function" id="system_createdspbyplugin"><a href="#system_createdspbyplugin">System::createDSPByPlugin</a></h2>
<p>Create a <a href="glossary.html#dsp">DSP unit</a> with a specified plug-in handle.</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">System</span><span class="o">::</span><span class="n">createDSPByPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="n">DSP</span> <span class="o">**</span><span class="n">dsp</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_System_CreateDSPByPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="n">FMOD_DSP</span> <span class="o">**</span><span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createDSPByPlugin</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">out</span> <span class="n">DSP</span> <span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createDSPByPlugin</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">dsp</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle to an already loaded DSP plug-in.</dd>
<dt>dsp <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created unit. (<a class="apilink" href="core-api-dsp.html">DSP</a>)</dd>
</dl>
<p>A DSP object is a module that can be inserted into the <a href="glossary.html#dsp-graph">DSP graph</a> to allow sound filtering or sound generation. See the <a href="white-papers-dsp-architecture.html">DSP architecture guide</a> for more information.</p>
<p>A handle can come from a newly loaded plug-in with <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a> or an existing plug-in with <a class="apilink" href="core-api-system.html#system_getpluginhandle">System::getPluginHandle</a>.</p>
<p>DSPs must be attached to the DSP graph before they become active, either via <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_adddsp">ChannelControl::addDSP</a> or <a class="apilink" href="core-api-dsp.html#dsp_addinput">DSP::addInput</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createdsp">System::createDSP</a>, <a class="apilink" href="core-api-system.html#system_createdspbytype">System::createDSPByType</a></p>
<h2 api="function" id="system_createdspbytype"><a href="#system_createdspbytype">System::createDSPByType</a></h2>
<p>Create a <a href="glossary.html#dsp">DSP unit</a> with a specified built-in type index.</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">System</span><span class="o">::</span><span class="n">createDSPByType</span><span class="p">(</span>
<span class="n">FMOD_DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="n">DSP</span> <span class="o">**</span><span class="n">dsp</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_System_CreateDSPByType</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="n">FMOD_DSP</span> <span class="o">**</span><span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createDSPByType</span><span class="p">(</span>
<span class="n">DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="k">out</span> <span class="n">DSP</span> <span class="n">dsp</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createDSPByType</span><span class="p">(</span>
<span class="nx">type</span><span class="p">,</span>
<span class="nx">dsp</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>type</dt>
<dd>Type of built in unit. (<a class="apilink" href="core-api-common-dsp-effects.html#fmod_dsp_type">FMOD_DSP_TYPE</a>)</dd>
<dt>dsp <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created unit. (<a class="apilink" href="core-api-dsp.html">DSP</a>)</dd>
</dl>
<p>A DSP unit (or "DSP") is a module that can be inserted into the <a href="glossary.html#dsp-graph">DSP graph</a> to allow sound filtering or sound generation. See the <a href="white-papers-dsp-architecture.html">DSP architecture guide</a> for more information.</p>
<p>DSPs must be attached to the DSP graph before they become active, either via <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_adddsp">ChannelControl::addDSP</a> or <a class="apilink" href="core-api-dsp.html#dsp_addinput">DSP::addInput</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createdsp">System::createDSP</a></p>
<h2 api="function" id="system_creategeometry"><a href="#system_creategeometry">System::createGeometry</a></h2>
<p>Geometry creation function. This function will create a base geometry object which can then have polygons added to 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-cpp"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="n">System</span><span class="o">::</span><span class="n">createGeometry</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">maxpolygons</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">maxvertices</span><span class="p">,</span>
<span class="n">Geometry</span> <span class="o">**</span><span class="n">geometry</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_System_CreateGeometry</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">maxpolygons</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">maxvertices</span><span class="p">,</span>
<span class="n">FMOD_GEOMETRY</span> <span class="o">**</span><span class="n">geometry</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createGeometry</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">maxpolygons</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">maxvertices</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Geometry</span> <span class="n">geometry</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createGeometry</span><span class="p">(</span>
<span class="nx">maxpolygons</span><span class="p">,</span>
<span class="nx">maxvertices</span><span class="p">,</span>
<span class="nx">geometry</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>maxpolygons</dt>
<dd>Maximum number of polygons within this object.</dd>
<dt>maxvertices</dt>
<dd>Maximum number of vertices within this object.</dd>
<dt>geometry <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created geometry object. (<a class="apilink" href="core-api-geometry.html">Geometry</a>)</dd>
</dl>
<p>Polygons can be added to a geometry object using <a class="apilink" href="core-api-geometry.html#geometry_addpolygon">Geometry::addPolygon</a>. For best efficiency, avoid overlapping of polygons and long thin polygons.</p>
<p>A geometry object stores its polygons in a group to allow optimization for line testing, insertion and updating of geometry in real-time.<br />
Geometry objects also allow for efficient rotation, scaling and translation of groups of polygons.</p>
<p>It is important to set the value of maxworldsize to an appropriate value using <a class="apilink" href="core-api-system.html#system_setgeometrysettings">System::setGeometrySettings</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setgeometrysettings">System::setGeometrySettings</a>, <a class="apilink" href="core-api-system.html#system_loadgeometry">System::loadGeometry</a>, <a class="apilink" href="core-api-geometry.html#geometry_addpolygon">Geometry::addPolygon</a>, <a class="apilink" href="core-api-geometry.html#geometry_setposition">Geometry::setPosition</a>, <a class="apilink" href="core-api-geometry.html#geometry_setrotation">Geometry::setRotation</a>, <a class="apilink" href="core-api-geometry.html#geometry_setscale">Geometry::setScale</a></p>
<h2 api="function" id="system_createreverb3d"><a href="#system_createreverb3d">System::createReverb3D</a></h2>
<p>Creates a 'virtual reverb' object. This object reacts to 3D location and morphs the reverb environment based on how close it is to the reverb object's center.</p>
<p>Multiple reverb objects can be created to achieve a multi-reverb environment. 1 reverb object is used for all 3D reverb objects (slot 0 by default).</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">System</span><span class="o">::</span><span class="n">createReverb3D</span><span class="p">(</span>
<span class="n">Reverb3D</span> <span class="o">**</span><span class="n">reverb</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_System_CreateReverb3D</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_REVERB3D</span> <span class="o">**</span><span class="n">reverb</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createReverb3D</span><span class="p">(</span>
<span class="k">out</span> <span class="n">Reverb3D</span> <span class="n">reverb</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createReverb3D</span><span class="p">(</span>
<span class="nx">reverb</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>reverb <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created virtual reverb object. (<a class="apilink" href="core-api-reverb3d.html">Reverb3D</a>)</dd>
</dl>
<p>The 3D reverb object is a sphere having 3D attributes (position, minimum distance, maximum distance) and reverb properties.</p>
<p>The properties and 3D attributes of all reverb objects collectively determine, along with the listener's position, the settings of and input gains into a single <a href="effects-reference.html#sfx-reverb">3D reverb DSP</a>.</p>
<p>When the listener is within the sphere of effect of one or more 3D reverbs, the listener's 3D reverb properties are a weighted combination of such 3D reverbs.</p>
<p>When the listener is outside all of the reverbs, no reverb is applied.</p>
<p><a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a> can be used to create an alternative reverb that can be used for 2D and background global reverb.</p>
<p>To avoid this reverb interfering with the reverb slot used by the 3D reverb, 2D reverb should use a different slot id with <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a>, otherwise <a class="apilink" href="core-api-system.html#fmod_advancedsettings_reverb3dinstance">FMOD_ADVANCEDSETTINGS::reverb3Dinstance</a> can also be used to place 3D reverb on a different reverb slot.</p>
<p>Use <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setreverbproperties">ChannelControl::setReverbProperties</a> to turn off reverb for 2D sounds (ie set wet = 0).</p>
<p>Creating multiple reverb objects does not impact performance. This is because these reverb objects are 'virtual reverbs': There is only one reverb <a href="glossary.html#dsp">DSP unit</a> running at a time, and its parameter values are morphed to those of each virtual reverb as needed.</p>
<p>To remove the reverb DSP unit and the associated CPU cost, first make sure all 3D reverb objects are released. Then, call <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a> with the 3D reverb's slot ID (0 by default) with a property point of 0 or NULL, to signal that the reverb instance should be deleted.</p>
<p>If a 3D reverb is still present, and <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a> function is called to free the reverb, the 3D reverb system recreates it upon the next <a class="apilink" href="core-api-system.html#system_update">System::update</a> call.</p>
<p>The 3D reverb system does not affect Studio events unless it is explicitly enabled by calling <a class="apilink" href="studio-api-eventinstance.html#studio_eventinstance_setreverblevel">Studio::EventInstance::setReverbLevel</a> on each event instance.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-reverb3d.html#reverb3d_release">Reverb3D::release</a></p>
<h2 api="function" id="system_createsound"><a href="#system_createsound">System::createSound</a></h2>
<p>Loads a sound into memory, opens it for streaming or sets it up for callback based sounds.</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">System</span><span class="o">::</span><span class="n">createSound</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name_or_data</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="o">*</span><span class="n">exinfo</span><span class="p">,</span>
<span class="n">Sound</span> <span class="o">**</span><span class="n">sound</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_System_CreateSound</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name_or_data</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="o">*</span><span class="n">exinfo</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">System</span><span class="p">.</span><span class="n">createSound</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createSound</span><span class="p">(</span>
<span class="kt">byte</span><span class="p">[]</span> <span class="n">data</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createSound</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">CREATESOUNDEXINFO</span> <span class="n">exinfo</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createSound</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">name_or_data</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">CREATESOUNDEXINFO</span> <span class="n">exinfo</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createSound</span><span class="p">(</span>
<span class="nx">name_or_data</span><span class="p">,</span>
<span class="nx">mode</span><span class="p">,</span>
<span class="nx">exinfo</span><span class="p">,</span>
<span class="nx">sound</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name_or_data</dt>
<dd>Name of the file or URL to open (<a href="glossary.html#string-format">UTF-8 string</a>) or a pointer to a preloaded sound memory block if <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> / <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a> is used.</dd>
<dt>mode</dt>
<dd>
<p>Behavior modifier for opening the sound. (<a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a>)</p>
<ul>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-common.html#fmod_default">FMOD_DEFAULT</a></li>
</ul>
</dd>
<dt>exinfo <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Extended information for creating the sound. (<a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a>)</dd>
<dt>sound <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created Sound object. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
</dl>
<p><a class="apilink" href="core-api-common.html#fmod_createsample">FMOD_CREATESAMPLE</a> will try to load and decompress the whole sound into memory, use <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a> to open it as a stream and have it play back in realtime from disk or another medium. <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a> can also be used for certain formats to play the sound directly in its compressed format from the mixer.</p>
<ul>
<li>To open a file or URL as a stream, so that it decompresses / reads at runtime, instead of loading / decompressing into memory all at the time of this call, use the <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a> flag.</li>
<li>To open a file or URL as a compressed sound effect that is not streamed and is not decompressed into memory at load time, use <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a>. This is supported with MPEG (mp2/mp3), ADPCM/FADPCM, XMA, AT9 and FSB Vorbis files only. This is useful for those who want realtime compressed soundeffects, but not the overhead of disk access.</li>
<li>To open a sound as 2D, so that it is not affected by 3D processing, use the <a class="apilink" href="core-api-common.html#fmod_2d">FMOD_2D</a> flag. 3D sound commands will be ignored on these types of sounds.</li>
<li>To open a sound as 3D, so that it is treated as a 3D sound, use the <a class="apilink" href="core-api-common.html#fmod_3d">FMOD_3D</a> flag.</li>
</ul>
<p>Note that <a class="apilink" href="core-api-common.html#fmod_openraw">FMOD_OPENRAW</a>, <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a>, <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a> and <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> will not work here without the exinfo structure present, as more information is needed.</p>
<p>Use <a class="apilink" href="core-api-common.html#fmod_nonblocking">FMOD_NONBLOCKING</a> to have the sound open or load in the background. You can use <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a> to determine if it has finished loading / opening or not. While it is loading (not ready), sound functions are not accessible for that sound. Do not free memory provided with <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> if the sound is not in a ready state, as it will most likely lead to a crash.</p>
<p>To account for slow media that might cause buffer underrun (skipping / stuttering / repeating blocks of audio) with sounds created with <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a>, use <a class="apilink" href="core-api-system.html#system_setstreambuffersize">System::setStreamBufferSize</a> to increase read ahead.</p>
<p>As using <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> causes FMOD to ignore whatever is passed as the first argument <code>name_or_data</code>, recommended practice is to pass null or equivalent.</p>
<p>Specifying <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a> will POINT to your memory rather allocating its own sound buffers and duplicating it internally, this means you cannot free the memory while FMOD is using it, until after <a class="apilink" href="core-api-sound.html#sound_release">Sound::release</a> is called.</p>
<p>With <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a>, only PCM formats and compressed formats using <a class="apilink" href="core-api-common.html#fmod_createcompressedsample">FMOD_CREATECOMPRESSEDSAMPLE</a> are supported.</p>
<div class="admonition warning">
<p>Use of FMOD.NON_BLOCKING is currently not supported for JavaScript.</p>
</div>
<h2 api="function" id="system_createsoundgroup"><a href="#system_createsoundgroup">System::createSoundGroup</a></h2>
<p>Creates a SoundGroup 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">System</span><span class="o">::</span><span class="n">createSoundGroup</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">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_System_CreateSoundGroup</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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_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">System</span><span class="p">.</span><span class="n">createSoundGroup</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">SoundGroup</span> <span class="n">soundgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createSoundGroup</span><span class="p">(</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">soundgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name</dt>
<dd>Name of <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>soundgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created group. (<a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>)</dd>
</dl>
<p>A <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a> is a way to address multiple <a class="apilink" href="core-api-sound.html">Sound</a>s at once with group level commands, such as:</p>
<ul>
<li>Attributes of <a class="apilink" href="core-api-sound.html">Sound</a>s that are playing or about to be played, such as volume. See (<a class="apilink" href="core-api-soundgroup.html#soundgroup_setvolume">SoundGroup::setVolume</a>).</li>
<li>Control of playback, such as stopping <a class="apilink" href="core-api-sound.html">Sound</a>s. See (<a class="apilink" href="core-api-soundgroup.html#soundgroup_stop">SoundGroup::stop</a>).</li>
<li>Playback behavior such as 'max audible', to limit playback of certain types of <a class="apilink" href="core-api-sound.html">Sound</a>s. See (<a class="apilink" href="core-api-soundgroup.html#soundgroup_setmaxaudible">SoundGroup::setMaxAudible</a>).</li>
</ul>
<p>Once a <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a> is created, <a class="apilink" href="core-api-sound.html#sound_setsoundgroup">Sound::setSoundGroup</a> is used to put a <a class="apilink" href="core-api-sound.html">Sound</a> in a <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-soundgroup.html#soundgroup_release">SoundGroup::release</a>, <a class="apilink" href="core-api-sound.html#sound_setsoundgroup">Sound::setSoundGroup</a></p>
<h2 api="function" id="system_createstream"><a href="#system_createstream">System::createStream</a></h2>
<p>Opens a sound for streaming.</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">System</span><span class="o">::</span><span class="n">createStream</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name_or_data</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="o">*</span><span class="n">exinfo</span><span class="p">,</span>
<span class="n">Sound</span> <span class="o">**</span><span class="n">sound</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_System_CreateStream</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name_or_data</span><span class="p">,</span>
<span class="n">FMOD_MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="n">FMOD_CREATESOUNDEXINFO</span> <span class="o">*</span><span class="n">exinfo</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">System</span><span class="p">.</span><span class="n">createStream</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createStream</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">name</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">CREATESOUNDEXINFO</span> <span class="n">exinfo</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createStream</span><span class="p">(</span>
<span class="kt">byte</span><span class="p">[]</span> <span class="n">data</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">CREATESOUNDEXINFO</span> <span class="n">exinfo</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">createStream</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">name_or_data</span><span class="p">,</span>
<span class="n">MODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">CREATESOUNDEXINFO</span> <span class="n">exinfo</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Sound</span> <span class="n">sound</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">createStream</span><span class="p">(</span>
<span class="nx">name_or_data</span><span class="p">,</span>
<span class="nx">mode</span><span class="p">,</span>
<span class="nx">exinfo</span><span class="p">,</span>
<span class="nx">sound</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>name_or_data</dt>
<dd>Name of the file or URL to open (<a href="glossary.html#string-format">UTF-8 string</a>) or a pointer to a preloaded sound memory block if <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> / <a class="apilink" href="core-api-common.html#fmod_openmemory_point">FMOD_OPENMEMORY_POINT</a> is used.</dd>
<dt>mode</dt>
<dd>
<p>Behavior modifier for opening the sound. (<a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</a>)</p>
<ul>
<li><span class="label">Default:</span> <a class="apilink" href="core-api-common.html#fmod_default">FMOD_DEFAULT</a></li>
</ul>
</dd>
<dt>exinfo <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Extended information while playing the sound. (<a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a>)</dd>
<dt>sound <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created Sound object. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
</dl>
<p>This is a convenience function for <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> with the <a class="apilink" href="core-api-common.html#fmod_createstream">FMOD_CREATESTREAM</a> flag added.</p>
<p>A stream only has one decode buffer and file handle, and therefore can only be played once. It cannot play multiple times at once because it cannot share a stream buffer if the stream is playing at different positions. Open multiple streams to have them play concurrently.</p>
<h2 api="function" id="system_detachchannelgroupfromport"><a href="#system_detachchannelgroupfromport">System::detachChannelGroupFromPort</a></h2>
<p>Disconnect the output of the specified ChannelGroup from an audio port on the output driver.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">detachChannelGroupFromPort</span><span class="p">(</span>
<span class="n">ChannelGroup</span> <span class="o">*</span><span class="n">channelgroup</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_System_DetachChannelGroupFromPort</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_CHANNELGROUP</span> <span class="o">*</span><span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">detachChannelGroupFromPort</span><span class="p">(</span>
<span class="n">ChannelGroup</span> <span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">detachChannelGroupFromPort</span><span class="p">(</span>
<span class="nx">channelgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channelgroup</dt>
<dd>Group to detach the port from. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
</dl>
<p>Removing a <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> from a port will reroute the audio back to the main mix.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_attachchannelgrouptoport">System::attachChannelGroupToPort</a></p>
<h2 api="function" id="system_get3dlistenerattributes"><a href="#system_get3dlistenerattributes">System::get3DListenerAttributes</a></h2>
<p>Retrieves the position, velocity and orientation of the specified 3D sound listener.</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">System</span><span class="o">::</span><span class="n">get3DListenerAttributes</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">vel</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">forward</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">up</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_System_Get3DListenerAttributes</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">vel</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">forward</span><span class="p">,</span>
<span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">up</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">get3DListenerAttributes</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="k">out</span> <span class="n">VECTOR</span> <span class="n">pos</span><span class="p">,</span>
<span class="k">out</span> <span class="n">VECTOR</span> <span class="n">vel</span><span class="p">,</span>
<span class="k">out</span> <span class="n">VECTOR</span> <span class="n">forward</span><span class="p">,</span>
<span class="k">out</span> <span class="n">VECTOR</span> <span class="n">up</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">get3DListenerAttributes</span><span class="p">(</span>
<span class="nx">listener</span><span class="p">,</span>
<span class="nx">pos</span><span class="p">,</span>
<span class="nx">vel</span><span class="p">,</span>
<span class="nx">forward</span><span class="p">,</span>
<span class="nx">up</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>listener</dt>
<dd>
<p>Index of listener to get 3D attributes for. Listeners are indexed from 0, to <a class="apilink" href="core-api-common.html#fmod_max_listeners">FMOD_MAX_LISTENERS</a> - 1, in a multi-listener environment.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-common.html#fmod_max_listeners">FMOD_MAX_LISTENERS</a>)</li>
</ul>
</dd>
<dt>pos <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>Position in 3D space used for panning and attenuation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
</ul>
</dd>
<dt>vel <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>Velocity in 3D space used for doppler. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
</ul>
</dd>
<dt>forward <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>Forwards orientation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>up <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>Upwards orientation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
</dl>
<p>Users of the Studio API should call <a class="apilink" href="studio-api-system.html#studio_system_getlistenerattributes">Studio::System::getListenerAttributes</a> instead of this function.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_set3dlistenerattributes">System::set3DListenerAttributes</a></p>
<h2 api="function" id="system_get3dnumlisteners"><a href="#system_get3dnumlisteners">System::get3DNumListeners</a></h2>
<p>Retrieves the number of 3D listeners.</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">System</span><span class="o">::</span><span class="n">get3DNumListeners</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numlisteners</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_System_Get3DNumListeners</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numlisteners</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">get3DNumListeners</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numlisteners</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">get3DNumListeners</span><span class="p">(</span>
<span class="nx">numlisteners</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numlisteners <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of 3D listeners in the 3D scene.</dd>
</dl>
<p>Users of the Studio API should call <a class="apilink" href="studio-api-system.html#studio_system_getnumlisteners">Studio::System::getNumListeners</a> instead of this function.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_set3dnumlisteners">System::set3DNumListeners</a></p>
<h2 api="function" id="system_get3dsettings"><a href="#system_get3dsettings">System::get3DSettings</a></h2>
<p>Retrieves the global doppler scale, distance factor and roll-off scale for all 3D sounds.</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">System</span><span class="o">::</span><span class="n">get3DSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">dopplerscale</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">distancefactor</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">rolloffscale</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_System_Get3DSettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">dopplerscale</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">distancefactor</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">get3DSettings</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">dopplerscale</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">distancefactor</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">get3DSettings</span><span class="p">(</span>
<span class="nx">dopplerscale</span><span class="p">,</span>
<span class="nx">distancefactor</span><span class="p">,</span>
<span class="nx">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>dopplerscale <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>A scaling factor for doppler shift.</dd>
<dt>distancefactor <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>A factor for converting game distance units to FMOD distance units.</dd>
<dt>rolloffscale <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>A scaling factor for distance attenuation. When a sound uses a roll-off mode other than FMOD_3D_CUSTOMROLLOFF and the distance is greater than the sound's minimum distance, the distance is scaled by the roll-off scale.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_set3dsettings">System::set3DSettings</a></p>
<h2 api="function" id="system_getadvancedsettings"><a href="#system_getadvancedsettings">System::getAdvancedSettings</a></h2>
<p>Retrieves the advanced settings for the 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">System</span><span class="o">::</span><span class="n">getAdvancedSettings</span><span class="p">(</span>
<span class="n">FMOD_ADVANCEDSETTINGS</span> <span class="o">*</span><span class="n">settings</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_System_GetAdvancedSettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_ADVANCEDSETTINGS</span> <span class="o">*</span><span class="n">settings</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getAdvancedSettings</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">ADVANCEDSETTINGS</span> <span class="n">settings</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getAdvancedSettings</span><span class="p">(</span>
<span class="nx">settings</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>settings <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Advanced settings (<a class="apilink" href="core-api-system.html#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setadvancedsettings">System::setAdvancedSettings</a></p>
<h2 api="function" id="system_getchannel"><a href="#system_getchannel">System::getChannel</a></h2>
<p>Retrieves a handle to a Channel by ID.</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">System</span><span class="o">::</span><span class="n">getChannel</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channelid</span><span class="p">,</span>
<span class="n">Channel</span> <span class="o">**</span><span class="n">channel</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_System_GetChannel</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">channelid</span><span class="p">,</span>
<span class="n">FMOD_CHANNEL</span> <span class="o">**</span><span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getChannel</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">channelid</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Channel</span> <span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getChannel</span><span class="p">(</span>
<span class="nx">channelid</span><span class="p">,</span>
<span class="nx">channel</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channelid</dt>
<dd>Index in the FMOD <a class="apilink" href="core-api-channel.html">Channel</a> pool. Specify a <a class="apilink" href="core-api-channel.html">Channel</a> number from 0 to the 'maxchannels' value specified in <a class="apilink" href="core-api-system.html#system_init">System::init</a> minus 1.</dd>
<dt>channel <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Requested <a class="apilink" href="core-api-channel.html">Channel</a>. (<a class="apilink" href="core-api-channel.html">Channel</a>)</dd>
</dl>
<p>This function is mainly for getting handles to existing (playing) <a class="apilink" href="core-api-channel.html">Channel</a>s and setting their attributes. The only way to 'create' an instance of a <a class="apilink" href="core-api-channel.html">Channel</a> for playback is to use <a class="apilink" href="core-api-system.html#system_playsound">System::playSound</a> or [System::playDSP].</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a></p>
<h2 api="function" id="system_getchannelsplaying"><a href="#system_getchannelsplaying">System::getChannelsPlaying</a></h2>
<p>Retrieves the number of currently playing Channels.</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">System</span><span class="o">::</span><span class="n">getChannelsPlaying</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">realchannels</span> <span class="o">=</span> <span class="k">nullptr</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_System_GetChannelsPlaying</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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">realchannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getChannelsPlaying</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="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getChannelsPlaying</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">realchannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getChannelsPlaying</span><span class="p">(</span>
<span class="nx">channels</span><span class="p">,</span>
<span class="nx">realchannels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of playing <a class="apilink" href="core-api-channel.html">Channel</a>s (both real and virtual).</dd>
<dt>realchannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of playing real (non-virtual) <a class="apilink" href="core-api-channel.html">Channel</a>s.</dd>
</dl>
<p>For differences between real and virtual voices see the <a href="white-papers-virtual-voices.html">Virtual Voices</a> guide for more information.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_isplaying">ChannelControl::isPlaying</a>, <a class="apilink" href="core-api-channel.html#channel_isvirtual">Channel::isVirtual</a></p>
<h2 api="function" id="system_getcpuusage"><a href="#system_getcpuusage">System::getCPUUsage</a></h2>
<p>Retrieves the amount of CPU used for different parts of the Core API.</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">System</span><span class="o">::</span><span class="n">getCPUUsage</span><span class="p">(</span>
<span class="n">FMOD_CPU_USAGE</span> <span class="o">*</span><span class="n">usage</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_System_GetCPUUsage</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_CPU_USAGE</span> <span class="o">*</span><span class="n">usage</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getCPUUsage</span><span class="p">(</span>
<span class="k">out</span> <span class="n">CPU_USAGE</span> <span class="n">usage</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getCPUUsage</span><span class="p">(</span>
<span class="nx">usage</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>usage <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>CPU usage values. (<a class="apilink" href="core-api-common.html#fmod_cpu_usage">FMOD_CPU_USAGE</a>)</dd>
</dl>
<p>For readability, the percentage values are smoothed to provide a more stable output.</p>
<p><strong>See Also:</strong> <a class="apilink" href="studio-api-system.html#studio_system_getcpuusage">Studio::System::getCPUUsage</a>, <a class="apilink" href="studio-api-system.html#fmod_studio_cpu_usage">FMOD_STUDIO_CPU_USAGE</a></p>
<h2 api="function" id="system_getdefaultmixmatrix"><a href="#system_getdefaultmixmatrix">System::getDefaultMixMatrix</a></h2>
<p>Retrieves the default matrix used to convert from one speaker mode to another.</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">System</span><span class="o">::</span><span class="n">getDefaultMixMatrix</span><span class="p">(</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">sourcespeakermode</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">targetspeakermode</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">matrix</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">matrixhop</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_System_GetDefaultMixMatrix</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">sourcespeakermode</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">targetspeakermode</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">matrix</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">matrixhop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDefaultMixMatrix</span><span class="p">(</span>
<span class="n">SPEAKERMODE</span> <span class="n">sourcespeakermode</span><span class="p">,</span>
<span class="n">SPEAKERMODE</span> <span class="n">targetspeakermode</span><span class="p">,</span>
<span class="kt">float</span><span class="p">[]</span> <span class="n">matrix</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">matrixhop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDefaultMixMatrix</span><span class="p">(</span>
<span class="nx">sourcespeakermode</span><span class="p">,</span>
<span class="nx">targetspeakermode</span><span class="p">,</span>
<span class="nx">matrix</span><span class="p">,</span>
<span class="nx">matrixhop</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>sourcespeakermode</dt>
<dd>The speaker mode being converted from. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>targetspeakermode</dt>
<dd>The speaker mode being converted to. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>matrix <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>The output matrix. Its minimum size in number of floats must be the number of source channels multiplied by the number of target channels. Source and target channels cannot exceed <a class="apilink" href="core-api-common.html#fmod_max_channel_width">FMOD_MAX_CHANNEL_WIDTH</a>.</dd>
<dt>matrixhop <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>The number of source channels in the matrix. If this is 0, the number of source channels will be derived from <code>sourcespeakermode</code>. Maximum of <a class="apilink" href="core-api-common.html#fmod_max_channel_width">FMOD_MAX_CHANNEL_WIDTH</a>.</dd>
</dl>
<p>The gain for source channel 's' to target channel 't' is matrix[t * matrixhop + s].</p>
<p>If 'sourcespeakermode' or 'targetspeakermode' is <a class="apilink" href="core-api-common.html#fmod_speakermode_raw">FMOD_SPEAKERMODE_RAW</a>, this function will return <a class="apilink" href="core-api-common.html#fmod_err_invalid_param">FMOD_ERR_INVALID_PARAM</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getspeakermodechannels">System::getSpeakerModeChannels</a></p>
<h2 api="function" id="system_getdriver"><a href="#system_getdriver">System::getDriver</a></h2>
<p>Retrieves the output driver for the selected output type.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getDriver</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">driver</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_System_GetDriver</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">driver</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDriver</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">driver</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDriver</span><span class="p">(</span>
<span class="nx">driver</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>driver <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Driver index where 0 represents the default for the output type.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setdriver">System::setDriver</a></p>
<h2 api="function" id="system_getdriverinfo"><a href="#system_getdriverinfo">System::getDriverInfo</a></h2>
<p>Retrieves identification information about a sound device specified by its index, and specific to the selected output mode.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getDriverInfo</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span><span class="p">,</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">guid</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">systemrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_System_GetDriverInfo</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span><span class="p">,</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">guid</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">systemrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDriverInfo</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</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="n">Guid</span> <span class="n">guid</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">systemrate</span><span class="p">,</span>
<span class="k">out</span> <span class="n">SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">speakermodechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDriverInfo</span><span class="p">(</span>
<span class="nx">id</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">guid</span><span class="p">,</span>
<span class="nx">systemrate</span><span class="p">,</span>
<span class="nx">speakermode</span><span class="p">,</span>
<span class="nx">speakermodechannels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the sound driver device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a>)</li>
</ul>
</dd>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Name of the device. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>
<p>Length of <code>name</code>. 256 is sufficient to contain the vast majority of driver names.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>guid <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>A <a href="glossary.html#guid">GUID</a> that uniquely identifies the device. (<a class="apilink" href="core-api-common.html#fmod_guid">FMOD_GUID</a>)</dd>
<dt>systemrate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Sample rate this device operates at.</dd>
<dt>speakermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Speaker setup this device is currently using. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>speakermodechannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of channels in the current speaker setup.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_getdspbuffersize"><a href="#system_getdspbuffersize">System::getDSPBufferSize</a></h2>
<p>Retrieves the buffer size settings for the FMOD software mixing engine.</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">System</span><span class="o">::</span><span class="n">getDSPBufferSize</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">bufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numbuffers</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_System_GetDSPBufferSize</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">bufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numbuffers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDSPBufferSize</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">bufferlength</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numbuffers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDSPBufferSize</span><span class="p">(</span>
<span class="nx">bufferlength</span><span class="p">,</span>
<span class="nx">numbuffers</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>bufferlength <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Mixer engine block size.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
<li><span class="label">Default:</span> 1024</li>
</ul>
</dd>
<dt>numbuffers <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Mixer engine number of buffers used.</p>
<ul>
<li><span class="label">Default:</span> 4</li>
</ul>
</dd>
</dl>
<p>To get the <code>bufferlength</code> in milliseconds, divide it by the output rate and multiply the result by 1000. For a <code>bufferlength</code> of 1024 and an output rate of 48khz (see <a class="apilink" href="core-api-system.html#system_setsoftwareformat">System::SetSoftwareFormat</a>), milliseconds = 1024 / 48000 * 1000 = 21.33ms. This means the mixer updates every 21.33ms.</p>
<p>To get the total buffer size multiply the <code>bufferlength</code> by the <code>numbuffers</code> value. By default this would be 4 * 1024 = 4096 samples, or 4 * 21.33ms = 85.33ms. This would generally be the total latency of the software mixer, but in reality due to one of the buffers being written to constantly, and the cursor position of the buffer that is audible, the latency is typically more like the (number of buffers - 1.5) multiplied by the buffer length.</p>
<p>To convert from milliseconds back to 'samples', simply multiply the value in milliseconds by the sample rate of the output (ie 48000 if that is what it is set to), then divide by 1000.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setdspbuffersize">System::setDSPBufferSize</a></p>
<h2 api="function" id="system_getdspinfobyplugin"><a href="#system_getdspinfobyplugin">System::getDSPInfoByPlugin</a></h2>
<p>Retrieve the description structure for a pre-existing <a href="glossary.html#dsp">DSP</a> plug-in.</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">System</span><span class="o">::</span><span class="n">getDSPInfoByPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">**</span><span class="n">description</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_System_GetDSPInfoByPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">**</span><span class="n">description</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDSPInfoByPlugin</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">description</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDSPInfoByPlugin</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">description</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle to a pre-existing DSP plug-in, loaded by <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a>.</dd>
<dt>description <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Description structure for the DSP. (<a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a></p>
<h2 api="function" id="system_getdspinfobytype"><a href="#system_getdspinfobytype">System::getDSPInfoByType</a></h2>
<p>Retrieve the description structure for a built-in <a href="glossary.html#dsp">DSP</a> plug-in.</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">System</span><span class="o">::</span><span class="n">getDSPInfoByType</span><span class="p">(</span>
<span class="n">FMOD_DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">**</span><span class="n">description</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_System_GetDSPInfoByType</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">**</span><span class="n">description</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getDSPInfoByType</span><span class="p">(</span>
<span class="n">DSP_TYPE</span> <span class="n">type</span><span class="p">,</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">description</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getDSPInfoByType</span><span class="p">(</span>
<span class="nx">type</span><span class="p">,</span>
<span class="nx">description</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>type</dt>
<dd>Type of built in unit. (<a class="apilink" href="core-api-common-dsp-effects.html#fmod_dsp_type">FMOD_DSP_TYPE</a>)</dd>
<dt>description <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Description structure for the DSP. (<a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>)</dd>
</dl>
<p><a class="apilink" href="core-api-common-dsp-effects.html#fmod_dsp_type_mixer">FMOD_DSP_TYPE_MIXER</a> not supported.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getdspinfobyplugin">System::getDSPInfoByPlugin</a></p>
<h2 api="function" id="system_getfileusage"><a href="#system_getfileusage">System::getFileUsage</a></h2>
<p>Retrieves information about file reads.</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">System</span><span class="o">::</span><span class="n">getFileUsage</span><span class="p">(</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sampleBytesRead</span><span class="p">,</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">streamBytesRead</span><span class="p">,</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">otherBytesRead</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_System_GetFileUsage</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sampleBytesRead</span><span class="p">,</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">streamBytesRead</span><span class="p">,</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">otherBytesRead</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getFileUsage</span><span class="p">(</span>
<span class="k">out</span> <span class="n">Int64</span> <span class="n">sampleBytesRead</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Int64</span> <span class="n">streamBytesRead</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Int64</span> <span class="n">otherBytesRead</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getFileUsage</span><span class="p">(</span>
<span class="nx">sampleBytesRead</span><span class="p">,</span>
<span class="nx">streamBytesRead</span><span class="p">,</span>
<span class="nx">otherBytesRead</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>sampleBytesRead <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Total bytes read from file for loading sample data.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>streamBytesRead <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Total bytes read from file for streaming sounds.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>otherBytesRead <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Total bytes read for non-audio data such as <a href="glossary.html#bank-file">bank files</a> created in <a href="glossary.html#fmod-studio">FMOD Studio</a>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>The values returned are running totals that never reset.</p>
<h2 api="function" id="system_getgeometryocclusion"><a href="#system_getgeometryocclusion">System::getGeometryOcclusion</a></h2>
<p>Calculates geometry occlusion between a listener and a sound source.</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">System</span><span class="o">::</span><span class="n">getGeometryOcclusion</span><span class="p">(</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">listener</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">source</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">direct</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">reverb</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_System_GetGeometryOcclusion</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">listener</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">source</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">direct</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">reverb</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getGeometryOcclusion</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">listener</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">source</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">direct</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">reverb</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getGeometryOcclusion</span><span class="p">(</span>
<span class="nx">listener</span><span class="p">,</span>
<span class="nx">source</span><span class="p">,</span>
<span class="nx">direct</span><span class="p">,</span>
<span class="nx">reverb</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>listener</dt>
<dd>The listener position. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>source</dt>
<dd>The source position. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>direct <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Direct occlusion value. 0 = not occluded at all / full volume, 1 = fully occluded / silent.</dd>
<dt>reverb <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Reverb occlusion value. 0 = not occluded at all / wet, 1 = fully occluded / dry.</dd>
</dl>
<p>If single sided polygons have been created, it is important to get the source and listener positions around the right way, <br />
as the occlusion from point A to point B may not be the same as the occlusion from point B to point A.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_creategeometry">System::createGeometry</a></p>
<h2 api="function" id="system_getgeometrysettings"><a href="#system_getgeometrysettings">System::getGeometrySettings</a></h2>
<p>Retrieves the maximum world size for the geometry engine.</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">System</span><span class="o">::</span><span class="n">getGeometrySettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">maxworldsize</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_System_GetGeometrySettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getGeometrySettings</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getGeometrySettings</span><span class="p">(</span>
<span class="nx">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>maxworldsize <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Maximum world size.</dd>
</dl>
<p>FMOD uses an efficient spatial partitioning system to store polygons for ray casting purposes.<br />
The maximum size of the world should be set to allow processing within a known range.<br />
Outside of this range, objects and polygons will not be processed as efficiently.<br />
Excessive world size settings can also cause loss of precision and efficiency.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setgeometrysettings">System::setGeometrySettings</a></p>
<h2 api="function" id="system_getmasterchannelgroup"><a href="#system_getmasterchannelgroup">System::getMasterChannelGroup</a></h2>
<p>Retrieves the master ChannelGroup that all sounds ultimately route to.</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">System</span><span class="o">::</span><span class="n">getMasterChannelGroup</span><span class="p">(</span>
<span class="n">ChannelGroup</span> <span class="o">**</span><span class="n">channelgroup</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_System_GetMasterChannelGroup</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_CHANNELGROUP</span> <span class="o">**</span><span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getMasterChannelGroup</span><span class="p">(</span>
<span class="k">out</span> <span class="n">ChannelGroup</span> <span class="n">channelgroup</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getMasterChannelGroup</span><span class="p">(</span>
<span class="nx">channelgroup</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>channelgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Master group. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
</dl>
<p>This is the default <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> that <a class="apilink" href="core-api-channel.html">Channel</a>s play on, unless a different <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> is specified with <a class="apilink" href="core-api-system.html#system_playsound">System::playSound</a>, <a class="apilink" href="core-api-system.html#system_playdsp">System::playDSP</a> or <a class="apilink" href="core-api-channel.html#channel_setchannelgroup">Channel::setChannelGroup</a>.<br />
A master <a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a> can be used to do things like set the 'master volume' for all playing <a class="apilink" href="core-api-channel.html">Channel</a>s. See <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setvolume">ChannelControl::setVolume</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createchannelgroup">System::createChannelGroup</a></p>
<h2 api="function" id="system_getmastersoundgroup"><a href="#system_getmastersoundgroup">System::getMasterSoundGroup</a></h2>
<p>Retrieves the default SoundGroup, where all sounds are placed when they are created.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getMasterSoundGroup</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_System_GetMasterSoundGroup</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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">System</span><span class="p">.</span><span class="n">getMasterSoundGroup</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">System</span><span class="p">.</span><span class="nx">getMasterSoundGroup</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>Master sound group. (<a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>)</dd>
</dl>
<p>If <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a> is released, the <a class="apilink" href="core-api-sound.html">Sound</a>s will be put back into this <a class="apilink" href="core-api-soundgroup.html">SoundGroup</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-soundgroup.html#soundgroup_release">SoundGroup::release</a>, <a class="apilink" href="core-api-sound.html#sound_setsoundgroup">Sound::setSoundGroup</a></p>
<h2 api="function" id="system_getnestedplugin"><a href="#system_getnestedplugin">System::getNestedPlugin</a></h2>
<p>Retrieves the handle of a nested plug-in.</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">System</span><span class="o">::</span><span class="n">getNestedPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">nestedhandle</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_System_GetNestedPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">nestedhandle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNestedPlugin</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</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="kt">uint</span> <span class="n">nestedhandle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNestedPlugin</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">index</span><span class="p">,</span>
<span class="nx">nestedhandle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle obtained from <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a>.</dd>
<dt>index</dt>
<dd>
<p>Index into the list of plug-in definitions.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getnumnestedplugins">System::getNumNestedPlugins</a>)</li>
</ul>
</dd>
<dt>nestedhandle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the nested plug-in.</dd>
</dl>
<p>This function is used to iterate handles for plug-ins that have a list of definitions.</p>
<p>Most plug-ins contain a single definition. If this is the case, only index 0 is valid, and the returned handle is the same as the handle passed in.</p>
<p>See the <a href="white-papers-dsp-plugin-api.html#multiple-plug-ins-within-one-file">DSP Plug-in API guide</a> for more information.</p>
<h2 api="function" id="system_getnetworkproxy"><a href="#system_getnetworkproxy">System::getNetworkProxy</a></h2>
<p>Retrieves the URL of the proxy server used in internet streaming.</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">System</span><span class="o">::</span><span class="n">getNetworkProxy</span><span class="p">(</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">proxy</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">proxylen</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_System_GetNetworkProxy</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">proxy</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">proxylen</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNetworkProxy</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">string</span> <span class="n">proxy</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">proxylen</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNetworkProxy</span><span class="p">(</span>
<span class="nx">proxy</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>proxy <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Proxy server URL. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>proxylen</dt>
<dd>Length of <code>proxy</code>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setnetworkproxy">System::setNetworkProxy</a></p>
<h2 api="function" id="system_getnetworktimeout"><a href="#system_getnetworktimeout">System::getNetworkTimeout</a></h2>
<p>Retrieve the timeout value for network streams.</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">System</span><span class="o">::</span><span class="n">getNetworkTimeout</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">timeout</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_System_GetNetworkTimeout</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">timeout</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNetworkTimeout</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">timeout</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNetworkTimeout</span><span class="p">(</span>
<span class="nx">timeout</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>timeout <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Timeout value.</p>
<p>Units: Milliseconds</p>
</dd>
</dl>
<h2 api="function" id="system_getnumdrivers"><a href="#system_getnumdrivers">System::getNumDrivers</a></h2>
<p>Retrieves the number of output drivers available for the selected output type.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getNumDrivers</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numdrivers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_System_GetNumDrivers</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numdrivers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNumDrivers</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numdrivers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNumDrivers</span><span class="p">(</span>
<span class="nx">numdrivers</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numdrivers <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of output drivers.</dd>
</dl>
<p>If <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a> has not been called, this function will return the number of drivers available for the default output type.<br />
A possible use for this function is to iterate through available sound devices for the current output type, and use <a class="apilink" href="core-api-system.html#system_getdriverinfo">System::getDriverInfo</a> to get the device's name and other attributes.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getdriver">System::getDriver</a></p>
<h2 api="function" id="system_getnumnestedplugins"><a href="#system_getnumnestedplugins">System::getNumNestedPlugins</a></h2>
<p>Retrieves the number of nested plug-ins from the selected plug-in.</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">System</span><span class="o">::</span><span class="n">getNumNestedPlugins</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">count</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_System_GetNumNestedPlugins</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">count</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNumNestedPlugins</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">count</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNumNestedPlugins</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">count</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle obtained from <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a>.</dd>
<dt>count</dt>
<dd>Returned number of plug-ins.</dd>
</dl>
<p>Most plug-ins contain a single definition, in which case the count is 1, however some have a list of definitions. This function returns the number of plug-ins that have been defined.</p>
<p>See the <a href="white-papers-dsp-plugin-api.html#multiple-plug-ins-within-one-file">DSP Plug-in API guide</a> for more information.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnestedplugin">System::getNestedPlugin</a></p>
<h2 api="function" id="system_getnumplugins"><a href="#system_getnumplugins">System::getNumPlugins</a></h2>
<p>Retrieves the number of loaded plug-ins.</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">System</span><span class="o">::</span><span class="n">getNumPlugins</span><span class="p">(</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="n">plugintype</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numplugins</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_System_GetNumPlugins</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="n">plugintype</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numplugins</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getNumPlugins</span><span class="p">(</span>
<span class="n">PLUGINTYPE</span> <span class="n">plugintype</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numplugins</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getNumPlugins</span><span class="p">(</span>
<span class="nx">plugintype</span><span class="p">,</span>
<span class="nx">numplugins</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>plugintype</dt>
<dd>Plugin type. (<a class="apilink" href="core-api-system.html#fmod_plugintype">FMOD_PLUGINTYPE</a>)</dd>
<dt>numplugins <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of loaded plug-ins for the selected <code>plugintype</code>.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a>, <a class="apilink" href="core-api-system.html#system_getpluginhandle">System::getPluginHandle</a></p>
<h2 api="function" id="system_getoutput"><a href="#system_getoutput">System::getOutput</a></h2>
<p>Retrieves the type of output interface used to run the mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getOutput</span><span class="p">(</span>
<span class="n">FMOD_OUTPUTTYPE</span> <span class="o">*</span><span class="n">output</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_System_GetOutput</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE</span> <span class="o">*</span><span class="n">output</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getOutput</span><span class="p">(</span>
<span class="k">out</span> <span class="n">OUTPUTTYPE</span> <span class="n">output</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getOutput</span><span class="p">(</span>
<span class="nx">output</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>output <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Output type. (<a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_getoutputbyplugin"><a href="#system_getoutputbyplugin">System::getOutputByPlugin</a></h2>
<p>Retrieves the plug-in handle for the currently selected output type.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getOutputByPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</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_System_GetOutputByPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getOutputByPlugin</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getOutputByPlugin</span><span class="p">(</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle to a pre-existing output plug-in.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>, <a class="apilink" href="core-api-system.html#system_setoutputbyplugin">System::setOutputByPlugin</a>, <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_getoutputhandle"><a href="#system_getoutputhandle">System::getOutputHandle</a></h2>
<p>Retrieves an output type specific internal native interface.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getOutputHandle</span><span class="p">(</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_System_GetOutputHandle</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">**</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getOutputHandle</span><span class="p">(</span>
<span class="k">out</span> <span class="n">IntPtr</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getOutputHandle</span><span class="p">(</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Internal native handle.</dd>
</dl>
<p>Reinterpret the returned handle based on the selected output type, not all types return something.</p>
<ul>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter">FMOD_OUTPUTTYPE_WAVWRITER</a> Pointer to stdio FILE is returned</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter_nrt">FMOD_OUTPUTTYPE_WAVWRITER_NRT</a> Pointer to stdio FILE is returned</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_wasapi">FMOD_OUTPUTTYPE_WASAPI</a> Pointer to type IAudioClient is returned.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_alsa">FMOD_OUTPUTTYPE_ALSA</a> Pointer to type snd_pcm_t is returned.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_coreaudio">FMOD_OUTPUTTYPE_COREAUDIO</a> Handle of type AudioUnit is returned.</li>
<li><a class="apilink" href="core-api-system.html#fmod_outputtype_audioout">FMOD_OUTPUTTYPE_AUDIOOUT</a> Pointer to type int is returned. Handle returned from sceAudioOutOpen.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a>, <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a>, <a class="apilink" href="core-api-system.html#system_init">System::init</a></p>
<h2 api="function" id="system_getpluginhandle"><a href="#system_getpluginhandle">System::getPluginHandle</a></h2>
<p>Retrieves the handle of a plug-in based on its type and relative index.</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">System</span><span class="o">::</span><span class="n">getPluginHandle</span><span class="p">(</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="n">plugintype</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</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_System_GetPluginHandle</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="n">plugintype</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">index</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getPluginHandle</span><span class="p">(</span>
<span class="n">PLUGINTYPE</span> <span class="n">plugintype</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="kt">uint</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getPluginHandle</span><span class="p">(</span>
<span class="nx">plugintype</span><span class="p">,</span>
<span class="nx">index</span><span class="p">,</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>plugintype</dt>
<dd>Plug-in type. (<a class="apilink" href="core-api-system.html#fmod_plugintype">FMOD_PLUGINTYPE</a>)</dd>
<dt>index</dt>
<dd>Index in the list of plug-ins for the given <code>plugintype</code>.</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the plugin.</dd>
</dl>
<p>All plug-ins, whether built-in or loaded, can be enumerated using this and <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a></p>
<h2 api="function" id="system_getplugininfo"><a href="#system_getplugininfo">System::getPluginInfo</a></h2>
<p>Retrieves information for the selected plug-in.</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">System</span><span class="o">::</span><span class="n">getPluginInfo</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="o">*</span><span class="n">plugintype</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">version</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_System_GetPluginInfo</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span><span class="p">,</span>
<span class="n">FMOD_PLUGINTYPE</span> <span class="o">*</span><span class="n">plugintype</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">version</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getPluginInfo</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span><span class="p">,</span>
<span class="k">out</span> <span class="n">PLUGINTYPE</span> <span class="n">plugintype</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">version</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getPluginInfo</span><span class="p">(</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">plugintype</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">version</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle to an already loaded plug-in.</dd>
<dt>plugintype <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Plug-in type. (<a class="apilink" href="core-api-system.html#fmod_plugintype">FMOD_PLUGINTYPE</a>)</dd>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Name of the plug-in. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>
<p>Length of <code>name</code>.</p>
<ul>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
<dt>version <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Version number of the plug-in.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>, <a class="apilink" href="core-api-system.html#system_getpluginhandle">System::getPluginHandle</a></p>
<h2 api="function" id="system_getrecorddriverinfo"><a href="#system_getrecorddriverinfo">System::getRecordDriverInfo</a></h2>
<p>Retrieves identification information about an audio device specified by its index, and specific to the output mode.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getRecordDriverInfo</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span><span class="p">,</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">guid</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">systemrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span><span class="p">,</span>
<span class="n">FMOD_DRIVER_STATE</span> <span class="o">*</span><span class="n">state</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_System_GetRecordDriverInfo</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">namelen</span><span class="p">,</span>
<span class="n">FMOD_GUID</span> <span class="o">*</span><span class="n">guid</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">systemrate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">speakermodechannels</span><span class="p">,</span>
<span class="n">FMOD_DRIVER_STATE</span> <span class="o">*</span><span class="n">state</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getRecordDriverInfo</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</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="n">Guid</span> <span class="n">guid</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">systemrate</span><span class="p">,</span>
<span class="k">out</span> <span class="n">SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">speakermodechannels</span><span class="p">,</span>
<span class="k">out</span> <span class="n">DRIVER_STATE</span> <span class="n">state</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getRecordDriverInfo</span><span class="p">(</span>
<span class="nx">id</span><span class="p">,</span>
<span class="nx">name</span><span class="p">,</span>
<span class="nx">guid</span><span class="p">,</span>
<span class="nx">systemrate</span><span class="p">,</span>
<span class="nx">speakermode</span><span class="p">,</span>
<span class="nx">speakermodechannels</span><span class="p">,</span>
<span class="nx">state</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the recording device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getrecordnumdrivers">System::getRecordNumDrivers</a>]</li>
</ul>
</dd>
<dt>name <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>The name of the device. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>namelen</dt>
<dd>The length of the target buffer receiving the <code>name</code> string.</dd>
</dl>
<ul>
<li>Units: Bytes</li>
</ul>
<dl>
<dt>guid <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>A <a href="glossary.html#guid">GUID</a> that uniquely identifies the device. (<a class="apilink" href="core-api-common.html#fmod_guid">FMOD_GUID</a>)</dd>
<dt>systemrate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>The sample rate the device operates at.</dd>
<dt>speakermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>The speaker configuration the device is currently using. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>speakermodechannels <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>The number of channels in the current speaker setup.</dd>
<dt>state <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Flags that provide additional information about the driver. (<a class="apilink" href="core-api-system.html#fmod_driver_state">FMOD_DRIVER_STATE</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_getrecordnumdrivers"><a href="#system_getrecordnumdrivers">System::getRecordNumDrivers</a></h2>
<p>Retrieves the number of recording devices available for this output mode. Use this to enumerate all recording devices possible so that the user can select one.</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">System</span><span class="o">::</span><span class="n">getRecordNumDrivers</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numdrivers</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numconnected</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_System_GetRecordNumDrivers</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numdrivers</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numconnected</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getRecordNumDrivers</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numdrivers</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numconnected</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getRecordNumDrivers</span><span class="p">(</span>
<span class="nx">numdrivers</span><span class="p">,</span>
<span class="nx">numconnected</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numdrivers <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of recording drivers available for this output mode.</dd>
<dt>numconnected <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of recording driver currently plugged in.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getrecorddriverinfo">System::getRecordDriverInfo</a></p>
<h2 api="function" id="system_getrecordposition"><a href="#system_getrecordposition">System::getRecordPosition</a></h2>
<p>Retrieves the current recording position of the record buffer in PCM samples.</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">System</span><span class="o">::</span><span class="n">getRecordPosition</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">position</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_System_GetRecordPosition</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">position</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getRecordPosition</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">position</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getRecordPosition</span><span class="p">(</span>
<span class="nx">id</span><span class="p">,</span>
<span class="nx">position</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the recording device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getrecordnumdrivers">System::getRecordNumDrivers</a>]</li>
</ul>
</dd>
<dt>position <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Current recording position.</p>
<p>Units: Samples</p>
</dd>
</dl>
<p>Will return <a class="apilink" href="core-api-common.html#fmod_err_record_disconnected">FMOD_ERR_RECORD_DISCONNECTED</a> if the driver is unplugged.</p>
<p>The position will return to 0 when <a class="apilink" href="core-api-system.html#system_recordstop">System::recordStop</a> is called or when a non-looping recording reaches the end.</p>
<p><em>PS4 specific note:</em> Record devices are virtual so 'position' will continue to update if the device is unplugged (the OS is generating silence). This function will still report <a class="apilink" href="core-api-common.html#fmod_err_record_disconnected">FMOD_ERR_RECORD_DISCONNECTED</a> for your information though.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_recordstart">System::recordStart</a>, <a class="apilink" href="core-api-system.html#system_recordstop">System::recordStop</a></p>
<h2 api="function" id="system_getreverbproperties"><a href="#system_getreverbproperties">System::getReverbProperties</a></h2>
<p>Retrieves the current reverb environment for the specified reverb instance.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getReverbProperties</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="n">FMOD_REVERB_PROPERTIES</span> <span class="o">*</span><span class="n">prop</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_System_GetReverbProperties</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="n">FMOD_REVERB_PROPERTIES</span> <span class="o">*</span><span class="n">prop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getReverbProperties</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="k">out</span> <span class="n">REVERB_PROPERTIES</span> <span class="n">prop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getReverbProperties</span><span class="p">(</span>
<span class="nx">instance</span><span class="p">,</span>
<span class="nx">prop</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>instance</dt>
<dd>Index of the particular reverb instance to target.</dd>
<dt>prop <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Current reverb environment description. (<a class="apilink" href="core-api-system.html#fmod_reverb_properties">FMOD_REVERB_PROPERTIES</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setreverbproperties">System::setReverbProperties</a></p>
<h2 api="function" id="system_getsoftwarechannels"><a href="#system_getsoftwarechannels">System::getSoftwareChannels</a></h2>
<p>Retrieves the maximum number of software mixed Channels possible.</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">System</span><span class="o">::</span><span class="n">getSoftwareChannels</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsoftwarechannels</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_System_GetSoftwareChannels</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getSoftwareChannels</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getSoftwareChannels</span><span class="p">(</span>
<span class="nx">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numsoftwarechannels <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Current maximum number of real voices (<a class="apilink" href="core-api-channel.html">Channel</a>s) available.</dd>
</dl>
<p>Software <a class="apilink" href="core-api-channel.html">Channel</a>s refers to real voices that will play, with <code>numsoftwarechannels</code> refering to the maximum number of voices before successive voices start becoming virtual. For differences between real and virtual voices see the <a href="white-papers-virtual-voices.html">Virtual Voices</a> guide.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setsoftwarechannels">System::setSoftwareChannels</a></p>
<h2 api="function" id="system_getsoftwareformat"><a href="#system_getsoftwareformat">System::getSoftwareFormat</a></h2>
<p>Retrieves the output format for the software mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getSoftwareFormat</span><span class="p">(</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">samplerate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numrawspeakers</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_System_GetSoftwareFormat</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">samplerate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="o">*</span><span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getSoftwareFormat</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">samplerate</span><span class="p">,</span>
<span class="k">out</span> <span class="n">SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getSoftwareFormat</span><span class="p">(</span>
<span class="nx">samplerate</span><span class="p">,</span>
<span class="nx">speakermode</span><span class="p">,</span>
<span class="nx">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>samplerate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Sample rate of the mixer.</dd>
<dt>speakermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Speaker setup of the mixer. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>numrawspeakers <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of speakers for <a class="apilink" href="core-api-common.html#fmod_speakermode_raw">FMOD_SPEAKERMODE_RAW</a> mode.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setsoftwareformat">System::setSoftwareFormat</a></p>
<h2 api="function" id="system_getspeakermodechannels"><a href="#system_getspeakermodechannels">System::getSpeakerModeChannels</a></h2>
<p>Retrieves the channel count for a given speaker mode.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getSpeakerModeChannels</span><span class="p">(</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">channels</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_System_GetSpeakerModeChannels</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="kt">int</span> <span class="o">*</span><span class="n">channels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getSpeakerModeChannels</span><span class="p">(</span>
<span class="n">SPEAKERMODE</span> <span class="n">mode</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">int</span> <span class="n">channels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getSpeakerModeChannels</span><span class="p">(</span>
<span class="nx">mode</span><span class="p">,</span>
<span class="nx">channels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>mode</dt>
<dd>Speaker mode to query. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>channels <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Number of channels.</dd>
</dl>
<h2 api="function" id="system_getspeakerposition"><a href="#system_getspeakerposition">System::getSpeakerPosition</a></h2>
<p>Retrieves the position of the specified speaker for the current speaker mode.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">getSpeakerPosition</span><span class="p">(</span>
<span class="n">FMOD_SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">x</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">y</span><span class="p">,</span>
<span class="kt">bool</span> <span class="o">*</span><span class="n">active</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_System_GetSpeakerPosition</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">x</span><span class="p">,</span>
<span class="kt">float</span> <span class="o">*</span><span class="n">y</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="o">*</span><span class="n">active</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getSpeakerPosition</span><span class="p">(</span>
<span class="n">SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">x</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">float</span> <span class="n">y</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">bool</span> <span class="n">active</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getSpeakerPosition</span><span class="p">(</span>
<span class="nx">speaker</span><span class="p">,</span>
<span class="nx">x</span><span class="p">,</span>
<span class="nx">y</span><span class="p">,</span>
<span class="nx">active</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>speaker</dt>
<dd>Speaker. (<a class="apilink" href="core-api-common.html#fmod_speaker">FMOD_SPEAKER</a>)</dd>
<dt>x <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>2D X position relative to the listener. -1 = left, 0 = middle, +1 = right.</p>
<ul>
<li><span class="label">Range:</span> [-1, 1]</li>
</ul>
</dd>
<dt>y <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>2D Y position relative to the listener. -1 = back, 0 = middle, +1 = front.</p>
<ul>
<li><span class="label">Range:</span> [-1, 1]</li>
</ul>
</dd>
<dt>active <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Active state of a speaker. True = included in 3D calculations, False = ignored.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setspeakerposition">System::setSpeakerPosition</a></p>
<h2 api="function" id="system_getstreambuffersize"><a href="#system_getstreambuffersize">System::getStreamBufferSize</a></h2>
<p>Retrieves the default file buffer size for newly opened streams.</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">System</span><span class="o">::</span><span class="n">getStreamBufferSize</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">filebuffersize</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="o">*</span><span class="n">filebuffersizetype</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_System_GetStreamBufferSize</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">filebuffersize</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="o">*</span><span class="n">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getStreamBufferSize</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">filebuffersize</span><span class="p">,</span>
<span class="k">out</span> <span class="n">TIMEUNIT</span> <span class="n">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getStreamBufferSize</span><span class="p">(</span>
<span class="nx">filebuffersize</span><span class="p">,</span>
<span class="nx">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>filebuffersize <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Buffer size.</p>
<ul>
<li><span class="label">Default:</span> 16384</li>
</ul>
</dd>
<dt>filebuffersizetype <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Type of units for <code>filebuffersize</code>. (<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_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a></li>
</ul>
</dd>
</dl>
<p>Valid units for <code>filebuffersizetype</code> are:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_ms">FMOD_TIMEUNIT_MS</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_pcm">FMOD_TIMEUNIT_PCM</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_pcmbytes">FMOD_TIMEUNIT_PCMBYTES</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a></li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_setstreambuffersize">System::setStreamBufferSize</a></p>
<h2 api="function" id="system_getuserdata"><a href="#system_getuserdata">System::getUserData</a></h2>
<p>Retrieves a user value associated with a 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">System</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_System_GetUserData</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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">System</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">System</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-system.html#system_setuserdata">System::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="system_getversion"><a href="#system_getversion">System::getVersion</a></h2>
<p>Retrieves the FMOD version and build number.</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">System</span><span class="o">::</span><span class="n">getVersion</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">version</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">buildnumber</span> <span class="o">=</span> <span class="mi">0</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_System_GetVersion</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">version</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">buildnumber</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getVersion</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">version</span>
<span class="p">);</span>
<span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">getVersion</span><span class="p">(</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">version</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">buildnumber</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">getVersion</span><span class="p">(</span>
<span class="nx">version</span><span class="p">,</span>
<span class="nx">buildnumber</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>version <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>Version number.</dd>
<dt>buildnumber <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>Build number.</dd>
</dl>
<p>The version is a 32 bit hexadecimal value formatted as 16:8:8, with the upper 16 bits being the product version, the middle 8 bits being the major version and the bottom 8 bits being the minor version. For example a value of 0x00010203 is equal to 1.02.03.</p>
<p>Compare against <a class="apilink" href="core-api-common.html#fmod_version">FMOD_VERSION</a> to make sure header and runtime library versions match.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_create">System_Create</a></p>
<h2 api="function" id="system_init"><a href="#system_init">System::init</a></h2>
<p>Initialize the system object and prepare FMOD for playback.</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">System</span><span class="o">::</span><span class="n">init</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">maxchannels</span><span class="p">,</span>
<span class="n">FMOD_INITFLAGS</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">extradriverdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_RESULT</span> <span class="nf">FMOD_System_Init</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">maxchannels</span><span class="p">,</span>
<span class="n">FMOD_INITFLAGS</span> <span class="n">flags</span><span class="p">,</span>
<span class="kt">void</span> <span class="o">*</span><span class="n">extradriverdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">init</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">maxchannels</span><span class="p">,</span>
<span class="n">INITFLAGS</span> <span class="n">flags</span><span class="p">,</span>
<span class="n">IntPtr</span> <span class="n">extradriverdata</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">init</span><span class="p">(</span>
<span class="nx">maxchannels</span><span class="p">,</span>
<span class="nx">flags</span><span class="p">,</span>
<span class="nx">extradriverdata</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>maxchannels</dt>
<dd>
<p>Maximum number of <a class="apilink" href="core-api-channel.html">Channel</a> objects available for playback, also known as virtual voices. Virtual voices will play with minimal overhead, with a subset of 'real' voices that are mixed, and selected based on priority and audibility. See the <a href="white-papers-virtual-voices.html">Virtual Voices</a> guide for more information.</p>
<ul>
<li><span class="label">Range:</span> [0, 4095]</li>
</ul>
</dd>
<dt>flags</dt>
<dd>Initialization flags. More than one mode can be set at once by combining them with the OR operator. (<a class="apilink" href="core-api-system.html#fmod_initflags">FMOD_INITFLAGS</a>)</dd>
<dt>extradriverdata <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Additional output specific initialization data. This will be passed to the output plug-in. See <a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a> for descriptions of data that can be passed in, based on the selected output mode.</dd>
</dl>
<p>A system object must be created with <a class="apilink" href="core-api-system.html#system_create">System_create</a></p>
<p>Most API functions require an initialized System object before they will succeed, otherwise they will return <a class="apilink" href="core-api-common.html#fmod_err_uninitialized">FMOD_ERR_UNINITIALIZED</a>. Some can only be called before initialization. These are:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#memory_initialize">Memory_Initialize</a></li>
<li><a class="apilink" href="core-api-system.html#system_setsoftwareformat">System::setSoftwareFormat</a></li>
<li><a class="apilink" href="core-api-system.html#system_setsoftwarechannels">System::setSoftwareChannels</a></li>
<li><a class="apilink" href="core-api-system.html#system_setdspbuffersize">System::setDSPBufferSize</a></li>
</ul>
<p><a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a> / <a class="apilink" href="core-api-system.html#system_setoutputbyplugin">System::setOutputByPlugin</a> can be called before or after <a class="apilink" href="core-api-system.html#system_init">System::init</a> on Android, GameCore, UWP, Windows and Mac. Other platforms can only call this <strong>before</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_close">System::close</a>, <a class="apilink" href="core-api-system.html#system_release">System::release</a></p>
<h2 api="function" id="system_isrecording"><a href="#system_isrecording">System::isRecording</a></h2>
<p>Retrieves the state of the FMOD recording API, ie if it is currently recording or not.</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">System</span><span class="o">::</span><span class="n">isRecording</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="kt">bool</span> <span class="o">*</span><span class="n">recording</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_System_IsRecording</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="o">*</span><span class="n">recording</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">isRecording</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">bool</span> <span class="n">recording</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">isRecording</span><span class="p">(</span>
<span class="nx">id</span><span class="p">,</span>
<span class="nx">recording</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the recording device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getrecordnumdrivers">System::getRecordNumDrivers</a>].</li>
</ul>
</dd>
<dt>recording <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Recording state. True = system is recording, False = system is not recording.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p>Recording can be started with <a class="apilink" href="core-api-system.html#system_recordstart">System::recordStart</a> and stopped with <a class="apilink" href="core-api-system.html#system_recordstop">System::recordStop</a>.</p>
<p>Will return <a class="apilink" href="core-api-common.html#fmod_err_record_disconnected">FMOD_ERR_RECORD_DISCONNECTED</a> if the driver is unplugged.</p>
<p><em>PS4 specific note:</em> Record devices are virtual so 'recording' will continue to report true if the device is unplugged (the OS is generating silence). This function will still report <a class="apilink" href="core-api-common.html#fmod_err_record_disconnected">FMOD_ERR_RECORD_DISCONNECTED</a> for your information though.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getrecordposition">System::getRecordPosition</a></p>
<h2 api="function" id="system_loadgeometry"><a href="#system_loadgeometry">System::loadGeometry</a></h2>
<p>Creates a geometry object from a block of memory which contains pre-saved geometry data.</p>
<p>This function avoids the need to manually create and add geometry for faster start time.</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">System</span><span class="o">::</span><span class="n">loadGeometry</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">datasize</span><span class="p">,</span>
<span class="n">Geometry</span> <span class="o">**</span><span class="n">geometry</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_System_LoadGeometry</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">void</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">datasize</span><span class="p">,</span>
<span class="n">FMOD_GEOMETRY</span> <span class="o">**</span><span class="n">geometry</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">loadGeometry</span><span class="p">(</span>
<span class="n">IntPtr</span> <span class="n">data</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">datasize</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Geometry</span> <span class="n">geometry</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">loadGeometry</span><span class="p">(</span>
<span class="nx">data</span><span class="p">,</span>
<span class="nx">datasize</span><span class="p">,</span>
<span class="nx">geometry</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>data</dt>
<dd>Pre-saved geometry data from <a class="apilink" href="core-api-geometry.html#geometry_save">Geometry::save</a>.</dd>
<dt>datasize</dt>
<dd>Size of <code>data</code>.</dd>
</dl>
<ul>
<li>Units: Bytes</li>
</ul>
<dl>
<dt>geometry <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly created geometry object. (<a class="apilink" href="core-api-geometry.html">Geometry</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_creategeometry">System::createGeometry</a></p>
<h2 api="function" id="system_loadplugin"><a href="#system_loadplugin">System::loadPlugin</a></h2>
<p>Loads an FMOD plug-in (<a href="glossary.html#dsp">DSP</a>, output or codec) from a 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">System</span><span class="o">::</span><span class="n">loadPlugin</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">priority</span> <span class="o">=</span> <span class="mi">0</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_System_LoadPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">unsigned</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">System</span><span class="p">.</span><span class="n">loadPlugin</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">filename</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">handle</span><span class="p">,</span>
<span class="kt">uint</span> <span class="n">priority</span> <span class="p">=</span> <span class="m">0</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Currently not supported for JavaScript.</p>
</div>
<dl>
<dt>filename</dt>
<dd>Path to the plug-in file. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the plug-in.</dd>
<dt>priority <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Codec load priority where 0 represents most important and higher numbers represent less importance. <a class="apilink" href="core-api-system.html#fmod_plugintype_codec">FMOD_PLUGINTYPE_CODEC</a> only.</dd>
</dl>
<p>Once loaded, DSP plug-ins can be used via <a class="apilink" href="core-api-system.html#system_createdspbyplugin">System::createDSPByPlugin</a>, output plug-ins can be used via <a class="apilink" href="core-api-system.html#system_setoutputbyplugin">System::setOutputByPlugin</a>, and codec plug-ins are used automatically.</p>
<p>When opening a file each codec tests whether it can support the file format in <code>priority</code> order.</p>
<p>The format of the plug-in is dependent on the operating system:</p>
<ul>
<li>Windows / UWP / Xbox One: .dll</li>
<li>Linux / Android: .so</li>
<li>Macintosh: .dylib</li>
<li>PS4: .prx</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_unloadplugin">System::unloadPlugin</a>, <a class="apilink" href="core-api-system.html#system_setpluginpath">System::setPluginPath</a>, <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>, <a class="apilink" href="core-api-system.html#system_getpluginhandle">System::getPluginHandle</a>, <a class="apilink" href="core-api-system.html#system_getplugininfo">System::getPluginInfo</a></p>
<h2 api="function" id="system_lockdsp"><a href="#system_lockdsp">System::lockDSP</a></h2>
<p>Mutual exclusion function to lock the <a href="glossary.html#dsp-engine">DSP engine</a> (which runs asynchronously in another thread), so that it will not execute.</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">System</span><span class="o">::</span><span class="n">lockDSP</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_System_LockDSP</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">System</span><span class="p">.</span><span class="n">lockDSP</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">lockDSP</span><span class="p">();</span>
</pre></div>
<p>If the DSP engine is already executing, this function is blocked until it has completed.</p>
<p>The function may be used to synchronize <a href="glossary.html#dsp-graph">DSP graph</a> operations carried out by your code. For example, you could use this to construct a <a href="glossary.html#dsp-sub-graph">DSP sub-graph</a> without the DSP engine executing in the background while the sub-graph is still under construction.</p>
<p>Once you no longer need the DSP engine to be locked, it can be unlocked with <a class="apilink" href="core-api-system.html#system_unlockdsp">System::unlockDSP</a>.</p>
<p>Note that if the DSP engine is locked for a significant amount of time, it may result in audible skipping or stuttering.</p>
<h2 api="function" id="system_mixerresume"><a href="#system_mixerresume">System::mixerResume</a></h2>
<p>Resume mixer thread and reacquire access to audio hardware.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">mixerResume</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_System_MixerResume</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">System</span><span class="p">.</span><span class="n">mixerResume</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">mixerResume</span><span class="p">();</span>
</pre></div>
<p>Used on mobile platforms when entering the foreground after being suspended.</p>
<p>All internal state will resume, i.e. created <a class="apilink" href="core-api-sound.html">Sound</a> and <a class="apilink" href="core-api-channel.html">Channel</a>s are still valid and playback will continue.</p>
<p>Android specific: Must be called on the same thread as <a class="apilink" href="core-api-system.html#system_mixersuspend">System::mixerSuspend</a>.</p>
<p>HTML5 specific: Used to start audio from a user interaction event, like a mouse click or screen touch event. Without this call audio may not start on some browsers.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_mixersuspend">System::mixerSuspend</a></p>
<h2 api="function" id="system_mixersuspend"><a href="#system_mixersuspend">System::mixerSuspend</a></h2>
<p>Suspend mixer thread and relinquish usage of audio hardware while maintaining internal state.</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">System</span><span class="o">::</span><span class="n">mixerSuspend</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_System_MixerSuspend</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">System</span><span class="p">.</span><span class="n">mixerSuspend</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">mixerSuspend</span><span class="p">();</span>
</pre></div>
<p>Used on mobile platforms when entering a backgrounded state to reduce CPU to 0%.</p>
<p>All internal state will be maintained, i.e. created <a class="apilink" href="core-api-sound.html">Sound</a> and <a class="apilink" href="core-api-channel.html">Channel</a>s will stay available in memory.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_mixerresume">System::mixerResume</a></p>
<h2 api="function" id="system_playdsp"><a href="#system_playdsp">System::playDSP</a></h2>
<p>Plays a <a href="glossary.html#dsp">DSP</a> along with any of its inputs on a <a href="core-api-channel.html">Channel</a>.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">playDSP</span><span class="p">(</span>
<span class="n">DSP</span> <span class="o">*</span><span class="n">dsp</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">paused</span><span class="p">,</span>
<span class="n">Channel</span> <span class="o">**</span><span class="n">channel</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_System_PlayDSP</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_DSP</span> <span class="o">*</span><span class="n">dsp</span><span class="p">,</span>
<span class="n">FMOD_CHANNELGROUP</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="n">paused</span><span class="p">,</span>
<span class="n">FMOD_CHANNEL</span> <span class="o">**</span><span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">playDSP</span><span class="p">(</span>
<span class="n">DSP</span> <span class="n">dsp</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">paused</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Channel</span> <span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">playDSP</span><span class="p">(</span>
<span class="nx">dsp</span><span class="p">,</span>
<span class="nx">channelgroup</span><span class="p">,</span>
<span class="nx">paused</span><span class="p">,</span>
<span class="nx">channel</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>dsp</dt>
<dd>Unit to play. (<a class="apilink" href="core-api-dsp.html">DSP</a>)</dd>
<dt>channelgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Group to output to instead of the master. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
<dt>paused</dt>
<dd>
<p>Whether to start in the paused state. Start a <a class="apilink" href="core-api-channel.html">Channel</a> paused to allow altering attributes without it being audible, then follow it up with a call to <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setpaused">ChannelControl::setPaused</a> with <code>paused</code> = False.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
<dt>channel <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly playing <a class="apilink" href="core-api-channel.html">Channel</a>. (<a class="apilink" href="core-api-channel.html">Channel</a>)</dd>
</dl>
<p>Specifying a <code>channelgroup</code> as part of playDSP is more efficient than using <a class="apilink" href="core-api-channel.html#channel_setchannelgroup">Channel::setChannelGroup</a> after playDSP, and could avoid audible glitches if the playDSP is not in a paused state.</p>
<p><a class="apilink" href="core-api-channel.html">Channel</a>s are reference counted to handle dead or stolen <a class="apilink" href="core-api-channel.html">Channel</a> handles. See the white paper on <a href="white-papers-handle-system.html#core-api-channels">Channel handles</a> for more information.</p>
<p>Playing more <a class="apilink" href="core-api-sound.html">Sound</a>s or <a class="apilink" href="core-api-dsp.html">DSP</a>s than physical <a class="apilink" href="core-api-channel.html">Channel</a>s allow is handled with virtual voices. See the white paper on <a href="white-papers-virtual-voices.html">Virtual Voices</a> for more information.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createdsp">System::createDSP</a>, <a class="apilink" href="core-api-system.html#system_createdspbytype">System::createDSPByType</a>, <a class="apilink" href="core-api-system.html#system_createdspbyplugin">System::createDSPByPlugin</a></p>
<h2 api="function" id="system_playsound"><a href="#system_playsound">System::playSound</a></h2>
<p>Plays a Sound on a Channel.</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">System</span><span class="o">::</span><span class="n">playSound</span><span class="p">(</span>
<span class="n">Sound</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">paused</span><span class="p">,</span>
<span class="n">Channel</span> <span class="o">**</span><span class="n">channel</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_System_PlaySound</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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_CHANNELGROUP</span> <span class="o">*</span><span class="n">channelgroup</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="n">paused</span><span class="p">,</span>
<span class="n">FMOD_CHANNEL</span> <span class="o">**</span><span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">playSound</span><span class="p">(</span>
<span class="n">Sound</span> <span class="n">sound</span><span class="p">,</span>
<span class="n">ChannelGroup</span> <span class="n">channelgroup</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">paused</span><span class="p">,</span>
<span class="k">out</span> <span class="n">Channel</span> <span class="n">channel</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">playSound</span><span class="p">(</span>
<span class="nx">sound</span><span class="p">,</span>
<span class="nx">channelgroup</span><span class="p">,</span>
<span class="nx">paused</span><span class="p">,</span>
<span class="nx">channel</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>sound</dt>
<dd>Sound to play. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
<dt>channelgroup <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Group to output to instead of the master. (<a class="apilink" href="core-api-channelgroup.html">ChannelGroup</a>)</dd>
<dt>paused</dt>
<dd>
<p>Whether to start in the paused state. Start a <a class="apilink" href="core-api-channel.html">Channel</a> paused to allow altering attributes without it being audible, then follow it up with a call to <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setpaused">ChannelControl::setPaused</a> with <code>paused</code> = False.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
<dt>channel <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Newly playing <a class="apilink" href="core-api-channel.html">Channel</a>. (<a class="apilink" href="core-api-channel.html">Channel</a>)</dd>
</dl>
<p>When a sound is played, it will use the sound's default frequency and priority. See <a class="apilink" href="core-api-sound.html#sound_setdefaults">Sound::setDefaults</a>.</p>
<p>A sound defined as <a class="apilink" href="core-api-common.html#fmod_3d">FMOD_3D</a> will by default play at the 3D position of the listener. To set the 3D position of the <a class="apilink" href="core-api-channel.html">Channel</a> before the sound is audible, start the <a class="apilink" href="core-api-channel.html">Channel</a> paused by setting the <code>paused</code> parameter to true, and call <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dattributes">ChannelControl::set3DAttributes</a>.</p>
<p>Specifying a <code>channelgroup</code> as part of playSound is more efficient than using <a class="apilink" href="core-api-channel.html#channel_setchannelgroup">Channel::setChannelGroup</a> after playSound, and could avoid audible glitches if the playSound is not in a paused state.</p>
<p><a class="apilink" href="core-api-channel.html">Channel</a>s are reference counted to handle dead or stolen <a class="apilink" href="core-api-channel.html">Channel</a> handles. See the white paper on <a href="white-papers-handle-system.html#core-api-channels">Channel handles</a> for more information.</p>
<p>Playing more <a class="apilink" href="core-api-sound.html">Sound</a>s than physical <a class="apilink" href="core-api-channel.html">Channel</a>s allow is handled with virtual voices. See the white paper on <a href="white-papers-virtual-voices.html">Virtual Voices</a> for more information.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>, <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a></p>
<h2 api="function" id="system_recordstart"><a href="#system_recordstart">System::recordStart</a></h2>
<p>Starts the recording engine recording to a pre-created 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">System</span><span class="o">::</span><span class="n">recordStart</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="n">Sound</span> <span class="o">*</span><span class="n">sound</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">loop</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_System_RecordStart</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</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_BOOL</span> <span class="n">loop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">recordStart</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span><span class="p">,</span>
<span class="n">Sound</span> <span class="n">sound</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">loop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">recordStart</span><span class="p">(</span>
<span class="nx">id</span><span class="p">,</span>
<span class="nx">sound</span><span class="p">,</span>
<span class="nx">loop</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the recording device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getrecordnumdrivers">System::getRecordNumDrivers</a>]</li>
</ul>
</dd>
<dt>sound</dt>
<dd>User created sound for the user to record to. (<a class="apilink" href="core-api-sound.html">Sound</a>)</dd>
<dt>loop</dt>
<dd>
<p>Flag to tell the recording engine whether to continue recording to the provided sound from the start again, after it has reached the end. If this is set to true the data will be continually be overwritten once every loop.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p>Will return <a class="apilink" href="core-api-common.html#fmod_err_record_disconnected">FMOD_ERR_RECORD_DISCONNECTED</a> if the driver is unplugged.</p>
<p>Sound must be created as <a class="apilink" href="core-api-common.html#fmod_createsample">FMOD_CREATESAMPLE</a>. Raw PCM data can be accessed with <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> and <a class="apilink" href="core-api-system.html#system_getrecordposition">System::getRecordPosition</a>.</p>
<p>Recording from the same driver a second time will stop the first recording.</p>
<p>For lowest latency set the FMOD::Sound sample rate to the rate returned by <a class="apilink" href="core-api-system.html#system_getrecorddriverinfo">System::getRecordDriverInfo</a>, otherwise a resampler will be allocated to handle the difference in frequencies, which adds latency.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_recordstop">System::recordStop</a></p>
<h2 api="function" id="system_recordstop"><a href="#system_recordstop">System::recordStop</a></h2>
<p>Stops the recording engine from recording to a pre-created 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">System</span><span class="o">::</span><span class="n">recordStop</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</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_System_RecordStop</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">id</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">recordStop</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">id</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">recordStop</span><span class="p">(</span>
<span class="nx">id</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>id</dt>
<dd>
<p>Index of the recording device.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getrecordnumdrivers">System::getRecordNumDrivers</a>]</li>
</ul>
</dd>
</dl>
<p>Returns no error if unplugged or already stopped.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_recordstart">System::recordStart</a></p>
<h2 api="function" id="system_registercodec"><a href="#system_registercodec">System::registerCodec</a></h2>
<p>Register a Codec plug-in description structure for later use.</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">System</span><span class="o">::</span><span class="n">registerCodec</span><span class="p">(</span>
<span class="n">FMOD_CODEC_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">priority</span> <span class="o">=</span> <span class="mi">0</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_System_RegisterCodec</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_CODEC_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span><span class="p">,</span>
<span class="kt">unsigned</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">System</span><span class="p">.</span><span class="nx">registerCodec</span><span class="p">(</span>
<span class="nx">description</span><span class="p">,</span>
<span class="nx">handle</span><span class="p">,</span>
<span class="nx">priority</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Currently not supported for C#.</p>
</div>
<dl>
<dt>description</dt>
<dd>Structure describing the Codec to register. (<a class="apilink" href="plugin-api-codec.html#fmod_codec_description">FMOD_CODEC_DESCRIPTION</a>)</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the plug-in.</dd>
<dt>priority <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Codec load priority where 0 represents most important and higher numbers represent less importance.</dd>
</dl>
<p>To create an instances of this plug-in use <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a> and <a class="apilink" href="core-api-system.html#system_createstream">System::createStream</a>.</p>
<p>When opening a file each Codec tests whether it can support the file format in <code>priority</code> order. The priority for each <a class="apilink" href="core-api-sound.html#fmod_sound_type">FMOD_SOUND_TYPE</a> are as follows:</p>
<table>
<thead>
<tr>
<th>FMOD_SOUND_TYPE</th>
<th>Priority</th>
</tr>
</thead>
<tbody>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_fsb">FMOD_SOUND_TYPE_FSB</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_xma">FMOD_SOUND_TYPE_XMA</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_at9">FMOD_SOUND_TYPE_AT9</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_vorbis">FMOD_SOUND_TYPE_VORBIS</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_opus">FMOD_SOUND_TYPE_OPUS</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_fadpcm">FMOD_SOUND_TYPE_FADPCM</a></td>
<td>250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_wav">FMOD_SOUND_TYPE_WAV</a></td>
<td>600</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_oggvorbis">FMOD_SOUND_TYPE_OGGVORBIS</a></td>
<td>800</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_aiff">FMOD_SOUND_TYPE_AIFF</a></td>
<td>1000</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_flac">FMOD_SOUND_TYPE_FLAC</a></td>
<td>1100</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_mod">FMOD_SOUND_TYPE_MOD</a></td>
<td>1200</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_s3m">FMOD_SOUND_TYPE_S3M</a></td>
<td>1300</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_xm">FMOD_SOUND_TYPE_XM</a></td>
<td>1400</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_it">FMOD_SOUND_TYPE_IT</a></td>
<td>1500</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_midi">FMOD_SOUND_TYPE_MIDI</a></td>
<td>1600</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_dls">FMOD_SOUND_TYPE_DLS</a></td>
<td>1700</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_asf">FMOD_SOUND_TYPE_ASF</a></td>
<td>1900</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_audioqueue">FMOD_SOUND_TYPE_AUDIOQUEUE</a></td>
<td>2200</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_mediacodec">FMOD_SOUND_TYPE_MEDIACODEC</a></td>
<td>2250</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_mpeg">FMOD_SOUND_TYPE_MPEG</a></td>
<td>2400</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_playlist">FMOD_SOUND_TYPE_PLAYLIST</a></td>
<td>2450</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_raw">FMOD_SOUND_TYPE_RAW</a></td>
<td>2500</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_user">FMOD_SOUND_TYPE_USER</a></td>
<td>2600</td>
</tr>
<tr>
<td><a class="apilink" href="core-api-sound.html#fmod_sound_type_media_foundation">FMOD_SOUND_TYPE_MEDIA_FOUNDATION</a></td>
<td>2600</td>
</tr>
</tbody>
</table>
<p>XMA, AT9, Vorbis, Opus and FADPCM are supported through the FSB format, and therefore have the same priority as FSB.</p>
<p>Media Foundation is supported through the User codec, and therefore has the same priority as User.</p>
<p>Raw and User are only accesible if <a class="apilink" href="core-api-common.html#fmod_openraw">FMOD_OPENRAW</a> or <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a> is specified as the mode in <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>.</p>
<h2 api="function" id="system_registerdsp"><a href="#system_registerdsp">System::registerDSP</a></h2>
<p>Register a <a href="glossary.html#dsp">DSP</a> plug-in description structure for later use.</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">System</span><span class="o">::</span><span class="n">registerDSP</span><span class="p">(</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</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_System_RegisterDSP</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_DSP_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">registerDSP</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">DSP_DESCRIPTION</span> <span class="n">description</span><span class="p">,</span>
<span class="k">out</span> <span class="kt">uint</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">registerDSP</span><span class="p">(</span>
<span class="nx">description</span><span class="p">,</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>description</dt>
<dd>Structure describing the DSP to register. (<a class="apilink" href="plugin-api-dsp.html#fmod_dsp_description">FMOD_DSP_DESCRIPTION</a>)</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the plug-in.</dd>
</dl>
<p>To create an instance of this plug-in, use <a class="apilink" href="core-api-system.html#system_createdspbyplugin">System::createDSPByPlugin</a>.</p>
<h2 api="function" id="system_registeroutput"><a href="#system_registeroutput">System::registerOutput</a></h2>
<p>Register an Output plug-in description structure for later use.</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">System</span><span class="o">::</span><span class="n">registerOutput</span><span class="p">(</span>
<span class="k">const</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</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_System_RegisterOutput</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_OUTPUT_DESCRIPTION</span> <span class="o">*</span><span class="n">description</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="o">*</span><span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">registerOutput</span><span class="p">(</span>
<span class="nx">description</span><span class="p">,</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-csharp">
<p>Not supported for C#.</p>
</div>
<dl>
<dt>description</dt>
<dd>Structure describing the Output to register. (<a class="apilink" href="plugin-api-output.html#fmod_output_description">FMOD_OUTPUT_DESCRIPTION</a>)</dd>
<dt>handle <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>Handle used to represent the plug-in.</dd>
</dl>
<p>To select this plug-in for output use, use <a class="apilink" href="core-api-system.html#system_setoutputbyplugin">System::setOutputByPlugin</a>.</p>
<h2 api="function" id="system_release"><a href="#system_release">System::release</a></h2>
<p>Closes and frees this object and its resources.</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">System</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_System_Release</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">System</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">System</span><span class="p">.</span><span class="nx">release</span><span class="p">();</span>
</pre></div>
<p>This will internally call <a class="apilink" href="core-api-system.html#system_close">System::close</a>, so calling <a class="apilink" href="core-api-system.html#system_close">System::close</a> before this function is not necessary.</p>
<div class="admonition warning">
<p>Calls to <a class="apilink" href="core-api-system.html#system_create">System_Create</a> and <a class="apilink" href="core-api-system.html#system_release">System::release</a> are not thread-safe. Do not call these functions simultaneously from multiple threads at once.</p>
</div>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a></p>
<h2 api="function" id="system_set3dlistenerattributes"><a href="#system_set3dlistenerattributes">System::set3DListenerAttributes</a></h2>
<p>Sets the position, velocity and orientation of the specified 3D sound listener.</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">System</span><span class="o">::</span><span class="n">set3DListenerAttributes</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">vel</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">forward</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">up</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_System_Set3DListenerAttributes</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">pos</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">vel</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">forward</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_VECTOR</span> <span class="o">*</span><span class="n">up</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">set3DListenerAttributes</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">listener</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">pos</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">vel</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">forward</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">VECTOR</span> <span class="n">up</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">set3DListenerAttributes</span><span class="p">(</span>
<span class="nx">listener</span><span class="p">,</span>
<span class="nx">pos</span><span class="p">,</span>
<span class="nx">vel</span><span class="p">,</span>
<span class="nx">forward</span><span class="p">,</span>
<span class="nx">up</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>listener</dt>
<dd>
<p>Index of listener to set 3D attributes on. Listeners are indexed from 0, to <a class="apilink" href="core-api-common.html#fmod_max_listeners">FMOD_MAX_LISTENERS</a> - 1, in a multi-listener environment.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-common.html#fmod_max_listeners">FMOD_MAX_LISTENERS</a>)</li>
</ul>
</dd>
<dt>pos <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Position in 3D world space used for panning and attenuation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a></li>
</ul>
</dd>
<dt>vel <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Velocity in 3D space used for doppler. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</p>
<ul>
<li><span class="label">Units:</span> <a href="glossary.html#distance-units">Distance units</a> per second</li>
</ul>
</dd>
<dt>forward <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Forwards orientation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
<dt>up <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Upwards orientation. (<a class="apilink" href="core-api-common.html#fmod_vector">FMOD_VECTOR</a>)</dd>
</dl>
<p>The <code>forward</code> and <code>up</code> vectors must be perpendicular and be of unit length (magnitude of each vector should be 1).</p>
<p>Vectors must be provided in the correct <a href="glossary.html#handedness">handedness</a>.</p>
<p>For velocity, remember to use units per <strong>second</strong>, and not units per frame. This is a common mistake and will make the doppler effect sound wrong if velocity is based on movement per frame rather than a fixed time period.<br />
If velocity per frame is calculated, it can be converted to velocity per second by dividing it by the time taken between frames as a fraction of a second.<br />
i.e.</p>
<pre><code>velocity_units_per_second = (position_currentframe - position_lastframe) / time_taken_since_last_frame_in_seconds.
</code></pre>
<p>At 60fps the formula would look like <em>velocity_units_per_second = (position_currentframe - position_lastframe) / 0.0166667</em>.</p>
<p>Users of the Studio API should call <a class="apilink" href="studio-api-system.html#studio_system_setlistenerattributes">Studio::System::setListenerAttributes</a> instead of this function.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_get3dlistenerattributes">System::get3DListenerAttributes</a>, <a class="apilink" href="core-api-system.html#system_set3dsettings">System::set3DSettings</a>, <a class="apilink" href="core-api-system.html#system_get3dsettings">System::get3DSettings</a></p>
<h2 api="function" id="system_set3dnumlisteners"><a href="#system_set3dnumlisteners">System::set3DNumListeners</a></h2>
<p>Sets the number of 3D 'listeners' in the 3D sound scene.</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">System</span><span class="o">::</span><span class="n">set3DNumListeners</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">numlisteners</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_System_Set3DNumListeners</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numlisteners</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">set3DNumListeners</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">numlisteners</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">set3DNumListeners</span><span class="p">(</span>
<span class="nx">numlisteners</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numlisteners <span><a class="token" href="glossary.html#documentation-conventions" title="Output">Out</a></span></dt>
<dd>
<p>Number of listeners in the scene.</p>
<ul>
<li><span class="label">Range:</span> [1, <a class="apilink" href="core-api-common.html#fmod_max_listeners">FMOD_MAX_LISTENERS</a>]</li>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p>This function is useful mainly for split-screen game purposes.</p>
<p>If the number of listeners is set to more than 1, then panning and doppler are turned off. All sound effects will be mono. FMOD uses a 'closest sound to the listener' method to determine what should be heard in this case.</p>
<p>Users of the Studio API should call <a class="apilink" href="studio-api-system.html#studio_system_setnumlisteners">Studio::System::setNumListeners</a> instead of this function.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_get3dnumlisteners">System::get3DNumListeners</a>, <a class="apilink" href="core-api-system.html#system_set3dlistenerattributes">System::set3DListenerAttributes</a></p>
<h2 api="function" id="system_set3drolloffcallback"><a href="#system_set3drolloffcallback">System::set3DRolloffCallback</a></h2>
<p>Sets a callback to allow custom calculation of 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">System</span><span class="o">::</span><span class="n">set3DRolloffCallback</span><span class="p">(</span>
<span class="n">FMOD_3D_ROLLOFF_CALLBACK</span> <span class="n">callback</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_System_Set3DRolloffCallback</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_3D_ROLLOFF_CALLBACK</span> <span class="n">callback</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">set3DRolloffCallback</span><span class="p">(</span>
<span class="n">CB_3D_ROLLOFFCALLBACK</span> <span class="n">callback</span>
<span class="p">);</span>
</pre></div>
<div class="admonition language-javascript">
<p>Not supported for JavaScript.</p>
</div>
<dl>
<dt>callback</dt>
<dd>Custom callback. Set to 0 or null to return control of distance attenuation to FMOD. (<a class="apilink" href="core-api-system.html#fmod_3d_rolloff_callback">FMOD_3D_ROLLOFF_CALLBACK</a>)</dd>
</dl>
<p>This function overrides <a class="apilink" href="core-api-common.html#fmod_3d_inverserolloff">FMOD_3D_INVERSEROLLOFF</a>, <a class="apilink" href="core-api-common.html#fmod_3d_linearrolloff">FMOD_3D_LINEARROLLOFF</a>, <a class="apilink" href="core-api-common.html#fmod_3d_linearsquarerolloff">FMOD_3D_LINEARSQUAREROLLOFF</a>, <a class="apilink" href="core-api-common.html#fmod_3d_inversetaperedrolloff">FMOD_3D_INVERSETAPEREDROLLOFF</a> and <a class="apilink" href="core-api-common.html#fmod_3d_customrolloff">FMOD_3D_CUSTOMROLLOFF</a>.</p>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a></p>
<h2 api="function" id="system_set3dsettings"><a href="#system_set3dsettings">System::set3DSettings</a></h2>
<p>Sets the global doppler scale, distance factor and log roll-off scale for all 3D sound in FMOD.</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">System</span><span class="o">::</span><span class="n">set3DSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">dopplerscale</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">distancefactor</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">rolloffscale</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_System_Set3DSettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">dopplerscale</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">distancefactor</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">set3DSettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">dopplerscale</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">distancefactor</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">set3DSettings</span><span class="p">(</span>
<span class="nx">dopplerscale</span><span class="p">,</span>
<span class="nx">distancefactor</span><span class="p">,</span>
<span class="nx">rolloffscale</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>dopplerscale</dt>
<dd>
<p>A scaling factor for doppler shift.</p>
<ul>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
<dt>distancefactor</dt>
<dd>
<p>A factor for converting game distance units to FMOD distance units.</p>
<ul>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
<dt>rolloffscale</dt>
<dd>
<p>A scaling factor for distance attenuation. When a sound uses a roll-off mode other than FMOD_3D_CUSTOMROLLOFF and the distance is greater than the sound's minimum distance, the distance is scaled by the roll-off scale.</p>
<ul>
<li><span class="label">Default:</span> 1</li>
</ul>
</dd>
</dl>
<p>The <code>dopplerscale</code> is a general scaling factor for how much the pitch varies due to doppler shifting in 3D sound. Doppler is the pitch bending effect when a sound comes towards the listener or moves away from it, much like the effect you hear when a train goes past you with its horn sounding. With "dopplerscale" you can exaggerate or diminish the effect. FMOD's effective speed of sound at a doppler factor of 1.0 is 340 m/s.</p>
<p>The <code>distancefactor</code> is the FMOD 3D engine relative distance factor, compared to 1.0 meters. Another way to put it is that it equates to "how many units per meter does your engine have". For example, if you are using feet then "scale" would equal 3.28.<br />
This only affects doppler. If you keep your min/max distance, custom roll-off curves, and positions in scale relative to each other, the volume roll-off will not change. If you set this, the mindistance of a sound will automatically set itself to this value when it is created in case the user forgets to set the mindistance to match the new distancefactor.</p>
<p>The <code>rolloffscale</code> is a global factor applied to the roll-off of sounds using roll-off modes other than FMOD_3D_CUSTOMROLLOFF. When a sound uses a roll-off mode other than FMOD_3D_CUSTOMROLLOFF and the distance is greater than the sound's minimum distance, the distance for the purposes of distance attenuation is calculated according to the formula <code>distance = (distance - minDistance) * rolloffscale + minDistance</code>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_get3dsettings">System::get3DSettings</a>, <a class="apilink" href="core-api-sound.html#sound_set3dminmaxdistance">Sound::set3DMinMaxDistance</a>, <a class="apilink" href="core-api-sound.html#sound_get3dminmaxdistance">Sound::get3DMinMaxDistance</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dattributes">ChannelControl::set3DAttributes</a></p>
<h2 api="function" id="system_setadvancedsettings"><a href="#system_setadvancedsettings">System::setAdvancedSettings</a></h2>
<p>Sets advanced settings for the system object, typically to allow adjusting of settings related to resource usage or audio quality.</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">System</span><span class="o">::</span><span class="n">setAdvancedSettings</span><span class="p">(</span>
<span class="n">FMOD_ADVANCEDSETTINGS</span> <span class="o">*</span><span class="n">settings</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_System_SetAdvancedSettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_ADVANCEDSETTINGS</span> <span class="o">*</span><span class="n">settings</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setAdvancedSettings</span><span class="p">(</span>
<span class="k">ref</span> <span class="n">ADVANCEDSETTINGS</span> <span class="n">settings</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setAdvancedSettings</span><span class="p">(</span>
<span class="nx">settings</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>settings</dt>
<dd>Advanced settings (<a class="apilink" href="core-api-system.html#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a>)</dd>
</dl>
<p>To use, clear the <a class="apilink" href="core-api-system.html#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a> structure to zeroes first, then set the cbSize member to the size in bytes of the <a class="apilink" href="core-api-system.html#fmod_advancedsettings">FMOD_ADVANCEDSETTINGS</a> structure. From here settings can be set one at a time, as all defaults are null or 0 for all members.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getadvancedsettings">System::getAdvancedSettings</a></p>
<h2 api="function" id="system_setcallback"><a href="#system_setcallback">System::setCallback</a></h2>
<p>Sets the callback for System level notifications.</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">System</span><span class="o">::</span><span class="n">setCallback</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM_CALLBACK</span> <span class="n">callback</span><span class="p">,</span>
<span class="n">FMOD_SYSTEM_CALLBACK_TYPE</span> <span class="n">callbackmask</span> <span class="o">=</span> <span class="n">FMOD_SYSTEM_CALLBACK_ALL</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_System_SetCallback</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SYSTEM_CALLBACK</span> <span class="n">callback</span><span class="p">,</span>
<span class="n">FMOD_SYSTEM_CALLBACK_TYPE</span> <span class="n">callbackmask</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setCallback</span><span class="p">(</span>
<span class="n">SYSTEM_CALLBACK</span> <span class="n">callback</span><span class="p">,</span>
<span class="n">SYSTEM_CALLBACK_TYPE</span> <span class="n">callbackmask</span> <span class="p">=</span> <span class="n">SYSTEM_CALLBACK_TYPE</span><span class="p">.</span><span class="n">ALL</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setCallback</span><span class="p">(</span>
<span class="nx">callback</span><span class="p">,</span>
<span class="nx">callbackmask</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>callback</dt>
<dd>Callback to invoke when system notification happens. (<a class="apilink" href="core-api-system.html#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a>)</dd>
<dt>callbackmask</dt>
<dd>Bitfield specifying which callback types are required, to filter out unwanted callbacks. (<a class="apilink" href="core-api-system.html#fmod_system_callback_type">FMOD_SYSTEM_CALLBACK_TYPE</a>)</dd>
</dl>
<p>System callbacks can be called by a variety of FMOD threads, so make sure any code executed inside the callback is thread safe.</p>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a></p>
<h2 api="function" id="system_setdriver"><a href="#system_setdriver">System::setDriver</a></h2>
<p>Sets the output driver for the selected output type.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">setDriver</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">driver</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_System_SetDriver</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">driver</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setDriver</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">driver</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setDriver</span><span class="p">(</span>
<span class="nx">driver</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>driver</dt>
<dd>
<p>Driver index where 0 represents the default for the output type.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#system_getnumdrivers">System::getNumDrivers</a>)</li>
</ul>
</dd>
</dl>
<p>When an output type has more than one driver available, this function can be used to select between them.</p>
<p>If this function is called after <a class="apilink" href="core-api-system.html#system_init">System::init</a>, the current driver will be shutdown and the newly selected driver will be initialized / started.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getdriver">System::getDriver</a>, <a class="apilink" href="core-api-system.html#system_getdriverinfo">System::getDriverInfo</a>, <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_setdspbuffersize"><a href="#system_setdspbuffersize">System::setDSPBufferSize</a></h2>
<p>Sets the buffer size for the FMOD software mixing engine.</p>
<p>This function is used if you need to control mixer latency or granularity. Smaller buffersizes lead to smaller latency, but can lead to stuttering/skipping/unstable sound on slower machines or soundcards with bad drivers.</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">System</span><span class="o">::</span><span class="n">setDSPBufferSize</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">bufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numbuffers</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_System_SetDSPBufferSize</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">bufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numbuffers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setDSPBufferSize</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">bufferlength</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numbuffers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setDSPBufferSize</span><span class="p">(</span>
<span class="nx">bufferlength</span><span class="p">,</span>
<span class="nx">numbuffers</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>bufferlength</dt>
<dd>
<p>The mixer engine block size. Use this to adjust mixer update granularity. See below for more information on buffer length vs latency.</p>
<ul>
<li><span class="label">Units:</span> Samples</li>
<li><span class="label">Default:</span> 1024</li>
</ul>
</dd>
<dt>numbuffers</dt>
<dd>
<p>The mixer engine number of buffers used. Use this to adjust mixer latency. See below for more information on number of buffers vs latency.</p>
<ul>
<li><span class="label">Default:</span> 4</li>
</ul>
</dd>
</dl>
<p>To get the <code>bufferlength</code> in milliseconds, divide it by the output rate and multiply the result by 1000. For a <code>bufferlength</code> of 1024 and an output rate of 48khz (see <a class="apilink" href="core-api-system.html#system_setsoftwareformat">System::SetSoftwareFormat</a>), milliseconds = 1024 / 48000 * 1000 = 21.33ms. This means the mixer updates every 21.33ms.</p>
<p>To get the total buffer size multiply the <code>bufferlength</code> by the <code>numbuffers</code> value. By default this would be 4 * 1024 = 4096 samples, or 4 * 21.33ms = 85.33ms. This would generally be the total latency of the software mixer, but in reality due to one of the buffers being written to constantly, and the cursor position of the buffer that is audible, the latency is typically more like the (number of buffers - 1.5) multiplied by the buffer length.</p>
<p>To convert from milliseconds back to 'samples', simply multiply the value in milliseconds by the sample rate of the output (ie 48000 if that is what it is set to), then divide by 1000.</p>
<p>The FMOD software mixer mixes to a ringbuffer. The size of this ringbuffer is determined here. It mixes a block of sound data every 'bufferlength' number of samples, and there are 'numbuffers' number of these blocks that make up the entire ringbuffer. Adjusting these values can lead to extremely low latency performance (smaller values), or greater stability in sound output (larger values).</p>
<p>Warning! The 'buffersize' is generally best left alone. Making the granularity smaller will just increase CPU usage (cache misses and <a href="glossary.html#dsp-graph">DSP graph</a> overhead). Making it larger affects how often you hear commands update such as volume/pitch/pan changes. Anything above 20ms will be noticeable and sound parameter changes will be obvious instead of smooth.</p>
<p>FMOD chooses the most optimal size by default for best stability, depending on the output type. It is not recommended changing this value unless you really need to. You may get worse performance than the default settings chosen by FMOD. If you do set the size manually, the <code>bufferlength</code> argument must be a multiple of four, typically 256, 480, 512, 1024 or 2048 depedning on your latency requirements.</p>
<p>The values in milliseconds and average latency expected from the settings can be calculated using the following code:</p>
<div class="highlight language-text"><pre><span></span>FMOD_RESULT result;
unsigned int blocksize;
int numblocks;
float ms;
result = system-&gt;getDSPBufferSize(&amp;blocksize, &amp;numblocks);
result = system-&gt;getSoftwareFormat(&amp;frequency, 0, 0);
ms = (float)blocksize * 1000.0f / (float)frequency;
printf(&quot;Mixer blocksize = %.02f ms\n&quot;, ms);
printf(&quot;Mixer Total buffersize = %.02f ms\n&quot;, ms * numblocks);
printf(&quot;Mixer Average Latency = %.02f ms\n&quot;, ms * ((float)numblocks - 1.5f));
</pre></div>
<ul>
<li>This function cannot be called after FMOD is already activated with <a class="apilink" href="core-api-system.html#system_init">System::init</a>.</li>
<li>It must be called before <a class="apilink" href="core-api-system.html#system_init">System::init</a>, or after <a class="apilink" href="core-api-system.html#system_close">System::close</a>.</li>
</ul>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getdspbuffersize">System::getDSPBufferSize</a>, <a class="apilink" href="core-api-system.html#system_getsoftwareformat">System::getSoftwareFormat</a>, <a class="apilink" href="core-api-system.html#system_init">System::init</a>, <a class="apilink" href="core-api-system.html#system_close">System::close</a></p>
<h2 api="function" id="system_setfilesystem"><a href="#system_setfilesystem">System::setFileSystem</a></h2>
<p>Set callbacks to implement all file I/O instead of using the platform native method.</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">System</span><span class="o">::</span><span class="n">setFileSystem</span><span class="p">(</span>
<span class="n">FMOD_FILE_OPEN_CALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FMOD_FILE_CLOSE_CALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FMOD_FILE_READ_CALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FMOD_FILE_SEEK_CALLBACK</span> <span class="n">userseek</span><span class="p">,</span>
<span class="n">FMOD_FILE_ASYNCREAD_CALLBACK</span> <span class="n">userasyncread</span><span class="p">,</span>
<span class="n">FMOD_FILE_ASYNCCANCEL_CALLBACK</span> <span class="n">userasynccancel</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">blockalign</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_System_SetFileSystem</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_FILE_OPEN_CALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FMOD_FILE_CLOSE_CALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FMOD_FILE_READ_CALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FMOD_FILE_SEEK_CALLBACK</span> <span class="n">userseek</span><span class="p">,</span>
<span class="n">FMOD_FILE_ASYNCREAD_CALLBACK</span> <span class="n">userasyncread</span><span class="p">,</span>
<span class="n">FMOD_FILE_ASYNCCANCEL_CALLBACK</span> <span class="n">userasynccancel</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">blockalign</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setFileSystem</span><span class="p">(</span>
<span class="n">FILE_OPENCALLBACK</span> <span class="n">useropen</span><span class="p">,</span>
<span class="n">FILE_CLOSECALLBACK</span> <span class="n">userclose</span><span class="p">,</span>
<span class="n">FILE_READCALLBACK</span> <span class="n">userread</span><span class="p">,</span>
<span class="n">FILE_SEEKCALLBACK</span> <span class="n">userseek</span><span class="p">,</span>
<span class="n">FILE_ASYNCREADCALLBACK</span> <span class="n">userasyncread</span><span class="p">,</span>
<span class="n">FILE_ASYNCCANCELCALLBACK</span> <span class="n">userasynccancel</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">blockalign</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setFileSystem</span><span class="p">(</span>
<span class="nx">useropen</span><span class="p">,</span>
<span class="nx">userclose</span><span class="p">,</span>
<span class="nx">userread</span><span class="p">,</span>
<span class="nx">userseek</span><span class="p">,</span>
<span class="nx">userasyncread</span><span class="p">,</span>
<span class="nx">userasynccancel</span><span class="p">,</span>
<span class="nx">blockalign</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>useropen <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for opening a file. (<a class="apilink" href="core-api-system.html#fmod_file_open_callback">FMOD_FILE_OPEN_CALLBACK</a>)</dd>
<dt>userclose <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for closing a file. (<a class="apilink" href="core-api-system.html#fmod_file_close_callback">FMOD_FILE_CLOSE_CALLBACK</a>)</dd>
<dt>userread <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for reading from a file, instead of <code>userasyncread</code> and <code>userasynccancel</code>. (<a class="apilink" href="core-api-system.html#fmod_file_read_callback">FMOD_FILE_READ_CALLBACK</a>)</dd>
<dt>userseek <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for seeking within a file, instead of <code>userasyncread</code> and <code>userasynccancel</code>. (<a class="apilink" href="core-api-system.html#fmod_file_seek_callback">FMOD_FILE_SEEK_CALLBACK</a>)</dd>
<dt>userasyncread <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for reading and seeking asynchronously, instead of <code>userread</code> and <code>userseek</code>. (<a class="apilink" href="core-api-system.html#fmod_file_asyncread_callback">FMOD_FILE_ASYNCREAD_CALLBACK</a>)</dd>
<dt>userasynccancel <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Callback for cancelling a previous <code>userasyncread</code> call. (<a class="apilink" href="core-api-system.html#fmod_file_asynccancel_callback">FMOD_FILE_ASYNCCANCEL_CALLBACK</a>)</dd>
<dt>blockalign <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>File buffering chunk size, specify -1 to keep system default or previously set value. 0 = disable buffering, see notes below for more on this.</p>
<ul>
<li><span class="label">Default:</span> 2048</li>
<li><span class="label">Units:</span> Bytes</li>
</ul>
</dd>
</dl>
<p>Setting these callbacks have no effect on sounds loaded with <a class="apilink" href="core-api-common.html#fmod_openmemory">FMOD_OPENMEMORY</a> or <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>.</p>
<p>There are three valid configurations for this function:</p>
<ol>
<li>Set <code>useropen</code>, <code>userclose</code>, <code>userread</code>, <code>userseek</code> and optionally <code>blockalign</code> for blocking file I/O.</li>
<li>Set <code>useropen</code>, <code>userclose</code>, <code>userasyncread</code>, <code>userasynccancel</code> and optionally <code>blockalign</code> for asynchronous file I/O.</li>
<li>Set <code>blockalign</code> by itself with everything else null, to change platform native file I/O buffering.</li>
</ol>
<p>Setting <code>blockalign</code> to 0 will disable file buffering and cause every read to invoke the relevant callback (not recommended), current default is tuned for memory usage vs performance. Be mindful of the I/O capabilities of the platform before increasing this default.</p>
<p><strong>Asynchronous file access via <code>userasyncread</code> / <code>userasynccanel</code>.</strong></p>
<ul>
<li>it is recommended to consult the 'asyncio' example for reference implementation. There is also a tutorial on the subject, <a href="white-papers-asynchronous-io.html">Asynchronous I/O</a>.</li>
<li><code>userasyncread</code> allows the user to return immediately before the data is ready. FMOD will either wait internally (see note below about thread safety), or continuously check in the streamer until data arrives. It is the user's responsibility to provide data in time in the stream case, or the stream may stutter. Data starvation can be detected with <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a>.</li>
<li><strong>Important:</strong> If <code>userasyncread</code> is processed in the main thread, then it will hang the application, because FMOD will wait internally until data is ready, and the main thread will not be able to supply the data. For this reason the user's file access should normally be from a separate thread.</li>
<li>A <code>userasynccancel</code> must either service or prevent an async read issued previously via <code>userasyncread</code> before returning.</li>
</ul>
<p><strong>Implementation tips to avoid hangs / crashes.</strong></p>
<ul>
<li>All Callbacks must be thread safe.</li>
<li><a class="apilink" href="core-api-common.html#fmod_err_file_eof">FMOD_ERR_FILE_EOF</a> must be returned if the number of bytes read is smaller than requested.</li>
</ul>
<div class="admonition language-javascript">
<p><code>userasyncread</code> and <code>userasynccancel</code> are not supported for JavaScript.</p>
</div>
<p><strong>See Also:</strong> <a href="glossary.html#callback-behavior">Callback Behavior</a>, <a class="apilink" href="core-api-system.html#system_attachfilesystem">System::attachFileSystem</a></p>
<h2 api="function" id="system_setgeometrysettings"><a href="#system_setgeometrysettings">System::setGeometrySettings</a></h2>
<p>Sets the maximum world size for the geometry engine for performance / precision reasons.</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">System</span><span class="o">::</span><span class="n">setGeometrySettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">maxworldsize</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_System_SetGeometrySettings</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setGeometrySettings</span><span class="p">(</span>
<span class="kt">float</span> <span class="n">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setGeometrySettings</span><span class="p">(</span>
<span class="nx">maxworldsize</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>maxworldsize</dt>
<dd>Maximum size of the world from the centerpoint to the edge using the same units used in other 3D functions.</dd>
</dl>
<p>FMOD uses an efficient spatial partitioning system to store polygons for ray casting purposes.<br />
The maximum size of the world should (<code>maxworldsize</code>) be set to allow processing within a known range.<br />
Outside of this range, objects and polygons will not be processed as efficiently.<br />
Excessive world size settings can also cause loss of precision and efficiency.</p>
<p>Setting <code>maxworldsize</code> should be done first before creating any geometry. It can be done any time afterwards but may be slow in this case.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_creategeometry">System::createGeometry</a>, <a class="apilink" href="core-api-system.html#system_getgeometrysettings">System::getGeometrySettings</a>, <a class="apilink" href="core-api-system.html#system_set3dsettings">System::set3DSettings</a></p>
<h2 api="function" id="system_setnetworkproxy"><a href="#system_setnetworkproxy">System::setNetworkProxy</a></h2>
<p>Set a proxy server to use for all subsequent internet connections.</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">System</span><span class="o">::</span><span class="n">setNetworkProxy</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">proxy</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_System_SetNetworkProxy</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">proxy</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setNetworkProxy</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">proxy</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setNetworkProxy</span><span class="p">(</span>
<span class="nx">proxy</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>proxy</dt>
<dd>Proxy server URL. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
</dl>
<p>Specify the proxy in <code>host:port</code> format e.g. <code>www.fmod.com:8888</code> (defaults to port 80 if no port is specified).</p>
<p>Basic authentication is supported using <code>user:password@host:port</code> format e.g. <code>bob:sekrit123@www.fmod.com:8888</code></p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnetworkproxy">System::getNetworkProxy</a></p>
<h2 api="function" id="system_setnetworktimeout"><a href="#system_setnetworktimeout">System::setNetworkTimeout</a></h2>
<p>Set the timeout for network streams.</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">System</span><span class="o">::</span><span class="n">setNetworkTimeout</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">timeout</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_System_SetNetworkTimeout</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">timeout</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setNetworkTimeout</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">timeout</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setNetworkTimeout</span><span class="p">(</span>
<span class="nx">timeout</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>timeout</dt>
<dd>
<p>Timeout value.</p>
<ul>
<li><span class="label">Units:</span> Milliseconds</li>
<li><span class="label">Default:</span> 5000</li>
</ul>
</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnetworktimeout">System::getNetworkTimeout</a></p>
<h2 api="function" id="system_setoutput"><a href="#system_setoutput">System::setOutput</a></h2>
<p>Sets the type of output interface used to run the mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">setOutput</span><span class="p">(</span>
<span class="n">FMOD_OUTPUTTYPE</span> <span class="n">output</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_System_SetOutput</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_OUTPUTTYPE</span> <span class="n">output</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setOutput</span><span class="p">(</span>
<span class="n">OUTPUTTYPE</span> <span class="n">output</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setOutput</span><span class="p">(</span>
<span class="nx">output</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>output</dt>
<dd>Output type. (<a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a>)</dd>
</dl>
<p>This function is typically used to select between different OS specific audio APIs which may have different features.</p>
<p>It is only necessary to call this function if you want to specifically switch away from the default output mode for the operating system. The most optimal mode is selected by default for the operating system.</p>
<p>(Windows, UWP, GameCore, Android, MacOS, iOS, Linux Only) This function can be called after <a class="apilink" href="core-api-system.html#system_init">System::init</a> to perform special handling of driver disconnections, see <a class="apilink" href="core-api-system.html#fmod_system_callback_devicelistchanged">FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED</a>.</p>
<p>When using the Studio API, switching to an NRT (non-realtime) output type after FMOD is already initialized will not behave correctly unless the Studio API was initialized with <a class="apilink" href="studio-api-system.html#fmod_studio_init_synchronous_update">FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getoutput">System::getOutput</a></p>
<h2 api="function" id="system_setoutputbyplugin"><a href="#system_setoutputbyplugin">System::setOutputByPlugin</a></h2>
<p>Selects an output type given a plug-in handle.</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">System</span><span class="o">::</span><span class="n">setOutputByPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</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_System_SetOutputByPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setOutputByPlugin</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setOutputByPlugin</span><span class="p">(</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle to an already loaded output plug-in.</dd>
</dl>
<p>(Windows Only) This function can be called after FMOD is already initialized. You can use it to change the output mode at runtime. If <a class="apilink" href="core-api-system.html#fmod_system_callback_devicelistchanged">FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED</a> is specified use the setOutput call to change to <a class="apilink" href="core-api-system.html#fmod_outputtype_nosound">FMOD_OUTPUTTYPE_NOSOUND</a> if no more sound card drivers exist.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getnumplugins">System::getNumPlugins</a>, <a class="apilink" href="core-api-system.html#system_getoutputbyplugin">System::getOutputByPlugin</a>, <a class="apilink" href="core-api-system.html#system_setoutput">System::setOutput</a></p>
<h2 api="function" id="system_setpluginpath"><a href="#system_setpluginpath">System::setPluginPath</a></h2>
<p>Specify a base search path for plug-ins so they can be placed somewhere else than the directory of the main executable.</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">System</span><span class="o">::</span><span class="n">setPluginPath</span><span class="p">(</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">path</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_System_SetPluginPath</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setPluginPath</span><span class="p">(</span>
<span class="kt">string</span> <span class="n">path</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setPluginPath</span><span class="p">(</span>
<span class="nx">path</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>path</dt>
<dd>A character string containing a correctly formatted path to load plug-ins from. (<a href="glossary.html#string-format">UTF-8 string</a>)</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a></p>
<h2 api="function" id="system_setreverbproperties"><a href="#system_setreverbproperties">System::setReverbProperties</a></h2>
<p>Sets parameters for the global reverb environment.</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">System</span><span class="o">::</span><span class="n">setReverbProperties</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_REVERB_PROPERTIES</span> <span class="o">*</span><span class="n">prop</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_System_SetReverbProperties</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="k">const</span> <span class="n">FMOD_REVERB_PROPERTIES</span> <span class="o">*</span><span class="n">prop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setReverbProperties</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">instance</span><span class="p">,</span>
<span class="k">ref</span> <span class="n">REVERB_PROPERTIES</span> <span class="n">prop</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setReverbProperties</span><span class="p">(</span>
<span class="nx">instance</span><span class="p">,</span>
<span class="nx">prop</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>instance</dt>
<dd>
<p>Index of the particular reverb instance to target.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-system.html#fmod_reverb_maxinstances">FMOD_REVERB_MAXINSTANCES</a>].</li>
</ul>
</dd>
<dt>prop</dt>
<dd>Reverb environment description. Passing 0 or NULL to this function will delete the reverb. (<a class="apilink" href="core-api-system.html#fmod_reverb_properties">FMOD_REVERB_PROPERTIES</a>)</dd>
</dl>
<p>To assist in defining reverb properties there are several presets available, see <a class="apilink" href="core-api-system.html#fmod_reverb_presets">FMOD_REVERB_PRESETS</a></p>
<p>When using each instance for the first time, FMOD will create an SFX reverb <a href="glossary.html#dsp">DSP unit</a> that takes up several hundred kilobytes of memory and some CPU.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getreverbproperties">System::getReverbProperties</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_setreverbproperties">ChannelControl::setReverbProperties</a>, <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_getreverbproperties">ChannelControl::getReverbProperties</a>, <a href="effects-reference.html#sfx-reverb">Effects Reference: SFX Reverb</a></p>
<h2 api="function" id="system_setsoftwarechannels"><a href="#system_setsoftwarechannels">System::setSoftwareChannels</a></h2>
<p>Sets the maximum number of software mixed Channels possible.</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">System</span><span class="o">::</span><span class="n">setSoftwareChannels</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">numsoftwarechannels</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_System_SetSoftwareChannels</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setSoftwareChannels</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setSoftwareChannels</span><span class="p">(</span>
<span class="nx">numsoftwarechannels</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>numsoftwarechannels</dt>
<dd>
<p>The maximum number of real <a class="apilink" href="core-api-channel.html">Channel</a>s to be allocated by FMOD.</p>
<ul>
<li><span class="label">Default:</span> 64</li>
</ul>
</dd>
</dl>
<p>This function cannot be called after FMOD is already activated, it must be called before <a class="apilink" href="core-api-system.html#system_init">System::init</a>, or after <a class="apilink" href="core-api-system.html#system_close">System::close</a>.<br />
'Software Channels' refers to real <a class="apilink" href="core-api-channel.html">Channel</a>s that will play, with <code>numsoftwarechannels</code> refering to the maximum number of <a class="apilink" href="core-api-channel.html">Channel</a>s before successive <a class="apilink" href="core-api-channel.html">Channel</a>s start becoming virtual. For differences between real and virtual <a class="apilink" href="core-api-channel.html">Channel</a>s see the <a href="white-papers-virtual-voices.html">Virtual Voices</a> guide.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getsoftwarechannels">System::getSoftwareChannels</a>, <a class="apilink" href="core-api-system.html#system_init">System::init</a>, <a class="apilink" href="core-api-system.html#system_close">System::close</a></p>
<h2 api="function" id="system_setsoftwareformat"><a href="#system_setsoftwareformat">System::setSoftwareFormat</a></h2>
<p>Sets the output format for the software mixer.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">setSoftwareFormat</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">samplerate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numrawspeakers</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_System_SetSoftwareFormat</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">samplerate</span><span class="p">,</span>
<span class="n">FMOD_SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setSoftwareFormat</span><span class="p">(</span>
<span class="kt">int</span> <span class="n">samplerate</span><span class="p">,</span>
<span class="n">SPEAKERMODE</span> <span class="n">speakermode</span><span class="p">,</span>
<span class="kt">int</span> <span class="n">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setSoftwareFormat</span><span class="p">(</span>
<span class="nx">samplerate</span><span class="p">,</span>
<span class="nx">speakermode</span><span class="p">,</span>
<span class="nx">numrawspeakers</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>samplerate <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Sample rate of the mixer.</p>
<ul>
<li><span class="label">Range:</span> [8000, 192000]</li>
<li><span class="label">Units:</span> Hertz</li>
<li><span class="label">Default:</span> 48000</li>
</ul>
</dd>
<dt>speakermode <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>Speaker setup of the mixer. (<a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a>)</dd>
<dt>numrawspeakers <span><a class="token" href="glossary.html#documentation-conventions" title="Optional">Opt</a></span></dt>
<dd>
<p>Number of speakers for <a class="apilink" href="core-api-common.html#fmod_speakermode_raw">FMOD_SPEAKERMODE_RAW</a> mode.</p>
<ul>
<li><span class="label">Range:</span> [0, <a class="apilink" href="core-api-common.html#fmod_max_channel_width">FMOD_MAX_CHANNEL_WIDTH</a>]</li>
</ul>
</dd>
</dl>
<p>If loading <a href="glossary.html#bank-file">banks</a> made in <a href="glossary.html#fmod-studio">FMOD Studio</a>, this must be called with <code>speakermode</code> corresponding to the project output format if there is a possibility of the output audio device not matching the project format. Any differences between the project format and <code>speakermode</code> will cause the mix to sound wrong.</p>
<p>By default <code>speakermode</code> will assume the setup the OS / output prefers.</p>
<p>Altering the <code>samplerate</code> from the OS / output preferred rate may incur extra latency. Altering the <code>speakermode</code> from the OS / output preferred mode may cause an upmix/downmix which can alter the sound.</p>
<p>On lower power platforms such as mobile <code>samplerate</code> will default to 24 kHz to reduce CPU cost.</p>
<p>This function must be called before <a class="apilink" href="core-api-system.html#system_init">System::init</a>, or after <a class="apilink" href="core-api-system.html#system_close">System::close</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getsoftwareformat">System::getSoftwareFormat</a></p>
<h2 api="function" id="system_setspeakerposition"><a href="#system_setspeakerposition">System::setSpeakerPosition</a></h2>
<p>Sets the position of the specified speaker for the current speaker mode.</p>
<p>This function allows the user to specify the position of their speaker to account for non standard setups.<br />
It also allows the user to disable speakers from 3D consideration in a game.</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">System</span><span class="o">::</span><span class="n">setSpeakerPosition</span><span class="p">(</span>
<span class="n">FMOD_SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">x</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">y</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">active</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_System_SetSpeakerPosition</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="n">FMOD_SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">x</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">y</span><span class="p">,</span>
<span class="n">FMOD_BOOL</span> <span class="n">active</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setSpeakerPosition</span><span class="p">(</span>
<span class="n">SPEAKER</span> <span class="n">speaker</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">x</span><span class="p">,</span>
<span class="kt">float</span> <span class="n">y</span><span class="p">,</span>
<span class="kt">bool</span> <span class="n">active</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setSpeakerPosition</span><span class="p">(</span>
<span class="nx">speaker</span><span class="p">,</span>
<span class="nx">x</span><span class="p">,</span>
<span class="nx">y</span><span class="p">,</span>
<span class="nx">active</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>speaker</dt>
<dd>Speaker. (<a class="apilink" href="core-api-common.html#fmod_speaker">FMOD_SPEAKER</a>)</dd>
<dt>x</dt>
<dd>
<p>2D X position relative to the listener. -1 = left, 0 = middle, +1 = right.</p>
<ul>
<li><span class="label">Range:</span> [-1, 1]</li>
</ul>
</dd>
<dt>y</dt>
<dd>
<p>2D Y position relative to the listener. -1 = back, 0 = middle, +1 = front.</p>
<ul>
<li><span class="label">Range:</span> [-1, 1]</li>
</ul>
</dd>
<dt>active</dt>
<dd>
<p>Active state of a speaker. True = included in 3D calculations, False = ignored.</p>
<ul>
<li><span class="label">Units:</span> Boolean</li>
</ul>
</dd>
</dl>
<p>This allows you to customize the position of the speakers for the current <a class="apilink" href="core-api-common.html#fmod_speakermode">FMOD_SPEAKERMODE</a> by giving X (left to right) and Y (front to back) coordinates.<br />
When disabling a speaker, 3D spatialization is redistributed around the missing speaker so that <a href="glossary.html#signal">signal</a> isn't lost.</p>
<p>Stereo setup would look like this:</p>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_FRONT_LEFT</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_FRONT_RIGHT</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="mi">1</span><span class="p">);</span>
</pre></div>
<div class="highlight language-cpp"><pre><span></span><span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_FRONT_LEFT</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">0.0f</span><span class="p">,</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_FRONT_RIGHT</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="nb">true</span><span class="p">);</span>
</pre></div>
<p>7.1 setup would look like this:</p>
<div class="highlight language-c"><pre><span></span><span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_FRONT_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">30</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">30</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_FRONT_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">30</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">30</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_FRONT_CENTER</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_LOW_FREQUENCY</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_SURROUND_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">90</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">90</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_SURROUND_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">90</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">90</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_BACK_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span><span class="o">-</span><span class="mi">150</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span><span class="o">-</span><span class="mi">150</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">FMOD_System_SetSpeakerPosition</span><span class="p">(</span><span class="n">system</span><span class="p">,</span> <span class="n">FMOD_SPEAKER_BACK_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">150</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">150</span><span class="p">)),</span> <span class="mi">1</span><span class="p">);</span>
</pre></div>
<div class="highlight language-cpp"><pre><span></span><span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_FRONT_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">30</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">30</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_FRONT_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">30</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">30</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_FRONT_CENTER</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_LOW_FREQUENCY</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">0</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_SURROUND_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">90</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="o">-</span><span class="mi">90</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_SURROUND_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">90</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">90</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_BACK_LEFT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span><span class="o">-</span><span class="mi">150</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span><span class="o">-</span><span class="mi">150</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
<span class="n">system</span><span class="o">-&gt;</span><span class="n">setSpeakerPosition</span><span class="p">(</span><span class="n">FMOD_SPEAKER_BACK_RIGHT</span><span class="p">,</span> <span class="n">sin</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">150</span><span class="p">)),</span> <span class="n">cos</span><span class="p">(</span><span class="n">degtorad</span><span class="p">(</span> <span class="mi">150</span><span class="p">)),</span> <span class="nb">true</span><span class="p">);</span>
</pre></div>
<p>Calling <a class="apilink" href="core-api-system.html#system_setsoftwareformat">System::setSoftwareFormat</a> will override any customization made with this function.</p>
<p>Users of the Studio API should be aware this function does not affect the speaker positions used by the spatializer <a href="glossary.html#dsp">DSPs</a> such as the <a href="effects-reference.html#pan">pan</a> and <a href="effects-reference.html#object-panner">object panner</a> DSPs. It is purely for Core API spatialization via <a class="apilink" href="core-api-channelcontrol.html#channelcontrol_set3dattributes">ChannelControl::set3DAttributes</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getspeakerposition">System::getSpeakerPosition</a></p>
<h2 api="function" id="system_setstreambuffersize"><a href="#system_setstreambuffersize">System::setStreamBufferSize</a></h2>
<p>Sets the default file buffer size for newly opened streams.</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">System</span><span class="o">::</span><span class="n">setStreamBufferSize</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">filebuffersize</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">filebuffersizetype</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_System_SetStreamBufferSize</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">filebuffersize</span><span class="p">,</span>
<span class="n">FMOD_TIMEUNIT</span> <span class="n">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">setStreamBufferSize</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">filebuffersize</span><span class="p">,</span>
<span class="n">TIMEUNIT</span> <span class="n">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">setStreamBufferSize</span><span class="p">(</span>
<span class="nx">filebuffersize</span><span class="p">,</span>
<span class="nx">filebuffersizetype</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>filebuffersize</dt>
<dd>
<p>Buffer size.</p>
<ul>
<li><span class="label">Default:</span> 16384</li>
</ul>
</dd>
<dt>filebuffersizetype</dt>
<dd>
<p>Type of units for <code>filebuffersize</code>. (<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_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a></li>
</ul>
</dd>
</dl>
<p>Valid units for <code>filebuffersizetype</code> are:</p>
<ul>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_ms">FMOD_TIMEUNIT_MS</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_pcm">FMOD_TIMEUNIT_PCM</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_pcmbytes">FMOD_TIMEUNIT_PCMBYTES</a></li>
<li><a class="apilink" href="core-api-common.html#fmod_timeunit_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a></li>
</ul>
<p>Larger values will consume more memory, whereas smaller values may cause buffer under-run / starvation / stuttering caused by large delays in disk access (ie netstream), or CPU usage in slow machines, or by trying to play too many streams at once.</p>
<p>Does not affect streams created with <a class="apilink" href="core-api-common.html#fmod_openuser">FMOD_OPENUSER</a>, as the buffer size is specified in <a class="apilink" href="core-api-system.html#system_createsound">System::createSound</a>.</p>
<p>Does not affect latency of playback. All streams are pre-buffered (unless opened with <a class="apilink" href="core-api-common.html#fmod_openonly">FMOD_OPENONLY</a>), so they will always start immediately.</p>
<p>Seek and Play operations can sometimes cause a reflush of this buffer.</p>
<p>If <a class="apilink" href="core-api-common.html#fmod_timeunit_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a> is used, the memory allocated is two times the size passed in, because fmod allocates a double buffer.</p>
<p>If <a class="apilink" href="core-api-common.html#fmod_timeunit_ms">FMOD_TIMEUNIT_MS</a>, <a class="apilink" href="core-api-common.html#fmod_timeunit_pcm">FMOD_TIMEUNIT_PCM</a> or <a class="apilink" href="core-api-common.html#fmod_timeunit_pcmbytes">FMOD_TIMEUNIT_PCMBYTES</a> is used, and the stream is infinite (such as a shoutcast netstream), or VBR, then FMOD cannot calculate an accurate compression ratio to work with when the file is opened. This means it will then base the buffersize on <a class="apilink" href="core-api-common.html#fmod_timeunit_pcmbytes">FMOD_TIMEUNIT_PCMBYTES</a>, or in other words the number of PCM bytes, but this will be incorrect for some compressed formats. Use <a class="apilink" href="core-api-common.html#fmod_timeunit_rawbytes">FMOD_TIMEUNIT_RAWBYTES</a> for these type (infinite / undetermined length) of streams for more accurate read sizes.</p>
<p>To determine the actual memory usage of a stream, including sound buffer and other overhead, use <a class="apilink" href="core-api-common.html#memory_getstats">Memory_GetStats</a> before and after creating a sound.</p>
<p>Stream may still stutter if the codec uses a large amount of cpu time, which impacts the smaller, internal 'decode' buffer. The decode buffer size is changeable via <a class="apilink" href="core-api-system.html#fmod_createsoundexinfo">FMOD_CREATESOUNDEXINFO</a>.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_getstreambuffersize">System::getStreamBufferSize</a>, <a class="apilink" href="core-api-sound.html#sound_getopenstate">Sound::getOpenState</a></p>
<h2 api="function" id="system_setuserdata"><a href="#system_setuserdata">System::setUserData</a></h2>
<p>Sets a user value associated with a 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">System</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_System_SetUserData</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</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">System</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">System</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>User specified data to be stored within the System object.</dd>
</dl>
<p>This function allows arbitrary user data to be attached to this object, which wll be passed through the <code>userdata</code> parameter in any <a class="apilink" href="core-api-system.html#fmod_system_callback">FMOD_SYSTEM_CALLBACK</a>s. 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-system.html#system_getuserdata">System::getUserData</a>, <a class="apilink" href="core-api-system.html#system_setcallback">System::setCallback</a></p>
<h2 api="function" id="system_unloadplugin"><a href="#system_unloadplugin">System::unloadPlugin</a></h2>
<p>Unloads an FMOD (<a href="glossary.html#dsp">DSP</a>, Output or Codec) plug-in.</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">System</span><span class="o">::</span><span class="n">unloadPlugin</span><span class="p">(</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</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_System_UnloadPlugin</span><span class="p">(</span>
<span class="n">FMOD_SYSTEM</span> <span class="o">*</span><span class="n">system</span><span class="p">,</span>
<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-csharp"><pre><span></span><span class="n">RESULT</span> <span class="n">System</span><span class="p">.</span><span class="n">unloadPlugin</span><span class="p">(</span>
<span class="kt">uint</span> <span class="n">handle</span>
<span class="p">);</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">unloadPlugin</span><span class="p">(</span>
<span class="nx">handle</span>
<span class="p">);</span>
</pre></div>
<dl>
<dt>handle</dt>
<dd>Handle to an already loaded plug-in.</dd>
</dl>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_loadplugin">System::loadPlugin</a></p>
<h2 api="function" id="system_unlockdsp"><a href="#system_unlockdsp">System::unlockDSP</a></h2>
<p>Mutual exclusion function to unlock the <a href="glossary.html#dsp-engine">DSP engine</a> (which runs asynchronously in another thread) and let it continue executing.</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">System</span><span class="o">::</span><span class="n">unlockDSP</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_System_UnlockDSP</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">System</span><span class="p">.</span><span class="n">unlockDSP</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">unlockDSP</span><span class="p">();</span>
</pre></div>
<p>The DSP engine must be locked with <a class="apilink" href="core-api-system.html#system_lockdsp">System::lockDSP</a> before this function is called.</p>
<h2 api="function" id="system_update"><a href="#system_update">System::update</a></h2>
<p>Updates the FMOD system.</p>
<p>
<div class="language-selector">
<div class="language-tab" data-language="language-c">C</div>
<div class="language-tab" data-language="language-cpp">C++</div>
<div class="language-tab" data-language="language-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">System</span><span class="o">::</span><span class="n">update</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_System_Update</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">System</span><span class="p">.</span><span class="n">update</span><span class="p">();</span>
</pre></div>
<div class="highlight language-javascript"><pre><span></span><span class="nx">System</span><span class="p">.</span><span class="nx">update</span><span class="p">();</span>
</pre></div>
<p>Should be called once per 'game' tick, or once per frame in your application to perform actions such as:</p>
<ul>
<li>Panning and reverb from 3D attributes changes.</li>
<li>Virtualization of <a class="apilink" href="core-api-channel.html">Channel</a>s based on their audibility.</li>
<li>Mixing for non-realtime output types. See comment below.</li>
<li>Streaming if using <a class="apilink" href="core-api-system.html#fmod_init_stream_from_update">FMOD_INIT_STREAM_FROM_UPDATE</a>.</li>
<li>Mixing if using <a class="apilink" href="core-api-system.html#fmod_init_mix_from_update">FMOD_INIT_MIX_FROM_UPDATE</a></li>
<li>Firing callbacks that are deferred until Update.</li>
<li><a href="glossary.html#dsp">DSP</a> cleanup.</li>
</ul>
<p>If <a class="apilink" href="core-api-system.html#fmod_outputtype_nosound_nrt">FMOD_OUTPUTTYPE_NOSOUND_NRT</a> or <a class="apilink" href="core-api-system.html#fmod_outputtype_wavwriter_nrt">FMOD_OUTPUTTYPE_WAVWRITER_NRT</a> output modes are used, this function also drives the software / <a href="glossary.html#dsp-engine">DSP engine</a>, instead of it running asynchronously in a thread as is the default behavior.<br />
This can be used for faster than realtime updates to the decoding or DSP engine which might be useful if the output is the wav writer for example.</p>
<p>If <a class="apilink" href="core-api-system.html#fmod_init_stream_from_update">FMOD_INIT_STREAM_FROM_UPDATE</a> is used, this function will update the stream engine. Combining this with the non realtime output will mean smoother captured output.</p>
<p><strong>See Also:</strong> <a class="apilink" href="core-api-system.html#system_init">System::init</a>, <a class="apilink" href="core-api-system.html#fmod_initflags">FMOD_INITFLAGS</a>, <a class="apilink" href="core-api-system.html#fmod_outputtype">FMOD_OUTPUTTYPE</a>, <a class="apilink" href="core-api-common.html#fmod_mode">FMOD_MODE</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>