-
-
Notifications
You must be signed in to change notification settings - Fork 8.9k
win-asio: ASIO host for obs-studio #12733
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
b408fbf to
763a7f3
Compare
4c9de0e to
aa3d977
Compare
|
Update
|
44c4228 to
3c02361
Compare
|
Update 10-19-25 |
PatTheMav
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel like I need to see the code "in action" to better gauge its correctness. I there something like an "ASIO virtual device" or something I can install in my VM and then use this plugin with it?
4e0365f to
60aa7f2
Compare
6b842cd to
4b17680
Compare
75250b3 to
feaba5b
Compare
This adds: - an ASIO Input source, allowing audio capture of devices using Steinberg ASIO audio SDK on windows. This allows low latency capture. - an ASIO output, which will allow routing audio from OBS to any ASIO device. A per channel routing is provided. The UI to setup the ASIO output is provided in a later commit. Signed-off-by: pkv <[email protected]>
This adds an ASIO output entry in Tools Menu allowing to setup audio output from obs to an ASIO device. Signed-off-by: pkv <[email protected]>
On windows, this adds an additional audio track (Track 7) which is used to output a mix of monitored sources. Currently the mixing is left to WASAPI on windows for WASAPI monitoring devices. But ASIO SDK doesn't allow multiple clients (although individual drivers might allow it) and therefore can not mix them. So we have to do the mixing on obs side. Signed-off-by: pkv <[email protected]>
This enables a monitoring track for output. Signed-off-by: pkv <[email protected]>
This adds a QToolButton to the Audio Settings on Windows. This triggers in turn a dedicated settings for the ASIO monitoring output. If no ASIO driver is detected in the system, the panel displays an explanatory message. The panel allows to: - select an ASIO monitoring device; - for each output channel of the ASIO device, one can select any channel from any of the 6 tracks or from the monitoring mix. Signed-off-by: pkv <[email protected]>


Description
ASIO is a driver standard developed by Steinberg for low-latency audio. It is commonly used in pro audio.
It was unfortunately not possible for a long time to write a native ASIO host in obs because of license issues.
This has changed thanks to a partnership between the project and Yamaha Steinberg:
https://www.steinberg.net/press/2025/obs-collaboration/
The ASIO sdk is now released under dual licensing, including GPL v3 which is compatible with obs-studio.
Historical aside. When I got involved with obs coding, after working on surround sound support, my first plugin
endeavor was to write an asio source, which was developed eventually in collaboration with Andersama. It was a great learning experience. The ASIO sdk is notoriously tricky with lots of pitfalls for hosts and drivers alike. It was so daunting that at that time (early 2018) we relied on third-party libraries (RTAudio, Bassasio, portaudio) and now JUCE. The last incarnation of our asio plugin for obs (based on JUCE) was mostly coded by Andersama. It has been superseded in many ways by another third-party plugin based also on JUCE, atkaudio which has lot of capabilities but again relies on a third-party library. And anyway our ultimate goal had always been to add support for ASIO into obs.
This PR brings ASIO support in obs-studio natively: no third-party library is used but Steinberg SDK is leveraged directly.
For the host implementation, we have taken cues from JUCE ASIO host which documents a lot of pitfalls.
Our ASIO host provides:
The asio output in turn allows:
Technical note
The asio callback processes both audio from host to device and from device to host at the same time. The main difference with wasapi, is that any monitored audio sent to the device is not automatically mixed; it is the responsibility of the host to do the mixing. That is why asio can not be seamlessly integrated into libobs/audio-monitoring and that we resorted to creating an obs-output for asio.
This output is controlled through a frontend plugin which instead of adding an entry into the tool menu (as is customary) is callable from Settings > Audio alongside monitoring devices (wasapi on windows).
Screenshots:
ASIO source

ASIO source with channel selection

ASIO source with device selection

ASIO monitoring integrated to audio settings

ASIO monitoring panel

ASIO monitoring panel with track channel selection. Not the special monitoring track

Motivation and Context
ASIO brings the following advantages:
How Has This Been Tested?
Tested on windows 11 pro with several asio devices:
Testers are welcome to report their results with their interface and I'll update the list.
Types of changes
Checklist: