diff options
| -rw-r--r-- | drumgizmo/drumgizmoc.cc | 98 | ||||
| -rw-r--r-- | man/drumgizmo.1 | 25 | 
2 files changed, 93 insertions, 30 deletions
| diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index e881a43..ee84594 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -115,6 +115,10 @@ static std::string usage(const std::string& name)  		"                         use this with a real-time drumkit.\n"  		"  -T, --timing-humanizerparms parmlist\n"  		"                         Timing humanizer options.\n" +		"  -x, --velocity-humanizer\n" +		"                         Enables adapting input velocities to make it sound more realistic.\n" +		"  -X, --velocity-humanizerparms parmlist\n" +		"                         Velocity humanizer options.\n"  		"  -p, --parameters parmlist\n"  		"                         Parameters for sample selection algorithm."  		"  -v, --version          Print version information and exit.\n" @@ -149,18 +153,25 @@ static std::string usage(const std::string& name)  		"\n"  		"Timing humanizer parameters:\n"  		"  laidback:      Move notes ahead or behind in time in ms [+/-100].\n" -		"  tightness:     Control the tightness of the drummer. [0,1].\n" +		"  tightness:     Control the tightness of the drummer. [0,1]\n"  		"  regain:        Control how fast the drummer catches up the timing. [0,1]\n"  		"\n" +		"Velocity humanizer parameters:\n" +		"  attack:        How quickly the velocity gets reduced when playing fast notes.\n" +		"                 Lower values result in faster velocity reduction.\n" +		"  release:       How quickly the drummer regains the velocity\n" +		"                 when there are spaces between the notes.\n" +		"                 Lower values result in faster regain. [0,1]\n" +		"  stddev:        The standard-deviation of the velocity humanization.\n" +		"                 Higher value makes it more likely that a sample further\n" +		"                 away from the input velocity will be played. [0,4.5]\n" +		"\n"  		"Sample selection parameters:\n"  		"  close:         The importance given to choosing a sample close to\n" -		"                 the actual velocity value (after humanization) [0,1].\n" +		"                 the actual velocity value (after humanization). [0,1]\n"  		"  diverse:       The importance given to choosing samples\n" -		"                 which haven't been played recently [0,1].\n" -		"  random:        The amount of randomness added [0,1].\n" -		"  stddev:        The standard-deviation for the sample selection.\n" -		"                 Higher value makes it more likely that a sample further\n" -		"                 away from the input velocity will be played [0, 4.5].\n" +		"                 which haven't been played recently. [0,1]\n" +		"  random:        The amount of randomness added. [0,1]\n"  		"\n";  	return output.str();  } @@ -283,7 +294,7 @@ int main(int argc, char* argv[])  	opt.add("inputparms", required_argument, 'I', [&]() {  		std::string parms = optarg;  		auto tokens = parseParameters(parms); -		for(auto &token : tokens) +		for(auto& token : tokens)  		{  			ie->setParm(token.key, token.value);  		} @@ -317,7 +328,7 @@ int main(int argc, char* argv[])  	opt.add("outputparms", required_argument, 'O', [&]() {  		std::string parms = optarg;  		auto tokens = parseParameters(parms); -		for(auto &token : tokens) +		for(auto& token : tokens)  		{  			oe->setParm(token.key, token.value);  		} @@ -352,7 +363,7 @@ int main(int argc, char* argv[])  	opt.add("streamingparms", required_argument, 'S', [&]() {  		std::string parms = optarg;  		auto tokens = parseParameters(parms); -		for(auto &token : tokens) +		for(auto& token : tokens)  		{  			if(token.key == "limit")  			{ @@ -393,7 +404,7 @@ int main(int argc, char* argv[])  	opt.add("timing-humanizerparms", required_argument, 'T', [&]() {  		std::string parms = optarg;  		auto tokens = parseParameters(parms); -		for(auto &token : tokens) +		for(auto& token : tokens)  		{  			if(token.key == "laidback")  			{ @@ -429,8 +440,54 @@ int main(int argc, char* argv[])  			}  			else  			{ -				std::cerr << "Unknown timing-humanizerparms argument " << token.key << -					std::endl; +				std::cerr << "Unknown timing-humanizerparms argument " << token.key << std::endl; +				exit(1); +			} +		} +	}); + +	opt.add("velocity-humanizer", no_argument, 'x', [&]() { +		settings.enable_velocity_modifier.store(true); +	}); + +	opt.add("velocity-humanizerparms", required_argument, 'X', [&]() { +		std::string parms = optarg; +		auto tokens = parseParameters(parms); +		for(auto& token : tokens) +		{ +			if (token.key == "attack") +			{ +				auto val = atof_nol(token.value.data()); +				if(val < 0 || val > 1.0) +				{ +					std::cerr << "attack range is [0, 1].\n"; +					exit(1); +				} +				settings.velocity_modifier_weight.store(val); +			} +			else if (token.key == "release") +			{ +				auto val = atof_nol(token.value.data()); +				if(val < 0 || val > 1.0) +				{ +					std::cerr << "release range is [0, 1].\n"; +					exit(1); +				} +				settings.velocity_modifier_falloff.store(val); +			} +			else if(token.key == "stddev") +			{ +				auto val = atof_nol(token.value.data()); +				if(val < 0 || val > 4.5) +				{ +					std::cerr << "stddev range is [0, 4.5].\n"; +					exit(1); +				} +				settings.velocity_stddev.store(val); +			} +			else +			{ +				std::cerr << "Unknown velocity-humanizerparms argument " << token.key << std::endl;  				exit(1);  			}  		} @@ -439,7 +496,7 @@ int main(int argc, char* argv[])  	opt.add("parameters", required_argument, 'p', [&]() {  		std::string parms = optarg;  		auto tokens = parseParameters(parms); -		for(auto &token : tokens) +		for(auto& token : tokens)  		{  			if(token.key == "close")  			{ @@ -471,20 +528,9 @@ int main(int argc, char* argv[])  				}  				settings.sample_selection_f_random.store(val);  			} -			else if(token.key == "stddev") -			{ -				auto val = atof_nol(token.value.data()); -				if(val < 0 || val > 4.5) -				{ -					std::cerr << "stddev range is [0, 4.5].\n"; -					exit(1); -				} -				settings.velocity_stddev.store(val); -			}  			else  			{ -				std::cerr << "Unknown timing-humanizerparms argument " << token.key << -					std::endl; +				std::cerr << "Unknown parameters argument " << token.key << std::endl;  				exit(1);  			}  		} diff --git a/man/drumgizmo.1 b/man/drumgizmo.1 index e4c4a1f..6770d49 100644 --- a/man/drumgizmo.1 +++ b/man/drumgizmo.1 @@ -155,6 +155,27 @@ Timing humanizer options.  \fBregain\fR=<val> (Control how fast the drummer catches up the timing. [0,1])  .RE +\fB-t, --velocity-humanizer\fR +.RS 7 +Enables adapting input velocities to make it sound more realistic. + +.RE +\fB-T, --velocity-humanizerparms parmlist\fR +.RS 7 +Velocity humanizer options. + +.P +\fBattack\fR=<val> (How quickly the velocity gets reduced when playing fast notes. +Lower values result in faster velocity reduction. [0,1]) +.P +\fBrelease\fR=<val> (How quickly the drummer regains the velocity +when there are spaces between the notes. Lower values result in faster regain. [0,1]) +.P +\fBstddev\fR=<val> (The standard-deviation for the velocity humanizer. +Higher value makes it more likely that a sample further +away from the input velocity will be played. [0,4.5]) + +.RE  \fB-p, --parameters parmlist\fR  .RS 7  Parameters for the sample selection algorithm. @@ -166,10 +187,6 @@ the actual velocity value (after humanization) [0,1])  haven't been played recently [0,1])  .P  \fBrandom\fR=<val> (The amount of randomness added [0,1]) -.P -\fBstddev\fR=<val> (The standard-deviation for the sample -selection. Higher value makes it more likely that a sample further -away from the input velocity will be played [0, 4.5])  .RE  \fB-v, --version\fR | 
