Audio mixer: Remove option for linear gain sliders
* always use non-linear gain sliders (was the default setting) * remove functions and members connected to linear gain setting * remove "(like BeOS R5)" from "Attenuate by 3 dB" option * add "Low/High quality" to resample algorithm option Fixes part of #17554 Change-Id: I746da3f5bcc8f0cb017c75509565b535d5442f71 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4917 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
parent
4ac99e3932
commit
8b35436293
@ -1206,18 +1206,16 @@ float
|
||||
AudioMixer::dB_to_Gain(float db)
|
||||
{
|
||||
TRACE("dB_to_Gain: dB in: %01.2f ", db);
|
||||
if (fCore->Settings()->NonLinearGainSlider()) {
|
||||
if (db > 0) {
|
||||
db = db * (pow(abs(DB_MAX), (1.0 / DB_EXPONENT_POSITIVE))
|
||||
/ abs(DB_MAX));
|
||||
db = pow(db, DB_EXPONENT_POSITIVE);
|
||||
} else {
|
||||
db = -db;
|
||||
db = db * (pow(abs(DB_MIN), (1.0 / DB_EXPONENT_NEGATIVE))
|
||||
/ abs(DB_MIN));
|
||||
db = pow(db, DB_EXPONENT_NEGATIVE);
|
||||
db = -db;
|
||||
}
|
||||
if (db > 0) {
|
||||
db = db * (pow(abs(DB_MAX), (1.0 / DB_EXPONENT_POSITIVE))
|
||||
/ abs(DB_MAX));
|
||||
db = pow(db, DB_EXPONENT_POSITIVE);
|
||||
} else {
|
||||
db = -db;
|
||||
db = db * (pow(abs(DB_MIN), (1.0 / DB_EXPONENT_NEGATIVE))
|
||||
/ abs(DB_MIN));
|
||||
db = pow(db, DB_EXPONENT_NEGATIVE);
|
||||
db = -db;
|
||||
}
|
||||
TRACE("dB out: %01.2f\n", db);
|
||||
return pow(10.0, db / 20.0);
|
||||
@ -1229,18 +1227,16 @@ AudioMixer::Gain_to_dB(float gain)
|
||||
{
|
||||
float db;
|
||||
db = 20.0 * log10(gain);
|
||||
if (fCore->Settings()->NonLinearGainSlider()) {
|
||||
if (db > 0) {
|
||||
db = pow(db, (1.0 / DB_EXPONENT_POSITIVE));
|
||||
db = db * (abs(DB_MAX) / pow(abs(DB_MAX),
|
||||
(1.0 / DB_EXPONENT_POSITIVE)));
|
||||
} else {
|
||||
db = -db;
|
||||
db = pow(db, (1.0 / DB_EXPONENT_NEGATIVE));
|
||||
db = db * (abs(DB_MIN) / pow(abs(DB_MIN),
|
||||
(1.0 / DB_EXPONENT_NEGATIVE)));
|
||||
db = -db;
|
||||
}
|
||||
if (db > 0) {
|
||||
db = pow(db, (1.0 / DB_EXPONENT_POSITIVE));
|
||||
db = db * (abs(DB_MAX) / pow(abs(DB_MAX),
|
||||
(1.0 / DB_EXPONENT_POSITIVE)));
|
||||
} else {
|
||||
db = -db;
|
||||
db = pow(db, (1.0 / DB_EXPONENT_NEGATIVE));
|
||||
db = db * (abs(DB_MIN) / pow(abs(DB_MIN),
|
||||
(1.0 / DB_EXPONENT_NEGATIVE)));
|
||||
db = -db;
|
||||
}
|
||||
return db;
|
||||
}
|
||||
@ -1262,10 +1258,6 @@ AudioMixer::GetParameterValue(int32 id, bigtime_t *last_change, void *value,
|
||||
*ioSize = sizeof(int32);
|
||||
static_cast<int32 *>(value)[0] = fCore->Settings()->AttenuateOutput();
|
||||
break;
|
||||
case 20: // Use non linear gain sliders
|
||||
*ioSize = sizeof(int32);
|
||||
static_cast<int32 *>(value)[0] = fCore->Settings()->NonLinearGainSlider();
|
||||
break;
|
||||
case 30: // Display balance control for stereo connections
|
||||
*ioSize = sizeof(int32);
|
||||
static_cast<int32 *>(value)[0] = fCore->Settings()->UseBalanceControl();
|
||||
@ -1474,12 +1466,6 @@ AudioMixer::SetParameterValue(int32 id, bigtime_t when, const void *value,
|
||||
// this value is special (see MixerCore.h) and we need to notify the core
|
||||
fCore->SetOutputAttenuation((static_cast<const int32 *>(value)[0]) ? 0.708 : 1.0);
|
||||
break;
|
||||
case 20: // Use non linear gain sliders
|
||||
if (size != sizeof(int32))
|
||||
goto err;
|
||||
fCore->Settings()->SetNonLinearGainSlider(static_cast<const int32 *>(value)[0]);
|
||||
update = true; // XXX should use BroadcastChangedParameter()
|
||||
break;
|
||||
case 30: // Display balance control for stereo connections
|
||||
if (size != sizeof(int32))
|
||||
goto err;
|
||||
@ -1879,9 +1865,7 @@ AudioMixer::UpdateParameterWeb()
|
||||
group = top->MakeGroup("");
|
||||
|
||||
group->MakeDiscreteParameter(PARAM_ETC(10), B_MEDIA_RAW_AUDIO,
|
||||
B_TRANSLATE("Attenuate mixer output by 3dB (like BeOS R5)"), B_ENABLE);
|
||||
group->MakeDiscreteParameter(PARAM_ETC(20), B_MEDIA_RAW_AUDIO,
|
||||
B_TRANSLATE("Use non linear gain sliders (like BeOS R5)"), B_ENABLE);
|
||||
B_TRANSLATE("Attenuate mixer output by 3 dB"), B_ENABLE);
|
||||
group->MakeDiscreteParameter(PARAM_ETC(30), B_MEDIA_RAW_AUDIO,
|
||||
B_TRANSLATE("Display balance control for stereo connections"),
|
||||
B_ENABLE);
|
||||
@ -1892,14 +1876,14 @@ AudioMixer::UpdateParameterWeb()
|
||||
B_TRANSLATE("Allow input channel remapping"), B_ENABLE);
|
||||
|
||||
dp = group->MakeDiscreteParameter(PARAM_ETC(60), B_MEDIA_RAW_AUDIO,
|
||||
B_TRANSLATE("Input gain controls represent"), B_INPUT_MUX);
|
||||
B_TRANSLATE("Input gain controls represent:"), B_INPUT_MUX);
|
||||
dp->AddItem(0, B_TRANSLATE("Physical input channels"));
|
||||
dp->AddItem(1, B_TRANSLATE("Virtual output channels"));
|
||||
|
||||
dp = group->MakeDiscreteParameter(PARAM_ETC(70), B_MEDIA_RAW_AUDIO,
|
||||
B_TRANSLATE("Resampling algorithm"), B_INPUT_MUX);
|
||||
dp->AddItem(0, B_TRANSLATE("Drop/repeat samples"));
|
||||
dp->AddItem(2, B_TRANSLATE("Linear interpolation"));
|
||||
B_TRANSLATE("Resampling algorithm:"), B_INPUT_MUX);
|
||||
dp->AddItem(0, B_TRANSLATE("Low quality (drop/repeat samples)"));
|
||||
dp->AddItem(2, B_TRANSLATE("High quality (linear interpolation)"));
|
||||
|
||||
// Note: The following code is outcommented on purpose
|
||||
// and is about to be modified at a later point
|
||||
|
@ -85,27 +85,6 @@ MixerSettings::SetAttenuateOutput(bool yesno)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
MixerSettings::NonLinearGainSlider()
|
||||
{
|
||||
bool temp;
|
||||
fLocker->Lock();
|
||||
temp = fSettings.NonLinearGainSlider;
|
||||
fLocker->Unlock();
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MixerSettings::SetNonLinearGainSlider(bool yesno)
|
||||
{
|
||||
fLocker->Lock();
|
||||
fSettings.NonLinearGainSlider = yesno;
|
||||
fLocker->Unlock();
|
||||
StartDeferredSave();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
MixerSettings::UseBalanceControl()
|
||||
{
|
||||
@ -418,7 +397,6 @@ MixerSettings::Load()
|
||||
fLocker->Lock();
|
||||
// setup defaults
|
||||
fSettings.AttenuateOutput = true;
|
||||
fSettings.NonLinearGainSlider = true;
|
||||
fSettings.UseBalanceControl = false;
|
||||
fSettings.AllowOutputChannelRemapping = false;
|
||||
fSettings.AllowInputChannelRemapping = false;
|
||||
|
@ -26,9 +26,6 @@ class MixerSettings {
|
||||
bool AttenuateOutput();
|
||||
void SetAttenuateOutput(bool yesno);
|
||||
|
||||
bool NonLinearGainSlider();
|
||||
void SetNonLinearGainSlider(bool yesno);
|
||||
|
||||
bool UseBalanceControl();
|
||||
void SetUseBalanceControl(bool yesno);
|
||||
|
||||
@ -76,7 +73,6 @@ class MixerSettings {
|
||||
|
||||
struct settings {
|
||||
bool AttenuateOutput;
|
||||
bool NonLinearGainSlider;
|
||||
bool UseBalanceControl;
|
||||
bool AllowOutputChannelRemapping;
|
||||
bool AllowInputChannelRemapping;
|
||||
|
Loading…
Reference in New Issue
Block a user