ASIO DirectX Full Duplex Driver Crashes on Windows 10 x64

Related to my previous post.
This old/default driver is installed by some applications, and it crashes for me on win 10 64
Can anyone confirm?
It crashes when trying to clear the buffers

    // clear the channels that are used with the dummy stuff
    outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[0], preferredBufferSize);
    outputFormat[i].clear (bufferInfos [outputBufferIndex + i].buffers[1], preferredBufferSize);

It might have something to do with my computer having io config of 2 in, 4 out. ?

Got a stack trace?

Will this do?:

App.exe!memset() Line 75	Unknown
00000243d7ef2720()	Unknown

App.exe!juce::zeromem(void * memory, unsigned __int64 numBytes) Line 34 C++
App.exe!juce::ASIOSampleFormat::clear(void * dst, const int numSamps) Line 156 C++
App.exe!juce::ASIOAudioIODevice::createDummyBuffers(long preferredSize) Line 1089 C++
App.exe!juce::ASIOAudioIODevice::openDevice() Line 1234 C++
App.exe!juce::ASIOAudioIODevice::ASIOAudioIODevice(juce::ASIOAudioIODeviceType * ownerType, const juce::String & devName, const _GUID clsID, const int slotNumber) Line 351 C++
App.exe!juce::ASIOAudioIODeviceType::createDevice(const juce::String & outputDeviceName, const juce::String & inputDeviceName) Line 1525 C++
App.exe!juce::AudioDeviceManager::setAudioDeviceSetup(const juce::AudioDeviceManager::AudioDeviceSetup & newSetup, bool treatAsChosenDevice) Line 539 C++
App.exe!AudioDeviceSettingsPanel::comboBoxChanged(juce::ComboBox * comboBoxThatHasChanged) Line 321 C++
App.exe!juce::ListenerList<juce::ComboBox::Listener,juce::Array<juce::ComboBox::Listener * __ptr64,juce::DummyCriticalSection,0> >::callChecked<juce::Component::BailOutChecker,juce::ComboBox * __ptr64>(const juce::Component::BailOutChecker & bailOutChecker, void (juce::ComboBox *) * callbackFunction, juce::ComboBox * param1) Line 182 C++

Why are we doing this on a Sunday, and in this weather ?

We are also having issues with this particular driver, our stack trace looks very much like the one posted above.
Previously we used PortAudio which works so I thought i´d compare the implementations to see what is going on and found this inside the initialization of ASIO devices inside PortAudio.

            // Since portaudio opens ALL ASIO drivers, and no one else does that,
            // we face fact that some drivers were not meant for it, drivers which act
            // like shells on top of REAL drivers, for instance.
            // so we get duplicate handles, locks and other problems.
            // so lets NOT try to load any such wrappers. 
            // The ones i [davidv] know of so far are:

            if (   strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0
                || strcmp (names[i],"ASIO Multimedia Driver")          == 0
                || strncmp(names[i],"Premiere",8)                      == 0   //"Premiere Elements Windows Sound 1.0"
                || strncmp(names[i],"Adobe",5)                         == 0   //"Adobe Default Windows Sound 1.5"
               )
            {
                PA_DEBUG(("BLACKLISTED!!!\n"));
                continue;
            }

I dont know if it is applicable on the JUCE implementation but i thought i share it if anyways.

Is there any other known workaround for JUCE currently? I mean, i could do something similar and ignore these drivers inside scanForDevices in the juce_win32_ASIO but i´d rather not hack your code :slight_smile:

1 Like

I can confirm that every time I have a sale, I’m having crashing with the Scarlett 2i4 First Generation. It crashes for all users no matter what we do.

I think blacklisting these drivers is a sensible thing to do. I’ll push something shortly.

2 Likes

Thanks! That should solve the problem.

What’s the status on this one?

Added to develop a while ago:

1 Like

@ed95 thank you so much for addressing this. Not sure about others’ systems but on mine (Windows 10, with the buggy driver coming from Cubase 6), the blacklist still doesn’t work. The string to match against should be “ASIO DirectX Full Duplex” but isBlacklistedDriver() checks for “ASIO DirectX Full Duplex Driver”. I edited it to match the right string and it works perfectly.

Thanks, this should work in both cases:

Yup, tested and it works. Thanks!

1 Like