diff options
Diffstat (limited to 'source/frontend')
-rw-r--r-- | source/frontend/StarVoice.cpp | 17 | ||||
-rw-r--r-- | source/frontend/StarVoice.hpp | 1 |
2 files changed, 16 insertions, 2 deletions
diff --git a/source/frontend/StarVoice.cpp b/source/frontend/StarVoice.cpp index 0d56089..1328846 100644 --- a/source/frontend/StarVoice.cpp +++ b/source/frontend/StarVoice.cpp @@ -211,14 +211,26 @@ void Voice::loadJson(Json const& config, bool skipSave) { m_lastInputTime = 0; } + bool shouldResetEncoder = false; if (auto channelMode = config.optString("channelMode")) { if (change(m_channelMode, VoiceChannelModeNames.getLeft(*channelMode), changed)) { closeDevice(); - resetEncoder(); + shouldResetEncoder = true; resetDevice(); } } + // not saving this setting to disk, as it's just for audiophiles + // don't want someone fudging their bitrate from the intended defaults and forgetting + if (auto bitrate = config.opt("bitrate")) { + unsigned newBitrate = bitrate->canConvert(Json::Type::Int) + ? clamp((unsigned)bitrate->toUInt(), 6000u, 510000u) : 0; + shouldResetEncoder |= change(m_bitrate, newBitrate, changed); + } + + if (shouldResetEncoder) + resetEncoder(); + if (changed && !skipSave) scheduleSave(); } @@ -607,7 +619,8 @@ void Voice::resetEncoder() { int channels = encoderChannels(); MutexLocker locker(m_threadMutex); m_encoder.reset(createEncoder(channels)); - opus_encoder_ctl(m_encoder.get(), OPUS_SET_BITRATE(channels == 2 ? 50000 : 24000)); + int bitrate = m_bitrate > 0 ? (int)m_bitrate : (channels == 2 ? 50000 : 24000); + opus_encoder_ctl(m_encoder.get(), OPUS_SET_BITRATE(bitrate)); } void Voice::resetDevice() { diff --git a/source/frontend/StarVoice.hpp b/source/frontend/StarVoice.hpp index 8059dd4..c914d36 100644 --- a/source/frontend/StarVoice.hpp +++ b/source/frontend/StarVoice.hpp @@ -195,6 +195,7 @@ private: Maybe<String> m_deviceName; VoiceInputMode m_inputMode; VoiceChannelMode m_channelMode; + unsigned m_bitrate = 0; ThreadFunction<void> m_thread; Mutex m_threadMutex; |