diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | AUTHORS | 3 | ||||
| -rw-r--r-- | drumgizmo/drumgizmoc.cc | 20 | ||||
| -rw-r--r-- | src/Makefile.am | 3 | ||||
| -rw-r--r-- | src/bytesizeparser.cc | 99 | ||||
| -rw-r--r-- | src/bytesizeparser.h | 33 | ||||
| -rwxr-xr-x | tools/add_file | 10 | 
7 files changed, 164 insertions, 7 deletions
@@ -26,6 +26,7 @@ INSTALL  *.o  *.a  *.la +*.core  test_*  *.exe  Makefile.am.test @@ -73,4 +74,4 @@ plugin/vst/public.sdk/  plugingui/tests/*test  *~  \#*\# -.\#*
\ No newline at end of file +.\#* @@ -13,5 +13,8 @@ Developer:  Developer, Graphics, GUI design and logo:   Lars Muldjord [muldjord] (muldjordlars@gmail.com) +Developer: + Goran Mekić [meka] (meka@tilda.center) +  Patches:   John Hammen (sample multichannel support) diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 1ba9516..6ea6b5d 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -39,6 +39,7 @@  #include "drumgizmo.h"  #include "drumgizmoc.h"  #include "enginefactory.h" +#include "bytesizeparser.h"  #include "event.h" @@ -65,6 +66,7 @@ static const char usage_str[] =      "output engine.\n"      "  -O, --outputparms      parmlist  Set output engine parameters.\n"      "  -e, --endpos           Number of samples to process, -1: infinite.\n" +    "  -m, --diskstreamsize   Size of buffer for disk streaming, eg. 5{k,M,G}.\n"  #ifndef DISABLE_HUGIN      "  -D, --debug ddd        Enable debug messages on 'ddd'; see hugin "      "documentation for details\n" @@ -92,10 +94,12 @@ static const char usage_str[] =      "  dummy:\n"      "\n"; +  int main(int argc, char* argv[])  {  	int c; - +	Settings settings; +	settings.disk_cache_enable = false;  	std::string hugin_filter;  	unsigned int hugin_flags = 0;  #ifndef DISABLE_HUGIN @@ -121,6 +125,7 @@ int main(int argc, char* argv[])  		    {"outputengine", required_argument, 0, 'o'},  		    {"outputparms", required_argument, 0, 'O'},  		    {"endpos", required_argument, 0, 'e'}, +		    {"diskstreamsize", required_argument, 0, 'm'},  #ifndef DISABLE_HUGIN  		    {"debug", required_argument, 0, 'D'},  #endif /*DISABLE_HUGIN*/ @@ -128,7 +133,7 @@ int main(int argc, char* argv[])  		    {"help", no_argument, 0, 'h'},  		    {0, 0, 0, 0}}; -		c = getopt_long(argc, argv, "hvpo:O:i:I:e:a" +		c = getopt_long(argc, argv, "hvpo:O:i:I:e:am:"  #ifndef DISABLE_HUGIN  		                "D:"  #endif /*DISABLE_HUGIN*/ @@ -203,6 +208,16 @@ int main(int argc, char* argv[])  			printf("%s", copyright_str);  			return 0; +		case 'm': +			settings.disk_cache_upper_limit = byteSizeParser(optarg); +			if(!settings.disk_cache_upper_limit) +			{ +				printf("%s", version_str); +				printf(usage_str, argv[0]); +				return 1; +			} +			settings.disk_cache_enable = true; +  		default:  			break;  		} @@ -343,7 +358,6 @@ int main(int argc, char* argv[])  	printf("Using kitfile: %s\n", kitfile.c_str()); -	Settings settings;  	DrumGizmo gizmo(settings, *oe.get(), *ie.get());  	gizmo.setFrameSize(oe->getBufferSize()); 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 <iostream> +#include <stdexcept> + + +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 <number>[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 <string> + + +//! Returns size in bytes +//! \param argument The size in n{k,M,G} format +std::size_t byteSizeParser(const std::string& argument); diff --git a/tools/add_file b/tools/add_file index d1b190f..a704029 100755 --- a/tools/add_file +++ b/tools/add_file @@ -16,14 +16,18 @@ function allfile() {    fi    if [ "$USER" == "chaot" ]    then -    NAME="André Nusser"; EMAIL="andre.nusser@googlemail.com" +    NAME="André Nusser"; EMAIL="andre.nusser@googlemail.com"    fi    if [ "$DGUSER" == "glocke" ]    then -    NAME="Christian Glöckner"; EMAIL="cgloeckner@freenet.de" +    NAME="Christian Glöckner"; EMAIL="cgloeckner@freenet.de" +  fi +  if [ "$USER" == "meka" ] +  then +    NAME="Goran Mekić"; EMAIL="meka@tilda.center"    fi -  echo "/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */" > $1; +  echo "/* -*- Mode: c++ -*- */" > $1;    echo "/***************************************************************************" >> $1;    echo " *            $1" >> $1;    echo " *" >> $1 ;  | 
