‘EXA: The Infinite Instrument’ User Guide
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.
EXA: The Infinite Instrument on Steam
Explore a new dimension of musical creativity with EXA, an incredibly versatile VR instrument. EXA's resonating musical…
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.
Can’t wait to jump into EXA? Let’s review the basics!
The EXA Environment
Standing in room-scale VR, you’ll have Vive or Oculus Touch controllers in your hands, which appear as cylinder-shaped handles within EXA. You can snap various types of tools onto both ends of these handles. Most tools can interact with EXA’s musical shapes, which are called ringers.
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”.
When you hit most tool types against a ringer, it produces a sound. The ringers are not solid, of course, so after you hit one, you can choose to recoil or just slice right through it. The ringers are multi-sided, so you might slice forward through one, then backward through the next.
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.
This video shows Zach Kinstner creating a simple song by combining several individually-recorded loops. The performance provides a quick and fun overview of the EXA instrument, demonstrating the use of several different features, tools, menus, and playing styles.
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!
Ringers are musical shapes that produce a sound when you hit them. They can be shaped like an ovals, rectangles, triangles, or straight lines. You can place a ringer into any position or rotation, and stretch it to many different sizes.
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.
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.
Ringer sounds are generated using Soundfont (SF2) audio packages, which can contain:
- 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.
EXA ships with hundreds of Soundfonts, including strings, drums, synths, horns, and more. These can all be found online, for free, with either public-domain or Creative-Commons-like licenses. For each Soundfont file, EXA provides a matching text file with the source URL and license details.
Starting from EXA’s installation directory (found with your other Steam apps), navigate to the EXA_Data/StreamingAssets/Soundfonts folder. Here, you’ll find the folder hierarchy that contains all of EXA’s standard Soundfont files.
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.
A handle is a cylinder-shaped object that follows a particular Vive or Oculus Touch controller. These VR controllers are typically held in your hands, providing position, rotation, and other input data.
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.
Tools provide several different ways to interact with EXA’s ringers and interfaces. Each tool type has a particular purpose or behavior, which are described in the sections below.
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”.
With a draw tool, you can draw a shape that immediately transforms into a new ringer. The ringer does its best to match the shape, size, and position of your drawing.
Pulling the VR controller’s trigger engages the drawing action. You cannot attach a draw tool to the bottom part of a handle.
With a grab tool, you can grab any item (a ringer, menu interface, or tool group) to move it. You can resize ringers using a two-handed grab.
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.
With a play tool, you can hit ringers and affect their sounds. Play tools are available in multiple lengths.
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.
With a mute tool, you can control the volume and duration of a ringer’s sound. Mute tools are available in multiple lengths. There are two ways to use a 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.
You can’t do anything with a none tool. You can use it to effectively “remove” whatever tool was previously on your handle.
To use a tool, you must first snap it onto a handle. The base of each tool matches the oval shape of a handle’s connection points, and they snap together like magnets when they are near to each other.
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.
EXA provides a few panel-like menu interfaces for controlling ringer configurations, making adjustments, and triggering events. Each interface uses similar interaction styles, but performs its own specific set of tasks, which is all described in the sections below.
EXA’s menu interfaces are built with Hover UI Kit. The buttons and sliders in these interfaces use simple “hover” selections: move the cursor near to an item and hold it there for a moment. A tool’s glowing white sphere (if it has one) serves as the cursor for these interface interactions.
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.
The Ringers menu interface allows you to change the sound, note, color, and selection state of selected ringers. These options only become available when one or more ringer is selected. A subtle curved line travels between the menu and each selected ringer, which visually indicates the active connection between them.
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.
The Metronome menu interface allows you to mute the metronome’s sound, change its tempo, and set the number of beats per measure.
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
The Loop Recorder menu interface currently only supports a “delete loop” action. Once recording begins, it also shows a diagram of the loop’s notes. Eventually, you may have a more complex menu (like Ringers) for controlling the loop’s volume, pitch, sound, quantization, and so on.
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.
The App interface currently provides two sections, one for configuring audio/visual settings, and the other for saving/loading layouts. As of build v1.0.2, these menus are in an intermediate state, expect more features soon.
- 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.
When you move many ringers into a cohesive group or pattern, it forms a musical structure. A collection of ringers that form a “curved piano” or a “drum kit” would be an example of a 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.
Everything within a particular EXA space or environment — and the way all those things are arranged in that space — is called the layout. The default EXA layout contains four structures near the corners of the space, with the menus and tools positioned in the center.
Eventually, it may be possible to save and load entire layouts.
EXA uses a configuration file called AppSettings.json, which provides several customizable properties. Here’s what it contains:
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:
- In your library’s list of games/software, right click on EXA: The Infinite Instrument, and select Properties from the menu that appears.
- In the dialog box that appears, go to the LOCAL FILES tab.
- Select the BROWSE LOCAL FILES… button.
- 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.
Here’s what the various properties do:
- 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.
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!