From be2ab2ef3122dd78cbbce835d056ca59f5042cd4 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 18 Jul 2023 02:02:39 -0400 Subject: [PATCH] support mindeps build without rnnoise --- .clang-format | 2 +- .github/workflows/ci.yml | 2 +- CMakeLists.txt | 2 ++ src/audio/manager.cpp | 14 ++++++++++++++ src/audio/manager.hpp | 8 ++++++++ src/windows/voicewindow.cpp | 4 ++++ 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.clang-format b/.clang-format index 074ecf0..6bd8ca0 100644 --- a/.clang-format +++ b/.clang-format @@ -35,7 +35,7 @@ DerivePointerAlignment: 'false' FixNamespaceComments: 'true' IncludeBlocks: Merge IndentCaseLabels: 'true' -IndentPPDirectives: BeforeHash +IndentPPDirectives: None IndentWidth: '4' IndentWrappedFunctionNames: 'false' JavaScriptQuotes: Double diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6cfb8b7..0f20cb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: with: cond: ${{ matrix.mindeps == true }} if_true: | - cmake -GNinja -Bbuild -DCMAKE_BUILD_TYPE=${{ matrix.buildtype }} -DUSE_LIBHANDY=OFF -DENABLE_VOICE=OFF -DENABLE_NOTIFICATION_SOUNDS=OFF -DENABLE_QRCODE_LOGIN=OFF + cmake -GNinja -Bbuild -DCMAKE_BUILD_TYPE=${{ matrix.buildtype }} -DUSE_LIBHANDY=OFF -DENABLE_VOICE=OFF -DENABLE_NOTIFICATION_SOUNDS=OFF -DENABLE_QRCODE_LOGIN=OFF -DENABLE_RNNOISE=OFF cmake --build build if_false: | cmake -GNinja -Bbuild -DCMAKE_BUILD_TYPE=${{ matrix.buildtype }} -DCMAKE_CXX_FLAGS="-Wl,--default-image-base-low" diff --git a/CMakeLists.txt b/CMakeLists.txt index ab51f67..37ea1e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,6 +163,8 @@ if (ENABLE_VOICE) target_link_libraries(abaddon ${CMAKE_DL_LIBS}) if (ENABLE_RNNOISE) + target_compile_definitions(abaddon PRIVATE WITH_RNNOISE) + find_package(rnnoise QUIET) if (NOT rnnoise_FOUND) message("rnnoise was not found and will be included as a submodule") diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 84e1fcf..75d8f95 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -82,7 +82,12 @@ AudioManager::AudioManager() { spdlog::get("audio")->info("Audio backend: {}", ma_get_backend_name(m_context.backend)); Enumerate(); + +#ifdef WITH_RNNOISE SetVADMethod(VADMethod::RNNoise); +#else + SetVADMethod(VADMethod::Gate); +#endif m_playback_config = ma_device_config_init(ma_device_type_playback); m_playback_config.playback.format = ma_format_f32; @@ -144,7 +149,10 @@ AudioManager::~AudioManager() { ma_device_uninit(&m_capture_device); ma_context_uninit(&m_context); RemoveAllSSRCs(); + +#ifdef WITH_RNNOISE RNNoiseUninitialize(); +#endif } void AudioManager::AddSSRC(uint32_t ssrc) { @@ -425,9 +433,11 @@ void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) { case VADMethod::Gate: if (!CheckVADVoiceGate()) return; break; +#ifdef WITH_RNNOISE case VADMethod::RNNoise: if (!CheckVADRNNoise(pcm)) return; break; +#endif } m_enc_mutex.lock(); @@ -475,6 +485,7 @@ bool AudioManager::CheckVADVoiceGate() { return m_capture_peak_meter / 32768.0 > m_capture_gate; } +#ifdef WITH_RNNOISE bool AudioManager::CheckVADRNNoise(const int16_t *pcm) { static float denoised[480]; static float rnnoise_input[480]; @@ -503,6 +514,7 @@ void AudioManager::RNNoiseUninitialize() { m_rnnoise = nullptr; } } +#endif bool AudioManager::OK() const { return m_ok; @@ -531,11 +543,13 @@ uint32_t AudioManager::GetRTPTimestamp() const noexcept { void AudioManager::SetVADMethod(VADMethod method) { m_vad_method = method; +#ifdef WITH_RNNOISE if (method == VADMethod::RNNoise) { RNNoiseInitialize(); } else { RNNoiseUninitialize(); } +#endif } AudioManager::type_signal_opus_packet AudioManager::signal_opus_packet() { diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index c3867df..ec62fed 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -14,7 +14,10 @@ #include #include #include + +#ifdef WITH_RNNOISE #include +#endif #include "devices.hpp" // clang-format on @@ -84,10 +87,13 @@ private: bool DecayVolumeMeters(); bool CheckVADVoiceGate(); + +#ifdef WITH_RNNOISE bool CheckVADRNNoise(const int16_t *pcm); void RNNoiseInitialize(); void RNNoiseUninitialize(); +#endif friend void data_callback(ma_device *, void *, const void *, ma_uint32); friend void capture_data_callback(ma_device *, void *, const void *, ma_uint32); @@ -132,7 +138,9 @@ private: AudioDevices m_devices; VADMethod m_vad_method; +#ifdef WITH_RNNOISE DenoiseState *m_rnnoise; +#endif std::atomic m_rtp_timestamp = 0; public: diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp index f09d019..f411f80 100644 --- a/src/windows/voicewindow.cpp +++ b/src/windows/voicewindow.cpp @@ -138,8 +138,12 @@ VoiceWindow::VoiceWindow(Snowflake channel_id) m_vad_combo.set_hexpand(true); m_vad_combo.set_halign(Gtk::ALIGN_FILL); m_vad_combo.append("gate", "Gate"); +#ifdef WITH_RNNOISE m_vad_combo.append("rnnoise", "RNNoise"); m_vad_combo.set_active_id("rnnoise"); +#else + m_vad_combo.set_active_id("gate"); +#endif m_vad_combo.signal_changed().connect([this]() { const auto id = m_vad_combo.get_active_id(); if (id == "gate") {