jackaudio / jack2

jack2 codebase
GNU General Public License v2.0
2.22k stars 376 forks source link

FR: Replace Portaudio with JUCE as audio backend on Windows #669

Open kmatheussen opened 3 years ago

kmatheussen commented 3 years ago

Hi there, I don't really expect anyone to do this, I'm just adding this ticket because there's been a few problems with portaudio: Default audio interface often don't start, WDM-KS crashes for certain drivers unless you manually remove an "assert(..)" call from the source code (!), lots of trouble with WASAPI (I'm still not confident it's working properly), not that much activity in general, last stable release in 2016.

JUCE on the other hand is more actively developed, and I think it's a good chance it doesn't have the same type of problems as portaudio.

I looked at this a couple of months ago, but didn't implement anything. I'm not sure how easy it is to use JUCE either because the API seems a lot more high level than portaudio.

So this ticket is just a heads up about something that might be a very good idea.

falkTX commented 3 years ago

I actually thought of the same, but the amount of work needed for this has put me off from it.

In terms of cross-platform audio libraries, there is not a whole lot of stuff for realtime. portaudio has the situation you described. rtaudio is very simplistic in nature, very limited.

I had exactly the same situation in Carla. I was using rtaudio but then switched to juce for the audio device backend on windows and mac, and it works much better.

Be-ing commented 2 years ago

I think all cross platform audio I/O libraries have some API limitations and bugs. It may be worthwhile to ditch them all and directly use ASIO and WASAPI.

falkTX commented 2 years ago

I expect a patch to come soon then :)

Be-ing commented 2 years ago

Probably not soon... but maybe eventually. I'd be happy if someone beats me to it.

Be-ing commented 2 years ago

Is ASIO really still needed today since WASAPI exclusive mode now exists? Are there devices that only support ASIO but not WASAPI?

Be-ing commented 2 years ago

For context, the PortAudio backend goes back at least until the initial import of the code from SVN to Git in 2006. One of the headers has a copyright date of 2004-2008, so it may be go back all the way to 2004. WASAPI was introduced with Windows Vista, which was released in 2007. Windows' built in USB Audio Class driver supports WASAPI which covers a lot of modern hardware. I suppose just about every audio interface made since 2007-2008 supports WASAPI, so unless you really care about about supporting ancient PCI audio interfaces, I think it would be fine today to only support WASAPI.

FWIW, my NI Traktor Kontrol S4 Mk3 is USB Audio Class compliant and Native Instruments' driver downloads page only has an optional ASIO driver for it. It works just fine with Traktor and other software using WASAPI (without installing any driver). Likewise my Allen & Heath Xone K2 which is also USB Audio Class compliant works just fine with WASAPI (without installing any driver).

Be-ing commented 2 years ago

Using WASAPI with PortAudio is problematic because PortAudio seems to break up each stereo channel pair into a separate device. It also breaks up input and output into separate devices so WASAPI can't currently be used with JACK in duplex. I'm not certain if the issue is in PortAudio, JACK's usage of PortAudio, or both. It may be feasible to overcome these limitations with PortAudio, but I think it would likely be better to ditch PortAudio and just use WASAPI directly.

SynthiaPayne commented 2 years ago

I'm not sure this is relevant, but we have to disable exclusive mode in order to run JACK at the same time as Zoom. Many people run a Zoom or other conferencing app with JACK, and must disable exclusive mode in order to do both simultaneously on the same windows machine.

On 2/9/2022 6:48 AM, Be wrote:

Is ASIO really still needed today since WASAPI exclusive mode was introduced in Windows 10?

— Reply to this email directly, view it on GitHub https://github.com/jackaudio/jack2/issues/669#issuecomment-1033839654, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAVZZKYT6DVCH6LOTAFZKODU2J5D5ANCNFSM4TUPZFGQ. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you are subscribed to this thread.Message ID: @.***>

Be-ing commented 2 years ago

There could be an option to use WASAPI in shared mode. Even better would be a shim to route audio from programs that output to WASAPI into JACK like JackRouter does for ASIO.