‘EXA: The Infinite Instrument’ User Guide

Your Guide to Making Music with Your New VR Instrument

Zach Kinstner
Mar 31, 2017 · 14 min read

EXA is a musical instrument for virtual reality that opens up entirely new dimensions of musical creativity and performance. The name is pronounced eck-sah, and you play it with the VR app EXA: The Infinite Instrument.

Whether you only want the basics, or want to dig into every last detail, the following user guide will help you get started with your new VR instrument.

Building a song in VR — recording a new loop to accompany the other two.

Quick Start

The EXA Environment

The default layout in EXA contains several ringers, which are arranged into four different structures. Two of these structures have a somewhat familiar pattern: a “curved piano” and a “drum kit”. The other two are more imaginary: a “box-shaped guitar” and a “flower-shaped synthesizer”.

Looking at the “drum kit” (near/left) and the “curved piano” (far/right) structures.

Making Music

And, since this is the “infinite instrument”, just be aware that you can do so much more: move and resize any ringer, record and playback its sounds within a loop, mute and muffle the ringers, and configure them to make any sound imaginable. All of this is described in detail below.

Overview Video

That’s right, we’re rocking out to “Twinkle Twinkle Little Star”!

And with that, you should know enough about EXA to get started. If don’t want to miss out on a single EXA feature, feel free to keep reading… your musical possibilities might expand a little bit further!

Enjoying the rainbow glow — strumming through line-shaped ringers with an “infinity” motion.


A line-shaped ringer behaves somewhat like a guitar string, allowing you to hit it at most angles along its length. The other shapes behave somewhat like a drum, allowing you to hit it at most angles that intersect its flat surface.

Hitting oval-shaped and rectangle-shaped ringers from both sides.

The volume and intensity of a ringer’s sound varies based on the speed of your hit. Some tool types allow you to control other aspects of the sound, including its duration. Eventually, you may have even more expressiveness via the relative position (i.e. nearness to center) and angle of your hit.

In addition to producing a sound, a ringer also glows and vibrates when you hit it. These effects are connected to the ringer’s volume and pitch.


  • Any type of sound, usually captured as individual notes. These source of these sounds could be real instrument recordings, vocal recordings, song samples, artificial tones, and so on.
  • Multiple sound variations for a single note, like a piano key pressed with soft, medium, and hard intensities.
  • Multiple “presets”, which provide sound groupings within a single Soundfont file. Variations between these presets might be similar (like applying different filters or settings to the same core sounds) or very different (like using entirely different sounds for each preset).

Through EXA’s use of Soundfonts, you can perform using any imaginable sound, while also attaining a high degree of nuance and expressiveness.

Applying a Soundfont preset to all of the selected ringers (using the Ringers menu interface).

Standard Soundfonts

Installing Soundfonts

EXA reads directly from this Soundfonts folder, so any changes you make here will appear in the app (upon the next app startup).

To install a new Soundfont, simply drop the file into this folder (or any of its sub-folders). EXA can only read Soundfonts with the SF2 (*.sf2) file format.


Striking ringers using a handle that has a “play” tool snapped to each end.

Each handle has magnetic connection points at each end. These points allow tools (described in the next section) to quickly and easily snap into place. This connection is based on proximity, and does not require any other gesture or button. Simply bring the handle’s connection point near to the tool — once the two are close enough, they will snap together like magnets.

A handle is also responsible for passing input data (like triggers, directional pads, and buttons) from the VR controller to its active tools. The handle itself is not concerned with how the tool might utilize this information.


Any tool with a glowing white sphere can hit ringers and interact with menu interfaces. This provides much-needed flexibility for mixing “work” (like drawing or selecting ringers) with “play”.

Snapping a “grab” tool onto the right handle, with a look at the entire set of tools.

Draw Tool

Pulling the VR controller’s trigger engages the drawing action. You cannot attach a draw tool to the bottom part of a handle.

Grab Tool

You can also use a grab tool to select ringers. Grabbing a ringer selects it, but deselects all others. To select multiple ringers: start a grab in the air, and while keeping it engaged, touch all the desired ringers.

Pulling the VR controller’s trigger engages the grabbing action. You cannot attach a grab tool to the bottom part of a handle.

Play Tool

Pulling the VR controller’s trigger while hitting a ringer shortens the duration of the ringer’s sound. Eventually, other VR controller inputs may affect the ringer, like varying its pitch with the directional pad.

Mute Tool

  • Hitting a ringer with a mute tool (in the same way you would hit the ringer with a play tool) causes the ringer’s sound to stop immediately.
  • Holding the mute tool near to the ringer reduces its volume over time; this occurs more rapidly as the mute tool gets closer to the ringer.

You can hold the mute tool near to a ringer before (or at the same time as) you hit the ringer. With this technique, you can make the ringer generate shortened, staccato sounds — an effect similar to resting your palm upon a guitar’s strings before strumming them.

None Tool

Snap-On Behavior

You don’t need to release or remove a tool from the handle before snapping on a new one. The existing tool will disappear automatically as you move to snap on the new tool.

Menu Interfaces

Recording and playing loops with Loop and Metronome menus (left). Shifting notes with the Ringer menu (right).

Hover-Based Selections

Some interfaces utilize ringers to trigger certain actions. These menu-related ringers do not use “hover” selections. Instead, you should hit them in the same way that you hit the music-related ringers.

Ringers Interface

The Sounds sub-menu allows you to choose new sounds from the hierarchy of folders and Soundfonts. See the Installing Soundfonts section regarding the folder structure. Since Soundfonts can contain multiple “presets”, each Soundfont also behaves like a folder. Soundfonts are loaded on demand, so a loading-progress percentage may appear for larger files.

The Notes sub-menu allows you to change the current notes of ringers:

  • Using Intervals, you can apply notes using major, minor, or chromatic intervals. The order of ringer selections matters here. The existing note from the first-selected ringer serves as the root note. From there, the menu applies the subsequent interval-based notes, following the same order that you selected the ringers.
  • Using Shift, you can shift notes to a higher or lower pitch, in units of one semitone or one octave. This shift is relative to each ringer’s existing note, so it does not affect the note intervals between the selected ringers.
  • Using Grid, you can apply a specific note. Each leftward shift in the grid increases one octave, while each downward shift increases one semitone. You would typically use the grid with only one ringer selected, possibly preparing it to provide the root note for the Intervals menu.

The Selection sub-menu allows you to deselect all ringers, or to delete all selected ringers. To prevent accidental deletions, the “Delete” menu item requires you to hover over it for about two seconds.

Metronome Interface

Hit the gray ringer to start and stop the metronome. However, note that you cannot stop the metronome if any loops are recording or playing.

Loop Recorder Interface

There are several stages of the recording and playback process:

  • Hit the red ringer to begin the recording countdown. Recording always starts on the metronome’s first beat of the measure. If you hit the red ringer during the countdown, it stops, resets, and nothing is recorded.
  • Once the countdown ends, loop recording begins. During this time, the loop will record any ringer that you hit and any mute actions you perform.
  • While recording is in progress, hit the red ringer again to stop it. The recording’s duration will snap to the nearest metronome beat. Any stopping point beyond 25% of the current beat’s duration will round ahead to the next beat. This gives you some timing forgiveness when finishing your loop, and ensures that your loops always align exactly with the metronome’s beats.
  • After recording is complete, two green ringers replace the red ringer. Hit the “loop” ringer (on the left) to play the loop on endless repeat, or hit the “once” ringer (on the right) to only play it one time. While a green ringer is playing, hit it again to stop its playback. Loop playback always begins on the next metronome beat, so try to hit it a little early.

A loop is not a static audio recording — it is composed of individual hit and mute events, similar to MIDI. Because of this, your loops will follow the metronome’s current tempo, even when it changes during playback. Currently, the loop automatically quantizes events to the nearest quarter-beat (sixteenth-note), as this helps to clean-up imperfect recordings. Eventually, this may become both optional and configurable.

Eventually, it may be possible to individually save and load recorded loops.

App Interface

  • The Settings sub-menu provides sliders for selecting the VR pixel scale (50% to 200%), the latency between a “hit” and its audio (0 to 30ms), and the audio system’s read-buffer size (256, 512, or 1024 samples).
  • The Layouts menu contains buttons for saving the current custom layout, loading the latest custom layout, or loading the default layout. The saving button will be disabled until you make a change to the scene (move an item, record a new loop, etc.). The loading custom button is disabled until you have a save file available (either locally or on the Steam Cloud). The loading buttons use the “long hover” interaction (like the delete buttons) to ensure to prevent accidental selections.
  • Layout files are saved in the C:\Users\[USER_NAME]\AppData\LocalLow\Aesthetic Interactive\EXA The Infinite Instrument\user-[STEAM_USERID64] directory (don’t forget to change the [VALUES]). Currently, each save generates a new “snapshot” file, and a copy of the latest file is saved as layout-custom.json.
  • Currently, EXA only finds/loads the file named layout-custom.json. Until a more robust save/load interface is available in EXA, you might choose to manage your save files manually. You can safely rename any of the “layout-snapshot” files, and then copy+paste a file (and rename it to “layout-custom.json”) that you want to load in EXA.

More notes about the audio/visual settings:

  • VR Pixels: Ranges from 50% to 200%. The higher this value, the higher the resolution, so the sharper the graphics will be. This is most noticeable with text quality. It also impacts the quality of the screen captures/videos that you might make. Increasing this value too high can have a negative impact on audio performance.
  • Hit-to-audio Latency: Ranges from 0 to 30ms. This value represents a fixed-time “padding” between the exact hit time and the start of the audio playback. Lower values provide a faster response, but can cause the front/beginning portions of a hit’s audio to become “clipped”. This clipping is most noticeable with brief sounds, like drum hits.
  • Audio Buffer: Can be 256, 512, or 1024. The lower this value, the lower the audio latency will be. Lower latency means a faster hit-to-sound response, but it requires the computer to work harder. If you hear audio “clicks” in the middle of sounds, increase this setting.
  • For all these settings, lower values can achieve lower latency. Try starting at: 100%, 25ms, and 256 samples. Hit the “drum” ringers repeatedly to get a feel for the responsiveness with these settings. Try to reduce the “latency” setting toward zero, choosing a setting that provides near real-time responsiveness with minimal “clipping” of the sounds.


Swooping a “play” tool through a “curved piano” structure.

This need for this term is due to EXA’s complexity as an instrument. In the real world, a “piano structure” would generally be considered its own instrument. But with EXA, that structure may be just one of many, and there may be a vague boundary or gradual transition between other nearby structures. Some scenarios may not have any real structures, perhaps by randomly filling space with ringers of different sizes and shapes.

This concept also requires a separation of the physical form from the sound it produces. In the real world, a “guitar structure” has a form that determines its possible sounds — the physical properties of its strings and body dictate its range of sounds. With EXA, there is no such limitation — you could invent a “guitar structure” that sounds like a thousand laser guns.

Eventually, it may be possible to group ringers together into an explicit structure. Once grouped, you would be able to move and configure that structure as a single unit. You may also be able to save and load individual structures.


Eventually, it may be possible to save and load entire layouts.

App Settings

"SoundfontDirectories": [
"InitialNoteKey": 36

You can find the file within EXA’s installation directory. This is most likely located with your other Steam apps. Steam can help you find this directory:

  1. In your library’s list of games/software, right click on EXA: The Infinite Instrument, and select Properties from the menu that appears.
  2. In the dialog box that appears, go to the LOCAL FILES tab.
  3. Select the BROWSE LOCAL FILES… button.
  4. The folder opens, which should contain EXA.exe (and others).

From this main EXA folder, you’ll find the settings at: EXA_Data/StreamingAssets/AppSettings.json

You can open this file with Notepad or any other text editor.

AppSettings.json Properties

  • SoundfontDirectories: Each item in this list can point to a folder on your computer that contains Soundfont files. The default settings provide three placeholder lines (starting with “C:/Full/”) that you can replace.
  • InitialNoteKey: This is the MIDI key/note that the first ringer you draw will use. From there, each subsequent ringer gets a key/note based on the major scale. A value of “36” is the note of a low C.
Lining them up — grabbing a line-shaped ringer with each handle.

You made it to the end!

And, if any of you incredibly-creative folks have made videos of your EXA performances, please share them with the EXA community on Steam!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store