Recording

What is Recorded?

When recording is enabled, all movement of every user in the Operation is recorded, including all interactions with physics objects or Interactables, except those specified in Introduction.

The voice of each player is also recorded individually, including incoming voice via Dissonance in Multi Player mode.

The actions performed, as well as the complete traversal through the SceneGraph is recorded.

The objects the user interacts with might come into contact or interact with other objects and thus change their transform. The transform of all subsequent touched objects is also recorded.

Propagation of Recording.

Recording File structure

The file created will be under the folder VRLogger in the Documents of the user.

C:\Users\Your_Username\Documents\VRLogger\

Each Recording is a folder under this location, with the date and time the recording started as a name. The file structure of each recording is as follows:

  • 2021_01_01_20_00

    • Player_0

      • MessagesCamera

      • MessagesLeftHand

      • MessagesRightHand

      • RecordingInfo

      • Sound.wav

      • TransformCamera

      • TransformLeftHand

      • TransformRightHand

    • Player_1

      • MessagesCamera

      • MessagesLeftHand

      • MessagesRightHand

      • Sound.wav

      • TransformCamera

      • TransformLeftHand

      • TransformRightHand

    • Player_2

There is a Player subfolder for each user that was present in the Operation during the Recording.

  • Recording Info: Present only in the first subfolder Player_0, it provides additional information regarding the recording.

  • Messages Camera, Left Hand, Right Hand: Contains information for each of the mentioned entities. For the hands, interactions with objects, UI and button presses. For the Camera, only in the first subfolder Player_0, there is information regarding the traversal through the Scene Graph.

  • Sound: contains the microphone input of the user that was captured during the recording, not their in-game sound.

  • Transform Camera, Left Hand, Right Hand: Contains the transforms for each entity mentioned, as well as objects that the entity might have interacted with, following the Recording Propagation logic described in Introduction. For example, if a user grabs a statue, its transform is written in this file. Should he hit some other object with the statue, the other object’s transform is also written here until the object is no longer moving.

Recording Sound

While Sound samples are obtained differently for the local player and network players, both follow the same procedure for saving the sound file in a recording. Sound Samples for the local player are obtained Unity’s Microphone interface, and network player’s sound is retrieved using Dissonance Sound communications.

The Incoming sound is initially stored as multiple files in segments of n seconds, and at the end of the recording they are merged to create the final sound file.

Sound file Creation process

Communication between Scripts and Components

The Recording Writer component is referenced as a singleton instance. It is mostly referenced by other scripts, which use it as a means of accessing the recording’s files and updating them each frame.

All Interaction Recorder scripts reference the Recording Writer instance and invoke the appropriate functions for writing transforms and interactions for the GameObject they are attached to. The Recording Writer then accesses the correct files and writes all information to them.

The Propagate Recording Scripts create an entry in the Tracking Targets List of the Recording Writer, who in turn keeps track of the position of the GameObject and writes it to the correct file in the correct level of propagation.

For Sound, the Recording Writer Script collects sound samples from Unity’s Microphone interface for the local player, and uses the SaveWav and MergeWav Scripts to save and merge the files at the end of the recording. For Network players, The Get Audio Samples and Dissonance Audio Recorder scripts provide the RecordingWriter with samples, which then follow the same procedure as a local player’s samples.

Complete Recording Execution flowchart