Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Custom volume-gain curve #1

Open
YUCLing opened this issue Jun 18, 2024 · 7 comments
Open

[Feature Request] Custom volume-gain curve #1

YUCLing opened this issue Jun 18, 2024 · 7 comments

Comments

@YUCLing
Copy link

YUCLing commented Jun 18, 2024

For me, how the gain works feels to be different from my original Windows volume works.

The loudness in different volume has changed greatly, it would be nice if I can use a custom curve instead of a simple lerp.

@codeabuse
Copy link

Implemented in #4
Awaiting approval. Anyone can grab my version and build the app.

@not-holar
Copy link
Owner

I wanted to keep the relation between the slider positions 1 to 1, because VoiceMeeter's volume slider already uses the db scale, which is already non-linear and is the most "correct" way of scaling volume regarding perceived volume.

As per the used API's docs:

fMasterVolume
Specifies the current master volume level of the audio stream. The volume level is normalized to the range from 0.0 to 1.0, where 0.0 is the minimum volume level and 1.0 is the maximum level. Within this range, the relationship of the normalized volume level to the attenuation of signal amplitude is described by a nonlinear, audio-tapered curve. For more information about audio tapers, see Audio-Tapered Volume Controls.

It links to this article, which describes that Windows uses the db scale for volume changes too: https://learn.microsoft.com/en-us/windows/win32/coreaudio/audio-tapered-volume-controls

The only difference being that Windows' scale goes from -96 to 0, while this addon app's is from -60 (the minimum possible of voicemeeter) to 0.

The more accurate way of achieving parity with Vindows would be to set the minimum value to -96 instead of -60 (which would probably truncate some of the bottom range of the slider, but would be completely 1 to 1 with how Windows does volume sliders)

@codeabuse
Copy link

codeabuse commented Sep 12, 2024

There must be something missing. If I switch to my Realtek audio device, the perceived volume curve is completely different than one with Voicemeeter, but to the higher side: 50% via VM is much less louder than same 50% via Realtek, although considering -96 == 0% the Windows variant must be less loud.

@not-holar
Copy link
Owner

There must be something missing. If I switch to my Realtek audio device, the perceived volume curve is completely different than one with Voicemeeter, but to the higher side: 50% via VM is much less louder than same 50% via Realtek, although considering -96 == 0% the Windows variant must be less loud.

That's interesting.

Audio devices with their own drivers (Realtek included) could implement gaining in any number of ways (Voicemeeter making the amazing decision to ignore it completely), with some even doing it on the hardware side.

I guess it would make sense that some of them would stray from the recommendations provided by Microsoft.

If so, it could make sense to provide different curves to match common devices.

Though I would still try making just the bottom and top values of the lerp configurable at first to see if it's sufficient.

@codeabuse
Copy link

codeabuse commented Sep 13, 2024

Though I would still try making just the bottom and top values of the lerp configurable at first to see if it's sufficient.

I tried to and it didn't helped. With VM the volume curve is very low and I'm always at 75..80% while before that I was comfortably sitting at 50%, occasionally raising for some movies. My exponential curve helped me back to 50% .

It also may be useful for some users with similar issue, but the feature needed to be optional. I tried to quickly hack-in additional menu item for toggling between curves, but its seems like for now any menu event quits the application 😅

@not-holar
Copy link
Owner

Though I would still try making just the bottom and top values of the lerp configurable at first to see if it's sufficient.

I tried to and it didn't helped. With VM the volume curve is very low and I'm always at 75..80% while before that I was comfortably sitting at 50%, occasionally raising for some movies. My exponential curve helped me back to 50% .

It also may be useful for some users with similar issue, but the feature needed to be optional. I tried to quickly hack-in additional menu item for toggling between curves, but its seems like for now any menu event quits the application 😅

the GUI stuff is very messy currently, I would probably just stick with an auto-created config file in the same folder

if the user is downloading an additional app for controlling the volume and setting it up for autostart, editing a basic config file with notepad would probably not be too difficult

@codeabuse
Copy link

@not-holar https://youtu.be/NqZWlvj9Usc
The video illustrates awfully low sound at 50% with linear scaling. And also I implemented the menu to select curves 😏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants