Add libsamplerate, make Voice bitrate configurable
This commit is contained in:
parent
497c6efc55
commit
908fa1ee60
@ -177,6 +177,7 @@ endif()
|
||||
message(STATUS "Using Lua API checks: ${STAR_LUA_APICHECK}")
|
||||
message(STATUS "Using jemalloc: ${STAR_USE_JEMALLOC}")
|
||||
message(STATUS "Using mimalloc: ${STAR_USE_MIMALLOC}")
|
||||
message(STATUS "Using rpmalloc: ${STAR_USE_RPMALLOC}")
|
||||
|
||||
# Set C defines and cmake variables based on the build settings we have now
|
||||
# determined...
|
||||
@ -486,8 +487,10 @@ set(STAR_EXT_LIBS ${STAR_EXT_LIBS}
|
||||
|
||||
if(STAR_BUILD_GUI)
|
||||
find_package(SDL2 CONFIG REQUIRED)
|
||||
find_package(SampleRate CONFIG REQUIRED)
|
||||
|
||||
set(STAR_EXT_GUI_LIBS
|
||||
SampleRate::samplerate
|
||||
$<TARGET_NAME_IF_EXISTS:SDL2::SDL2main>
|
||||
$<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>
|
||||
)
|
||||
|
@ -271,6 +271,9 @@ public:
|
||||
#endif
|
||||
|
||||
Logger::info("Application: Initializing SDL Audio");
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 26)
|
||||
SDL_SetHint(SDL_HINT_AUDIO_RESAMPLING_MODE, "fast");
|
||||
#endif
|
||||
if (SDL_InitSubSystem(SDL_INIT_AUDIO))
|
||||
throw ApplicationException(strf("Couldn't initialize SDL Audio: {}", SDL_GetError()));
|
||||
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
|
@ -2,7 +2,7 @@
|
||||
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg-configuration.schema.json",
|
||||
"default-registry": {
|
||||
"kind": "git",
|
||||
"baseline": "f4456c1b974131b8467c7371a3c302b7f58a99f2",
|
||||
"baseline": "1de2026f28ead93ff1773e6e680387643e914ea1",
|
||||
"repository": "https://github.com/microsoft/vcpkg"
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,11 @@
|
||||
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
|
||||
"dependencies": [
|
||||
"glew",
|
||||
"sdl2",
|
||||
"libsamplerate",
|
||||
{
|
||||
"name": "sdl2",
|
||||
"features": [ "samplerate" ]
|
||||
},
|
||||
"libvorbis",
|
||||
"zlib",
|
||||
"freetype",
|
||||
|
Loading…
Reference in New Issue
Block a user