Pianos, drums, guitars, strings, synths... perform with any sound, in any style, upon musical structures of your own design. From experimental compositions to live-looping performances, EXA is a must-try VR music experience.
All Reviews:
Positive (16) - 93% of the 16 user reviews for this game are positive.
Release Date:
Mar 31, 2017

Sign in to add this item to your wishlist, follow it, or mark it as not interested

Early Access Game

Get instant access and start playing; get involved with this game as it develops.

Note: This Early Access game is not complete and may or may not change further. If you are not excited to play this game in its current state, then you should wait to see if the game progresses further in development. Learn more

What the developers have to say:

Why Early Access?

“EXA is an ambitious VR app that combines several new VR concepts, interfaces, and interactions. Even if this project had a dozens of people working on it (instead of just one!), this would take a significant amount of time and consideration. There are no "best practices" established for this type of VR work -- many of the challenges and decisions involved venture into uncharted territory.

With all of these new concepts and decisions involved, EXA needs extensive user testing and validation. This requires real users, with real goals for creating music, and a wide variety of opinions and skill levels. Steam's Early Access community is the perfect way to connect with those users, and get valuable feedback about the app.

Early Access users can help shape and refine EXA into a truly useful musical tool, ensuring that it has reliable interactions, understandable interfaces, and a fantastic VR user experience.

To review EXA's progress prior to the Early Access release, check out these DevUp videos on YouTube.

Approximately how long will this game be in Early Access?

“The first full-version release of EXA should be ready by the fall of 2017.”

How is the full version planned to differ from the Early Access version?

“The first full-version release will hopefully include:
  • the ability to group/subgroup the ringers (and manipulate them as a unit)
  • more controls/actions for the metronome and recorded loops
  • saving/loading capabilities via Steam Cloud (for scene layouts, specific ringer groups or configurations, recorded loops, etc.)
  • visual improvements (including the ringers, handles, menus, tools, etc.)
  • some type of backdrop/environment (possibly with dynamic reactions to the music)
  • performance improvements (for both graphics and audio processing/playback)

Additional features, which may not be part of the first full-version release, may include:
  • tools for aligning ringers to a grid
  • adding "switches" for rapidly changing ringer notes/pitches/sounds (i.e. like changing a guitar's active chord formation, see my "VR Guitar" on YouTube)
  • support for Steam stats and achievements
  • support for Steam workshop (for sharing custom instruments, recordings, etc. with the community)

Beyond this, there are many potential possibilities for EXA. There's really no limit to how many new tools and features an "infinite instrument" might demand!”

What is the current state of the Early Access version?

“At the end of February 2017, the app already contained a significant amount of functionality, including:

  • drawing-to-ringer functionality (with transition animations)
  • striking the ringers (with dynamic audio/visual reactions)
  • the magnetic-connection tool system
  • grabbable/movable everything
  • resizable ringers
  • full Soundfont engine
  • proximity- and stike-based muting
  • metronome
  • multi-track loop recording system

...with all of the above mostly working well together, and with a relatively cohesive visual appearance.”

Will the game be priced differently during and after Early Access?

“The Early Access app will gradually increase in price as it becomes more complete. This may include an increase between the last Early Access version and the first fully-featured version.”

How are you planning on involving the Community in your development process?

“User feedback will be vital for ensuring that everything in EXA works well, sounds beautiful, makes sense, and feels great. This feedback can come in many forms -- reports of broken features, bugs, confusing interfaces/interactions, feature ideas, and general thoughts on the app's user experience, and so on.

Video/GIF feedback from users can also be extremely helpful. The three-dimensional nature of the scene, its interactions, and input devices can make it very difficult to accurately describe issues or features with words alone. Videos of app usage can often communicate these issues far more clearly, and demonstrate certain subtleties that the user might miss.

Whenever possible, reports from the Early Access users will flow back into the design and development process. The EXA project is committed to providing an excellent VR user experience, and feedback from Early Access users will be crucial for achieving that goal.”
Read more
Notice: Requires a virtual reality headset. See the VR Support section for more info.

Buy EXA: The Infinite Instrument


Recent updates View all (16)

November 6

v1.2.3: Motion Capture, Music Viz, Cathedral

Get ready to step into an immense, music-visualizing environment, where each ringer hit creates new colors that slowly spiral into the sky.

And to better enjoy the music-viz view, you can now sit back and watch “robot” avatars perform the music from loops! To get started watching a “show” right away, load up one of the new layouts provided by EXA (via your “Load Layouts” menu). You can record your own avatar performances using the loop recorder, which now captures your motions at the same time as it records your musical events.

This release includes an experimental version of EXA that runs on a Mac, along with dozens of other improvements, optimizations, and fixes.

Thank you to the EXA community for the feedback and ideas! Please watch/share the new update video below, and read through this page to learn more.


  • When you select the new “Motions” checkbox on the loop recorder, it will capture your headset and handle movements while you perform the loop. When both “Ringers” and “Motions” are selected, a loop must contain at least one ringer hit. When only “Motions” is selected, the loop will record all motions that occur (and no ringer events).

  • A robot-looking avatar appears whenever you start playback of a loop with “Motions” data. This avatar follows the motions that were used to perform the notes in the loop. The avatar’s tools appear to hit the ringers, generating the same tool/cursor tails (the glowing streaks) and lit-up ringers that occur during live performance.

  • To achieve smooth motion when the loop “rolls over” (when playback continues from the end to the start), the avatar’s motions are blended. During the last beat (or after the last note in the loop, whichever is last), the avatar smooths between its current position/velocity and the position/velocity needed at the start of the loop. This smoothing also does its best to handle scenarios where beats are added/removed (using the “Loops > Duration” menu) from the start/end of a loop.

  • To support layout adjustments, the avatar will follow the associated ringers (the ones that are touched in the loop recording) as you move those ringers around. For best results, move the entire group of ringers. Moving individual ringers also works – the avatar’s handle will smoothly adjust itself to hit the moved ringer, and its head will slide accordingly.

  • You can disable the avatar display via the “Loops > Motions” menu, which provides checkboxes for the headset and both handles. Currently, the ringers in the loop will still light up, even if the associated avatar handle is not displayed.

  • As described above, the avatar motions are connected to the ringer positions. Deleting a ringer that was used in the loop will not affect the loop’s audio playback, but this may cause the avatar to move in an undesirable way. Notably, this prevents the avatar from “following” the position of that ringer, since it is no longer present.

  • The avatar motion also updates to match a loop’s quantization level and the current metronome tempo.

  • The motion capture also watches for tool changes, remembering the tools used to start the loop, as well as any tools that you change during the recording. Note that you can even switch to the “camera” tool (by opening the “Layout > Save > Add Photo” menu) during motion recording.

  • The avatar headset features some music-viz elements that glow and change color based on the notes that the avatar is currently playing.

  • The avatar quickly scales in/out upon the start/stop of loop playback. The avatar headset also scales out when your own VR headset approaches it, preventing it from occluding your view; it reappears once these two objects are further apart.

  • EXA now features a new space/environment called the “cathedral”, shaped by simple posts that form walls around the layout area and a roofline that covers it. Large, decorative diamond shapes float below the peaks of the cathedral.

  • Immense walls that fill with music visualizations surrounding the layout area and the entire cathedral. These walls are shaped like a tall, twisted cylinder. With each ringer hit, the music visualizations start at ground-level and spiral up into the sky. A reflective floor shows the entire visualization in reverse, as if it were stretching far below the layout area.

  • To avoid excess visual conflict with the layout and ringers, each note in the music visualizer begins with a darkened and partially-desaturated color. As that note rises up, it gets brighter and more vivid, then fades to black as it reaches the very top.

  • The music visualizer picks a note’s horizontal position based upon a ringer’s note (the selected pitch/key). The color of this note is based on the color of the ringer, and its brightness is based on the volume of the audio that the ringer is currently producing.

  • The music visualization can be disabled or adjusted via the “App > Visuals” menu. The “Show Music Viz” checkbox sets the visibility of the entire music visualization. The “Blur Music Viz” checkbox specifies whether the colors in the visualization should be blurred slightly, or if they should stay sharply in their original “lane”.

  • In this new environment, the four main lights have been moved upwards and outwards from the layout center. The white spheres that used to represent these light sources are now removed.

  • Added more segments and smoothing to the tool/cursor tails. Made them thinner and shorter.

  • Added support for an arbitrary number of tool/cursor tails for use with the motion-capture playback.

  • Improved the brightness/color of the various ringer and menu highlight states (grabbed, selected, hovered, nearest-to-cursor).

  • Reduced the proximity radius of loops within a section by 50% (from 4cm to 2cm) to avoid accidental grabbing/moving of loops.

  • Updated the menu item proximity/hover distance to match up with the menu's grab distance.

  • Updated the menu summoner to use the nearest position to camera (rather than center point) so the menu doesn't appear far away on large objects (like a long loop).

  • Updated the nearest-on-edge calculation to handle long, rectangular objects better (notably, large loops and sections).

  • Added example layouts to the EXA package, which automatically install in your “Layouts” directory. You can find and load these via the “Layouts > Load” menu. These example layouts often come from the EXA development update and music performance videos. Just start the section or loops in the layout, then enjoy the show!

  • Updated the camera tool (in the “Save Layout” menu) to save each photo in your “Documents/EXA VR/user-[SteamID]/Photos” directory.

  • Updated the loading/saving of layout files to occur as a “background” process, so large files won’t stall the framerate.

  • Improved the “building” process, upon loading a new layout, to distribute processing more evenly. Notably, this avoids stalled framerates when building large, motion-containing loops.

  • Improved performance throughout the app, such as: Simplified ringers when they are not vibrating. Reduced ringer vibration quality when you are far away. Prevented all work on loop/section display when the panel is facing away. Adjusted mesh materials to support dynamic batching (which wasn’t working as expected in EXA’s “deferred rendering” mode). Avoided unnecessary processing on buttons and sizes/positions within the menu panels.

  • Prevented the recorded bow/prox events from being quantized in a loop. These tools don’t create exact start/hit times, so quantization typically causes the notes to shift in an undesirable way.

  • Disabled the metronome's tempo slider while a loop is counting down or recording.

  • Added a 10-minute limit on loop recording. The additional data collected by bow/prox tools and motion captures can build up quickly, this time limit prevents the creation of huge loops that might crash the app.

  • Added a notification for an “AppSettings.json” loading failure.

  • Added a notification when files cannot be moved to EXA’s new 'save' directory.

  • Removed the "pretty" JSON formatting from the saved layout files to reduce the file sizes by half (or more).

  • Implemented experimental Mac port of the app. Please contact Zach if you’re interested in testing it out.

  • Fixed issue causing some "Sounds" menu buttons to be highlighted (in yellow text) incorrectly when they have similar names to the ones in the active sound path.

  • Fixed issue with cloning by disabling the "Delete" and "Load Layout" buttons during the clone process.

  • Fixed issue with section cloning by (while the cloning process is active) disabling grab on its contained loops and preventing new loops being added to the section.

  • Fixed issue causing sustained notes (from bow/prox tools) in a loop to never stop upon deleting the currently-playing loop.

  • Fixed issue causing the bottom-of-handle tool/cursors to generate highlights as if it were the "nearest grab cursor".

  • Fixed issue causing a section positioned inside a group to be impossible to grab.

  • Fixed (potentially) an issue causing a new loop recorder to not appear after completing a recording. Added a failsafe creation of a new loop recorder if one is not present during the span of two seconds.

  • Fixed issue causing recorded proximity/bow notes to occasionally playback incorrectly within a loop, typically with a "volume burst" at the start (instead of a smooth fade-in).

  • Fixed issue causing odd audio distortions (a subtle flanger-like effect) at the beginning of notes when the app first starts or when changing streams.

  • Fixed issue causing the motion recording to fail when using Steam's mixed-reality mode. This mode causes a additional, incomplete "Steam controller manager" to be added to the scene, and the motion recording system was trying to use it.

  • Fixed issue causing all the menu interface corners/borders (which appear for proximity/selection state) to be overdrawn (regardless of depth) by the document's image material.

  • Added a new error handler while loading a Soundfont file, so that a failure on loading/parsing a particular sample won't prevent the rest of the file from loading. If you notice a disabled (semi-transparent) ringer using a note+sample combination that should be present in the Soundfont file, please let Zach know.
4 comments Read more

September 29

v1.2.2: Clone Items, Export Loops to WAV, Split Audio Outputs

Building and creating in EXA just got easier with the new “Clone” feature. You can now create exact duplicates of ringers, loops, sections, documents, and groups – just select the ones you want to copy, and then use the “Clone” menu button. As a first test, you could clone the “curved piano” group twice, and use the new groups to create a full “wrap-around piano”!

For players eager to get their EXA creations into their favorite DAW or audio tools, there is now an “Export” feature that converts recorded loops into WAV files. Just select all the loops you want to export, use the “Export” menu button, and then collect the WAV files from within your “Documents/EXA-VR/” folder when you’re ready.

You now have the ability to switch between different audio output devices from within EXA. Even better, you can choose to route EXA’s “non-musical” sounds to a different device. For example, you might send your performance to speakers for the audience, while sending the metronome-ticks only to your headphones.

This release also includes a “one-sided ringer” mode, a “Notifications” panel, and several other improvements and fixes.

Thank you to the EXA community for the continuous feedback and ideas! Please watch/share the new DevUp video and read through the full details below.



  • The new “Clone” action creates duplicates of ringers, loops, sections, documents, and groups. From any item-specific menu (like “Ringers” or “Loops”), use the “Selection > Clone” button to create a copy of each selected item.

  • To clone multiple item types at the same time, first put those items into a group (select the items, then use the “Layouts > Group Items” menu). Then, you can select and clone the entire group.

  • When multiple (non-group) items are cloned at the same time (for example, several ringers), the resulting clones are placed into a group. This allows you to quickly and easily move all the clones as a unit (without disrupting their positions relative to each other) to the desired position in the layout.

  • The position of the cloned items is always roughly 15cm from their source position, shifted in a directly that is based on your current head position and rotation. The goal is to create enough separation between the original items and the clones, while also placing the cloned items in a convenient position for the player.

  • To avoid potentially severe performance issues during the cloning process, the creation of clones is spread out over time. Also, this clone functionality now makes it fast and easy to create very large/complex layouts – please be aware that this may strain the overall app performance.

  • The new “Export” action creates a WAV audio file from a recorded loop. Use the “Loops > Selection > Export Audio” menu to export one audio file for each selected loop. This process can take a moment, so the menu displays a progress bar until the export is complete.

  • The exported loop files are saved to the “Documents/EXA-VR/user-[SteamID]/Exports” directory.

  • Because individual loops don’t have names, the exported audio files use the following naming convention: “[Timestamp].loop[LoopID].b[LoopBeatLength].bpm[MetronomeBeatsPerMinute].wav”.

  • The exported audio does not always stop at the last beat of the loop. Instead, the audio file continues until all notes have finished creating sound (i.e. they have faded out completely).

  • The “Application > Audio” menu now includes two buttons for setting “Ringer” and “Metronome” audio outputs. The “Ringer” output receives all musical sounds (from ringers, loops, and sections). The “Metronome” output receives all other sounds (from the metronome, tool snaps, menu selections, and so on).

  • A common use case for this “split” audio output is for the player to receive the metronome sounds via headphones, while the musical sounds go to the speakers (for the audience or screen-capture tool). However, it is perfectly fine to pick the same device for both types of audio output.

  • Within each “Audio Output” menu, there are two presets (“System Default” and “VR Headphones”) and also a “Custom” option. The “System Default” preset is selected by default for both audio outputs.

  • The “System Default” preset checks for the default output device at the OS level, but the player’s VR settings can override this. For example, if the Oculus audio setting sends audio to the built-in Oculus headphones (this is the default option), then EXA will choose the Oculus headphones as the system default. See this article for instructions on changing the Oculus/Vive audio settings.

  • The “VR Headphones” preset checks for devices (by name) that represent the Vive or Oculus headphones, or otherwise anything with “headphone” in the device name. Depending on your VR settings, this preset may be the same as the “System Default” preset.

  • The “Custom” option opens a larger menu. This menu shows a row of audio drivers, and a list of available devices for the selected driver. EXA silently tests each device, and disables that option (with an error message on the button) if it is not available.

  • Your audio output selections are stored (across app sessions) by the audio device name. If that device is not available when you start EXA, the output will automatically switch back to the “System Default” preset.

  • The EXA save location has moved from an obscure directory provided by Unity to your main “Documents” directory. EXA files are now stored within “Documents/EXA-VR/”, with a player-specific subfolder called “user-[SteamID]” (where “[SteamID]” is a several-digit number).

  • Within “Documents/EXA-VR/user-[SteamID]/”, there are four folders: “Documents”, “Exports”, “Layouts”, and “Soundfonts”. Your previously-saved layouts have all moved to the “Layouts” folder.

  • The “Documents” and “Soundfonts” folders are now configured (via “AppSettings.json”) for use as dropping zones for your custom documents (images and text files) and Soundfonts (SF2 files). You can add subfolders here (recommended) to organize your custom files.

  • The subfolder names can match/overlap with the EXA’s existing ones – for example, placing SF2 files in a “Soundfonts/Strings/Guitars/” subfolder organize them with the other guitars in EXA’s “Sounds” menu hierarchy.

  • EXA now communicates various updates, events, messages, and errors via the “Notifications” panel. There are four types of messages: Info (blue), Success (green), Warning (yellow), and Error (red). Messages appear in chronological order, with the oldest at the top.

  • Whenever a new notification occurs, the panel pops-up (or slides) into your field of view -- much like the other menus do when you make a new item selection. You can grab and move the “Notifications” panel just like any other menu.

  • Use the “Clear” button on each notification message to remove it from the list. The entire “Notifications” panel fades out when the last notification is removed.

  • A “version update” notification will appear the first time you load a new version of EXA. It shows a quick summary of everything that’s new, and won’t appear again. You can always get the full details of a new version in these build notes and their related DevUp video!

  • Added an optional “one-sided ringer” mode, toggled via the “Application > Interaction > One-Sided Ringers” checkbox. This affects all “flat” ringers (rectangle, triangle, ellipse), and only when using the “strike” tool or striking with the “mute” tool. The strike-able side of a ringer is determined by your head position at the time of the attempted strike.

  • Updated the items and menus to provide grab-related visual feedback (border and corner highlights, etc.) for any tool type when the “grip-to-grab” setting is enabled (it is enabled by default). This visual feedback is the same as you get with the “grab” tool. This feedback makes it easier to know when an item is in grabbing range for the tool, and (if many items are nearby) which exact item will become grabbed.

  • Removed EXA support for saving layouts to the Steam Cloud. The average size of a layout file is growing due to the ability to create more complex loops and layouts, and is frequently more than 1MB. Given the maximum 10MB user space available in the Steam Cloud, the space is quickly consumed.

  • Improved the Oculus Touch haptic feedback for the “bow” and “prox” tools.

  • Fixed issue where tiny drawings stay in “drawing” state (instead of becoming ringers) and thus were unable to be selected and deleted.

  • Updated newly-drawn ringers to expand to the minimum ringer size.

  • Fixed issue that occurs when selecting and deleting a ringer immediately after drawing it. To avoid this, ringers now wait a moment (until their brief “entry” animation completes) to become grabbable/selectable.

  • Fixed issue causing an item menu to reappear if you grab an item, delete the item while it is still grabbed, and then release the grab.

  • Fixed an issue caused by trying to match/navigate to missing Soundfont files in the "Sounds" menu.

  • Fixed an issue causing the loading of a layout to fail in certain conditions. This was related to conflicts between item IDs within the layout. These conflicts are now resolved without failures, and future conflicts should be avoided.

  • Fixed an issue with the “Group Items” menu’s corner indicators, which allowed them to grow to a comical size in a particular scenario.

  • Fixed an issue that allowed EXA to start with a “system default” audio output device that is invalid or unacceptable, causing the app to produce no audio. See the “Audio Output” section above for details.

  • Fixed an issue that could break the display of loops that were saved in the old (pre-v1.2.1) layout file format.

  • Fixed an issue causing multiple documents within a layout to unload/hide each other’s page contents.

  • Fixed issue causing the loop chart to provide enough width for notes beyond the loop's endpoint.

  • Fixed issue causing incorrect loop playhead positions if the loop duration is changed in a way that leaves no playable notes.

  • Fixed issue causing the "nearest item to cursor" highlights between two nearby groups to work inconsistently.

  • Fixed issues caused when an audio device has a null "Name" string.

  • Fixed various issues that occur when no audio devices are available.

  • Improved the handling of scenarios where the audio system fails to initialize properly.
4 comments Read more
See all discussions

Report bugs and leave feedback for this game on the discussion boards

About This Game

EXA is a musical instrument unlike any other. Crafted exclusively for virtual reality, EXA's vision is to bring the feeling and expressiveness of playing real-world musical instruments into an incredibly versatile virtual space -- offering an entirely new dimension of musical creativity and performance.

The infinite instrument is here... what will you create?


Musical shapes, called “ringers”, are the main building-block for creating musical structures within EXA. From the tip of the drawing tool, ringers are drawn into existence, springing into the form of ellipses, rectangles, triangles, or lines. Of these shapes, lines behave like guitar strings, while the others behave like two-sided drums.


When struck, a ringer bursts into sound, glowing and resonating to its tones. By sampling audio from Soundfont (SF2) packages, which are often freely-available online, ringers can produce any imaginable sound. EXA ships with hundreds of Soundfonts, from strings to drums to synths, and allows users to import their own.


EXA uses a tool-based system for drawing, selecting, striking, muting, and more. Tools snap onto the magnetic ends of EXA’s 3D-controller-based handles, and often utilize the controller’s inputs to perform actions.


Recording and replaying loops takes EXA musical performances to the next level, allowing the musician to build up many layers of tones and rhythms. Loops react to tempo changes in real-time, and can be adjusted after recording is complete. Starting and stopping a loop is as simple as striking a ringer, extending EXA’s musical possibilities even further.

System Requirements

    • OS: Windows 7 SP1, Windows 8.1 or later, Windows 10
    • Processor: CPU: Intel i5-4590, AMD FX 8350 equivalent or better
    • Memory: 4 GB RAM
    • Graphics: Nvidia GeForce GTX 970, AMD Radeon R9 290 equivalent or better
    • Storage: 1 GB available space
    • Sound Card: Required
    • Additional Notes: Disable audio-routing apps (like VoiceMeeter) to avoid hit-to-sound latency issues (details: http://steamcommunity.com/app/606920/discussions/0/1327844097115617013 ).
Customer reviews Learn More
High Volume of Reviews Detected:
Exclude  or  View Only
Review Type

Purchase Type


Date Range
To view reviews within a date range, please click and drag a selection on a graph above or click on a specific bar.

Show graph

Display As:
Show graph
Hide graph
There are no more reviews that match the filters set above
Adjust the filters above to see other reviews
Loading reviews...