From bbc7e836f054aea09a1cde23d553a01892ea18c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Goran=20Meki=C4=87?= Date: Sat, 25 Feb 2017 00:58:18 +0100 Subject: Disk streaming cli option --- src/Makefile.am | 3 ++ src/bytesizeparser.cc | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/bytesizeparser.h | 33 +++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 src/bytesizeparser.cc create mode 100644 src/bytesizeparser.h (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 2277eeb..06e189f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,6 +17,7 @@ nodist_libdg_la_SOURCES = \ audiocacheidmanager.cc \ audioinputenginemidi.cc \ audiofile.cc \ + bytesizeparser.cc \ channel.cc \ channelmixer.cc \ chresampler.cc \ @@ -57,6 +58,7 @@ EXTRA_DIST = \ audioinputenginemidi.h \ audiooutputengine.h \ beatmapper.h \ + bytesizeparser.h \ channel.h \ channelmixer.h \ chresampler.h \ @@ -102,6 +104,7 @@ EXTRA_DIST = \ audioinputenginemidi.cc \ audiooutputengine.cc \ beatmapper.cc \ + bytesizeparser.cc \ channel.cc \ channelmixer.cc \ chresampler.cc \ diff --git a/src/bytesizeparser.cc b/src/bytesizeparser.cc new file mode 100644 index 0000000..0bab316 --- /dev/null +++ b/src/bytesizeparser.cc @@ -0,0 +1,99 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * bytesize_parser.cc + * + * Sat Mar 4 18:00:12 CET 2017 + * Copyright 2017 Goran Mekić + * meka@tilda.center + ****************************************************************************/ + +/* + * 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 "bytesizeparser.h" +#include +#include + + +static std::size_t suffixToSize(const char& suffix) +{ + int size = 1; + switch(suffix) + { + case 'k': + size <<= 10; + break; + case 'M': + size <<= 20; + break; + case 'G': + size <<= 30; + break; + default: + size = 0; + break; + } + return size; +} + + +std::size_t byteSizeParser(const std::string& argument) +{ + std::string::size_type suffix_index; + std::size_t stream_size; + std::string suffix; + bool error = false; + + try + { + stream_size = std::stoi(argument, &suffix_index); + } + catch(std::invalid_argument) + { + std::cerr << "Invalid option for diskstreamsize" << std::endl; + error = true; + } + catch(std::out_of_range) + { + std::cerr << "Number too big. Try using bigger suffix for diskstreamsize" << std::endl; + error = true; + } + if(!error) + { + suffix = argument.substr(suffix_index); + if (suffix.length() > 1) + { + error = true; + } + } + if(!error) + { + std::size_t suffix_size = suffixToSize(suffix[0]); + if (suffix_size) + { + stream_size *= suffix_size; + } + } + if(error) + { + std::cerr << "Stream size should be in [suffix] format "; + std::cerr << "where [suffix] is k, M, or G." << std::endl; + std::cerr << "Example: 10M which is 10 * 1024 * 1024 bytes" << std::endl; + return 0; + } + return stream_size; +} diff --git a/src/bytesizeparser.h b/src/bytesizeparser.h new file mode 100644 index 0000000..3007454 --- /dev/null +++ b/src/bytesizeparser.h @@ -0,0 +1,33 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * bytesize_parser.h + * + * Sat Mar 4 18:00:12 CET 2017 + * Copyright 2017 Goran Mekić + * meka@tilda.center + ****************************************************************************/ + +/* + * 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 + + +//! Returns size in bytes +//! \param argument The size in n{k,M,G} format +std::size_t byteSizeParser(const std::string& argument); -- cgit v1.2.3 From faf80b071b54f2f736df2390171f7b3b939d03c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Goran=20Meki=C4=87?= Date: Sun, 5 Mar 2017 11:40:07 +0100 Subject: Test diskstreaming CLI --- src/bytesizeparser.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/bytesizeparser.cc b/src/bytesizeparser.cc index 0bab316..329407d 100644 --- a/src/bytesizeparser.cc +++ b/src/bytesizeparser.cc @@ -58,13 +58,18 @@ std::size_t byteSizeParser(const std::string& argument) std::string suffix; bool error = false; + if(argument.find('-') != std::string::npos) + { + error = true; + } + try { stream_size = std::stoi(argument, &suffix_index); } catch(std::invalid_argument) { - std::cerr << "Invalid option for diskstreamsize" << std::endl; + std::cerr << "Invalid argument for diskstreamsize" << std::endl; error = true; } catch(std::out_of_range) @@ -82,17 +87,16 @@ std::size_t byteSizeParser(const std::string& argument) } if(!error) { - std::size_t suffix_size = suffixToSize(suffix[0]); - if (suffix_size) + std::size_t suffix_size = 1; + if(suffix_index <= suffix.length()) { - stream_size *= suffix_size; + suffix_size = suffixToSize(suffix[0]); + } + stream_size *= suffix_size; } if(error) { - std::cerr << "Stream size should be in [suffix] format "; - std::cerr << "where [suffix] is k, M, or G." << std::endl; - std::cerr << "Example: 10M which is 10 * 1024 * 1024 bytes" << std::endl; return 0; } return stream_size; -- cgit v1.2.3 From 75de9c0ac782fa6fecb92f3a22f311b517856abb Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 12 Mar 2017 09:09:07 +0100 Subject: Add reload_counter to Settings and use it in DrumKitLoader to reload a drumkit whenever it changes (ie. increments). --- src/drumkitloader.cc | 3 ++- src/settings.h | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/drumkitloader.cc b/src/drumkitloader.cc index 1d66597..103b60c 100644 --- a/src/drumkitloader.cc +++ b/src/drumkitloader.cc @@ -201,7 +201,8 @@ void DrumKitLoader::thread_main() } bool newKit = false; - if(getter.drumkit_file.hasChanged()) + if(getter.drumkit_file.hasChanged() || + getter.reload_counter.hasChanged()) { loadkit(getter.drumkit_file.getValue()); newKit = true; diff --git a/src/settings.h b/src/settings.h index cb707ef..8a646a1 100644 --- a/src/settings.h +++ b/src/settings.h @@ -50,12 +50,13 @@ struct Settings Atomic drumkit_load_status{LoadStatus::Idle}; //! The maximum amount of memory in bytes that the AudioCache - //! is allowed to use for preloading - //! The default std::numeric_limits::max() means "unlimited" - //Atomic cache_upper_limit{std::numeric_limits::max()}; - Atomic disk_cache_upper_limit{1024*1024*1024}; + //! is allowed to use for preloading. Default is 1GB. + Atomic disk_cache_upper_limit{1024 * 1024 * 1024}; Atomic disk_cache_enable{true}; + //! Increment this in order to invoke a reload of the current drumkit. + Atomic reload_counter{0}; + Atomic midimap_file{""}; Atomic midimap_load_status{LoadStatus::Idle}; @@ -83,6 +84,7 @@ struct SettingsGetter SettingRef disk_cache_upper_limit; SettingRef disk_cache_enable; + SettingRef reload_counter; SettingRef midimap_file; SettingRef midimap_load_status; @@ -107,6 +109,7 @@ struct SettingsGetter , drumkit_load_status(settings.drumkit_load_status) , disk_cache_upper_limit(settings.disk_cache_upper_limit) , disk_cache_enable(settings.disk_cache_enable) + , reload_counter(settings.reload_counter) , midimap_file(settings.midimap_file) , midimap_load_status(settings.midimap_load_status) , enable_velocity_modifier{settings.enable_velocity_modifier} @@ -132,6 +135,7 @@ public: Notifier disk_cache_upper_limit; Notifier disk_cache_enable; + Notifier reload_counter; Notifier midimap_file; Notifier midimap_load_status; @@ -160,6 +164,7 @@ public: EVAL(disk_cache_upper_limit); EVAL(disk_cache_enable); + EVAL(reload_counter); EVAL(midimap_file); EVAL(midimap_load_status); -- cgit v1.2.3