naudio / NAudio

Audio and MIDI library for .NET
MIT License
5.37k stars 1.09k forks source link

Unable to set SetDuckingPreference #1135

Open ReferenceType opened 3 months ago

ReferenceType commented 3 months ago

Hi Im trying to do Stream Attenuation(Ducking), same as what skype does during call. I am unable to set SetDuckingPreference on MMDevice, it doesnt change anything.

platform : Windows 11

What i did is :

defDevice.AudioSessionManager.OnSessionCreated += AudioSessionManagerOnSessionCreated;

private void AudioSessionManagerOnSessionCreated(object sender, IAudioSessionControl newSession)
{
     cc = newSession as IAudioSessionControl2;
    int hres =  cc.SetDuckingPreference(true);
}

where this device is used on WasapiOut.

Where i checked windows API for IAudioSessionControl2::SetDuckingPreference method (audiopolicy.h) I dont know if you already implemented this or am i missing a hidden feature where i can activate Ducking.

Any help is appreciated.

Thanks

ReferenceType commented 3 months ago

Ok so upon some trial and error it seems you cant enumerate device and select even if its same device. it only works on default with communication role

var outputDevice = new MMDeviceEnumerator().GetDefaultAudioEndpoint(DataFlow.Render, Role.Communications);

if you enumerate for same device, it wont duck.

    foreach (MMDevice wasapi in enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active))
        ...

So i cant provide options for user.

If you know a workaround please let me know.