Full notes
Full EXA: The Infinite Instrument update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Server
- UI and audio
- Events
- Gameplay
- Fixes
- Performance
EXA: The Infinite Instrument changes
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.
DEV UPDATE VIDEO
https://www.youtube.com/watch?v=h-wPsSRuBG0 (link)
SHARE EXA
Twitter: Release Announcement
Facebook: Release Announcement
Reddit: Release Announcement
AUDIO SAMPLES
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.
MIDI OUTPUT
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.
FILE-BROWSING MENUS
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.
OTHER
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.
FIXES
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.
Source
Changelog.gg summarizes and formats this update. How we read updates.
