Skip to content

A simple package that redefines Unity Audio Sources to work with ASIO protocol, and adds transmission of Audio Source positions via OSC protocol.

License

Notifications You must be signed in to change notification settings

liris-xr/AsioAudioUnity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

(Work in progress)

Asio Audio for Unity

A simple package that simulates Unity Audio Sources that send audio data through ASIO protocol, and sends Audio Sources positions using OSC protocol. The developement was made using Unity 2022.3.19f1.

This package uses different frameworks:

  • UnityOSC by thomasfredericks, to send Audio Sources positions through OSC protocol.
  • NuGetForUnity by GlitchEnzo, to install the following NuGet package:
    • NAudio by Mark Heath, an open-source .NET audio library.

Intended Workflow

The purpose of this package is to simulate the behaviour of Unity Audio Sources, with 2 main goals:

  • Adding the ability to send real-time position of Audio Sources through OSC protocol.
  • Modifying the standard Unity audio output, and using the ASIO driver type to send audio data instead.

The idea behind is to use REAPER and Spat Revolution softwares to simulate spatialisation of Audio Sources on any output configuration.

REAPER will be used to get audio data using the ReaRoute ASIO driver, then to send the data to Spat Revolution.

Source positions will directly be sent using OSC to Spat Revolution.

graph LR
A[Unity] -- ASIO Channel 1 --> B[REAPER]
A -- ASIO Channel 2 --> B
A -- ASIO Channel 3 --> B
A -- ... --> B
B -- Local Audio Path (through VST plugin) --> C{Spat Revolution}
A -- OSC --> C
Loading

Getting started

Outside Unity

A REAPER license and a Spat Revolution license (and account) are needed for this to work.

Download and install REAPER here.

Warning: On the REAPER installer, make sure you add the ReaRoute ASIO driver (which is not selected by default), otherwise you will not be able to retrieve ASIO data on REAPER.

Download install Flux Center (for Spat Revolution) here.

REAPER

Launch REAPER, and set the ASIO inputs (using ReaRoute ASIO) :

  • Go to Options > Preferences, search for Device section and set the Audio System to Dummy Audio.

    We don't want any output audio device set on REAPER, because the output will be handled by Spat Revolution.

    Warning: The defined sample rate has to be the same as the sample rate defined in Unity (see Unity Section) and in Spat Revolution (see Spat Revolution Section). This should be defined according to which sample rates are supported by the output device.

  • Set 4 empty tracks (using shortcut Ctrl+T) and arm the record by clicking the Alt Text button.

  • For each track, change the record input (Alt Text) and set to ReaRoute inputs 1 to 4, if ReaRoute inputs are not available, check your REAPER installation and verify that ReaRoute ASIO has been checked while installing REAPER.

It should look like this:

drawing

REAPER is now ready to recieve audio data via ASIO from Unity.

Now that we configured REAPER ASIO inputs with 4 channels, we will now configure the output to Spat Revolution. For this we will need the Spat Revolution Send VST plugin:

  • Open Flux Center and install Spat Revolution Send. This will install a VST plugin on your PC.

  • Now on REAPER, go to Options > Preferences, search for VST section.

  • On VST plug-in paths check that the path %COMMONPROGRAMFILES%/VS3 is configured, click Re-scan... > Clear cache and re-scan VST paths for all plugins, it should add the plugin to REAPER.

  • Check if the VST plugin is available. To do this, select a track, click on the FX button (NOT THE IN FX), and search for VST3: Spat Revolution - Send (FLUX) (64ch):

drawing

  • On the Spat Revolution Send VST window, enable Local Audio Path to send audio data to Spat:

drawing

  • Do the 2 last steps on each track created (from "Check if the VST plugin is available").

Spat Revolution

Open Flux Center and download Spat Revolution, the installation should be done automatically.

  • Launch Spat Revolution and go directly to the Preferences tab.

  • For audio data: Go to IO Hardware, set the desired output device (must be an ASIO device), and configure the sample rate and the block size so it matches the available properties of the device. The two properties must also match the properties set in REAPER about the Dummy Audio device, to avoid any unwanted audio artifact.

drawing drawing

  • For audio source position: Go to OSC Main, and be sure that OSC is enabled by ticking the first button. Then, on OSC Connections, add a new connection: input | Spat Revolution - Plugins, and set up the IP address to localhost (127.0.0.1), and the port 8100.

drawing drawing

  • Once done, go to the Setup tab, and you should already see 4 inputs on the Input line, corresponding to the 4 tracks set on REAPER.

    If you don't see them, refer to the REAPER section to set them up.

  • Do the following:

    • Add 4 source transcoders on the Source Transcoder line, connect them to the 4 tracks, and verify that Output Configuration is set to Mono on each transcoder.
    • Add 4 sources on the Source line, connect them to the 4 source transcoders (they should have a Mono configuration).
    • Add a room on the Room line, specify the output configuration wanted, and connect each created source above to this room.
    • Finally, add an output on the Output line and connect it to the created room above (it should automatically add an intermediary master component on the Master line).
  • This should be set as follows:

drawing

You can see on the Room tab the final configuration of the room and sources.

Unity

Once REAPER and Spat Revolution are set, we will open the package on a Unity project. To do this:

  • Create a project or open an existing project using Unity Hub. A 2022.3 version should work fine.

  • Download and import the Unity Package to the project (see Releases). Once done, open the Example Scene on Assets/AsioAudioUnity/Example/AsioAudioScene.unity.

  • Identify the ASIO Audio Sources on the Scene, and pick one. On the Inspector tab, select the component CustomAsioAudioSource and verify that PlayOnEnable is set to true.

  • Identify the OSC Manager object on the Scene, and verify on the OSC component that the OutIP and OutPort properties match the ones set on Spat Revolution (respectively by default 127.0.0.1 and 8100).

  • Click Play, and see if audio data is transmitted to REAPER. The REAPER track that should get data is the one identified with the TargetOutputChannel on the CustomAsioAudioSource component, which will point to the corresponding ReaRoute input.

    Example: On Unity, if a CustomAsioAudioSource has its PlayOnEnable property ticked, and its TargetOutputChannel property set to 3, the REAPER track identified by input ReaRoute 3 should get the data when playing the scene.

drawing

Documentation

The full documentation is available here.

Audio Components

AsioAudioManager

CustomAsioAudioSource

OSC Components

RoomPositionOsc

SourcePositionOsc

How To

Setup ASIO Audio Environment

Setup ASIO Audio Sources In Scene

Setup ASIO Audio Sources From Scene With Audio Sources

Setup OSC Environment

About

A simple package that redefines Unity Audio Sources to work with ASIO protocol, and adds transmission of Audio Source positions via OSC protocol.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages