Giter VIP home page Giter VIP logo

spatialaudio-unity's Introduction

Licensed under the MIT License

Introduction

This repository provides plugins and tools for integrating spatial audio into your Unity 3D applications and games

  • A cross-platform spatializer plugin (supported on Windows and Android) that uses highly efficient spatial audio DSP processing algorithms.
  • A sample Unity application that demonstrates cross-platform spatializer plugin configuration and usage.

Getting started with Spatial Audio for Unity

Cloning this repository is not required to start using the Microsoft Spatializer in your Unity project. Visit the documentation for instructions on integrating the Microsoft Spatializer into your Unity project. For a more in-depth exploration of spatial audio, check out the learning module. If you'd like to build the plugin yourself, see below.

Choosing the right spatializer

With requirements and features evolving over time, there are now 3 different Unity spatializer plugins available from Microsoft. Here's a brief description of their differences which can help decide the right plugin for a project.

This is the latest highly optimized cross-platform spatializer plugin for Windows and Android built from this repository. Although this plugin is currenly in the pre-release phase, it's being actively developed and recommended for any new projects, especially those that need to support both Windows and Android. This plugin uses the latest DSP engine that is highly optimized for both memory and CPU and fits well into Unity's audio engine architecture.

While it is recommended to switch over to the latest cross-platform spatializer plugin, the previous HoloLens 2 specific spatializer plugin version with hardware offload suppport, remains available on GitHub releases and on a UPM feed via Mixed Reality Feature Tool. This plugin can be useful for any HoloLens 2 specific projects where it can reduce the CPU usage by leveraging offloaded spatial audio DSP. This plugin utilizes Windows Spatial Audio Platform APIs that prevent the processed audio signal to flow back into Unity's audio engine which can make it cumbersome for supporting some audio design features, such as adding an environmental reverb to the spatial audio mix.

Unity MS-HRTF Plugin

This is the original spatializer plugin which is shared for historical purposes. This plugin does not utilize the multi-source mixer plugin which leads to higher compute overhead than newer plugin offerings.

Required Software

Windows Logo
Windows SDK 18362+
VS Logo
Visual Studio 2019
CMake Logo
CMake
Unity3D logo
Unity 2019+
Python Logo
Python 3+
NodeJS Logo
Node.js
Android Logo
Android NDK
Windows 10 May 2019 Update SDK to build the spatializer plugin. Visual Studio is used for code editing, deploying and building UWP app packages CMake is required for generating Visual Studio 2019 projects Unity 2019 is required to build the spatializer plugin package.
Plugin can be used on Unity 2018 LTS and higher versions.
Helper scripts for build and packaging use Python 3 and higher. For UPM packaging. Required for building Android binaries.

Branch Guide

  • This repository follows the GitFlow branching model.
  • Master branch is used for building release candidates and official releases. Direct pull requests into master are not allowed.
  • Develop branch is used for staging ongoing work for the next official release and merged with master after extensive review and testing. Direct pull requests into develop branch are not allowed.
  • Use feature branches to bring up individual features. Once a feature is ready and tested, use a pull request to merge it into the develop branch.

Clone the Repository

git clone https://github.com/microsoft/spatialaudio-unity.git --recurse-submodules

If you forget to include submodules when cloning, add them with git submodule update --init --recursive

Build Status

Build Branch Status
Release master Release Build Status
Validation develop Validation Build Status

Local Build

  • Launch "Developer Command Prompt for Visual Studio 2019".
  • Switch directory to the root of your Git enlistment.
  • Run the CMake script to generate Visual Studio 2019 projects: python3 Tools\runcmake.py
  • Run the build script to build all flavors: python3 Tools\build.py
  • To generate the Unity package: python3 Tools\unity_package.py -u "c:\Program Files\Unity\Hub\Editor\2020.3.2f1\Editor" -v 2.0.0
  • To generate the UPM package: python3 Tools\upm_package.py -v 2.0.0

Artifacts

spatialaudio-unity's People

Contributors

amollis avatar ashtat avatar daniel4144 avatar keveleigh avatar microsoft-github-operations[bot] avatar microsoftopensource avatar mikechemi avatar noelcross avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spatialaudio-unity's Issues

package update

Will there be a package update in the near future or is this project dead?

I reported an issue over a year ago and it got closed with the notice that it will be fixed with the next update, but this never happened (#83).

UWP binaries are built incorrectly

CMake project generation needs to take the right flags for UWP configs. Right now UWP plugins fail to load because of non-UWP CRT linkage.

Sample is missing NuGet binaries

The sample is missing NuGet for Unity binaries, so doesn't load the Nuget packages for MRTK and the spatializer on project start.

Spatial Sound in Unity Microsoft.SpatialAudio.Spatializer.Unity Requires Dependencies

I think the documentation [here: https://docs.microsoft.com/en-us/windows/mixed-reality/spatial-sound-in-unity] should be updated to include any required dependencies that the user needs to install. I thought this plugin was independent.

Got this error:
Plugins: Failed to load 'Assets/Packages/Microsoft.SpatialAudio.Spatializer.Unity.1.0.0/Plugins/x86_64/AudioPluginMicrosoftSpatializer.dll' because one or more of its dependencies could not be loaded.

AudioSource GetOutputData and GetSpectrumData Issues

Describe the bug

Output and spectrum data do not exist while running on HoloLens 2.

Sample of how we're using the two methods:

audioSource.GetOutputData(audioSamples, 0);
audioSource.GetSpectrumData(audioSpectrum, 0, FFTWindow.BlackmanHarris);

To reproduce

Steps to reproduce the behavior:

  1. Have an AudioSource that's playing looping audio with all spatializer settings enabled.
  2. Write a simple script that computes DB, like so: https://answers.unity.com/questions/157940/getoutputdata-and-getspectrumdata-they-represent-t.html
  3. Verify this works with MS HRTF Spatializer on HoloLens 2.
  4. Swap to Microsoft Spatializer and redeploy.
  5. See that the results now on HoloLens 2 are not consistent.

Expected behavior

Behavior should be consistent with MS HRTF Spatializer and what's being seen in the Unity editor.

Your setup

  • Unity Version 2019.2.21f1
  • Microsoft Spatializer v1.0.0

Target platform

  • HoloLens 2
  • WMR immersive

Can't change spatial sound format once activated

When using the Microsoft Spatializer on desktop, I sometimes want to change my spatial sound mode between Windows Sonic, Dolby Atmos, and DTS. I've seen that once I play any audio in one of these modes, I need to close and reopen Unity to change to another mode. For example:
Have spatial sound mode set to Windows Sonic for Headphones.
Play some spatial audio in Unity. Works!
Change spatial sound mode to Dolby Atmos for Home Theater.
Play some spatial audio in Unity. Doesn't work.
Close Unity.
Open Unity.
Play some spatial audio in Unity. Works!

It would be nice if the Microsoft Spatializer was updated to handle these mode switches automatically without needing to restart Unity.

Incorrect plugin import settings for standalone x86_64

In the latest version 2.0.37 the import settings for x86_64 HrtfDsp.dll are not configured correctly - x64 should be checked in Platform settings for standalone builds. At the moment both available options (x86, x64) are unchecked.

Missing mainfast?

When I try to add the code into unity via package manager and the git link I receive this error

[Package Manager Window] Cannot perform upm operation: Unable to add package [https://github.com/microsoft/spatialaudio-unity.git]:
[https://github.com/microsoft/spatialaudio-unity.git] does not point to a valid package. No package manifest was found. [NotFound].

I'm using Windows 11 and unity 2021.2.19

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.