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 (30) - 96% of the 30 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 (20)

May 22

v1.3.2: Audio Samples, MIDI Output, Monophonic Mode

One of EXA’s most requested features is finally here – support for audio samples! In addition to the existing Soundfont support, you can now attach WAV, AIFF, and OGG audio files to the ringers in your layout. EXA ships with a huge collection of over 1,000 audio samples, and you can easily import your own.

MIDI output is another highly-requested feature introduced in this version of EXA. You can map each ringer to one of 64 different MIDI channels, and EXA will route all of its MIDI messages through that channel. Using third-party software (a virtual MIDI cable, a DAW with low-latency audio, and some VST plugins), you can convert EXA’s MIDI output into any sound you can imagine – all in realtime.

This release also includes a “monophonic mode” for easily playing one note at a time (like a flute or trumpet), support for foot-controlled locomotion using 3D Rudder hardware, and several improvements to the file-browsing menus.

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.



  • EXA can now load audio files directly (WAV, AIFF, OGG), in addition to the existing support for Soundfonts (SF2).

  • You can apply an audio sample to selected ringers via the “Ringers > Sounds > Samples” menu. This menu allows you to browse through folders and select a sample. The previous menu for Soundfonts is now located at “Ringers > Sounds > Soundfonts”. A ringer can only have one Soundfont or sample selected at a time.

  • EXA assumes that all samples are tuned to “middle C” (called “C5” in EXA, equivalent to MIDI note 60). When you apply a sample as a ringer’s sound, the sample playback will be pitched up/down based on the note of the ringer. For example, a ringer tuned to “E above middle C” would cause the sample to be pitched upward by four semitones. For non-tonal samples, or samples you want to play without any pitch shifting, be sure to set the ringer note to “middle C”.

  • EXA ships with a default collection of over 1,000 audio samples. They are organized into folders based on their source, with a license/attribution file included next to each of those sources or sub-collections. Most of the audio files are licensed with a highly-permissive Creative Commons license (either “Zero” or “Attribution”). Many of the audio samples in this default collection have been manually edited for use in EXA – trimmed, normalized, and/or re-pitched to their nearest “C” note.

  • You can install/import your own audio files into EXA (in much the same way you do with Soundfonts). The easiest way is to add files (using a reasonable folder structure) into your “My Documents/EXA-VR/user-[SteamID]/Samples” directory. You can also tell EXA to look into different folders by modifying the “[EXA Install Dir]/EXA_Data/StreamingAssets/AppSettings.json” file (add/change its “SampleDirectories” list).

  • Unlike Soundfonts, audio files do not designate loopable sections within their audio data. This means that samples can’t ring out forever like a Soundfont can (for example, holding the “prox” tool over a guitar-string ringer). Instead, samples simply play from start to finish. You can still use the “prox” tool (especially for fading in notes) but be aware that the sample will end by itself after a while, regardless of the “prox” tool.

  • Also unlike Soundfonts, audio files do not designate internal rules for swapping between different audio data or effects based on the velocity the sound is played, nor do they have pitch-invariant oscillators for vibrato/tremolo. For example, when you increase the pitch of an audio sample in EXA, it speeds up the audio playback, including the rate of any oscillations within the sound.

  • EXA can now produce live MIDI output as you play ringers and as events occur within recorded loops. This output can be routed through 64 different channels (4 configurable MIDI devices with 16 MIDI channels each).

  • With so many channels available, you can create several clusters of similar ringers, where each would behave much like a traditional MIDI controller (for example, routing all piano keys though the same channel, all drums through another). You can also route single ringers into their own channels if more isolation is required (for example, route each violin string separately so that the “bow” tool can affect each string’s own MIDI channel-volume).

  • EXA supports four MIDI output devices (called A, B, C, and D). These are configurable in the “Application > Audio > MIDI Output” menu.

  • Using the “Ringers > Sounds > MIDI” menu, you can map each ringer to a particular MIDI output device and channel number. When the ringer is hit, EXA sends MIDI events to that combination of device and channel. This menu also provides an option to disable the ringer’s in-app sound – this is useful when third-party audio software is already converting the live MIDI output into sound.

  • Loop recordings preserve the MIDI settings of the individual ringers, meaning that a single loop might include output to several different devices and/or channels. The “Loops > Sounds > MIDI” menu allows you to override those individual ringer settings. Applying loop-level MIDI settings forces all ringers in the loop to route through the loop’s selected device and channel.

  • When using “prox” or “bow” tools on a ringer, the note playback volume (which is controlled by the tool’s proximity or speed) is sent to the ringer’s channel as the overall channel volume. Specifically, this volume is sent continuously as “Channel Pressure” MIDI messages (code 0xD0 / 208). If there are multiple ringers using the same channel, the overall channel volume is determined by the loudest volume among those ringers.

  • To adjust the timing of the MIDI output messages and reduce latency, use the “Application > Audio > Hit-To-MIDI Latency” slider. A value of 0ms means that EXA will send the messages at the exact time the notes/events are meant to occur. A negative value (like -10ms) means that those messages will be sent up to 10ms in advance of their exact timing (if possible). This is often possible during live performance (EXA predicts ringer hits several milliseconds in advance), and is always possible for events contained within recorded loops.

  • Outside of EXA: Use a “virtual MIDI cable” software tool (like loopMIDI) to create virtual MIDI output devices – these can route EXA’s MIDI output into the MIDI input of other audio software.

  • Outside of EXA: It is possible to convert EXA’s MIDI output into custom sounds (for example, via VST plugins within a DAW) with very low latency, allowing you to perform in realtime. To do this, you’ll need to configure your DAW (or other third-party audio software) to use low latency audio settings (i.e. using small audio buffers).

  • Related note: EXA could also support OSC output, which is much less structured than MIDI. If this feature would be useful for you, please post to the discussion board about it.

  • Refactored the existing Soundfont and Document file-browsing menus to share the same code base, so that the new samples feature could reuse that menu code and all these menus could have consistent features and behaviors.

  • Added vertical paging to the menus. At each menu level, if there are too many file/folder items, paging buttons will appear at the top and bottom. The paging buttons display the number of hidden items remaining in their up/down direction. These buttons also include the “auto-fire” feature, so the paging actions will continue at a regular interval while a cursor remains hovering on the button. Overall, this paging feature ensures that a menu won’t display hundreds of items, which would previously cause a very tall menu and performance issues.

  • Updated the “auto-navigation” feature to also include jumping to the first paging position that reveals a selected item. (Note: this is the feature that automatically expands the ringer/loop “Sounds” menu until it reaches the currently-selected sound.)

  • Added a green “loading progress” bar at the bottom of a menu item. It can appear when loading a Soundfont file (which contains one or more selectable “preset” items) and also when loading an audio sample file.

  • Added a “monophonic performance” icon to the handles (appearing on the bottom of the touchpad for Vive, and near the lower/second button for Oculus Touch). When playing in monophonic mode, each new ringer hit automatically mutes the previously-hit ringer. This is ideal for many musical scenarios -- for example, you can use monophonic mode to better emulate a flute, trumpet, or any other instrument which only plays one note at a time.

  • Implemented support for 3D Rudder hardware, allowing you to control EXA’s “smooth locomotion” with your feet. Tip the rudder backward, forward, left, and right to slide in those directions, and twist the rudder leftward or rightward to rotate in those directions. Locomotion using the 3D Rudder uses a similar speed, smoothness, and tunnel-vision (while turning) as the controller-based “smooth locomotion” feature.

  • Improved the motion-avatar playback in scenarios where only one handle has hit a ringer, and then after recording, one or more of those hit ringers are moved. Having no ringer touches to affect its location, the “orphan” handle would remain in its original location while the rest of the avatar moved to match the ringers. Now, that “orphan” handle obtains the location changes from its sibling, allowing it to follow along correctly.

  • Fixed issue causing EXA’s Steam-based MR mode to fail, caused by references to old camera effects components that were replaced/upgraded in v1.3.1.

  • Fixed issue causing “mute-hit” events performed slightly after the end of an auto-stopping loop recording to be ignored. This was a problem especially in monophonic-performance scenarios, where the last note’s automatic mute (which occurs upon hitting a new ringer) would not be recorded at the end of the loop, leading to a final note that rings out for its full duration.

  • Fixed issue causing a playing loop, containing both “mute” and “motion” events, to apply those mute events to the live ringers in the layout. Thus, the loop playback could mute a ringer that you were playing live (if the recorded mute event was performed on that same ringer).

  • Fixed issue causing the file-browsing menus to behave incorrectly when an item is selected while the auto-navigation feature is occurring.

  • Fixed issues causing cyclically-linked sequencers to generate a stack-overflow when endlessly trying to stop each other.

  • Fixed issue causing one-beat sequencer spans to often have their stop event ignored. This issue was caused by some conditions that were meant to avoid cyclically-linked sequencer issues.

  • Fixed issue causing the sequencer chart items to be moved to incorrect positions upon loading a layout. This was related to constraints that move all grabbable/selectable items back into the layout boundaries. Those constraints are no longer applied to on-interface items.

  • Fixed issue causing an error if a sequencer row gets deleted at a time shortly before the row reaches its next “start” event.

  • Fixed issue causing a deleted sequencer row to not immediately have its events removed from the playback class, which could allow the row to continue playing after deletion.
1 comments Read more

March 28

v1.3.1: Sequencer Interface, MixCast MR Support, Linking Tool

The new “sequencer” interface is finally here! Sequencers can control the playback of loops, sections, and even other sequencers – allowing you to build up complex, full-length musical tracks within VR. The sequencer interface is more compact and powerful than the section interface, including the ability to start/stop a loop multiple times in the same row, to randomly select loops for playback, to configure sequencer playback to loop within a range of beats, and to immediately jump to new playhead positions.

Also, EXA has added support for MixCast mixed reality display. This feature is available to users of MixCast Studio. MixCast has a variety of features that makes it easy to use mixed reality, including a three-click setup for static camera position, a background-replacement capability that does not require a green screen, and the ability for your mixed-reality self to become illuminated by the glow of EXA’s ringers.

This release also includes a new laser-pointer “linking” tool (currently used by the sequencers), tool bits that shrink into “precision mode” when near a menu interface, a reusable keyboard interface, upgraded post-processing camera effects, EXA Remix improvements, and a variety of minor bug 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.



  • The new sequencer interface allows you to plan and execute multiple start/stop events for the loops, sections, and other sequencers in your layout. The interface provides yellow “range bars”, which you can drag left/right to set the sequencer’s looping area. It also provides a while “playhead bar”, which you can drag left/right during playback to jump to different playhead positions. Strike the green ringer to the left of the sequencer to play and stop the sequencer playback.

  • You can link each sequencer row to one or more loops, sections, or other sequencers. Select the row’s blue “link” button to engage the link-creation mode. This attaches a blue “laser pointer” tool to your handle, which you can use to select/deselect items. When you point at a selectable item, it displays a blue border (or red, if it is already selected). Squeeze the controller’s trigger to select the item (or deselect, if it is already selected). Once selected, a curved line will appear, connecting the item to the “link” button.

  • When a sequencer row has multiple links, the row will randomly select one of those links for each new “start” event during playback. This is very useful for creating generative or randomly-combining music. As a simple example, you could link several “drum fill” loops to a single row, getting a new drum fill each time a “start” event fires. A more complex usage would be to record several bass, guitar, and piano parts, and link them to three sequencer rows to continually pick a new random combination of these parts.

  • A sequencer row needs start and stop events, which are paired together as a “span”. To add a new span, hover your cursor over an empty area in the row, and when a gray span appears, squeeze the controller’s trigger. Spans within the same row cannot overlap each other.

  • You can move a row’s spans by grabbing the start/stop events, or by grabbing the span that connects those events. You can grab these items with the grab tool or, recommended, by using the controller’s grip-to-grab interaction. Once grabbed, drag the item left/right to move it to a new position. Dragging the start/stop events changes the span’s duration, while dragging the span itself moves the span while maintaining its duration.

  • To delete a span from a sequencer row, grab it and drag it several centimeters in front of (or behind) the sequencer interface. Once the span turns dark gray, release the grab to complete the process.

  • There is no way to manually add sequencer rows. The sequencer automatically ensures that there is at least one empty row available. Adding an event or link to the last empty row (for example) causes a new row to be created. Additionally, a sequencer will never have fewer than three rows, even if they are all empty.

  • Each sequencer row has hidden “edit” buttons that you can reveal using the toggle button the arrow icon on it. To reorder the rows, grab/drag the buttons with the up/down icon. To name a row, select the button with the “A” icon, and enter text using the keyboard interface that appears. To delete (or reset) a row, select the red “X” button.

  • After selecting a sequencer, you can use the “Sequencers” menu that appears to disable editing, lock the range bars, export the sequencer’s audio, clone the sequencer, delete it, etc.

  • During playback, a sequencer’s links flash momentarily whenever their associated item is affected. A “start” event causes a green-tinted flash, while a “stop” event causes a red-tinted one. These flashes help to visualize the connections and cause-and-effect that occurs during sequencer playback.

  • Sequencers can be linked to other sequencers. Creating a hierarchy of sequencers is a very powerful way to build and control the layout’s loops and sections. Note that it is possible, but not recommended, to create circular-references between sequencers.

  • You can now create mixed-reality views of EXA using MixCast. Currently, this is only supported for Vive – support for Oculus should come after the next MixCast release.

  • To start using MixCast mixed reality, click the gray MixCast icon that appears at the bottom left corner of the desktop monitor display. This icon is only present when you have MixCast Studio installed, and have a camera selected (anything but “None”) in MixCast Studio.

  • To toggle the MixCast icon visibility, use the “Ctrl+Shift+L” keyboard shortcut. To toggle the MixCast mixed reality mode, either click the icon or use the “Ctrl+M” keyboard shortcut.

  • Recommended MixCast lighting settings: “Take Lighting” at 1.0, “Base Amount” at 0.04, and “Light Power” at 5.0. These settings make your camera image darkened to match the low-lighting appearance of EXA environment, and allow the virtual lights from EXA’s ringers to clearly illuminate your camera image.

  • Recommended MixCast composition settings: use “Buffered” mode and select a delay time that keeps the virtual controller positions anchored closely to the controllers in the camera image. (For reference, the Logitech C922 camera that I use looks good with ~200ms delay time.) Important: when recording or streaming mixed-reality video, configure OBS (or similar video-capture tool) to use the same delay time for audio. (For OBS, the setting is called “Advanced > Audio > Global Audio Sync Offset (milliseconds)”).

  • The Unity package for EXA Remix is now included when you download the full EXA app. The file is located in your EXA installation directory, named “ExaRemix-v1.3.1.unityPackage”.

  • Added a “color exponent” setting to the ringer material. This can be useful for achieving a better ringer glow colors if your app does not use HDR rendering.

  • Added component that locks the CursorTails and Motions objects to the world identity (regardless of their parent hierarchy transforms). This ensures that everything aligns properly, even when moving the parent transforms.

  • Improved performance while loading a layout by spreading the process out across several frames.

  • Fixed issues with the positions of the avatars when operating at non-original scales.

  • Fixed issues with the positions of the ringers when loading a layout and non-original scales.

  • Fixed issue causing errors when no camera is available in the scene.

  • Tools now transition to a smaller “precision” size as they get closer to a menu panel. This makes it easier to see the menu items while interacting with them. Some tools have unique “precision” modes beyond just getting smaller: the mute tool becomes more transparent, the bow tool gets thinner, etc.

  • The keyboard interface is now reusable (for use with various menu interfaces) and displays a text field at top of the keys. Rather than anchoring the keyboard to the menu interface (like the “Save Layout” menu did), the new approach is for the keyboard to appear near to the keyboard-toggling button, with a gray link between the keyboard and the menu. You can grab/move the keyboard independently from the menu to place it in a more comfortable position for typing.

  • All virtual cameras in EXA (used for VR headset display, desktop monitor display, mixed reality, photo tool, etc.) now use Unity’s new post-processing effects stack. This upgrades the display to use Unity’s most recent visual features and encourages visual consistency across all of EXA’s various virtual cameras.

  • Fixed issue that occurs when multiple Soundfonts share the same relative path and filename. All duplicates (after the first found instance) are ignored, and an in-app notification is displayed. To resolve this, change the folder or file name of the conflicting Soundfont.

  • Fixed issue that occurs when a Soundfont file references an internal instrument (by name) that is not present within the file.

  • Fixed issues related to the number and priority of “audio players” getting out of sync between EXA’s Unity side and its native audio side. If necessary, the native audio side can now immediately reclaim “audio players” that are in an “ending“ or “very low volume” state.

  • Fixed startup errors when SteamVR provides a null instance (which can occur due to various internal SteamVR hardware/setup failures).

  • Fixed issue where sustained notes (i.e. created with the “bow” or “prox” tools) within a recorded loop, in certain hard-to-reproduce scenarios, would never stop playing.
3 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...