From 17c4551a0a02df27cb907678a0509c1a63f6256c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Nusser?= Date: Fri, 5 May 2017 23:54:29 +0200 Subject: Introduce the new resampling frame. --- plugin/Makefile.mingw32.in | 1 + plugingui/Makefile.am | 1 + plugingui/maintab.cc | 17 +++++++ plugingui/maintab.h | 4 ++ plugingui/resamplingframecontent.cc | 92 +++++++++++++++++++++++++++++++++++++ plugingui/resamplingframecontent.h | 66 ++++++++++++++++++++++++++ plugingui/statusframecontent.cc | 42 ----------------- plugingui/statusframecontent.h | 8 ---- src/drumkitloader.cc | 2 +- src/settings.h | 10 ++-- 10 files changed, 187 insertions(+), 56 deletions(-) create mode 100644 plugingui/resamplingframecontent.cc create mode 100644 plugingui/resamplingframecontent.h diff --git a/plugin/Makefile.mingw32.in b/plugin/Makefile.mingw32.in index 6ccfe48..77f43e1 100644 --- a/plugin/Makefile.mingw32.in +++ b/plugin/Makefile.mingw32.in @@ -79,6 +79,7 @@ GUI_SRC = \ @top_srcdir@/plugingui/pluginconfig.cc \ @top_srcdir@/plugingui/powerbutton.cc \ @top_srcdir@/plugingui/progressbar.cc \ + @top_srcdir@/plugingui/resamplingframecontent.cc \ @top_srcdir@/plugingui/resource.cc \ @top_srcdir@/plugingui/resource_data.cc \ @top_srcdir@/plugingui/scrollbar.cc \ diff --git a/plugingui/Makefile.am b/plugingui/Makefile.am index a7ee485..a9da1db 100644 --- a/plugingui/Makefile.am +++ b/plugingui/Makefile.am @@ -79,6 +79,7 @@ nodist_libdggui_la_SOURCES = \ pluginconfig.cc \ powerbutton.cc \ progressbar.cc \ + resamplingframecontent.cc \ resource.cc \ resource_data.cc \ scrollbar.cc \ diff --git a/plugingui/maintab.cc b/plugingui/maintab.cc index 3458a72..503a0a1 100644 --- a/plugingui/maintab.cc +++ b/plugingui/maintab.cc @@ -38,6 +38,7 @@ MainTab::MainTab(Widget* parent, , statusframe_content{this, settings_notifier} , humanizerframe_content{this, settings, settings_notifier} , diskstreamingframe_content{this, settings, settings_notifier} + , resamplingframe_content{this, settings, settings_notifier} , settings(settings) , settings_notifier(settings_notifier) { @@ -48,36 +49,47 @@ MainTab::MainTab(Widget* parent, layout.addItem(&status_frame); layout.addItem(&humanizer_frame); layout.addItem(&diskstreaming_frame); + layout.addItem(&resampling_frame); auto h1 = 20; auto h2 = 22; auto h3 = 13; auto h4 = 11; + auto h5 = 14; auto drumkit_range = GridLayout::GridRange{0, 1, 0, h1}; auto status_range = GridLayout::GridRange{0, 1, h1, h1 + h2}; auto humanizer_range = GridLayout::GridRange{1, 2, 0, h3}; auto diskstreaming_range = GridLayout::GridRange{1, 2, h3, h3 + h4}; + auto resampling_range = GridLayout::GridRange{1, 2, h3 + h4, h3 + h4 + h5}; layout.setPosition(&drumkit_frame, drumkit_range); layout.setPosition(&status_frame, status_range); layout.setPosition(&humanizer_frame, humanizer_range); layout.setPosition(&diskstreaming_frame, diskstreaming_range); + layout.setPosition(&resampling_frame, resampling_range); drumkit_frame.setTitle("Drumkit"); status_frame.setTitle("Status"); humanizer_frame.setTitle("Humanizer"); diskstreaming_frame.setTitle("Disk streaming"); + resampling_frame.setTitle("Resampling"); drumkit_frame.setContent(&drumkitframe_content); status_frame.setContent(&statusframe_content); humanizer_frame.setContent(&humanizerframe_content); diskstreaming_frame.setContent(&diskstreamingframe_content); + resampling_frame.setContent(&resamplingframe_content); humanizer_frame.setOnSwitch(settings.enable_velocity_modifier); + resampling_frame.setOnSwitch(settings.enable_resampling); CONNECT(this, settings_notifier.enable_velocity_modifier, &humanizer_frame, &FrameWidget::setOnSwitch); + CONNECT(this, settings_notifier.enable_resampling, + &resampling_frame, &FrameWidget::setOnSwitch); CONNECT(&humanizer_frame, onSwitchChangeNotifier, this, &MainTab::humanizerOnChange); + CONNECT(&resampling_frame, onSwitchChangeNotifier, + this, &MainTab::resamplingOnChange); } void MainTab::resize(std::size_t width, std::size_t height) @@ -95,4 +107,9 @@ void MainTab::humanizerOnChange(bool on) settings.enable_velocity_modifier.store(on); } +void MainTab::resamplingOnChange(bool on) +{ + settings.enable_resampling.store(on); +} + } // GUI:: diff --git a/plugingui/maintab.h b/plugingui/maintab.h index 62b3f82..ab7e760 100644 --- a/plugingui/maintab.h +++ b/plugingui/maintab.h @@ -33,6 +33,7 @@ #include "statusframecontent.h" #include "humanizerframecontent.h" #include "diskstreamingframecontent.h" +#include "resamplingframecontent.h" struct Settings; class SettingsNotifier; @@ -55,6 +56,7 @@ public: private: void humanizerOnChange(bool on); + void resamplingOnChange(bool on); Image logo{":resources/logo.png"}; @@ -64,11 +66,13 @@ private: FrameWidget status_frame{this, false}; FrameWidget humanizer_frame{this, true}; FrameWidget diskstreaming_frame{this, false}; + FrameWidget resampling_frame{this, true}; DrumkitframeContent drumkitframe_content; StatusframeContent statusframe_content; HumanizerframeContent humanizerframe_content; DiskstreamingframeContent diskstreamingframe_content; + ResamplingframeContent resamplingframe_content; Settings& settings; SettingsNotifier& settings_notifier; diff --git a/plugingui/resamplingframecontent.cc b/plugingui/resamplingframecontent.cc new file mode 100644 index 0000000..1f752d3 --- /dev/null +++ b/plugingui/resamplingframecontent.cc @@ -0,0 +1,92 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * resamplingframecontent.cc + * + * Fri May 5 23:43:28 CEST 2017 + * Copyright 2017 André Nusser + * andre.nusser@googlemail.com + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "resamplingframecontent.h" + +#include + +namespace GUI +{ + +ResamplingframeContent::ResamplingframeContent( + Widget* parent, Settings& settings, SettingsNotifier& settings_notifier) + : Widget(parent) + , settings(settings) + , settings_notifier(settings_notifier) +{ + CONNECT(this, settings_notifier.drumkit_samplerate, + this, &ResamplingframeContent::updateDrumkitSamplerate); + CONNECT(this, settings_notifier.samplerate, + this, &ResamplingframeContent::updateSessionSamplerate); + CONNECT(this, settings_notifier.resamplig_recommended, + this, &ResamplingframeContent::updateResamplingRecommended); + + text_field.move(0, 0); + text_field.setReadOnly(true); + + updateContent(); + text_field.show(); +} + +void ResamplingframeContent::resize(std::size_t width, std::size_t height) +{ + Widget::resize(width, height); + text_field.resize(width, height); +} + +void ResamplingframeContent::updateContent() +{ + text_field.setText( + "Session samplerate: " + session_samplerate + "\n" + "Drumkit samplerate: " + drumkit_samplerate + "\n" + "Resampling recommended: " + resamplig_recommended + "\n" + ); +} + +void ResamplingframeContent::updateDrumkitSamplerate(std::size_t drumkit_samplerate) +{ + this->drumkit_samplerate = drumkit_samplerate == 0 + ? "" + : std::to_string(drumkit_samplerate); + + updateContent(); +} + +void ResamplingframeContent::updateSessionSamplerate(double samplerate) +{ + this->session_samplerate = std::to_string((std::size_t)samplerate); + + updateContent(); +} + +void ResamplingframeContent::updateResamplingRecommended(bool resamplig_recommended) +{ + this->resamplig_recommended = resamplig_recommended ? "Yes" : "No"; + + updateContent(); +} + +} // GUI:: diff --git a/plugingui/resamplingframecontent.h b/plugingui/resamplingframecontent.h new file mode 100644 index 0000000..e98e09b --- /dev/null +++ b/plugingui/resamplingframecontent.h @@ -0,0 +1,66 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * resamplingframecontent.h + * + * Fri May 5 23:43:28 CEST 2017 + * Copyright 2017 André Nusser + * andre.nusser@googlemail.com + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#pragma once + +#include "widget.h" +#include "textedit.h" + +struct Settings; +class SettingsNotifier; + +namespace GUI +{ + +class ResamplingframeContent + : public Widget +{ +public: + ResamplingframeContent(Widget* parent, + Settings& settings, + SettingsNotifier& settings_notifier); + + // From Widget + virtual void resize(std::size_t width, std::size_t height) override; + + void updateContent(); + + void updateDrumkitSamplerate(std::size_t drumkit_samplerate); + void updateSessionSamplerate(double samplerate); + void updateResamplingRecommended(bool resamplig_recommended); + +private: + TextEdit text_field{this}; + + Settings& settings; + SettingsNotifier& settings_notifier; + + std::string drumkit_samplerate; + std::string session_samplerate; + std::string resamplig_recommended; +}; + +} // GUI:: diff --git a/plugingui/statusframecontent.cc b/plugingui/statusframecontent.cc index e160da0..34903e8 100644 --- a/plugingui/statusframecontent.cc +++ b/plugingui/statusframecontent.cc @@ -41,18 +41,10 @@ StatusframeContent::StatusframeContent( this, &StatusframeContent::updateDrumkitDescription); CONNECT(this, settings_notifier.drumkit_version, this, &StatusframeContent::updateDrumkitVersion); - CONNECT(this, settings_notifier.drumkit_samplerate, - this, &StatusframeContent::updateDrumkitSamplerate); CONNECT(this, settings_notifier.midimap_load_status, this, &StatusframeContent::updateMidimapLoadStatus); - CONNECT(this, settings_notifier.samplerate, - this, &StatusframeContent::updateSamplerate); CONNECT(this, settings_notifier.buffer_size, this, &StatusframeContent::updateBufferSize); - CONNECT(this, settings_notifier.enable_resampling, - this, &StatusframeContent::updateResamplingEnabled); - CONNECT(this, settings_notifier.resampling_active, - this, &StatusframeContent::updateResamplingActive); CONNECT(this, settings_notifier.number_of_underruns, this, &StatusframeContent::updateNumberOfUnderruns); @@ -77,11 +69,7 @@ void StatusframeContent::updateContent() "Drumkit name: " + drumkit_name + "\n" "Drumkit description: " + drumkit_description + "\n" // "Drumkit version: " + drumkit_version + "\n" - "Drumkit samplerate: " + drumkit_samplerate + "\n" - "Session samplerate: " + samplerate + "\n" "Session buffer size: " + buffer_size + "\n" - // "Resampling enabled: " + resampling_enabled + "\n" - "Resampling active: " + resampling_active + "\n" "Number of underruns: " + number_of_underruns + "\n" ); } @@ -128,15 +116,6 @@ void StatusframeContent::updateDrumkitVersion(std::string const& drumkit_version updateContent(); } -void StatusframeContent::updateDrumkitSamplerate(std::size_t drumkit_samplerate) -{ - this->drumkit_samplerate = drumkit_samplerate == 0 - ? "" - : std::to_string(drumkit_samplerate); - - updateContent(); -} - void StatusframeContent::updateMidimapLoadStatus(LoadStatus load_status) { switch(load_status) @@ -158,13 +137,6 @@ void StatusframeContent::updateMidimapLoadStatus(LoadStatus load_status) updateContent(); } -void StatusframeContent::updateSamplerate(double samplerate) -{ - this->samplerate = std::to_string((std::size_t)samplerate); - - updateContent(); -} - void StatusframeContent::updateBufferSize(std::size_t buffer_size) { this->buffer_size = std::to_string(buffer_size); @@ -172,20 +144,6 @@ void StatusframeContent::updateBufferSize(std::size_t buffer_size) updateContent(); } -void StatusframeContent::updateResamplingEnabled(bool enable_resampling) -{ - this->resampling_enabled = enable_resampling ? "Yes" : "No"; - - updateContent(); -} - -void StatusframeContent::updateResamplingActive(bool resampling_active) -{ - this->resampling_active = resampling_active ? "Yes" : "No"; - - updateContent(); -} - void StatusframeContent::updateNumberOfUnderruns(std::size_t number_of_underruns) { this->number_of_underruns = std::to_string(number_of_underruns); diff --git a/plugingui/statusframecontent.h b/plugingui/statusframecontent.h index c5fb8c4..4ca4f63 100644 --- a/plugingui/statusframecontent.h +++ b/plugingui/statusframecontent.h @@ -49,12 +49,8 @@ public: void updateDrumkitName(std::string const& drumkit_name); void updateDrumkitDescription(std::string const& drumkit_description); void updateDrumkitVersion(std::string const& drumkit_version); - void updateDrumkitSamplerate(std::size_t drumkit_samplerate); void updateMidimapLoadStatus(LoadStatus load_status); - void updateSamplerate(double samplerate); void updateBufferSize(std::size_t buffer_size); - void updateResamplingEnabled(bool enable_resampling); - void updateResamplingActive(bool resampling_active); void updateNumberOfUnderruns(std::size_t number_of_underruns); private: @@ -66,12 +62,8 @@ private: std::string drumkit_name; std::string drumkit_description; std::string drumkit_version; - std::string drumkit_samplerate; std::string midimap_load_status; - std::string samplerate; std::string buffer_size; - std::string resampling_enabled; - std::string resampling_active; std::string number_of_underruns; }; diff --git a/src/drumkitloader.cc b/src/drumkitloader.cc index eed5a33..a1a5bdf 100644 --- a/src/drumkitloader.cc +++ b/src/drumkitloader.cc @@ -136,7 +136,7 @@ bool DrumKitLoader::loadkit(const std::string& file) #ifdef WITH_RESAMPLER resamplers.setup(kit.getSamplerate(), settings.samplerate.load()); #endif/*WITH_RESAMPLER*/ - settings.resampling_active.store(resamplers.isActive()); + settings.resamplig_recommended.store(resamplers.isActive()); DEBUG(loadkit, "loadkit: Success\n"); diff --git a/src/settings.h b/src/settings.h index 76662c2..6d094ea 100644 --- a/src/settings.h +++ b/src/settings.h @@ -81,7 +81,7 @@ struct Settings Atomic buffer_size{1024}; // Only used to show in the UI. Atomic enable_resampling{true}; - Atomic resampling_active{false}; + Atomic resamplig_recommended{false}; Atomic number_of_files{0}; Atomic number_of_files_loaded{0}; @@ -118,7 +118,7 @@ struct SettingsGetter SettingRef buffer_size; SettingRef enable_resampling; - SettingRef resampling_active; + SettingRef resamplig_recommended; SettingRef number_of_files; SettingRef number_of_files_loaded; @@ -146,7 +146,7 @@ struct SettingsGetter , samplerate{settings.samplerate} , buffer_size(settings.buffer_size) , enable_resampling{settings.enable_resampling} - , resampling_active{settings.resampling_active} + , resamplig_recommended{settings.resamplig_recommended} , number_of_files{settings.number_of_files} , number_of_files_loaded{settings.number_of_files_loaded} , current_file{settings.current_file} @@ -185,7 +185,7 @@ public: Notifier buffer_size; Notifier enable_resampling; - Notifier resampling_active; + Notifier resamplig_recommended; Notifier number_of_files; Notifier number_of_files_loaded; @@ -222,7 +222,7 @@ public: EVAL(buffer_size); EVAL(enable_resampling); - EVAL(resampling_active); + EVAL(resamplig_recommended); EVAL(number_of_files); EVAL(number_of_files_loaded); -- cgit v1.2.3