Degath's Ducker

Free Degath's Ducker 3.1.0.20

Degath

Member
Could anyone tell me how to use ducking with a video capture source? I've been using OBS to capture video from a Hauppage device, which doesn't have ducking built in. Both Degath and the pay Auto Ducking duck sound on my computer, as if I was streaming a PC game, but I can't get them to duck a source that's coming in through HDMI.

I haven't tried this kind of setup but I would expect the source to show up as a recording device. You had to choose a audio input device for the video capture device in OBS right? Use that as the target in the Ducker and you should be set. Oh, it seems it's possible to only stream the audio which would imply the source indeed isn't visible as a recording device in windows.

Hmm.. I can think of one possible way to maybe do what you need. Selecting the output audio to desktop (in OBS video capture device) should create a audio session which you can select in the Ducker. Since it doesn't read output to desktop only I suspect it will still stream the audio directly as well so if that direct streaming can be muted this will work (with a slight delay?). Then get a plugin for OBS to enable audio sources and select the desktop audio source in there.

I myself don't have any capture devices at hand so I can't check if the audio can be muted from direct streaming while still playing on desktop which seems to be the only uncertainty. Delay length might also be problematic.

Edit:
Or if you can get the audio to play (or show as a recording device) in windows by some other means and leave the OBS video capture device audio input empty and add the audio using a separate OBS audio source (plugin needed?).
 
Last edited:
Can you add beeping sound effect to the program?

So when I am about to curse or say something that I do not want others to hear I can mute my mic and add beeping effect

Is this even possible to implement?
 

Degath

Member
Can you add beeping sound effect to the program?

So when I am about to curse or say something that I do not want others to hear I can mute my mic and add beeping effect

Is this even possible to implement?

It might be possible but honestly I don't think this will be a feature for the Ducker. Maybe some hotkey soundboard or something. If you actually meant that you wanted to write a sound to your microphone input signal that will probably be somewhat difficult and most likely such a feature will be hard to find in any existing program. Might be doable using a vst host if you can bind a button to fire a sound.

In any case good luck in your hunt!
 

Degath

Member
Degath updated Degath's Ducker with a new update entry:

Xbox controller support for hotkeys!

Finally a new release!
  • Xbox controller support
  • Toggle duck effect option for hotkeys
  • New hotkey system with unlimited* number of hotkeys
  • Some small changes in hotkey behavior
  • Hotkeys will be reset due to new implementation
  • Been so long can't even recall every change
*Some limitations may apply :D

My short testing didn't reveal any problems but there may very well be some issues so please report them to me!

Read the rest of this update entry...
 

Altair

New Member
I've been having trouble with the latest version, but I think it's actually more related to the Windows 10 Anniversary update because that's when I first noticed the problem I've having.

Specifically, Degath's Ducker doesn't seem to pick up my microphones properly. For a long time I thought it wasn't working at all, but recently I discovered that there appears to be some sort of threshold on the detection. I have to practically scream into the mic to get it to pick up at all, but when it does detect something it's as if it's receiving it at full volume, because the levels shoot up. It's like there's a high noise gate on the detection.

I should also note that the ducking itself works just fine when the microphone actually is detected, and the target sources are picking up fine as well. It's simply a problem with the trigger sources for whatever reason.

Has anybody else been having similar problems or have any suggestions?
 
Last edited:

Altair

New Member
I think I've stumbled across the root of the problem, but I have no idea how to solve it. I was reading the documentation regarding peak gain, and I noticed that the example images didn't look anything like the curve I could see, and I couldn't do a thing with the controls to make it look like the examples.

It seems to me like the peak gain settings are messing up the detection of the microphone. I've uploaded some images to demonstrate. One of the default settings and one where I tried changing some things around.

It looks like the settings are squashing anything that doesn't reach a peak of at least half of its range. More obviously if an offset is specified. I can't see a way to make the offset of "0" start at the beginning of the graph (which I assume is a representation of the full range of the microphone).

Any thoughts?

Edit: The 'Line' option seems to have even stranger results. I've uploaded another image showing the behaviour.
 

Attachments

  • default.png
    default.png
    13.8 KB · Views: 55
  • sine.png
    sine.png
    15.6 KB · Views: 52
  • line.png
    line.png
    12.7 KB · Views: 51
Last edited:

Degath

Member
I think I've stumbled across the root of the problem, but I have no idea how to solve it. I was reading the documentation regarding peak gain, and I noticed that the example images didn't look anything like the curve I could see, and I couldn't do a thing with the controls to make it look like the examples.

It seems to me like the peak gain settings are messing up the detection of the microphone. I've uploaded some images to demonstrate. One of the default settings and one where I tried changing some things around.

It looks like the settings are squashing anything that doesn't reach a peak of at least half of its range. More obviously if an offset is specified. I can't see a way to make the offset of "0" start at the beginning of the graph (which I assume is a representation of the full range of the microphone).

Any thoughts?

Edit: The 'Line' option seems to have even stranger results. I've uploaded another image showing the behaviour.

Hi Altair!

This has been a reasonably common issues and I thought I had already fixed it but seems like that is not the case. The same problem has been discussed earlier on this forum as well and the only thing that helps (unfortunately) is to reset the program to it's default settings by deleting the settings file. Guide for this below.

Program settings are saved in the users files. Lets say Windows is on C: drive. Then the program's settings would be at "C:\Users\<USERNAME>\AppData\Roaming\Degath's Ducker v3.X.X\" where <USERNAME> is replaced with your username. AppData folder is hidden by default but can be made visible from the Folder Options menu under View tab or directly accessed by typing %appdata% in the file explorer address bar. Degath' s Ducker folder can be deleted at any point for whatever reason but the program will reset to default settings.

Sorry for the inconvenience.


ps. Well you could also edit the settings file but that is more complicated.

Trigger peak settings should always be identical at the cursive parts below. Boldened parts are adjustable to certain limits. I presume the problem is that sustain or attack lengths are not zero and also release length is not 1.0.

"Peak_DuckLevel":0.0,
"Peak_TotalLength":1000,
"Peak_AttackLength":0.0,
"Peak_SustainLength":0.0,
"Peak_ReleaseLength":1.0,
"Peak_AttackPower":0.5,
"Peak_ReleasePower":
0.1,
"Peak_ReleasePower2":
0.39,
"Peak_AttackFormula":2,
"Peak_ReleaseFormula":
0,
"Peak_LimitControl":false


Oh and then you would probably also need to change the default settings in the file since those are the ones loaded for all audio sessions when they are created.

"TriggerPeakFunction":{
"_attack":{"Type":2,"Start":0.0,"End":0.0,"Length":0.0,"Power":0.5,"Power2":0.0,"LimitControl":false},
"_sustain":{"Type":0,"Start":0.0,"End":0.0,"Length":0.0,"Power":0.5,"Power2":0.0,"LimitControl":false},
"_release":{"Type":
2,"Start":0.0,"End":1.0,"Length":1.0,"Power":0.64,"Power2":0.36,"LimitControl":false},
"Length":1000,"DuckPercent":0.0,"AttackLength":0.0,"SustainLength":0.0,"ReleaseLength":1.0,"AttackPower":0.5,"ReleasePower":
0.64,"ReleasePower2":0.36,"LimitControl":false,"AttackFormula":2,"ReleaseFormula":2}

Duplicate settings.. Oh well. Seems like there is some work to do anyways. I'll just add it to the list :D
 
Last edited:

Altair

New Member
Well now I feel stupid. Sorry for not noticing the previous reports of this issue. I took a quick glance at this thread but only saw usability/feature requests in my skimming.

Deleting the settings fixed the issue. Really I should have tried that first.

Thanks.
 

Degath

Member
Well now I feel stupid. Sorry for not noticing the previous reports of this issue. I took a quick glance at this thread but only saw usability/feature requests in my skimming.

Deleting the settings fixed the issue. Really I should have tried that first.

Thanks.

Glad to help! And besides you informed me that the bug still exists so thank you for that!
 

Degath

Member
That peak gain bug will never be seen again after the next update! I had previously been lazy and used the same class for the ducking function and the peak gain function which made the bug possible. Now the peak gain function has it's own simplified class that makes the bug impossible. Release in a few days possibly.
 

Degath

Member
Degath updated Degath's Ducker with a new update entry:

Been a while since last update here!

There has been several version in between but I bet at least some DD users from here haven't been updating it from other sources so here you go!

There have been several fixes and changes since version 3.1.0.14 with only one in the last one. This version only fixes an issue with custom display scaling that resulted in a crash when trying to add a trigger or entering the settings.

Read the rest of this update entry...
 

YorVeX

Member
I don't know why I haven't thought of this when I asked for saving the window size. Obviously it would be great to also have it save the window position.

Note that there are a few things to watch out for when implementing this. People with multiple monitors (which you'll find relatively many among streamers compared to the average computer user) could move the window to a second screen. That itself is no problem if you're simply saving the coordinates Windows tells you, because e.g. a window to left of the primary screen will simply have a negative X value (because the left edge of the primary screen is X = 0) and if you restore that same negative value the window will appear on the secondary screen where it was before.

Trouble starts if the user at a later point disables that monitor or moves it to a different position (e.g. from left side of the primary monitor to the right side) while your program isn't running. Now later if it is started again and restores those coordinates it will be outside of any screen, invisible to the user. There are ways to still recover such a window but most users don't know them.

The solution is to only restore the window if it is visible on any of the attached screens. Stackoverflow has a few functions that can be used to check this here. Personally I prefer the answer by CrazyTim over the accepted answer, because unlike the other solutions only a specific portion (by default 50%) of the window needs to be visible, which should always be sufficient and you don't limit the user too much.

OBS Classic is apparently using a similar function but without the tolerance and drives me crazy by not saving its location if it's only 1 pixel over the edge of a screen. So don't do the same please but give it some tolerance ;-)
 

Degath

Member
I don't know why I haven't thought of this when I asked for saving the window size. Obviously it would be great to also have it save the window position.

Note that there are a few things to watch out for when implementing this. People with multiple monitors (which you'll find relatively many among streamers compared to the average computer user) could move the window to a second screen. That itself is no problem if you're simply saving the coordinates Windows tells you, because e.g. a window to left of the primary screen will simply have a negative X value (because the left edge of the primary screen is X = 0) and if you restore that same negative value the window will appear on the secondary screen where it was before.

Trouble starts if the user at a later point disables that monitor or moves it to a different position (e.g. from left side of the primary monitor to the right side) while your program isn't running. Now later if it is started again and restores those coordinates it will be outside of any screen, invisible to the user. There are ways to still recover such a window but most users don't know them.

The solution is to only restore the window if it is visible on any of the attached screens. Stackoverflow has a few functions that can be used to check this here. Personally I prefer the answer by CrazyTim over the accepted answer, because unlike the other solutions only a specific portion (by default 50%) of the window needs to be visible, which should always be sufficient and you don't limit the user too much.

OBS Classic is apparently using a similar function but without the tolerance and drives me crazy by not saving its location if it's only 1 pixel over the edge of a screen. So don't do the same please but give it some tolerance ;-)

I actually have this implemented in some other projects but never got around including it in this one. I was also wondering if it would be better to only limit the top bar to be at least partially (50%?) visible. Also an option would be to only check the visibility at startup to give maximum freedom of placement when in use. I'm quite busy at the moment so no promises on update schedule.
 

YorVeX

Member
I actually have this implemented in some other projects but never got around including it in this one. I was also wondering if it would be better to only limit the top bar to be at least partially (50%?) visible. Also an option would be to only check the visibility at startup to give maximum freedom of placement when in use. I'm quite busy at the moment so no promises on update schedule.

Yeah, definitely only check it when loading the location on startup. Everything else can introduce lots of problems because when I move a window between screens it could be partially covered (even more than 50%) by a task bar (if moving from bottom screen to top screen) during that movement and the window shouldn't prevent that.
No hurry dude, thanks for your quick response.
 

YorVeX

Member
Man, I love you! <3
Using your ducker almost every day!

With that last annoyance out of the way it's almost perfect. There is one last thing that comes to my mind that should be checked, which is that the ducker likes to crash if it is active while sound options in Windows are changed (e.g. if the primary sound or input device is changed while the Ducker is active).
But that isn't critical, since I am usually not changing those settings around all the time and the Ducker can simply be restarted and works again without much harm done. But still, in case you find the time you might want to look into this.
 
Last edited:

Degath

Member
Man, I love you! <3
Using your ducker almost every day!

With that last annoyance out of the way it's almost perfect. There is one last thing that comes to my mind that should be checked, which is that the ducker likes to crash if it is active while sound options in Windows are changed (e.g. if the primary sound or input device is changed while the Ducker is active).
But that isn't critical, since I am usually not changing those settings around all the time and the Ducker can simply be restarted and works again without much harm done. But still, in case you find the time you might want to look into this.

I shall fix it once I have time! And for some reason I am not receiving emails of new messages here anymore which caused this delay in response.
 

NisseNisse

New Member
Hi, is there any chance that you could add a AGC to the mail volume?

A simple way automatically adjust to output volume to be leveled out (constant).

I guess that the main volume (or maybe the active audio source) will be set to say 80% to have headroom to adjust the volume up if its to low.
 

Degath

Member
Hi, is there any chance that you could add a AGC to the mail volume?

A simple way automatically adjust to output volume to be leveled out (constant).

I guess that the main volume (or maybe the active audio source) will be set to say 80% to have headroom to adjust the volume up if its to low.

I'm not sure if this is a feature I would add to DD but I have made an app for myself which does exactly what you describe. There are some limitations though. For one the audio loudness is calculated on output device basis which the program tries to balance at a set level by adjusting the volume of your selected app. If this sounds like something you would like let me know and I'll see whether I'll publish it or just give it you.
 
Last edited:
Top