# 6. Studio API Reference | Studio::CommandReplay

The FMOD Studio command replay system allows API calls in a session to be recorded and later played back for debugging and performance purposes.

Setup:

- Studio::CommandReplay::setBankPath Sets a path substition that will be used when loading banks with this replay.
- Studio::CommandReplay::setCreateInstanceCallback Sets the create event instance callback.
- Studio::CommandReplay::setFrameCallback Sets a callback that is issued each time the replay reaches a new frame.
- Studio::CommandReplay::setLoadBankCallback Sets the bank loading callback.
- Studio::CommandReplay::setUserData Sets user data.

- FMOD_STUDIO_COMMAND_INFO Describes a command replay command.
- FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK Callback for command replay event instance creation.
- FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK Callback for when the command replay goes to the next frame.
- FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK Callback for command replay bank loading.

- FMOD_STUDIO_INSTANCETYPE Command replay command instance handle types.

Playback:

- Studio::CommandReplay::start Begins playback.
- Studio::CommandReplay::stop Stops playback.
- Studio::CommandReplay::getCurrentCommand Retrieves the progress through the command replay.
- Studio::CommandReplay::getPlaybackState Retrieves the playback state.
- Studio::CommandReplay::setPaused Sets the paused state.
- Studio::CommandReplay::getPaused Retrieves the paused state.
- Studio::CommandReplay::seekToCommand Seeks the playback position to a command.
- Studio::CommandReplay::seekToTime Seeks the playback position to a time.

Query:

- Studio::CommandReplay::getCommandAtTime Retrieves the command index corresponding to the given playback time.
- Studio::CommandReplay::getCommandCount Retrieves the number of commands in the replay.
- Studio::CommandReplay::getCommandInfo Retrieves command information.
- Studio::CommandReplay::getCommandString Retrieves the string representation of a command.
- Studio::CommandReplay::getLength Retrieves the total playback time.
- Studio::CommandReplay::getSystem Retrieves the Studio System object associated with this replay object.
- Studio::CommandReplay::getUserData Retrieves user data.
- Studio::CommandReplay::isValid Checks that the CommandReplay reference is valid.

Lifetime:

- Studio::CommandReplay::release Releases the command replay.

See also:

- Studio::System::startCommandCapture Recording Studio commands to a file.
- Studio::System::stopCommandCapture Stop recording Studio commands.
- Studio::System::loadCommandReplay Load a command replay.

## FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK

Callback for command replay event instance creation.

C
C++
C#
JS

    FMOD_RESULT F_CALLBACK FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK(
      FMOD_STUDIO_COMMANDREPLAY *replay,
      int commandindex,
      FMOD_STUDIO_EVENTDESCRIPTION *eventdescription,
      FMOD_STUDIO_EVENTINSTANCE **instance,
      void *userdata
    );

    delegate RESULT Studio.COMMANDREPLAY_CREATE_INSTANCE_CALLBACK(
      IntPtr replay,
      int commandindex,
      IntPtr eventdescription,
      out IntPtr instance,
      IntPtr userdata
    );

Not supported for JavaScript.

replay
  Command replay. (Studio::CommandReplay)
commandindex
  Current playback command index.
eventdescription
  Event description to use. (Studio::EventDescription)
instance Out Opt
  The event instance created by this function. (Studio::EventInstance)
userdata
  The userdata set with Studio::CommandReplay::setUserData

The `replay` argument can be cast to `FMOD::Studio::CommandReplay *`.

The `eventdescription` argument can be cast to `FMOD::Studio::EventDescription *`.

The `instance` argument can be cast to `FMOD::Studio::EventInstance *`.

The 'replay' argument can be used via `CommandReplay` by using `FMOD.Studio.CommandReplay commandReplay = new FMOD.Studio.CommandReplay(replay);`

The 'eventdescription' argument can be used via `EventDescription` by using `FMOD.EventDescription description = new FMOD.EventDescription(eventdescription);`

The 'instance' argument can be used via `EventInstance` by using `FMOD.EventInstance eventInstance = new FMOD.EventInstance(instance);`

See Also: Studio::CommandReplay::setCreateInstanceCallback

## FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK

Callback for when the command replay goes to the next frame.

C
C++
C#
JS

    FMOD_RESULT F_CALLBACK FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK(
      FMOD_STUDIO_COMMANDREPLAY *replay,
      int commandindex,
      float currenttime,
      void *userdata
    );

    delegate RESULT Studio.COMMANDREPLAY_FRAME_CALLBACK(
      IntPtr replay,
      int commandindex,
      float currenttime,
      IntPtr userdata
    );

Currently not supported for JavaScript.

replay
  Command replay. (Studio::CommandReplay)
commandindex
  Current playback command index.
currenttime
  Current playback time.
userdata
  The userdata set with Studio::CommandReplay::setUserData

The `replay` argument can be cast to `FMOD::Studio::CommandReplay *`.

The 'replay' argument can be used via `CommandReplay` by using `FMOD.Studio.CommandReplay commandReplay = new FMOD.Studio.CommandReplay(replay);`

See Also: Studio::CommandReplay::setFrameCallback

## Studio::CommandReplay::getCommandAtTime

Retrieves the command index corresponding to the given playback time.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getCommandAtTime(
      float time,
      int *commandindex
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetCommandAtTime(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      float time,
      int *commandindex
    );

    RESULT Studio.CommandReplay.getCommandAtTime(
      float time,
      out int commandindex
    );

    Studio.CommandReplay.getCommandAtTime(
      time,
      commandindex
    );

time
  The time used to find a command index.
commandindex Out
  Command index.

This function will return an index for the first command at or after `time`. If `time` is greater than the total playback time then FMOD_ERR_EVENT_NOTFOUND is returned.

See Also: Studio::CommandReplay::getLength

## Studio::CommandReplay::getCommandCount

Retrieves the number of commands in the replay.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getCommandCount(
      int *count
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetCommandCount(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      int *count
    );

    RESULT Studio.CommandReplay.getCommandCount(
      out int count
    );

    Studio.CommandReplay.getCommandCount(
      count
    );

count Out
  Number of commands in the replay.

May be used in conjunction with Studio::CommandReplay::getCommandInfo to enumerate the commands in the replay.

## Studio::CommandReplay::getCommandInfo

Retrieves command information.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getCommandInfo(
      int commandindex,
      FMOD_STUDIO_COMMAND_INFO *info
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetCommandInfo(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      int commandindex,
      FMOD_STUDIO_COMMAND_INFO *info
    );

    RESULT Studio.CommandReplay.getCommandInfo(
      int commandindex,
      out COMMAND_INFO info
    );

    Studio.CommandReplay.getCommandInfo(
      commandindex,
      info
    );

commandindex
  The index of the command.
info Out
  Command info structure. (FMOD_STUDIO_COMMAND_INFO)

May be used in conjunction with Studio::CommandReplay::getCommandCount to enumerate the commands in the replay.

## Studio::CommandReplay::getCommandString

Retrieves the string representation of a command.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getCommandString(
      int commandindex,
      char *buffer,
      int length
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetCommandString(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      int commandindex,
      char *buffer,
      int length
    );

    RESULT Studio.CommandReplay.getCommandString(
      int commandindex,
      out string buffer
    );

    Studio.CommandReplay.getCommandString(
      commandindex,
      buffer
    );

commandindex
  The index of the command.
buffer
  Buffer to receive the string.
length
  The capacity of the buffer.

If the string representation of the command is too long to fit in the buffer it will be truncated and this function will return FMOD_ERR_TRUNCATED.

## Studio::CommandReplay::getCurrentCommand

Retrieves the progress through the command replay.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getCurrentCommand(
      int *commandindex,
      float *currenttime
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetCurrentCommand(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      int *commandindex,
      float *currenttime
    );

    RESULT Studio.CommandReplay.getCurrentCommand(
      out int commandindex,
      out float currenttime
    );

    Studio.CommandReplay.getCurrentCommand(
      commandindex,
      currenttime
    );

commandindex Out Opt
  The current command index.
currenttime Out Opt
  The current playback time.

If this function is called before Studio::CommandReplay::start then both `commandindex` and `currenttime` will be returned as 0. If this function is called after Studio::CommandReplay::stop then the index and time of the last command which was replayed will be returned.

## Studio::CommandReplay::getLength

Retrieves the total playback time.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getLength(
      float *length
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetLength(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      float *length
    );

    RESULT Studio.CommandReplay.getLength(
      out float length
    );

    Studio.CommandReplay.getLength(
      length
    );

length Out
  The total playback time.

## Studio::CommandReplay::getPaused

Retrieves the paused state.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getPaused(
      bool *paused
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetPaused(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_BOOL *paused
    );

    RESULT Studio.CommandReplay.getPaused(
      out bool paused
    );

    Studio.CommandReplay.getPaused(
      paused
    );

paused

  Paused state.

  - Units: Boolean

See Also: Studio::CommandReplay::setPaused

## Studio::CommandReplay::getPlaybackState

Retrieves the playback state.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getPlaybackState(
      FMOD_STUDIO_PLAYBACK_STATE *state
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetPlaybackState(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_STUDIO_PLAYBACK_STATE *state
    );

    RESULT Studio.CommandReplay.getPlaybackState(
      out PLAYBACK_STATE state
    );

    Studio.CommandReplay.getPlaybackState(
      state
    );

state Out
  Playback state. (FMOD_STUDIO_PLAYBACK_STATE)

## Studio::CommandReplay::getSystem

Retrieves the Studio System object associated with this replay object.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getSystem(
      Studio::System **system
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetSystem(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_STUDIO_SYSTEM **system
    );

    RESULT Studio.CommandReplay.getSystem(
      out System system
    );

    Studio.CommandReplay.getSystem(
      system
    );

system
  Studio system object. (Studio::System)

## Studio::CommandReplay::getUserData

Retrieves user data.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::getUserData(
      void **userdata
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_GetUserData(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      void **userdata
    );

    RESULT Studio.CommandReplay.getUserData(
      out IntPtr userdata
    );

    Studio.CommandReplay.getUserData(
      userdata
    );

userdata
  User data.

See Also: Studio::CommandReplay::setUserData

## Studio::CommandReplay::isValid

Checks that the CommandReplay reference is valid.

C
C++
C#
JS

    bool Studio::CommandReplay::isValid()

    bool FMOD_Studio_CommandReplay_IsValid(FMOD_STUDIO_COMMANDREPLAY *commandreplay)

    bool Studio.CommandReplay.isValid()

    Studio.CommandReplay.isValid()

## FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK

Callback for command replay bank loading.

C
C++
C#
JS

    FMOD_RESULT F_CALLBACK FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK(
      FMOD_STUDIO_COMMANDREPLAY *replay,
      int commandindex,
      const FMOD_GUID *bankguid,
      const char *bankfilename,
      FMOD_STUDIO_LOAD_BANK_FLAGS flags,
      FMOD_STUDIO_BANK **bank,
      void *userdata
    );

    delegate RESULT Studio.COMMANDREPLAY_LOAD_BANK_CALLBACK(
      IntPtr replay,
      int commandindex,
      ref Guid bankguid,
      IntPtr bankfilename,
      LOAD_BANK_FLAGS flags,
      out IntPtr bank,
      IntPtr userdata
    );

Not supported for JavaScript.

replay
  Command replay. (Studio::CommandReplay)
commandindex
  The command that invoked this callback.
bankguid Opt
  The guid of the bank that needs to be loaded. (FMOD_GUID)
bankfilename Opt
  The filename of the bank that needs to be loaded. (UTF-8 string)
flags
  The flags to load the bank with. (FMOD_STUDIO_LOAD_BANK_FLAGS)
bank Out Opt
  The bank loaded by this function. (Studio::Bank)
userdata
  The userdata set with Studio::CommandReplay::setUserData

The `replay` argument can be cast to `FMOD::Studio::CommandReplay *`.

The `bank` argument can be cast to `FMOD::Studio::Bank *`.

The 'replay' argument can be used via `CommandReplay` by using `FMOD.Studio.CommandReplay commandReplay = new FMOD.Studio.CommandReplay(replay);`

The 'bankfilename' argument can be used via `StringWrapper` by using `FMOD.StringWrapper bankFilename = new FMOD.StringWrapper(bankfilename);`

The 'bank' argument can be used via `CommandReplay` by using `FMOD.Studio.Bank studioBank = new FMOD.Studio.Bank(bank);`

See Also: Studio::CommandReplay::setLoadBankCallback

## Studio::CommandReplay::release

Releases the command replay.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::release();

    FMOD_RESULT FMOD_Studio_CommandReplay_Release(FMOD_STUDIO_COMMANDREPLAY *commandreplay);

    RESULT Studio.CommandReplay.release();

    Studio.CommandReplay.release();

## Studio::CommandReplay::seekToCommand

Seeks the playback position to a command.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::seekToCommand(
      int commandindex
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SeekToCommand(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      int commandindex
    );

    RESULT Studio.CommandReplay.seekToCommand(
      int commandindex
    );

    Studio.CommandReplay.seekToCommand(
      commandindex
    );

commandindex
  Command index to seek to.

See Also: Studio::CommandReplay::seekToTime

## Studio::CommandReplay::seekToTime

Seeks the playback position to a time.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::seekToTime(
      float time
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SeekToTime(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      float time
    );

    RESULT Studio.CommandReplay.seekToTime(
      float time
    );

    Studio.CommandReplay.seekToTime(
      time
    );

time
  Time to seek to.

This function moves the playback position to the the first command at or after `time`. If no command exists at or after `time` then FMOD_ERR_EVENT_NOTFOUND is returned.

See Also: Studio::CommandReplay::seekToCommand

## Studio::CommandReplay::setBankPath

Sets a path substition that will be used when loading banks with this replay.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setBankPath(
      const char *bankPath
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetBankPath(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      const char *bankPath
    );

    RESULT Studio.CommandReplay.setBankPath(
      string bankPath
    );

    Studio.CommandReplay.setBankPath(
      bankPath
    );

bankPath
  The path to use when loading banks. (UTF-8 string)

Studio::System::loadBankFile commands in the replay are redirected to load banks from the specified directory, instead of using the directory recorded in the captured commands.

See Also: Studio::CommandReplay::setLoadBankCallback

## Studio::CommandReplay::setCreateInstanceCallback

Sets the create event instance callback.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setCreateInstanceCallback(
      FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK callback
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetCreateInstanceCallback(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK callback
    );

    RESULT Studio.CommandReplay.setCreateInstanceCallback(
      COMMANDREPLAY_CREATE_INSTANCE_CALLBACK callback
    );

Not supported for JavaScript.

callback
  Callback function. (FMOD_STUDIO_COMMANDREPLAY_CREATE_INSTANCE_CALLBACK)

The create instance callback is invoked each time a Studio::EventDescription::createInstance command is processed.

The callback can either create a new event instance based on the callback parameters or skip creating the instance. If the instance is not created then subsequent commands for the event instance will be ignored in the replay.

If this callback is not set then the system will always create an event instance.

See Also: Studio::CommandReplay::setUserData

## Studio::CommandReplay::setFrameCallback

Sets a callback that is issued each time the replay reaches a new frame.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setFrameCallback(
      FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK callback
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetFrameCallback(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK callback
    );

    RESULT Studio.CommandReplay.setFrameCallback(
      COMMANDREPLAY_FRAME_CALLBACK callback
    );

Not supported for JavaScript.

callback
  Callback function. (FMOD_STUDIO_COMMANDREPLAY_FRAME_CALLBACK)

See Also: Studio::CommandReplay::setUserData

## Studio::CommandReplay::setLoadBankCallback

Sets the bank loading callback.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setLoadBankCallback(
      FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK callback
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetLoadBankCallback(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK callback
    );

    RESULT Studio.CommandReplay.setLoadBankCallback(
      COMMANDREPLAY_LOAD_BANK_CALLBACK callback
    );

Not supported for JavaScript.

callback
  Callback function. (FMOD_STUDIO_COMMANDREPLAY_LOAD_BANK_CALLBACK)

The load bank callback is invoked whenever any of the Studio load bank functions are reached.

This callback is required to be implemented to successfully replay Studio::System::loadBankMemory and Studio::System::loadBankCustom commands.

The callback is responsible for loading the bank based on the callback parameters. If the bank is not loaded subsequent commands which reference objects in the bank will fail.

If this callback is not set then the system will attempt to load banks from file according to recorded Studio::System::loadBankFile commands and skip other load commands.

See Also: Studio::CommandReplay::setUserData

## Studio::CommandReplay::setPaused

Sets the paused state.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setPaused(
      bool paused
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetPaused(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      FMOD_BOOL paused
    );

    RESULT Studio.CommandReplay.setPaused(
      bool paused
    );

    Studio.CommandReplay.setPaused(
      paused
    );

paused

  Paused state.

  - Units: Boolean

See Also: Studio::CommandReplay::getPaused

## Studio::CommandReplay::setUserData

Sets user data.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::setUserData(
      void *userdata
    );

    FMOD_RESULT FMOD_Studio_CommandReplay_SetUserData(
      FMOD_STUDIO_COMMANDREPLAY *commandreplay,
      void *userdata
    );

    RESULT Studio.CommandReplay.setUserData(
      IntPtr userdata
    );

    Studio.CommandReplay.setUserData(
      userdata
    );

userdata
  User data.

The user data is passed to the callback functions used by the replay system.

See Also: Studio::CommandReplay::getUserData, Studio::CommandReplay::setCreateInstanceCallback, Studio::CommandReplay::setFrameCallback, Studio::CommandReplay::setLoadBankCallback

## Studio::CommandReplay::start

Begins playback.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::start();

    FMOD_RESULT FMOD_Studio_CommandReplay_Start(FMOD_STUDIO_COMMANDREPLAY *commandreplay);

    RESULT Studio.CommandReplay.start();

    Studio.CommandReplay.start();

If the replay is already running then calling this function will restart replay from the beginning.

See Also: Studio::CommandReplay::stop, Studio::CommandReplay::getPlaybackState

## Studio::CommandReplay::stop

Stops playback.

C
C++
C#
JS

    FMOD_RESULT Studio::CommandReplay::stop();

    FMOD_RESULT FMOD_Studio_CommandReplay_Stop(FMOD_STUDIO_COMMANDREPLAY *commandreplay);

    RESULT Studio.CommandReplay.stop();

    Studio.CommandReplay.stop();

If the FMOD_STUDIO_COMMANDREPLAY_SKIP_CLEANUP flag has been used then the system state is left as it was at the end of the playback, otherwise all resources that were created as part of the replay will be cleaned up.

See Also: Studio::CommandReplay::start, Studio::CommandReplay::getPlaybackState, Studio::System::loadCommandReplay

## FMOD_STUDIO_COMMAND_INFO

Describes a command replay command.

C
C++
C#
JS

    typedef struct FMOD_STUDIO_COMMAND_INFO {
      const char                *commandname;
      int                        parentcommandindex;
      int                        framenumber;
      float                      frametime;
      FMOD_STUDIO_INSTANCETYPE   instancetype;
      FMOD_STUDIO_INSTANCETYPE   outputtype;
      unsigned int               instancehandle;
      unsigned int               outputhandle;
    } FMOD_STUDIO_COMMAND_INFO;

    struct Studio.COMMAND_INFO
    {
        StringWrapper commandname;
        int parentcommandindex;
        int framenumber;
        float frametime;
        INSTANCETYPE instancetype;
        INSTANCETYPE outputtype;
        UInt32 instancehandle;
        UInt32 outputhandle;
    }

    FMOD_STUDIO_COMMAND_INFO
    {
      commandname,
      parentcommandindex,
      framenumber,
      frametime,
      instancetype,
      outputtype,
      instancehandle,
      outputhandle,
    };

commandname
  Fully qualified C++ name of the API function for this command. (UTF-8 string)
parentcommandindex
  Index of the command that created the instance this command operates on, or -1 if the command does not operate on any instance.
framenumber
  Frame the command belongs to.
frametime
  Playback time at which this command will be executed.
instancetype
  Type of object that this command uses as an instance. (FMOD_STUDIO_INSTANCETYPE)
outputtype
  Type of object that this command outputs. (FMOD_STUDIO_INSTANCETYPE)
instancehandle
  Original handle value of the instance.
outputhandle
  Original handle value of the command output.

Note that the handle values in the `instancehandle` and `outputhandle` are from the recorded session and are not valid handles during playback.

See Also: Studio::CommandReplay::getCommandInfo

## FMOD_STUDIO_INSTANCETYPE

Command replay command instance handle types.

C
C++
C#
JS

    typedef enum FMOD_STUDIO_INSTANCETYPE {
      FMOD_STUDIO_INSTANCETYPE_NONE,
      FMOD_STUDIO_INSTANCETYPE_SYSTEM,
      FMOD_STUDIO_INSTANCETYPE_EVENTDESCRIPTION,
      FMOD_STUDIO_INSTANCETYPE_EVENTINSTANCE,
      FMOD_STUDIO_INSTANCETYPE_PARAMETERINSTANCE,
      FMOD_STUDIO_INSTANCETYPE_BUS,
      FMOD_STUDIO_INSTANCETYPE_VCA,
      FMOD_STUDIO_INSTANCETYPE_BANK,
      FMOD_STUDIO_INSTANCETYPE_COMMANDREPLAY
    } FMOD_STUDIO_INSTANCETYPE;

    enum Studio.INSTANCETYPE
    {
        NONE,
        SYSTEM,
        EVENTDESCRIPTION,
        EVENTINSTANCE,
        PARAMETERINSTANCE,
        BUS,
        VCA,
        BANK,
        COMMANDREPLAY,
    }

    STUDIO_INSTANCETYPE_NONE
    STUDIO_INSTANCETYPE_SYSTEM
    STUDIO_INSTANCETYPE_EVENTDESCRIPTION
    STUDIO_INSTANCETYPE_EVENTINSTANCE
    STUDIO_INSTANCETYPE_PARAMETERINSTANCE
    STUDIO_INSTANCETYPE_BUS
    STUDIO_INSTANCETYPE_VCA
    STUDIO_INSTANCETYPE_BANK
    STUDIO_INSTANCETYPE_COMMANDREPLAY

FMOD_STUDIO_INSTANCETYPE_NONE
  No type, handle is unused.
FMOD_STUDIO_INSTANCETYPE_SYSTEM
  Studio::System.
FMOD_STUDIO_INSTANCETYPE_EVENTDESCRIPTION
  Studio::EventDescription.
FMOD_STUDIO_INSTANCETYPE_EVENTINSTANCE
  Studio::EventInstance.
FMOD_STUDIO_INSTANCETYPE_PARAMETERINSTANCE
  Studio::ParameterInstance.
FMOD_STUDIO_INSTANCETYPE_BUS
  Studio::Bus.
FMOD_STUDIO_INSTANCETYPE_VCA
  Studio::VCA.
FMOD_STUDIO_INSTANCETYPE_BANK
  Studio::Bank.
FMOD_STUDIO_INSTANCETYPE_COMMANDREPLAY
  Studio::CommandReplay.