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 (21) - 95% of the 21 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 one of the following virtual reality headsets: HTC Vive or Oculus Rift. See the VR Support section for more info.

Buy EXA: The Infinite Instrument


Recent updates View all (18)

January 18

v1.3.0: EXA Remix, Recorder Options, Loop Duration Handles

Announcing “EXA Remix” -- a new way to load, play, and customize EXA performances in other apps! Any app built with Unity can import the “EXA Remix” tool to gain these musical-performance superpowers. Imagine seeing your performances on a stage in a social app, playing in a room of your VR “home” app, or remixed into an interactive, audio-reactive, music-video world… it’s all possible now! Collaboration talks with a few well-known VR apps are already underway – please share your ideas and EXA-powered-app wishlist on the discussion boards.

Also, the loop-recording process is better than ever. You can now set options directly on the recorder interface: the recording mode, initial quantization level, and the ability to automatically stop recording after a particular duration. While recording, a new “Cancel” button lets you reset the recorder interface without performing the old stop+delete+move steps.

This release also includes an improved loop-duration menu (with on-loop trimming handles), a new 200% maximum on the loop/section “Volume” sliders, a new 64-sound maximum on the “Max Voices” slider, better contrast between menus and the section panel, improved performance via parallel processing, and several other fixes and improvements.

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.



  • With the new “EXA Remix” tool, any Unity app (VR or not) can load, play, and customize EXA performances. Developers and artists can “remix” the entire performance – the appearance of the ringers and avatars, the position and scale of all the ringers, create audio-reactive environments, apply audio effects, play multiple performances simultaneously, and more!

  • Want to learn more? Check out the “EXA Remix” documentation, and contact Zach (zach at aesthetic interactive dot com) to get started.

  • An internal prerequisite for building “EXA Remix” was performing a major refactor/restructure to the EXA code. In general, this process created a much cleaner separation between EXA’s logic and its display. For example, all the rules and functionality for playing a loop are now separated from the loop’s visible interface and toggle buttons. This refactor should not impact the app in any visible way, but it’s always possible that (despite lots of testing) it created new, unknown bugs.

  • The loop recorder interface now has a menu with various recording options. This menu opens and closes directly from the recorder interface, by selecting the large button at the right side. These menu options are reset at the start of each session, but are maintained across recordings within a session. They can be changed at any time before a recording starts.

  • The menu’s first option specifies whether the recording should capture Ringer events, Motion events, or both. This option has been present in recent releases, but has now moved within this new recorder menu. By default, both types of events are included in the recording.

  • The next option specifies the quantization level of the recording. This option does not affect the raw recording, only the timing of the notes during playback. The loop’s quantization level can always be changed later via the “Loops > Levels > Quantize” slider. This option was previously placed in the “Application > Audio” menu, as the “Auto-Loop Quantize” slider, but is now moved to this recorder menu. The default value is “None”.

  • The last option specifies a pre-determined recording duration. It can automatically stop the recording after 1, 2, 4, or 8 measures. Otherwise, the “None” option allows the player to stop the recording at any time (i.e. the original recorder behavior). The default value is “None”.

  • While recording, a new “Cancel” button appears at the far left side of the recorder interface. This button uses a long-hover interaction (just like a “Delete” button). At any point during recording, using the cancel button will erase the recorded events and reset the recording interface to its original state. This “Cancel” action is perfect for the “retry recording” usage scenario, as it bypasses all the previous tedious steps (stop the recording + delete the newly-formed loop + move the recording interface back to its former position).

  • Updated the loop/section volume sliders to go up to 200%. If both the loop and its containing section are set to 200%, this leads to a maximum volume of 400%. As the volume increases above 100%, the notes in a loop’s chart fade to near-white color.

  • Added an always-on audio compressor that prevents the overall audio signal from exceeding 100% volume in most scenarios. This affects both in-app and exported audio.

  • Increased the “Application > Audio > Max Voices” slider’s top threshold from 48 to 64. This allows more sounds to play simultaneously. Increasing this value requires more time for audio processing, and it reduces the number/frequency of sound-truncation that must occur to keep the audio system within the “Max Voices” threshold.

  • Increased the “fade-out” duration (roughly 4x) for sounds that get truncated by the “Max Voices” threshold. This should make the truncations slightly less noticeable (note: the quietest, lowest-priority sounds get truncated first), and reduces the potential for audio pops/cracks that can occur when stopping playback too abruptly.

  • Updated the notes created by the “bow” and “prox” tools to have higher priority with regard to the “Max Voices” threshold. These notes, whether performed live or within a loop, are now much less likely to be truncated (vs. notes from the “strike” tool) when there to too many simultaneous sounds.

  • Redesigned the loop duration menu. The menu now has a toggle at the top for “trim” and “grow” modes. The “start” and “end” areas are side-by-side again, but no longer need to use positive and negative numbers. You can change these “start” and “end” values via up/down buttons, or select its large number button to open a new keypad interface. In “trim” mode, you can also grab/drag the new “handles” (placed directly on the loop’s chart) to set the start and end beats.

  • Darkened the backgrounds of the loop chart and the section rows. This creates a bit of contrast when menu interfaces overlap the section panel.

  • Implemented a new method of parallel processing that does not generate memory allocations (i.e. GC alloc) during each frame. This means that the app now requires no extra memory cleanups (i.e. garbage collector executions), thus gaining the performance advantages of parallel processing, while avoiding occasional framerate hits/stutters caused by automatic memory cleanups.

  • Upgraded to Unity 2017.3 (from Unity 5.6).

  • Upgraded to SteamVR 1.2.3 (from SteamVR 1.2.1).

  • Fixed issue causing the early cutoff of a loop’s exported audio. This was a regression issue from the recent section export feature, caused by the loop sending "note-off" events prematurely during the export process.

  • Fixed issue causing a section’s “play” ringer to have areas that cannot be struck, occurring in scenarios where the section has grown very tall. This was caused by EXA’s feature that disables interface elements when they are outside your field-of-view. In the failure scenario, the tall ringer’s sample points (its corners and exact center) were all out of view, while some other portion of the ringer is visible. The new solution no longer checks the ringer itself, but instead checks whether each new “ringer strike” position is in view.

  • Fixed issue causing layout-saving and loop-cloning to fail, occurring in scenarios (after loading a layout) when a Soundfont file required by a loop is either missing or failed to load.

  • Fixed issue with in-section loop playback, where dragging the loop left/right would sometimes cause the loop to capture dozens (or hundreds) of in-the-past note events (i.e. everything from the first loop beat to the current one). These were then sent to the audio system, which occasionally caused issues due to the excessive number of events to process all at once.

  • Fixed issue where a loop (that was recorded in the current session) could restart its recording process after restarting the metronome, caused by the reset of the metronome’s beat combined with the loop failing to reset an internal “start recording at beat” value. This issue lead to some strange outcomes, including the presence of multiple recording interfaces.

  • Fixed issue where the last note (from a bow/prox tool) of an in-section loop could ring out indefinitely in certain scenarios.

  • Fixed issue causing certain Soundfonts (with long decay times) to ring for an excessive amount of time after bowing a ringer. In these scenarios, the audio system now uses the default "strike" tool decay time.

  • Fixed issue where the avatar moves incorrectly, occurring in scenarios where the loop duration has been trimmed and/or the loop playback goes directly from “once” to “looped” (or the opposite) without first stopping the loop.

  • Fixed issue where the avatar headset starts in the incorrect position, then gradually slides to its expected position, occurring in scenarios where the cached avatar is being reused in a different loop.

  • Fixed issue causing the loop-chart’s “beat number” labels to appear incorrectly, including scenarios where only the first “16” label appears, and others where the labels did not disappear after trimming the loop.

  • Fixed issue causing the "loop volume" slider to always show the "(various)" label when adjusting the volume of multiple loops.

  • Fixed issue causing a tool “cursor tail” to flash incorrectly when switching tool types, occurring in scenarios after a “mute” tool has been used to strike an interface ringer (metronome, loop, section).

  • Fixed issue causing the lights within a triangle-shaped ringer to be positioned incorrectly.

  • Fixed issue with the motion-avatar playback when one of its related ringers gets deleted. This was a regression issue related to the refactoring in v1.3.0.

  • Added support for mixed-reality views using MixCast (currently for Vive only). The MixCast icon appears only if you have MixCast Studio installed and have a camera other than "None" selected. Use Ctrl+Shift+L to hide the gray MixCast icon.
  • Fixed issues with the avatar handles/tools that would occur when switching between Vive- and Oculus-created layouts.
8 comments Read more

November 29, 2017

v1.2.4: Slide Locomotion, Smooth Camera, Section Audio Export

If you’ve ever wanted a different way to move around an EXA layout, the new “slide locomotion” mode might be for you! Rather than the jump+turn of EXA’s standard teleportation, the new sliding feature allows you to drift and turn smoothly. This is especially helpful for seated players, but is also very useful for gliding around smoothly while recording/streaming your EXA session.

And to make your recording/streaming process even better, you can now toggle a “smooth camera” mode (with the “C” key). This camera improves the quality of your monitor’s video output (not the headset’s output), with smoothed motions and brighter colors. Note that this camera mode has a performance cost, so it’s best to use it while recording or performing for an audience.

You can now export entire sections to WAV audio files. Previously, audio export was limited to individual loops. See the notes below for details about the duration of a section’s exported audio file.

This release also includes several performance optimizations, a more efficient “loop duration” menu, a new option for automatic loop quantization, and many 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.




Twitter: Release Announcement / "Circle Motion" Music Video
Reddit: Release Announcement / "Circle Motion" Music Video

  • To enable the “Slide Locomotion” feature, use the “Application > Interaction > Slide Locomotion” checkbox. When “slide” is enabled, the standard teleportation system becomes disabled -- only one of these modes can be active at a time.

  • Once slide locomotion mode is enabled, trigger the locomotion mode by holding down the same controller button that you use for standard teleportation. The handle graphics in EXA show an icon on the correct button to remind you. For the Vive controllers, press the top quarter of either thumbpad. For Oculus Touch, press either upper button (Y or B).

  • To slide, press the controller’s locomotion/teleportation button. The initial handle position, upon button press, becomes the center point of the slide interaction. Keeping the button held down, move the controller left/right/forward/back to begin sliding your position. To turn, keep the handle laying mostly flat (i.e. pointing ahead of you), and twist it (like a doorknob or steering wheel) to the left or right.

  • Increase the sliding speed by moving the handle further from the center point of the slide interaction. Increase the turning speed by twisting the handle further from its baseline rotation.

  • For greater comfort, the headset displays a “tunnel vision” effect while turning with the slide locomotion feature. Nevertheless, this feature may still be uncomfortable for motion-sensitive players – if so, the standard teleportation system is recommended.

  • The slide interaction interface is currently two simple meters. The twist meter appears immediately, and fills up based on the turn speed (left or right). The movement meter grows larger as the handle moves away from the center, fills up based on the motion speed, and its arrow shape points in the direction of motion.

  • When enabled, the new “smooth camera” affects the visual output that appears on your desktop/monitor -- it does not change the visual output within the headset.

  • Toggle between the “original camera” and “smooth camera” using the “C” key on the keyboard.

  • The smooth camera follows the headset very closely, introducing a slight lag in order to smooth out the positional/rotational jitter of the headset.

  • The smooth camera has a slightly larger field-of-view and adds some visual filters to improve the quality of display.

  • Important note: the smooth camera mode does have an impact on EXA’s overall performance, as it requires the app to perform additional rendering. You can reduce this performance impact by reducing the “Application > Visual > VR Pixels” slider value, which causes less rendering work to be done for your headset’s display.

  • In general, use the “smooth camera” while recording videos, streaming your session, or playing for an audience. Otherwise, use the original camera mode to avoid unnecessary performance burdens.

  • Added the ability to export an entire section (a collection of organized loops) to a WAV audio file.

  • Exporting a section is just like exporting a loop. Use the “Sections > Selection > Export Audio” menu to begin the export process. A progress bar fills to 100% as the export process completes.

  • Because a section contains loops that can repeat forever, the section exporter must pick a maximum duration. The exporter calculates a duration that includes all repetitions of non-infinite loops and at least two repetitions of any infinite loop. The best way to extend the duration of your section export is to apply non-infinite repetition to at least one of the section’s loops (via the “Loops > Within Section” menu), and increase the repetition count until it reaches/exceeds the desired duration.

  • Like the loop export, you can select multiple sections and export them all with a single button press. The export process completes each section one at a time, showing the progress along the way.

  • The section and loop export processes are independent from each other, making it possible to have both types of exports processing simultaneously.

  • Replaced the geometry-based loop/section grids with texture-based grids. These textures update line thicknesses to accommodate changes to beats per measure and/or number of note-rows within a loop.

  • Addressed performance bottlenecks found in 1000+ ringer scenarios. These improvements involved reduction in unnecessary work, sharing a single material across all ringers, and adding some parallel-processing to speed through calculations.

  • Improved performance when many robot/avatar performers are active by parallel-processing the “cursor tail” path/mesh calculations.

  • Improved the “Loops > Duration” menu, adding buttons that allow for jumping by 10 or 100 beats. This should speed up the menu usage for loops that require large changes to duration.

  • Disabled automatic quantization (to sixteenth beats) as the default loop behavior. This feature was intended to help “clean up” recordings (quantization aligns the loop’s notes to the beat), however, this benefit has been more than offset by the trouble/confusion it causes new players. Quantization can negatively impact various types of recordings, including guitar/harp style strumming and free-form recordings that aren’t meant to align to the metronome beats. Note that the “Loops > Levels > Quantize” slider is still available for changing the quantization after recording is complete.

  • Added the “Application > Audio > Auto Loop Quantize” slider to adjust the default loop behavior. Quantization works best for percussive performances (with the “strike” tool) where each note is meant to align nicely with the metronome beats. With this new slider, EXA players can choose to enable automatic quantization for certain performances or scenarios, and then disable it for others.

  • Improved the save/load layout system, notably for handling large layout files. In the loading menu, a progress percentage appears while loading/parsing the raw layout file. Once the “Load Layout” button is selected, another progress percentage appears while EXA is building the new layout items. In the saving menu, when the “Save Layout” button is selected, progress appears in two parts: a percentage while EXA collects the layout data, and an increasing file-size while that data is being converted/saved to a file. To avoid save/load conflicts, and to ensure saving completes correctly, the entire “Layout” menu is disabled during the save process.

  • Updated graphics and screenshots (for Steam and in-app) to use EXA’s new visual style, which shows the music-viz background and a robot/avatar performer.

  • Fixed issue causing an app crash if the “loop duration” menu was used in a specific way. The menu now resets the offset values to zero to when the loop selection changes, which avoids the failure scenario (where some stale offset values could lead to a loop with a zero-or-less duration).

  • Fixed issue causing the loop recorder interface to become hidden after a loop or section clone action (reappearing after saving/reloading the layout).

  • Fixed issue causing the Soundfont loader to fail for Soundfonts that provide invalid sample-data boundary information. Now, when this occurs, the Soundfont will load successfully, and EXA will consider any of those invalid samples to be unavailable.

  • Fixed issue causing a loop's sustained prox/bow notes to never stop after switching directly between "looped" and "one-time" playback modes.
1 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
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:
Review Beta NEW!
When enabled, will sort reviews by new Helpfulness score. Read more about it in the blog post.
Show graph
Hide graph
Review Helpfulness Beta Enabled
There are no more reviews that match the filters set above
Adjust the filters above to see other reviews
Loading reviews...