summaryrefslogtreecommitdiff
path: root/src/audio/manager.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-10-27 01:38:17 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-10-27 01:38:17 -0400
commitc35d8b4e2d9c70bd5ed99c06da40908bfe5cb0db (patch)
tree77cecbc9b3dc780fcb0f5405bd3c76a626132c1a /src/audio/manager.cpp
parent09cfa864be6e706fd2576eee60a285d5f4431b04 (diff)
parent399d073a77e20ec79be6c8fe27164f56c7994366 (diff)
downloadabaddon-portaudio-c35d8b4e2d9c70bd5ed99c06da40908bfe5cb0db.tar.gz
abaddon-portaudio-c35d8b4e2d9c70bd5ed99c06da40908bfe5cb0db.zip
Merge branch 'master' into classic-channels
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;
}