aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alc/panning.cpp7
-rw-r--r--alsoftrc.sample2
-rw-r--r--docs/ambisonics.txt41
-rw-r--r--utils/alsoft-config/mainwindow.cpp4
4 files changed, 23 insertions, 31 deletions
diff --git a/alc/panning.cpp b/alc/panning.cpp
index 5143b1ea..a33b9387 100644
--- a/alc/panning.cpp
+++ b/alc/panning.cpp
@@ -509,9 +509,8 @@ void InitCustomPanning(ALCdevice *device, bool hqdec, const AmbDecConf *conf, co
auto accum_spkr_dist = std::bind(std::plus<float>{}, _1,
std::bind(std::mem_fn(&AmbDecConf::SpeakerConf::Distance), _2));
const ALfloat avg_dist{
- std::accumulate(conf->Speakers.begin(), conf->Speakers.end(), float{0.0f},
- accum_spkr_dist) / static_cast<ALfloat>(conf->Speakers.size())
- };
+ std::accumulate(conf->Speakers.begin(), conf->Speakers.end(), 0.0f, accum_spkr_dist) /
+ static_cast<ALfloat>(conf->Speakers.size())};
InitNearFieldCtrl(device, avg_dist, order,
(conf->ChanMask&AMBI_PERIPHONIC_MASK) ? chans_per_order3d : chans_per_order2d);
@@ -717,7 +716,7 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, HrtfRequestMode hrtf_appr
InitPanning(device);
else
{
- int hqdec{GetConfigValueBool(devname, "decoder", "hq-mode", 0)};
+ int hqdec{GetConfigValueBool(devname, "decoder", "hq-mode", 1)};
InitCustomPanning(device, !!hqdec, pconf, speakermap);
}
if(device->AmbiDecoder)
diff --git a/alsoftrc.sample b/alsoftrc.sample
index f0dde916..7cb780a3 100644
--- a/alsoftrc.sample
+++ b/alsoftrc.sample
@@ -272,7 +272,7 @@
# configuration files for the appropriate speaker configuration you intend to
# use (see the quad, surround51, etc options below). Currently, up to third-
# order decoding is supported.
-#hq-mode = false
+#hq-mode = true
## distance-comp:
# Enables compensation for the speakers' relative distances to the listener.
diff --git a/docs/ambisonics.txt b/docs/ambisonics.txt
index 2d94427e..b03e3bed 100644
--- a/docs/ambisonics.txt
+++ b/docs/ambisonics.txt
@@ -79,30 +79,23 @@ Soft (or any other OpenAL implementation that wishes to) can render using
Ambisonics and decode the ambisonic mix for a high level of accuracy over what
simple pan-pot could provide.
-This is effectively what the high-quality mode option does, when given an
-appropriate decoder configuation for the playback channel layout. 3D rendering
-and effect mixing is done to an ambisonic buffer, which is later decoded for
-output utilizing the benefits available to ambisonic processing.
-
-The basic, non-high-quality, renderer uses similar principles, however it skips
-the frequency-dependent processing (so low frequency sounds are treated the
-same as high frequency sounds) and does some creative manipulation of the
-involved math to skip the intermediate ambisonic buffer, rendering more
-directly to the output while still taking advantage of all the available
-speakers to reconstruct the sound wave. This method trades away some playback
-quality for less memory and processor usage.
-
-In addition to providing good support for surround sound playback, Ambisonics
-also has benefits with stereo output. 2-channel UHJ is a stereo-compatible
-format that encodes some surround sound information using a wide-band 90-degree
-phase shift filter. It works by taking a B-Format signal, and deriving a
-frontal stereo mix with the rear sounds attenuated and filtered in with it.
-Although the result is not as good as 3-channel (2D) B-Format, it has the
-distinct advantage of only using 2 channels and being compatible with stereo
-output. This means it will sound just fine when played as-is through a normal
-stereo device, or it may optionally be fed to a properly configured surround
-sound receiver which can extract the encoded information and restore some of
-the original surround sound signal.
+When given an appropriate decoder configuration for the channel layout, the
+ambisonic mix can be decoded utilizing the benefits available to ambisonic
+processing, including frequency-dependent processing and near-field effects.
+Without a decoder configuration, the ambisonic mix can still be decoded for
+good stereo or surround sound output, although without near-field effects as
+there's no speaker distance information.
+
+In addition to surround sound output, Ambisonics also has benefits with stereo
+output. 2-channel UHJ is a stereo-compatible format that encodes some surround
+sound information using a wide-band 90-degree phase shift filter. This is
+generated by taking the ambisonic mix and deriving a front-stereo mix with
+with the rear sounds filtered in with it. Although the result is not as good as
+3-channel (2D) B-Format, it has the distinct advantage of only using 2 channels
+and being compatible with stereo output. This means it will sound just fine
+when played as-is through a normal stereo device, or it may optionally be fed
+to a properly configured surround sound receiver which can extract the encoded
+information and restore some of the original surround sound signal.
What Are Its Limitations?
diff --git a/utils/alsoft-config/mainwindow.cpp b/utils/alsoft-config/mainwindow.cpp
index aa0df438..7e5159cf 100644
--- a/utils/alsoft-config/mainwindow.cpp
+++ b/utils/alsoft-config/mainwindow.cpp
@@ -716,7 +716,7 @@ void MainWindow::loadConfig(const QString &fname)
}
}
- bool hqmode{settings.value("decoder/hq-mode", false).toBool()};
+ bool hqmode{settings.value("decoder/hq-mode", true).toBool()};
ui->decoderHQModeCheckBox->setChecked(hqmode);
ui->decoderDistCompCheckBox->setCheckState(getCheckState(settings.value("decoder/distance-comp")));
ui->decoderNFEffectsCheckBox->setCheckState(getCheckState(settings.value("decoder/nfc")));
@@ -976,7 +976,7 @@ void MainWindow::saveConfig(const QString &fname) const
settings.setValue("dither", getCheckValue(ui->outputDitherCheckBox));
settings.setValue("decoder/hq-mode",
- ui->decoderHQModeCheckBox->isChecked() ? QString{"true"} : QString{/*"false"*/}
+ ui->decoderHQModeCheckBox->isChecked() ? QString{/*"true"*/} : QString{"false"}
);
settings.setValue("decoder/distance-comp", getCheckValue(ui->decoderDistCompCheckBox));
settings.setValue("decoder/nfc", getCheckValue(ui->decoderNFEffectsCheckBox));