Parcourir la source

feat: add option to disable audio processing

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
Alexis Maiquez il y a 2 ans
Parent
commit
c90cc4d915

+ 15 - 20
src/WallpaperEngine/Application/CApplicationContext.cpp

@@ -12,25 +12,17 @@
 
 using namespace WallpaperEngine::Application;
 
-struct option long_options [] = {{"screen-root", required_argument, nullptr, 'r'},
-                                 {"bg", required_argument, nullptr, 'b'},
-                                 {"window", required_argument, nullptr, 'w'},
-                                 {"pkg", required_argument, nullptr, 'p'},
-                                 {"dir", required_argument, nullptr, 'd'},
-                                 {"silent", no_argument, nullptr, 's'},
-                                 {"volume", required_argument, nullptr, 'v'},
-                                 {"help", no_argument, nullptr, 'h'},
-                                 {"fps", required_argument, nullptr, 'f'},
-                                 {"assets-dir", required_argument, nullptr, 'a'},
-                                 {"screenshot", required_argument, nullptr, 'c'},
-                                 {"list-properties", no_argument, nullptr, 'l'},
-                                 {"set-property", required_argument, nullptr, 'o'},
-                                 {"noautomute", no_argument, nullptr, 'm'},
-                                 {"no-fullscreen-pause", no_argument, nullptr, 'n'},
-                                 {"disable-mouse", no_argument, nullptr, 'e'},
-                                 {"scaling", required_argument, nullptr, 't'},
-                                 {"clamping", required_argument, nullptr, 't'},
-                                 {nullptr, 0, nullptr, 0}};
+struct option long_options [] = {
+    {"screen-root", required_argument, nullptr, 'r'},   {"bg", required_argument, nullptr, 'b'},
+    {"window", required_argument, nullptr, 'w'},        {"pkg", required_argument, nullptr, 'p'},
+    {"dir", required_argument, nullptr, 'd'},           {"silent", no_argument, nullptr, 's'},
+    {"volume", required_argument, nullptr, 'v'},        {"help", no_argument, nullptr, 'h'},
+    {"fps", required_argument, nullptr, 'f'},           {"assets-dir", required_argument, nullptr, 'a'},
+    {"screenshot", required_argument, nullptr, 'c'},    {"list-properties", no_argument, nullptr, 'l'},
+    {"set-property", required_argument, nullptr, 'o'},  {"noautomute", no_argument, nullptr, 'm'},
+    {"no-audio-processing", no_argument, nullptr, 'g'}, {"no-fullscreen-pause", no_argument, nullptr, 'n'},
+    {"disable-mouse", no_argument, nullptr, 'e'},       {"scaling", required_argument, nullptr, 't'},
+    {"clamping", required_argument, nullptr, 't'},      {nullptr, 0, nullptr, 0}};
 
 /* std::hash::operator() isn't constexpr, so it can't be used to get hash values as compile-time constants
  * So here is customHash. It skips all spaces, so hashes for " find " and "fi nd" are the same
@@ -86,7 +78,7 @@ CApplicationContext::CApplicationContext (int argc, char* argv []) {
                         .scalingMode = WallpaperEngine::Render::CWallpaperState::TextureUVsScaling::DefaultUVs,
                     },
             },
-        .audio = {.enabled = true, .volume = 15, .automute = true},
+        .audio = {.enabled = true, .volume = 15, .automute = true, .audioprocessing = true},
         .mouse =
             {
                 .enabled = true,
@@ -189,6 +181,8 @@ CApplicationContext::CApplicationContext (int argc, char* argv []) {
 
             case 'm': this->settings.audio.automute = false; break;
 
+            case 'g': this->settings.audio.audioprocessing = false; break;
+
             case 'e': this->settings.mouse.enabled = false; break;
 
             case 't': {
@@ -305,6 +299,7 @@ void CApplicationContext::printHelp (const char* route) {
     sLog.out ("\t--silent\t\t\t\t\tMutes all the sound the wallpaper might produce");
     sLog.out ("\t--volume <amount>\t\t\tSets the volume for all the sounds in the background");
     sLog.out ("\t--noautomute\t\t\t\tDisables the automute when an app is playing sound");
+    sLog.out ("\t--no-audio-processing\t\t\t\tDisables audio processing for backgrounds");
     sLog.out ("\t--screen-root <screen name>\tDisplay as screen's background");
     sLog.out (
         "\t--window <geometry>\tRuns in window mode, geometry has to be XxYxWxH and sets the position and size of the window");

+ 2 - 0
src/WallpaperEngine/Application/CApplicationContext.h

@@ -81,6 +81,8 @@ class CApplicationContext {
             int volume;
             /** If the audio must be muted if something else is playing sound */
             bool automute;
+            /** If audio processing can be enabled or not */
+            bool audioprocessing;
         } audio;
 
         /**

+ 8 - 3
src/WallpaperEngine/Application/CWallpaperApplication.cpp

@@ -274,13 +274,18 @@ void CWallpaperApplication::show () {
         videoDriver = x11Driver;
     }
 
-    // stereo mix recorder for audio processing
-    WallpaperEngine::Audio::Drivers::Recorders::CPulseAudioPlaybackRecorder audioRecorder;
+    if (this->m_context.settings.audio.audioprocessing) {
+        this->audioRecorder = new WallpaperEngine::Audio::Drivers::Recorders::CPulseAudioPlaybackRecorder ();
+    } else {
+        this->audioRecorder = new WallpaperEngine::Audio::Drivers::Recorders::CPlaybackRecorder ();
+    }
+
     // audio playing detector
     WallpaperEngine::Audio::Drivers::Detectors::CPulseAudioPlayingDetector audioDetector (
         this->m_context, videoDriver->getFullscreenDetector ());
     // initialize sdl audio driver
-    audioDriver = new WallpaperEngine::Audio::Drivers::CSDLAudioDriver (this->m_context, audioDetector, audioRecorder);
+    audioDriver =
+        new WallpaperEngine::Audio::Drivers::CSDLAudioDriver (this->m_context, audioDetector, *this->audioRecorder);
     // initialize audio context
     audioContext = new WallpaperEngine::Audio::CAudioContext (*audioDriver);
     // initialize render context

+ 1 - 0
src/WallpaperEngine/Application/CWallpaperApplication.h

@@ -116,6 +116,7 @@ class CWallpaperApplication {
     /** Maps screens to backgrounds */
     std::map<std::string, Core::CProject*> m_backgrounds;
 
+    WallpaperEngine::Audio::Drivers::Recorders::CPlaybackRecorder* audioRecorder;
     WallpaperEngine::Render::Drivers::CVideoDriver* videoDriver;
     WallpaperEngine::Input::CInputContext* inputContext;
     WallpaperEngine::Audio::Drivers::CSDLAudioDriver* audioDriver;

+ 5 - 0
src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.cpp

@@ -1 +1,6 @@
 #include "CPlaybackRecorder.h"
+
+namespace WallpaperEngine::Audio::Drivers::Recorders {
+void CPlaybackRecorder::update () {}
+
+} // namespace WallpaperEngine::Audio::Drivers::Recorders

+ 1 - 1
src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.h

@@ -5,7 +5,7 @@ class CPlaybackRecorder {
   public:
     virtual ~CPlaybackRecorder () = default;
 
-    virtual void update () = 0;
+    virtual void update ();
 
     float audio16 [16] = {0};
     float audio32 [32] = {0};