diff --git a/src/WallpaperEngine/Application/CApplicationContext.cpp b/src/WallpaperEngine/Application/CApplicationContext.cpp index d0624c2..799c63c 100644 --- a/src/WallpaperEngine/Application/CApplicationContext.cpp +++ b/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 \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 \tDisplay as screen's background"); sLog.out ( "\t--window \tRuns in window mode, geometry has to be XxYxWxH and sets the position and size of the window"); diff --git a/src/WallpaperEngine/Application/CApplicationContext.h b/src/WallpaperEngine/Application/CApplicationContext.h index 06e8be1..beb3759 100644 --- a/src/WallpaperEngine/Application/CApplicationContext.h +++ b/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; /** diff --git a/src/WallpaperEngine/Application/CWallpaperApplication.cpp b/src/WallpaperEngine/Application/CWallpaperApplication.cpp index b4d5cd7..9442f58 100644 --- a/src/WallpaperEngine/Application/CWallpaperApplication.cpp +++ b/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 diff --git a/src/WallpaperEngine/Application/CWallpaperApplication.h b/src/WallpaperEngine/Application/CWallpaperApplication.h index 9e6b4ee..120c93a 100644 --- a/src/WallpaperEngine/Application/CWallpaperApplication.h +++ b/src/WallpaperEngine/Application/CWallpaperApplication.h @@ -116,6 +116,7 @@ class CWallpaperApplication { /** Maps screens to backgrounds */ std::map m_backgrounds; + WallpaperEngine::Audio::Drivers::Recorders::CPlaybackRecorder* audioRecorder; WallpaperEngine::Render::Drivers::CVideoDriver* videoDriver; WallpaperEngine::Input::CInputContext* inputContext; WallpaperEngine::Audio::Drivers::CSDLAudioDriver* audioDriver; diff --git a/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.cpp b/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.cpp index 64baa80..a00fdde 100644 --- a/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.cpp +++ b/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 \ No newline at end of file diff --git a/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.h b/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.h index e66c87f..9d97d1c 100644 --- a/src/WallpaperEngine/Audio/Drivers/Recorders/CPlaybackRecorder.h +++ b/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};