summaryrefslogtreecommitdiff
path: root/src/audio/manager.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-10-21 01:23:37 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-10-21 01:23:37 -0400
commite888306272304224ac8edd37b3b2bd24ad8c0765 (patch)
tree3c0e58eea78f1580f2078b338b3a1e69349d3f67 /src/audio/manager.cpp
parent848e75f5774d56ebb1a67ba4326a96c8ea5ac3f1 (diff)
downloadabaddon-portaudio-e888306272304224ac8edd37b3b2bd24ad8c0765.tar.gz
abaddon-portaudio-e888306272304224ac8edd37b3b2bd24ad8c0765.zip
add gain slider (how 2 loudmic? 🤓)
Diffstat (limited to 'src/audio/manager.cpp')
-rw-r--r--src/audio/manager.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 60969cc..0461ee8 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -180,6 +180,10 @@ void AudioManager::SetCaptureGate(double gate) {
m_capture_gate = gate * 0.01;
}
+void AudioManager::SetCaptureGain(double gain) {
+ m_capture_gain = gain;
+}
+
void AudioManager::SetMuteSSRC(uint32_t ssrc, bool mute) {
std::lock_guard<std::mutex> _(m_mutex);
if (mute) {
@@ -199,11 +203,19 @@ void AudioManager::SetVolumeSSRC(uint32_t ssrc, double volume) {
void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) {
if (m_opus_buffer == nullptr || !m_should_capture) return;
- UpdateCaptureVolume(pcm, frames);
+ 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);
+ }
+
+ UpdateCaptureVolume(new_pcm.data(), frames);
if (m_capture_peak_meter / 32768.0 < m_capture_gate) return;
- int payload_len = opus_encode(m_encoder, pcm, 480, static_cast<unsigned char *>(m_opus_buffer), 1275);
+ int payload_len = opus_encode(m_encoder, new_pcm.data(), 480, static_cast<unsigned char *>(m_opus_buffer), 1275);
if (payload_len < 0) {
printf("encoding error: %d\n", payload_len);
} else {