EXA: The Infinite Instrument cover
EXA: The Infinite Instrument screenshot
Genre: Indie

EXA: The Infinite Instrument

v1.4.0: Multiplayer, In-App Cameras



You can now play EXA with other players! Step into a shared layout where you can see other players, talk with them, build instruments together, share loops, compose songs, watch performances, and more. Each multiplayer “room” keeps everything synchronized (the layout, items, playback states, metronome, and live ringer events) for everyone that joins, allowing you to create and collaborate with players across the world.

EXA’s multiplayer rooms are hosted by the room’s creator (not by a server in the cloud). The room can be made available publicly, can be hidden until a player enters the room name, or can be limited to your local network (LAN). The room creator can even put players into a “spectator” mode by disabling some of their room permissions.

Network latency (the lag/delay in communication between computers) is an important factor in EXA’s multiplayer system. In ideal conditions, it should be possible to perform instruments in real-time with other players. Regardless of latency, it’s always possible to talk, to modify the shared layout together, and to collaborate by recording new loops (which automatically shares them with the room).

If you like to record or stream your EXA performances, the new Preview Panel is perfect for you. This panel provides several new camera modes (including “selfie” and other third-person views) and options (field of view, smoothing) that you can adjust within the app. These new cameras send their video output to your computer’s monitor, and the Preview Panel displays that same video feed. Now you can align your cameras, compose your shots, and monitor the final result – all in real-time, without leaving your headset.

Thank you to the EXA community for the feedback and ideas! And a special thank you to everyone who helped test these new multiplayer features! Please watch/share the new update video below, and read through this page to learn more.


DEV UPDATE VIDEO


https://www.youtube.com/watch?v=bdZsUZGuCeI
YouTube link


SHARE EXA POSTS







MULTIPLAYER (BETA)




  • Multiplayer EXA allows you to experience shared layouts, called “rooms”, with other players. You can talk with each other, see where everyone is, and see what they’re doing. You can watch performances, build instruments, share loops, and construct songs together with everyone else in the virtual room.

  • Multiplayer rooms can be made public, private, or even available within your local network (LAN). Public rooms are visible to everyone in EXA’s in-app room listing, private rooms are only visible upon entering the exact room name, and local rooms are only accessible to computers connected to your LAN.

  • These new multiplayer features are being released as a “beta” version. A significant amount of testing has been done already, but it is likely that certain scenarios (related to network conditions, the timing of events, the state of the shared layout, etc.) could still lead to issues or failures.

  • In ideal conditions, it should be possible for players to create live, real-time, “jam session” performances together – see the “Latency” section below for details – but this isn’t always possible. A more common multiplayer experience will likely include players recording and sharing loops with each other.

  • In a multiplayer layout, almost everything (except for most menus) is shared. Everyone sees the same ringers, loops, sequencers, and so on. When someone moves an item, changes it, deletes it, or creates a brand new one, the action is quickly broadcasted to other players so that the shared layout stays in sync.

  • The multiplayer layout is also synchronized in time – in most cases, everyone will match up within a few milliseconds. All events from metronomes, loops, sections, and sequencers are scheduled and performed using the “shared time” of the layout. Thus, even if you’re playing with people across the world, you’ll all be hearing (for example) a loop’s playback at the same time.

  • Items in a shared multiplayer layout have no owner. Once a player records a new loop, for example, anyone can move, edit, clone, or even delete it. This is a powerful way to collaborate, but of course, it works best when everyone is respectful and considerate of the shared space.

  • The creator (or host) of a multiplayer room can block individual players from speaking to the group and/or modifying the layout – see the “CREATE” section below for details. This is perfect for putting players into “spectator” mode, where they can watch you, but cannot affect your layout and performance.

  • If you wish to create your own multiplayer room, EXA currently has a technical requirement called “port-forwarding” – see the “CREATE” section below for details. This involves a one-time settings change to your router, which allows your computer to receive room-joining requests from other players.






MULTIPLAYER: LATENCY




  • As a musical app, where timing is important, your network latency (the time it takes to communicate with other computers -- lag, ping, etc.) is an important factor in the type of multiplayer experience you can achieve.

  • In scenarios with low network latency (near-immediate communication – 20ms or less), it should be possible to perform instruments together in real-time… a virtual garage-band jam session. Under these conditions, ringer events can travel to other computers quickly enough for other players to hear the sounds in full. (EXA’s ringer-hit prediction, which mitigates local latency issues, also helps to mitigate the effects of network latency.)

  • As network latency increases, real-time jamming becomes more difficult. The way EXA handles latency (multiplayer or not) is to schedule a note event in absolute time, then begin playing the note’s audio as soon as possible. If the note event is not received early enough, it leads to front-truncated sounds (i.e. you may not hear the first several milliseconds of the sound). In order to keep all sounds synchronized, this approach is preferable to playing a full-but-delayed sound.

  • Thus, in higher-latency scenarios, the multiplayer experience is focused on the recording and sharing of loops (although, this will likely be the most common experience, regardless of latency). Once a player records a loop, it is sent to all other players. Loop playback is also synchronized across all players.

  • Because loops are sent to other players and then play on each player’s own computer, network latency is not a factor for loop playback. This allows everyone to play along with the layout’s loops, recording and sharing their own loops as they go.

  • All multiplayer communication passes through the computer of the room’s creator (which then broadcasts the information to the other players). Players who are geographically closer to the room creator will typically experience less network latency. In an example scenario where five players are in California and one is in France, it makes sense for a Californian to create the room, as this will likely cause less network latency for the majority of players.






MULTIPLAYER: JOIN




  • To join a multiplayer room, first select the “Multiplayer” button in the Command Center. This opens a listing of available rooms, which includes options for sorting and filtering at the top, and paging buttons at the bottom.

  • Once you find the room you’d like to join, select it to open the “Room” menu page. Here, you’ll find details about the room and a large green “Join Room” button. Select the “Join Room” button to request a connection to the other players and to start loading the shared room layout.

  • An important note: when you join a room, EXA first clears your current layout (and then loads the room’s shared layout). Remember to save your current layout before joining a room to avoid losing any work.

  • Upon joining a room, it may take several seconds (and possibly minutes) to fully load the shared layout. During this time, a progress meter appears on the walls of the layout to show how much of the layout is currently loaded. Items appear in the layout as soon as they’re loaded. This process takes more time when the layout contains lots of data (recorded loops are typically the biggest factor), the network connection is slow, and/or the room host/server is sending the initial layout data to multiple players at the same time.

  • The creator of the room may choose to disable your ability to talk to others in the room, and/or your ability to touch/modify anything in the layout. You will receive notifications if/when your permissions change. The room creator may use these permissions for any reason, but a common one is to ensure that other players can only act as a view-only audience or spectator in the room.

  • To leave the room, select the large red “Leave Room” button on the “Multiplayer > Room” page. This does not affect other players, nor the room’s shared layout. After leaving the room, the active layout will remain the same, but it will no longer be shared with other players.






MULTIPLAYER: CREATE




  • To create a multiplayer room, first select the “Multiplayer” button in the Command Center. Then select the large green “Create Room” button, which appears as the first item (top-left) in the grid of available rooms.

  • Important note: you’ll need to configure port-forwarding on your router (a one-time process) before you can create a “public” or “private” room. The “Create Room” page provides the necessary information, including the port (38411, UDP protocol) and your computer’s local IP address (often starts with “192.168”). Essentially, port-forwarding tells your router to direct incoming requests to a particular computer in your local network -- this is what allows your computer to receive “join room” requests from other players. Port-forwarding is usually an easy process; find step-by-step help for your particular router by searching online for “port-forward ”.

  • The “Create Room” menu page provides an input for the room name (required for public and private rooms), the maximum number of players (including a “no limit” option), and the room visibility type (public, private, local/LAN). Select the green button at the bottom of the page to create your new room.

  • There are three room visibility types. A “Public” room is visible to all players in the room listing. A “Private” room is only visible to players that enter the full room name into the search box (at the top of the room listing page). A “Local/LAN” room is only visible to players with computers that are connected to your local network.

  • While EXA currently allows a room to have an unlimited number of players, hosting a large number of players may cause performance to degrade for the room creator. As a “beta” release of multiplayer, scenarios with a large player counts have not been tested yet. To host dozens of players simultaneously, it may help to disable the “talk” and/or “touch” permissions for all non-performers.

  • Upon successful creation of a room, the Command Center automatically navigates to the “Multiplayer > Room” menu page.

  • Once the room is created, it can take several seconds for EXA to prepare your layout for sharing with other players (this involves converting all items into small data files). During this process, progress meters appear on the walls of the layout to show how much of this process is complete.

  • The “Multiplayer > Room > Players” menu page provides options that only the room creator can control. The creator can set each player’s “talk” and “touch” permissions. The “talk” permission allows everyone to hear the player’s voice (and/or microphone sounds). The “touch” permission allows the player to hit and play ringers, edit items, create loops and other items, delete items, etc. Disabling “touch” (and possibly “talk”) is a great way to invite spectators into your room, without the risk that they might disrupt your work or performance.

  • The “Multiplayer > Room > Players” menu page, at the top, allows the creator to set the room’s default “talk” and “touch” permissions. Each new player that enters the room will automatically receive these permissions (existing players are not affected).

  • As the room creator, you cannot leave the room without closing it for everyone. To close the room, select the large red “Close Room” button the “Multiplayer > Room” page. Upon closing the room, all other players become disconnected from the room. After closing the room, you and the other players will experience the same thing: the active layout will remain the same, but it will no longer be shared with other players.






MULTIPLAYER: OTHER




  • Each player in the room has their own collection of menu interfaces. Unlike the ringers, loops, sequencers, and other such “content” items, these menu interfaces are not part of the shared layout. This includes the Command Center, Loop Recorder, tool racks, and all item-specific menus that appear upon selecting items.

  • When you use a menu interface in a multiplayer room, other players will see your menus as semi-transparent gray boxes. When you highlight or select a button in the menu, other players see those buttons as lighter-gray boxes. This simplified menu display provides some helpful context about what the player is doing, without showing a full, duplicate menu. To avoid clutter, these boxes quickly fade away after the player stops using the menu.

  • The “Multiplayer > Room > Settings” menu page provides options for multiplayer experience. The top input box sets your display name (which appears above your headset). The “Main” volume slider adjusts the volume of all ringers and loops (a value of 20% or less is helpful for comfortable conversation). The “Voice” volume slider affects the volume of everything else, including the voices of other players. There are also checkboxes for muting your own voice, and choosing to receive notifications when players join or leave the room.

  • The “Multiplayer > Room > Players” menu page shows a listing of all players currently in the room. There are paging buttons if the players cannot all fit on a single page. Each player displays their in-room ID, player name, ping, and current talk/touch permissions. The “ping” value represents the current network latency, in milliseconds, between the player and the room server. The names and values on this page update every few seconds, and each player name glows and changes color based on the player’s current actions in the layout.

  • While you are currently in a room, visiting the “Multiplayer” menu page will automatically redirect you to the “Multiplayer > Room” menu page (showing details for the active room).

  • While you are currently in a room, most of the Command Center options remain available. For example, you can save the layout while in a room, load bundles into the layout, create new items or groups, summon menu interfaces to you, etc.

  • While you are currently in a room, the Command Center prevents the loading of new layouts. This avoids the scenario where one player in the room could (intentionally or not) erase/replace an entire shared layout without warning.

  • The “Multiplayer” menu’s room listing automatically refreshes every ten seconds, however, the refresh is delayed whenever a cursor is near to the menu. This avoids having the list content change while you’re trying to interact with the menu.






IN-APP CAMERAS




  • The new “Preview Panel” menu allows you to control, from within EXA, the video output that appears on your computer’s monitor. The menu panel itself (on both front and back) displays a preview of that same video output.

  • The available camera types are: None (the headset’s default first-person camera), Look (a higher-quality first-person camera), Behind (an over-the-shoulder angle), Above (directly above the headset), Panel (from the center of the Preview Panel, perfect for “selfie” mode), Lens (a smaller camera that you can place anywhere), and Viz (watches the colorful walls).

  • The “Angle” slider sets the camera’s field of view. Lower values (starting at 60) appear more zoomed-in than higher values (up to 120), which show more of the layout. Note that higher values can make the sizes and positions of objects appear distorted.

  • The “Smooth” slider sets the amount of camera smoothing to low, medium, or high. Smoothing reduces camera jitter, but also makes the camera react more slowly to movement.

  • The “Lock” checkbox causes the Preview Panel to stay in a fixed position relative to the headset. While the Preview Panel is locked, it can still be grabbed and moved to different positions, but it will always face toward the headset. The “Lock” can be useful in various scenarios. For example, it can function a bit like a “selfie stick” when using the “Panel” camera mode, and it provides a hands-free way to always know what your audience or stream viewers are seeing.

  • When using one of the Preview Panel’s cameras, the panel itself is not visible to those cameras. It always remains visible to the player in VR, however.

  • The current player’s avatar is visible when pointing the camera toward the headset. This avatar has a lighter/shinier coloring than the loop-playing robots, thicker “glow” areas, and a mouth. The avatar’s glow areas react to live ringer hits, and the player’s voice volume causes both glowing and mouth movement.

  • All camera types (except for “None”) tell EXA to use a high-quality secondary camera. This camera is in addition to the usual in-headset camera views, so it does have a performance cost. A decrease in performance may or may not be noticeable, depending on the computer and graphics card.

  • The previous “High-Quality Camera” checkbox (in “Settings > Visual”) is now removed. To use the equivalent camera, use the “Look” camera mode, with a 60-degree angle and medium smoothing.






OTHER




  • Updated the command center to retain its position upon loading a layout.

  • Added buttons to the command center “Summon” menu for summoning the Preview Panel and the Preview Lens. Note: the lens only becomes available once “Lens” is selected via the Preview Panel.

  • Moved all of the command center’s “summon” target positions backward to avoid conflicts/overlaps when opening the command center's larger pages.

  • Added a keyboard-based (Ctrl+S) "emergency save" feature, which gives players a way to save their current layout in (unexpected) cases where the Command Center menu has failed or is inaccessible for some reason. The layout is saved to the usual folder (Documents/EXA-VR/user-###/Layouts/) as a file named “emergency-save--.exaLayout”.

  • Added a 32-bit version (in addition to the existing 64-bit version) of Exa.Native.Audio.dll to the “EXA Remix” package, allowing Remix to be compatible with 32-bit computers/builds.






FIXES




  • Fixed issue causing some items in a group to be repositioned, upon loading a layout. This occurred in scenarios where those items were outside of the layout’s boundaries, despite being contained within a group that is legally within the boundaries.

  • Fixed issue causing sections and sequencers within a bundle to be removed from their parent group upon that bundle being placed into the layout.

  • Fixed issue causing a new document to show images in the wrong dimensions upon adding the first page to the document.

  • Fixed issue occurring when the app scans soundfont/sample/document directories, but receives an error from the OS. This can occur, for example, when access to a particular directory is denied. EXA now listens for such errors and displays an in-app notification with the relevant details.

  • Fixed (possibly) issue causing a loop to occasionally play incorrect sounds after the player has changed the loop’s active soundfont/sample several times.




PATCH 1




  • Upgraded to the latest version of "Forge Networking Remastered". This should fix occasional disconnection issues that can occur -- immediately upon joining a room and/or at times when several network messages are being sent simultaneously.

  • Fixed issue causing the "Leave/Close Room" button to stay enabled while the leave/close action is in progress.

v1.3.4: Shared Items via Steam Workshop



A huge step for the growing EXA community: you can now share your layouts and bundles with everyone else who plays EXA! These new features are built using the Steam Workshop, allowing you to publish, update, search, subscribe, download, and vote on these shared items – all without leaving VR.

The ability to share layouts and bundles with other players creates many new possibilities for collaboration, and makes it faster than ever to jump right into music-making, with an ever-growing collection of pre-built instruments, loops, layouts, and even entire songs.

These new community features demanded a new way to search, sort, and filter results – capabilities which also found their way into the existing “Load” menus. For players with tons of saved layouts and bundles, sorting and filtering their item lists becomes a big time-saver.

This release also includes an improved metronome interface (with number-pad for exact entry) and several bug fixes (including a major one related to Windows MR devices).

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.


DEV UPDATE VIDEO


https://www.youtube.com/watch?v=NfAJsm7DIzQ
(https://www.youtube.com/watch?v=NfAJsm7DIzQ)

ANNOUNCEMENTS







STEAM WORKSHOP (BETA)




  • The “Layouts” and “Bundles” menus are now divided into two sections. The first, “Local”, contains the original save/load functionality. The second, called “Community (beta)”, contains new functionality for publishing items to Steam Workshop and for browsing, subscribing to, voting for, and downloading items that have been published to Steam Workshop by other EXA players.

  • These new community features are marked as “beta” because they can’t be fully tested until players start using and participating with them. There’s a higher-than-usual chance of things going wrong here – please post any issues that you find to the EXA discussion board.

  • To publish a layout or bundle to Steam Workshop, use the command center to navigate to the “Layouts > Publish” or “Bundles > Publish” menu page. This page shows all of your locally-saved layout/bundle items, displaying a blue badge beneath the image of any item that you’ve already published. Select an item to visit its detail page, where you’ll find a “Publish” button. Or, if the item is already published, you’ll find “Update” and “Unpublish” buttons.

  • Note: EXA determines an item’s “published” state by searching your list of published items for one with a matching name – there is no other ID or behind-the-scenes connection. If you wish to change the name of an item, you should change it locally and via Steam Workshop to avoid losing this name-based relationship.

  • To use a layout or bundle that has been published to Steam Workshop, use the command center to navigate to the “Layouts > Discover” or “Bundles > Discover” menu page. This page shows items that have been published by you and all other EXA players. Each item is displayed with its thumbnail image, author, date, and badges that show subscription and voting information. Select an item to visit its detail page, where you’ll find a “Subscribe” button (and other voting buttons). EXA automatically downloads the item upon subscribing to it, and upon completion, you are able to use that item!

  • Note: These new community features are built to use Steam Workshop, which requires you to be logged into Steam. If you are not logged into Steam, EXA will function normally, but the community features will be disabled.






FILTERS / SORTS




  • All browsing-style menu pages for layouts and bundles now include sorting and filtering options at the top of the page. Sorting and filtering was a necessity for the new Steam Workshop features, and is also quite convenient for browsing your locally-saved items.

  • To use these new options, select one of the buttons that appear across the top of the menu page. In most cases, a small menu will appear above the button, providing other choices for sorting or filtering. Some menus offer a text filter, which will open a full keyboard when its button is selected. To close the popup menu, select the original sort/filter button again.

  • The “Load” menus include options for sorting (by date or alphabetically) and a text filter (matches any part of the item’s name, not case-sensitive).

  • The “Publish” menus include the same options as the “Load” menus, plus a “State” filter (for all, published, unpublished items).

  • The “Discover” menus include a more complicated set of options, based on the search functionality that Steam Workshop provides. The first button switches between searching modes (“Browse”, “Me”, “Friends”). The “Browse” mode has sorting options (by popularity within time-range, publish date, subscription count, voting score). The “Me” mode has filters (for your subscribed, published, favorited, up/down voted items) and sorting options (by title, date). The “Friends” mode has filters (for items published or favorited by your Steam friends).






OTHER




  • Improved the metronome interface: Moved the “beats per minute” and “beats per measure” sliders into separate menus. Added a number-pad interface for exact “beats per minute” entry. Increased the maximum “beats per measure” from 6 to 7. Added large-text numbers to the new metronome menu buttons.

  • Listed EXA as officially supporting Windows MR. This has worked, unofficially, for a long time, with one major bug related to WMR headphone usage. This bug is now fixed (see the section below).

  • Published all current “EXA-Show” layouts to the Steam Workshop.

  • Created and published several bundles to the Steam Workshop.

  • Disabled the loop's "delete" button while the loop's duration-changing handles are active.

  • Improved EXA’s Steam homepage with new descriptions and several animations.






FIXES




  • Fixed the blue-screen-of-death crashing issue that occurs when launching EXA while using a Windows MR device with headphones plugged into it. The crash was due to EXA’s attempt to test the audio output device via the “WD-MKS” audio host (EXA now only tests the “MME” and “WASAPI” hosts).

  • Fixed issue causing the sequencer buttons to become invisible. This was caused by the command center’s “Create” page retaining some references to the newly-created sequencer (which was originally a miniature version embedded within the page), and then “fading out” the sequencer’s buttons upon closing the “Create” page.

  • Fixed issue causing the MIDI menu to display yellow warning text (which said: could not find ‘’) for rows that were previously set to "None".

  • Fixed issue causing the MIDI menu to auto-select the "None" radio button for rows that were previously set to a now-missing device. The menu now opens with no selected radio buttons.

  • Fixed issue that allowed the loop delete button and "strike-ringer" tutorial animation to function within a miniature-mode bundle.

  • Fixed the scenario where both Oculus and SteamVR are running, and Unity gives priority to SteamVR. EXA now shows a desktop-display error message when this occurs, with notes about how to ensure EXA runs in “native Oculus mode” -- rather than running in “Vive mode” and receiving Oculus input via SteamVR.

  • Fixed the scenario where SteamVR fails to initialize properly upon app startup. EXA now shows a desktop-display error message when this occurs.

  • Fixed issue causing a loop, with notes that have been trimmed from the start of the loop, to still have the ending/trailing sounds of those notes audible at the start of the loop. This was a regression issue, related to recent changes that allowed sequencers to play “in-progress” notes upon moving the playhead.

  • Fixed issue that occurs when a grouped loop is attached to a section, the layout is saved, then the layout is reloaded. Upon reload, the grouped loop is no longer positioned within the section. With this fix, the loop is now automatically removed from its group upon being attached to a section.

v1.3.3: Command Center, Item Bundles, Drag-And-Drop



The new EXA Command Center has arrived, and you can summon it to your current position with the touch of a button. The Command Center interface consolidates previous menus, improves workflows, introduces a new drag-and-drop creation feature, and is able to summon other interfaces (like the loop recorder).

Have you ever designed an EXA instrument, only to wish you could reuse it elsewhere? Now you can! The new “Bundle” features allow you to save and load collections of items, including ringers, groups, loops, sequencers, and more. The new drag-and-drop interaction allows you to pull a miniature bundle from the menu and place it (fully-sized) directly into your layout.

This release also includes support for MixCast 2.0, an internal upgrade to the latest version of Unity, some new visual settings, and several other fixes/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.


DEV UPDATE VIDEO


https://www.youtube.com/watch?v=-PyhvJePFG4
(https://www.youtube.com/watch?v=-PyhvJePFG4)


SHARE EXA





COMMAND CENTER




  • Created a “Command Center” menu with a brand-new interface design. The Command Center consolidates the previous “App” and “Layout” menu features, takes up less space, and incorporates several new features.

  • At any time, the Command Center interface can be summoned to the player’s current position by pressing the controller’s “menu” button. The EXA handles show a new icon to identify this button. (For Vive: the small button above the touchpad. For Oculus Touch: the third button on the left-hand controller.)

  • Improved upon the previous menu design with the Command Center’s auto-sizing, tablet-like format. Instead of extending sub-menus to the right (which previously got quite wide for menus like saving and loading layouts), the sub-menus now replace their parent menu, resizing the content area to fit the content. Tall, thin buttons appear to the left of the menu content, allowing the player to navigate one or more steps up the menu hierarchy.

  • The Command Center uses a new drag-and-drop interaction for creating new items. Certain menus will display a miniature version of an item (a sequencer, for example) floating slightly above the menu’s surface. To add this item to the layout: Grab the miniature item and pull it away from the menu. This makes the item grow larger and causes its circular indicator to fill up. When the indicator is filled, it glows green, and the item is fully sized. At this point, the item will be added to the layout (at its current position) when the grab is released. If the grab is released before this point, however, the item will revert back to its miniature state. (And don’t forget, you can use the controller’s “grip” button/trigger to grab!)

  • Instead of using buttons, the Command Center’s “Create” menu uses the new drag-and-drop feature, showing miniature versions of a section, sequencer, and document.

  • The Command Center’s “Create” menu also includes the menu for creating a new group. This works the same as before: select several items, toggle the menu’s checkboxes to include/exclude certain item types (if necessary), then use the “Create Group” button at the bottom.

  • The Command Center’s “Summon” menu introduces a new feature that can automatically move certain items to the menu’s current position. The menu can summon the loop recorder, the metronome, and the three tool racks. This avoids the need to teleport/slide around the layout to find these interfaces and move them around – providing a faster and more efficient workflow.

  • Separated the MIDI options out of the “Settings > Audio” menu (formerly: “App > Audio”), and into its own “Settings > MIDI” menu.

  • Added new “About” menu, which notes the current version and provides several helpful tips in the “Did You Know?” area.





ITEM BUNDLES




  • A “bundle” is a collection of items (ringers, loops, groups, etc.) that can be saved/loaded independently of the current layout (the entire set of items, interfaces, and tools in the scene). Previously, it was only possible to save/load entire layouts.

  • To save a new bundle, first select all the items that the bundle should contain. Use the “Bundles > Save” menu (in the new Command Center) to review the bundle’s contents, add a title, and take a thumbnail photo. Select the “Save Bundle” button to complete this process. Just like the layout-saving menu, a popup with an “overwrite” option will appear if the bundle name is already in use.

  • When saving a new bundle, note that the bundle’s contents (listed in the “Bundles > Save” menu) may be larger than the actual item selection. The bundle automatically includes dependencies from the selected items – for example, a selected group will include the items within that group, a selected sequencer will include the items it links to, and a selected loop will include its target ringers. This ensures that all the items will be fully functional when the bundle is loaded again.

  • To load a saved bundle, use the “Bundles > Load” menu (in the new Command Center) to browse the available bundles. If there are many, use the paging buttons at the bottom of the menu to see more. Select the desired bundle to enter its “Details” menu, then select the “Prepare Bundle” button. The bundle may take a moment to build itself, but its miniature will soon appear. Use the new drag-and-drop feature to add the bundle to the layout.

  • Once the bundle is placed into the layout, the overall “bundle grouping” is removed. The individual items are no longer considered to be part of a bundle – they are now part of the layout and behave like regular items.

  • When using the drag-and-drop feature to add a bundle to the layout, note that the layout-boundary restrictions still apply. Upon releasing the bundle, each item (or group, if the items are grouped) that is positioned outside the boundary will automatically be pushed inward.

  • The drag-and-drop feature uses the grab position (when grabbing the miniature item) as the item’s pivot point. In other words, the miniature item grows as if the original grab position is the center of the item. This is especially noticeable with bundles, since their miniature versions are often scaled down substantially to fit within the bundle menu – thus, their growth to full size is more pronounced. In some cases, grabbing the miniature a specific position (for example, near the edge of a group of ringers) can make it easier to drop the bundle at the desired position within the layout.

  • Internally, a saved bundle uses a JSON format that is very similar to a saved layout. This text-based format makes it possible to manually create/modify bundles outside of EXA. For example, it would be possible to modify the position values of a bundle’s ringers to make them perfectly aligned into a grid.





OTHER




  • Upgraded to MixCast 2.0.2, which includes various improvements and new features for creating mixed-reality videos, streams, and live performances.

  • Upgraded to Unity 2018.1 and now using .NET 4.6. Among other things, this allows EXA to use some more modern multi-threading techniques and classes, which may help resolve some infrequent bugs.

  • Due to the note above, EXA Remix now requires projects to use Unity 2018+ and enable .NET 4.6 (which is no longer marked “experimental”).

  • Added “Show ‘Tunnel Vision’ For Slide Locomotion” toggle to the “Settings > Visual” menu. This controls whether peripheral vision is restricted while turning, which can help make the motion more comfortable for some players.

  • Improved the slide locomotion “tunnel vision” so that it fades into view more smoothly.

  • Added "High-Quality Desktop Display" toggle to the “Settings > Visual” menu. Removed the 'C' keyboard shortcut.

  • Updated the high-quality display to skip its motion-smoothing when performing a teleport.

  • Implemented a one-frame blank camera during the teleport (for both headset and desktop display) to avoid a flicker of the handles appearing in their pre-teleport position.

  • Added the display of a "No VR headset was detected" message when no headset is available.





FIXES




  • Fixed issue causing loop playback, driven by a sequencer, to skip events within the last quarter-beat of the loop.

  • Fixed issues that caused "mute-hit" events occurring on the loop "cap" beat to be ignored.

  • Fixed issue causing the audio exporter to miss "mute-hit" events that occur on the loop's cap beat.

  • Fixed issue causing samples to stop prematurely when played "in-progress", which can occur when jumping a sequencer to playhead positions.

  • Fixed sequencer issue causing loops to read events that occur a fractional beat before the sequencer's start event.

  • Fixed issue causing the loop to play extra/incorrect notes when the sequencer range’s end/rollover occurs on the same beat as the loop's end/rollover, but the range starts after the loop start (i.e. the sequencer range rolls over into an “in-progress” loop position).

  • Fixed issue that caused the sequencer playback to go silent until rollover when dragging the range start to the current playhead beat.

  • Fixed issue causing sequencer's loops to play excess sounds when dragging the start range beyond the playhead.

  • Fixed issue that occurs when a loop (with recorded motion) includes a "link" tool attached to a handle.

  • Fixed issue that prevented “stopping” or “fading-out” bow/prox notes from correctly relinquishing their slot (when necessary) in the “max voices” system.

  • Fixed issue when trying to load a layout while in the process of drawing a new ringer. The load/save actions are now prevented while drawing is active.





PATCH 1




  • Upgraded to the latest version of the Steamworks .NET package to ensure compatibility with the latest Steam/SteamVR API.

  • Fixed issue causing a near-immediate freeze (of EXA, Steam, and SteamVR) once you start hitting ringers. This issue was noticed in SteamVR Beta, and then it moved into the main version of SteamVR on about July 26.