Skip to content

Commit

Permalink
Volume slider changes
Browse files Browse the repository at this point in the history
Makes volume slider logarithmic when limited to 100% to allow easier changing of volume towards the bottom of the slider.
The tooltip remains as the slider location instead of the logarithmic value of the actual volume.
  • Loading branch information
shohallan authored and kode54 committed Jun 8, 2023
1 parent dd630ba commit baf9797
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
4 changes: 2 additions & 2 deletions Audio/Helper.h
Expand Up @@ -7,5 +7,5 @@
*
*/

double logarithmicToLinear(double logarithmic, double MAX_VOLUME);
double linearToLogarithmic(double linear, double MAX_VOLUME);
double logarithmicToLinear(const double logarithmic, double MAX_VOLUME);
double linearToLogarithmic(const double linear, double MAX_VOLUME);
10 changes: 5 additions & 5 deletions Audio/Helper.m
Expand Up @@ -13,13 +13,13 @@
// These functions are helpers for the process of converting volume from a linear to logarithmic scale.
// Numbers that goes in to audioPlayer should be logarithmic. Numbers that are displayed to the user should be linear.
// Here's why: http://www.dr-lex.34sp.com/info-stuff/volumecontrols.html
// We are using the approximation of X^4.
// We are using the approximation of X^2 when volume is limited to 100% and X^4 when volume is limited to 800%.
// Input/Output values are in percents.
double logarithmicToLinear(double logarithmic, double MAX_VOLUME) {
return (MAX_VOLUME == 100.0) ? logarithmic : pow((logarithmic / MAX_VOLUME), 0.25) * 100.0;
double logarithmicToLinear(const double logarithmic, double MAX_VOLUME) {
return (MAX_VOLUME == 100.0) ? pow((logarithmic / MAX_VOLUME), 0.5) * 100.0 : pow((logarithmic / MAX_VOLUME), 0.25) * 100.0;
}

double linearToLogarithmic(double linear, double MAX_VOLUME) {
return (MAX_VOLUME == 100.0) ? linear : (linear / 100.0) * (linear / 100.0) * (linear / 100.0) * (linear / 100.0) * MAX_VOLUME;
double linearToLogarithmic(const double linear, double MAX_VOLUME) {
return (MAX_VOLUME == 100.0) ? (linear / 100.0) * (linear / 100.0) * MAX_VOLUME : (linear / 100.0) * (linear / 100.0) * (linear / 100.0) * (linear / 100.0) * MAX_VOLUME;
}
// End helper volume function thingies. ONWARDS TO GLORY!
6 changes: 3 additions & 3 deletions Window/VolumeSlider.m
Expand Up @@ -60,9 +60,9 @@ - (void)dealloc {
}

- (void)updateToolTip {
double value = [self doubleValue];
double volume;
volume = linearToLogarithmic(value, MAX_VOLUME);
const double value = [self doubleValue];
// Sets volume to be the slider value if limit is set to 100% or the actual volume otherwise.
const double volume = (MAX_VOLUME == 100) ? value : linearToLogarithmic(value, MAX_VOLUME);
NSString *text;

// If volume becomes less than 1%, display two decimal digits of precision (e.g. 0.34%).
Expand Down

0 comments on commit baf9797

Please sign in to comment.