Degath's Ducker

Free Degath's Ducker 3.1.0.20

Degath

Member
Here's some more smaller things you might want to look into:

  • Pressing "Update" but then closing DD before the update check process was finished causes the application executable to remain with the name "Degath's Ducker.exe.old" - one has to manually rename it in order to make it work again (might be a problem for less advanced users)
  • Pressing "Update" and then "Settings" in the main menu causes an unhandled exception - the update check still finishes but then it is impossible to click something either the main window, the message box or the exception dialog, the program can only be closed with the task manager
  • If I set a default template there doesn't seem to be a direct way to revert it to not having a default template - deleting that template and then saving it again is a workaround but there should be a simpler way (maybe just provide an empty item in the combo box to be selected)
  • Is the log that is shown in the settings saved anywhere? From the settings window it's not possible to copy-paste (no context menu on right click and Ctrl+C or Ctrl+Ins do nothing) or save the contents to a file. If you ask me to send you the log my only option would be a screenshot if I don't want to manually transcribe everything
  • Speaking of the log, here it shows a message that it can't register for the process exit event of ts3client_win64.exe - which is the TeamSpeak client in 64 bit version - because of "Access Denied". As one would expect running DD as admin solves that, but that's not my point here. My point is that after I closed the TeamSpeak client the log fills with a "No Process with ID 1234 is being executed" error messages every 2 seconds (apparently caused by your title check). Instead of spamming those messages, why not use that error to have DD recognize the fact that a process has exited? This would compensate for the problem that the exit event can't be received for that process.
  • There should be separate menu entries for "Save" and "Save As". When I want to overwrite my current template I always have to type the full name again in the "Save..." dialog box, which is annoying especially when my template name is pretty long. Alternatively, make the current "Save..." dialog box have the name of the currently loaded template preset in the text box.
  • Maybe it would be a good idea to also include the current template's name in the DD window title. E.g. "Degath's Ducker - My template".
    • And if unsaved changes were made maybe indicate it there too by using an asterisk like "Degath's Ducker - My template*".
    • Oh yeah, and while at it, ask the user whether he wants to save the template if there are unsaved changes while he is trying to exit the application ;-)
  • I think it's not ideal that when template contains target A and target B, but when target B is a program currently not running it is not shown on the target list at all. Under normal circumstances this might not produce any issues. But it could make error tracking really hard if that target is actually running but is not detected by DD for some reason. I will never know whether it just got lost from my template, is not shown because of a display bug or is not shown because the process is not detected by DD.
    • Also I think it's not a good design when I have to run that target program first to be able to delete it from my template. What if I already uninstalled it but forgot to remove it from my template? I would have to create a new template leaving this target out if I want to clean this up. If I don't, who knows what other problems it creates when DD is constantly looking for an application that will never be there again? Especially if I really forgot about this when uninstalling it, I might never find out that this target is still in the template but just invisible because it is not running right now.
    • Solution suggestion 1: always show all targets, but indicate if they are not active/running right now, e.g. by showing it grayed or displaying an extra "disabled" icon.
    • Solution suggestion 2: leave it as it is but at the top or bottom of the target list provide a "[X] Show inactive targets" checkbox that can make them visible. Should probably be combined with suggestion 1.
  • Would be good to have DD remember its window size related to the current template if saved. Alternatively, just remember the window size regardless of the loaded template, so I can at least choose a window size that fit all my templates nicely and don't have to resize the window after every new start of the program.


Wow! Excellent points and a lot of them. I shall start working on getting these done. Going to take me some time but thank you for pointing these out.
 

Degath

Member
I did some more tests regarding this issue, here's the steps I've conducted and my findings:
  • Make sure Windows microphone level is set to max (100)
  • Delete the config file (Settings.ddt) and start DD (so it's started with default settings)
  • Add a trigger and chose your microphone, leave all other settings untouched and "Confirm"
  • File -> Save... -> "Test"
  • Exit DD and restart
  • Check Windows microphone level - result: still at 100
  • File -> Open... -> "Test"
  • Check Windows microphone level - result: still at 100
  • Conclusion: Starting DD with a template and opening it manually works fine, no undesired microphone level change occurs
  • Settings -> Templates -> Set default template to "Test" by choosing it from the combobox, Apply the settings
  • Exit DD and restart
  • Check Windows microphone level - result: level was set to 0
  • Conclusion: the problem is related to the "default template" feature, not using this feature avoids this problem
  • Exit DD
  • Check Windows microphone level - result: level was reverted to 100
To answer some of your above questions: the level change occurs immediately when DD is started, but only when it has a default template set that includes the microphone as a trigger (targets don't need to be on the template to reproduce this). The mic level is reverted immediately after DD is closed.
I kept the respective Windows dialog window (Sound -> Recording -> Mic device -> Properties -> Levels) open during my tests and could see the change there immediately, no need to reopen that window).

This is good to know, thank you. The default template system is quite new and frankly relatively untested so no wonder it was the cause of this issue. Just strange than nobody else noticed before. I will fix this as soon as possible!
 

Degath

Member
I did some more tests regarding this issue, here's the steps I've conducted and my findings:
  • Make sure Windows microphone level is set to max (100)
  • Delete the config file (Settings.ddt) and start DD (so it's started with default settings)
  • Add a trigger and chose your microphone, leave all other settings untouched and "Confirm"
  • File -> Save... -> "Test"
  • Exit DD and restart
  • Check Windows microphone level - result: still at 100
  • File -> Open... -> "Test"
  • Check Windows microphone level - result: still at 100
  • Conclusion: Starting DD with a template and opening it manually works fine, no undesired microphone level change occurs
  • Settings -> Templates -> Set default template to "Test" by choosing it from the combobox, Apply the settings
  • Exit DD and restart
  • Check Windows microphone level - result: level was set to 0
  • Conclusion: the problem is related to the "default template" feature, not using this feature avoids this problem
  • Exit DD
  • Check Windows microphone level - result: level was reverted to 100
To answer some of your above questions: the level change occurs immediately when DD is started, but only when it has a default template set that includes the microphone as a trigger (targets don't need to be on the template to reproduce this). The mic level is reverted immediately after DD is closed.
I kept the respective Windows dialog window (Sound -> Recording -> Mic device -> Properties -> Levels) open during my tests and could see the change there immediately, no need to reopen that window).

The only way I could reproduce this was by manually setting the Max volume limit to zero. I don't know how this could happen without you actually changing it via the target menu though. I did stumble upon a related bug while debugging this which has now been fixed for the next release.

You can check the Settings.ddt (its just a text file) file for "MaxVolume" which should be 1.0 by default. If it is 0 and you specifically did not change it at any point from the target menu then there must be some strange situation where it is somehow changed for no apparent reason. If it is 1.0 and the behavior still occurs I would be baffled since no other setting can possibly lower the volume at load.
 

Degath

Member
Thanks for this tool. It does the job perfectly. And unlike a lot of free programs from single developers this one has actually a neat GUI, looking really professional. Also it has pretty good performance, the DD process always alternates between 0% and 1% CPU load in Windows Task Manager at all times. Keep up the good work!

However, unfortunately for me it comes with a problem that makes it unusable right now. I hope it is something that can be solved.

There seems to be something that the program does every 1.5 to 2 seconds. Because that's when my mouse stops for a split second when moving it in CS:GO while DD is running. So every 1.5 to 2 seconds when moving the mouse in the game I will get a short lag, sometimes barely noticable, sometimes causing a real disruption. As a result the game is unplayable as precise mouse movements are important.
I am sure it's only the mouse that is acting weird, because in the game my FPS are not dropping (got them limited to 128 FPS and that's where they stay all the time) and when I am moving around in the game solely by keyboard no such lags occur.
If I close DD the problem immediately disappears. If I reopen it the problem comes back immediately, so I am sure it's caused by DD somehow. Also I've never seen something like this before now and before trying out DD.

It happens regardless of triggers and targets - it occurs even with no triggers or targets added in DD at all. And also when DD is disabled (power button at the top in DD is red). I doubt it's related to system load or load caused specifically by the DD process (as I said above it's at 0-1%) and also my total system load while playing is only around 15%-20% (CS:GO is an old game :P).

Using DD 3.1.0.5 on Windows 7 x64, mouse is a Logitech G502 with the Logitech drivers installed. I tried without OBS or any additional software running, just DD and the game.

Any ideas? Is DD doing something every 2 seconds or a little faster than that, e.g. poll for available sound devices in the system? I don't think DD causes this directly, it's rather a side-effect of DD making something busy in the OS which then affects the mouse input processing.


Made a quick fix to allow the disabling of name updating. You can try that for now until I can get something better working!
 

YorVeX

Member
The only way I could reproduce this was by manually setting the Max volume limit to zero. I don't know how this could happen without you actually changing it via the target menu though. I did stumble upon a related bug while debugging this which has now been fixed for the next release.

You can check the Settings.ddt (its just a text file) file for "MaxVolume" which should be 1.0 by default. If it is 0 and you specifically did not change it at any point from the target menu then there must be some strange situation where it is somehow changed for no apparent reason. If it is 1.0 and the behavior still occurs I would be baffled since no other setting can possibly lower the volume at load.

As you can see my scenario started with deleting the config file and didn't include manually changing the volume limit so it had to come from somewhere else. Probably the bug you mentioned, because now with 3.1.0.6 I am no longer able to reproduce it. Good job there!
 

YorVeX

Member
Made a quick fix to allow the disabling of name updating. You can try that for now until I can get something better working!
I tried and it works, the game is no longer lagging with "Update Names" disabled. Thank you so much for helping out with this so quickly!
 

Degath

Member
3.1.0.7 is now released and mostly includes fixes to some of the issues pointed out by YorVeX! There is still a lot to do but this is a good start. Its good to have someone point out possible improvements so thank you!
 

YorVeX

Member
3.1.0.7 is now released and mostly includes fixes to some of the issues pointed out by YorVeX! There is still a lot to do but this is a good start. Its good to have someone point out possible improvements so thank you!
Ah, that's cool! Let's see...

  • New system to get session name updates (should not cause lag anymore)
    • Yep. I re-enabled name updates and can confirm that updating the name (Spotify showing the current track in my case) is working while at the same time no longer causing mouse lags in my game.
  • Several fixes to update procedure
    • Confirmed. During update procedure it is no longer causing problems to close the program (nice solution to let the user decide!) or try to enter the Settings.
  • Copyable log (still not saved to file)
    • That'll do for now, good!
  • Save option in addition to Save as
    • Nice. One remark here though: as is common practice in most application the "Save" menu item should act as "Save as" in case no template has been loaded/saved yet. Currently it seems to do nothing without an active template.
  • Title now has current template name (no asterisk to signify unsaved changes yet)
    • Love it <3
  • Window size is now saved as well
    • Yes, but only if you open the Settings dialog and click Apply. Is that intended behaviour? I don't think it is very intuitive this way.
      • Beware of saving on program exit though - if a user exits your program while the window is minimized (e.g. through task manager or by right-clicking the application on the task bar) the OS will report the window size as 0,0 and that's what you would save. Better internally keep track of window size by watching for resize events and use that for saving when the program is closed.
  • More..?
    • Yeah, I can reset the default template to an empty item now \o/

Good job there dude, thanks again!

During my test it happened 2 times that the ducking was suddenly disabled ("power LED in main menu area red") although I am sure I haven't clicked it. I haven't found out yet what triggered it but will report here as soon as I found a scenario. Or is there some automatism I am not aware of?

Another thing I noticed: I have 2 targets, Spotify and TeamSpeak. As expected when I open my template while TeamSpeak is not running it shows only Spotify. But if I click "Save" now apparently it removes TeamSpeak as a target from the template, because if I now run TeamSpeak and restart DD it is still not coming back, TS is gone for good.
Was that a change from you to address another problem I mentioned (not being able to remove invisible sources) or is it just a bug? Regardless, I think now it's even worse than before. I can delete a non-existant target from my template now but it's intransparent to me as a user what the logics behind this is. Starting my template without the target just keeps it invisible - I know that, because if I start TeamSpeak and restart DD it comes back. But saving the target while it is invisible actually deletes the target from the template.
Permanent deletions should never happen silently without the user confirming that he wants exactly that.

Do you plan on accepting Bitcoin donations? I am concerned about my privacy, hence don't want to use PayPal for donations. If you accepted Bitcoin donations I might buy you a beer or two ;-)
 
Last edited:

Degath

Member
Ah, that's cool! Let's see...

  • New system to get session name updates (should not cause lag anymore)
    • Yep. I re-enabled name updates and can confirm that updating the name (Spotify showing the current track in my case) is working while at the same time no longer causing mouse lags in my game.
  • Several fixes to update procedure
    • Confirmed. During update procedure it is no longer causing problems to close the program (nice solution to let the user decide!) or try to enter the Settings.
  • Copyable log (still not saved to file)
    • That'll do for now, good!
  • Save option in addition to Save as
    • Nice. One remark here though: as is common practice in most application the "Save" menu item should act as "Save as" in case no template has been loaded/saved yet. Currently it seems to do nothing without an active template.
  • Title now has current template name (no asterisk to signify unsaved changes yet)
    • Love it <3
  • Window size is now saved as well
    • Yes, but only if you open the Settings dialog and click Apply. Is that intended behaviour? I don't think it is very intuitive this way.
      • Beware of saving on program exit though - if a user exits your program while the window is minimized (e.g. through task manager or by right-clicking the application on the task bar) the OS will report the window size as 0,0 and that's what you would save. Better internally keep track of window size by watching for resize events and use that for saving when the program is closed.
  • More..?
    • Yeah, I can reset the default template to an empty item now \o/

Good job there dude, thanks again!

During my test it happened 2 times that the ducking was suddenly disabled ("power LED in main menu area red") although I am sure I haven't clicked it. I haven't found out yet what triggered it but will report here as soon as I found a scenario. Or is there some automatism I am not aware of?

Another thing I noticed: I have 2 targets, Spotify and TeamSpeak. As expected when I open my template while TeamSpeak is not running it shows only Spotify. But if I click "Save" now apparently it removes TeamSpeak as a target from the template, because if I now run TeamSpeak and restart DD it is still not coming back, TS is gone for good.
Was that a change from you to address another problem I mentioned (not being able to remove invisible sources) or is it just a bug? Regardless, I think now it's even worse than before. I can delete a non-existant target from my template now but it's intransparent to me as a user what the logics behind this is. Starting my template without the target just keeps it invisible - I know that, because if I start TeamSpeak and restart DD it comes back. But saving the target while it is invisible actually deletes the target from the template.
Permanent deletions should never happen silently without the user confirming that he wants exactly that.

Do you plan on accepting Bitcoin donations? I am concerned about my privacy, hence don't want to use PayPal for donations. If you accepted Bitcoin donations I might buy you a beer or two ;-)

Answers to some of your points:
  • Window size at the moment is saved whenever any saving takes place. I will figure a better way to save it for the next update.
  • The disabling of ducking should not occur without user input. It can be changed by a hotkey, the button on the main window or the button in the tray menu. Are you sure you didn't accidentally push the tray menu button or a hotkey? If not, do inform me if you find the scenario!
  • The template saving is exactly as you describe and has not changed. I think I know how to tackle this along with the fact that non-existing sessions are not show even if they are a part of the template. Just a more complex problem with the fact that it is at a quite central part of the program demanding more attention and finesse.
  • I currently don't have a bitcoin wallet (haven't had a need yet) but perhaps I shall make one to allow more donation options. I have no idea what I would do with bitcoins but I guess I can find something once I have some.
Thank you once again!
 

Degath

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

Now shows whole template content!

This is quite a large update of the template system. Now shows all triggers and targets regardless of the existence of the actual source. This makes editing templates easier and more user friendly. Generally speaking the program should behave more like one would expect. In addition several bugs have been fixed and some UI elements have been modified.

Read the rest of this update entry...
 

Degath

Member
Ah, that's cool! Let's see...

  • New system to get session name updates (should not cause lag anymore)
    • Yep. I re-enabled name updates and can confirm that updating the name (Spotify showing the current track in my case) is working while at the same time no longer causing mouse lags in my game.
  • Several fixes to update procedure
    • Confirmed. During update procedure it is no longer causing problems to close the program (nice solution to let the user decide!) or try to enter the Settings.
  • Copyable log (still not saved to file)
    • That'll do for now, good!
  • Save option in addition to Save as
    • Nice. One remark here though: as is common practice in most application the "Save" menu item should act as "Save as" in case no template has been loaded/saved yet. Currently it seems to do nothing without an active template.
  • Title now has current template name (no asterisk to signify unsaved changes yet)
    • Love it <3
  • Window size is now saved as well
    • Yes, but only if you open the Settings dialog and click Apply. Is that intended behaviour? I don't think it is very intuitive this way.
      • Beware of saving on program exit though - if a user exits your program while the window is minimized (e.g. through task manager or by right-clicking the application on the task bar) the OS will report the window size as 0,0 and that's what you would save. Better internally keep track of window size by watching for resize events and use that for saving when the program is closed.
  • More..?
    • Yeah, I can reset the default template to an empty item now \o/

Good job there dude, thanks again!

During my test it happened 2 times that the ducking was suddenly disabled ("power LED in main menu area red") although I am sure I haven't clicked it. I haven't found out yet what triggered it but will report here as soon as I found a scenario. Or is there some automatism I am not aware of?

Another thing I noticed: I have 2 targets, Spotify and TeamSpeak. As expected when I open my template while TeamSpeak is not running it shows only Spotify. But if I click "Save" now apparently it removes TeamSpeak as a target from the template, because if I now run TeamSpeak and restart DD it is still not coming back, TS is gone for good.
Was that a change from you to address another problem I mentioned (not being able to remove invisible sources) or is it just a bug? Regardless, I think now it's even worse than before. I can delete a non-existant target from my template now but it's intransparent to me as a user what the logics behind this is. Starting my template without the target just keeps it invisible - I know that, because if I start TeamSpeak and restart DD it comes back. But saving the target while it is invisible actually deletes the target from the template.
Permanent deletions should never happen silently without the user confirming that he wants exactly that.

Do you plan on accepting Bitcoin donations? I am concerned about my privacy, hence don't want to use PayPal for donations. If you accepted Bitcoin donations I might buy you a beer or two ;-)

  • Templates should now work more like you might expect!
  • Window size saving now actually occurs right when you change it!
  • "Save" works like "Save as.." if no template is in use!
  • Still no asterisk :D
    • Going to have to make some system to keep track.
    • Then also trying to close the program with unsaved changes could prompt the user.
  • Alternative donation methods enabled! (Beer? :D)
 

Degath

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

Just a tiny update

Added a checkbox in the settings to duck all except triggers. If checked the sessions won't show in the targets list but will none the less be ducked. This also means that the thresholds and volume limits can't be adjusted without separately adding the audio source as a target.

Also made some other minor changes that should not be noticeable.

Read the rest of this update entry...
 

YorVeX

Member
I like the update and didn't run into any problems so far.
If you feel like working on it a bit more maybe you could consider adding a "Duck Toggle" hotkey beside the already existing "Push-To-Duck" hotkey so users can choose whether they want to have a key they have to keep pressed or have a trigger that toggles ducking on and simply leaves it on for those longer talking sessions (pushing the toggle again turns ducking off).
 

Degath

Member
I like the update and didn't run into any problems so far.
If you feel like working on it a bit more maybe you could consider adding a "Duck Toggle" hotkey beside the already existing "Push-To-Duck" hotkey so users can choose whether they want to have a key they have to keep pressed or have a trigger that toggles ducking on and simply leaves it on for those longer talking sessions (pushing the toggle again turns ducking off).

I'm working on the hotkey system to allow controller hotkeys currently and adding a toggle option into the mix should only take a moment. Although it still might take a while since controller support was more troublesome than expected. A good suggestion once again, thank you!
 

Degath

Member
By "controller" you mean HID like joysticks and game pads?

XInput controllers at first since support for that was requested. There might be other controllers that use it in addition to the standard xbox controller so all of those should work. I don't think I will be extending this kind of support too far though since its quite a lot of work in addition to me no actually owning any controllers to test my code with.

Kinda tedious making a version and having at most one test per day done by a friend. Then try to fix whatever is broken/bugged and wait a day to get it tested.
 

YorVeX

Member
I got an XBox controller and are always happy to help. Although I must admit that I probably can't do more than the one test per day your friend does. But at least it's one more tester.
I'll drop you a feedback through your website so you get my mail address.
 

RafeDonson

New 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.
 
Top