Skip to content

Commit c5cb1d5

Browse files
committed
fix: fixed crossfeed bs2b weak causing audio loss
1 parent dcdb583 commit c5cb1d5

1 file changed

Lines changed: 10 additions & 29 deletions

File tree

src/audio/base/DspHost.cpp

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -419,46 +419,27 @@ void DspHost::updateGraphicEq(DspConfig *config)
419419

420420
void DspHost::updateCrossfeed(DspConfig* config)
421421
{
422-
bool modeExists;
423-
bool enableExists;
424-
int mode = config->get<int>(DspConfig::crossfeed_mode, &modeExists);
425-
int enabled = config->get<bool>(DspConfig::crossfeed_enable, &enableExists);
426-
427-
if(!modeExists)
428-
{
429-
util::warning("Crossfeed mode unset, using defaults");
430-
}
431-
432-
if(!enableExists)
433-
{
434-
util::warning("Crossfeed enable switch unset, disabling crossfeed.");
435-
enabled = false;
436-
}
422+
int mode = config->get<int>(DspConfig::crossfeed_mode);
437423

438-
if(mode == 99)
424+
// Workaround: CrossfeedChangeMode for mode 0 (weak) leads to audio loss. so let's just do it directly like BS2B custom above
425+
if(mode == 99 /* custom */ || mode == 0 /* weak */)
439426
{
440-
bool fcutExists;
441-
bool feedExists;
442-
int fcut = config->get<int>(DspConfig::crossfeed_bs2b_fcut, &fcutExists);
443-
int feed = config->get<int>(DspConfig::crossfeed_bs2b_feed, &feedExists);
427+
int fcut = config->get<int>(DspConfig::crossfeed_bs2b_fcut);
428+
int feed = config->get<int>(DspConfig::crossfeed_bs2b_feed);
444429

445-
if(!fcutExists)
430+
// Workaround, see comment above
431+
if(mode == 0)
446432
{
447-
util::warning("Crossfeed custom fcut unset, using defaults");
448-
fcut = 650;
449-
}
450-
if(!feedExists)
451-
{
452-
util::warning("Crossfeed custom feed unset, using defaults");
453-
feed = 95;
433+
fcut = 700;
434+
feed = 65;
454435
}
455436

456437
memset(&cast(this->_dsp)->advXF.bs2b, 0, sizeof(cast(this->_dsp)->advXF.bs2b));
457438
BS2BInit(&cast(this->_dsp)->advXF.bs2b[1], (unsigned int)cast(this->_dsp)->fs, ((unsigned int)fcut | ((unsigned int)feed << 16)));
458439
cast(this->_dsp)->advXF.mode = 1;
459440
}
460441
else
461-
{
442+
{
462443
CrossfeedChangeMode(cast(this->_dsp), mode);
463444
}
464445
}

0 commit comments

Comments
 (0)