summaryrefslogtreecommitdiff
path: root/src/audio/manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/manager.cpp')
-rw-r--r--src/audio/manager.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 739e835..0336699 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -419,13 +419,23 @@ void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) {
if (m_opus_buffer == nullptr || !m_should_capture) return;
const double gain = m_capture_gain;
- // i have a suspicion i can cast the const away... but i wont
+
std::vector<int16_t> new_pcm(pcm, pcm + frames * 2);
for (auto &val : new_pcm) {
const int32_t unclamped = static_cast<int32_t>(val * gain);
val = std::clamp(unclamped, INT16_MIN, INT16_MAX);
}
+ if (m_mix_mono) {
+ for (size_t i = 0; i < frames * 2; i += 2) {
+ const int sample_L = new_pcm[i];
+ const int sample_R = new_pcm[i + 1];
+ const int16_t mixed = static_cast<int16_t>((sample_L + sample_R) / 2);
+ new_pcm[i] = mixed;
+ new_pcm[i + 1] = mixed;
+ }
+ }
+
UpdateCaptureVolume(new_pcm.data(), frames);
static std::array<float, 480> denoised_L;
@@ -629,6 +639,14 @@ bool AudioManager::GetSuppressNoise() const {
}
#endif
+void AudioManager::SetMixMono(bool value) {
+ m_mix_mono = value;
+}
+
+bool AudioManager::GetMixMono() const {
+ return m_mix_mono;
+}
+
AudioManager::type_signal_opus_packet AudioManager::signal_opus_packet() {
return m_signal_opus_packet;
}