diff options
Diffstat (limited to 'drumgizmo')
| -rw-r--r-- | drumgizmo/drumgizmoc.cc | 636 | ||||
| -rw-r--r-- | drumgizmo/drumgizmoc.h | 19 | 
2 files changed, 346 insertions, 309 deletions
| diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 6f21d14..5bdb0a9 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -42,343 +42,381 @@  #include "event.h" -static const char version_str[] = -"DrumGizmo v" VERSION "\n" -; +static const char version_str[] = "DrumGizmo v" VERSION "\n";  static const char copyright_str[] = -"Copyright (C) 2008-2011 Bent Bisballe Nyeng - Aasimon.org.\n" -"This is free software.  You may redistribute copies of it under the terms of\n" -"the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" -"There is NO WARRANTY, to the extent permitted by law.\n" -"\n" -"Written by Bent Bisballe Nyeng (deva@aasimon.org)\n" -; +    "Copyright (C) 2008-2011 Bent Bisballe Nyeng - Aasimon.org.\n" +    "This is free software.  You may redistribute copies of it under the terms " +    "of\n" +    "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +    "There is NO WARRANTY, to the extent permitted by law.\n" +    "\n" +    "Written by Bent Bisballe Nyeng (deva@aasimon.org)\n";  static const char usage_str[] = -"Usage: %s [options] drumkitfile\n" -"Options:\n" -"  -a, --async-load       Load drumkit in the background and start the engine immediately.\n" -"  -i, --inputengine      dummy|test|jackmidi|midifile  Use said event input engine.\n" -"  -I, --inputparms       parmlist  Set input engine parameters.\n" -"  -o, --outputengine     dummy|alsa|jackaudio|wavfile  Use said audio output engine.\n" -"  -O, --outputparms      parmlist  Set output engine parameters.\n" -"  -e, --endpos           Number of samples to process, -1: infinite.\n" +    "Usage: %s [options] drumkitfile\n" +    "Options:\n" +    "  -a, --async-load       Load drumkit in the background and start the " +    "engine immediately.\n" +    "  -i, --inputengine      dummy|test|jackmidi|midifile  Use said event " +    "input engine.\n" +    "  -I, --inputparms       parmlist  Set input engine parameters.\n" +    "  -o, --outputengine     dummy|alsa|jackaudio|wavfile  Use said audio " +    "output engine.\n" +    "  -O, --outputparms      parmlist  Set output engine parameters.\n" +    "  -e, --endpos           Number of samples to process, -1: infinite.\n"  #ifndef DISABLE_HUGIN -"  -D, --debug ddd        Enable debug messages on 'ddd'; see hugin documentation for details\n" -#endif/*DISABLE_HUGIN*/ -"  -v, --version          Print version information and exit.\n" -"  -h, --help             Print this message and exit.\n" -"\n" -"Input engine parameters:\n" -"  jackmidi:  midimap=<midimapfile>\n" -"  midifile:  file=<midifile>, speed=<tempo> (default 1.0),\n" -"             track=<miditrack> (default -1, all tracks)\n" -"             midimap=<midimapfile>, loop=<true|false>\n" -"  test:      p=<hit_propability> (default 0.1)\n" -"             instr=<instrument> (default -1, random instrument)\n" -"             len=<seconds> (default -1, forever)\n" -"  dummy:\n" -"\n" -"Output engine parameters:\n" -"  alsa:      dev=<device> (default 'default'), frames=<frames> (default 32)\n" -"             srate=<samplerate> (default 441000)\n" -"  wavfile:   file=<filename> (default 'output'), srate=<samplerate> (default 44100)\n" -"  jackaudio:\n" -"  dummy:\n" -"\n" -; - -CliMain::CliMain() : MessageReceiver(MSGRCV_UI) +    "  -D, --debug ddd        Enable debug messages on 'ddd'; see hugin " +    "documentation for details\n" +#endif /*DISABLE_HUGIN*/ +    "  -v, --version          Print version information and exit.\n" +    "  -h, --help             Print this message and exit.\n" +    "\n" +    "Input engine parameters:\n" +    "  jackmidi:  midimap=<midimapfile>\n" +    "  midifile:  file=<midifile>, speed=<tempo> (default 1.0),\n" +    "             track=<miditrack> (default -1, all tracks)\n" +    "             midimap=<midimapfile>, loop=<true|false>\n" +    "  test:      p=<hit_propability> (default 0.1)\n" +    "             instr=<instrument> (default -1, random instrument)\n" +    "             len=<seconds> (default -1, forever)\n" +    "  dummy:\n" +    "\n" +    "Output engine parameters:\n" +    "  alsa:      dev=<device> (default 'default'), frames=<frames> (default " +    "32)\n" +    "             srate=<samplerate> (default 441000)\n" +    "  wavfile:   file=<filename> (default 'output'), srate=<samplerate> " +    "(default 44100)\n" +    "  jackaudio:\n" +    "  dummy:\n" +    "\n"; + +CliMain::CliMain() +	: MessageReceiver(MSGRCV_UI)  { -  loading = true; // Block by default +	loading = true; // Block by default  }  CliMain::~CliMain()  {  } -void CliMain::handleMessage(Message *msg) +void CliMain::handleMessage(Message* msg)  { -  switch(msg->type()) { -  case Message::LoadStatus: -    { -      LoadStatusMessage *ls = (LoadStatusMessage*)msg; -      if(ls->numer_of_files_loaded == ls->number_of_files) { -        loading = false; -      } -    } -    break; -  default: -    break; -  } +	switch(msg->type()) +	{ +	case Message::LoadStatus: +		{ +			auto ls = static_cast<LoadStatusMessage*>(msg); +			if(ls->numer_of_files_loaded == ls->number_of_files) +			{ +				loading = false; +			} +		} +		break; +	default: +		break; +	}  } -int CliMain::run(int argc, char *argv[]) +int CliMain::run(int argc, char* argv[])  { -  int c; +	int c; -  std::string hugin_filter; -  unsigned int hugin_flags = 0; +	std::string hugin_filter; +	unsigned int hugin_flags = 0;  #ifndef DISABLE_HUGIN -  hugin_flags = HUG_FLAG_DEFAULT; -#endif/*DISABLE_HUGIN*/ - -  std::string outputengine; -  std::string inputengine; -  std::string iparms; -  std::string oparms; -  bool async = false; -  int endpos = -1; - -  int option_index = 0; -  while(1) { -    static struct option long_options[] = { -      {"async-load", no_argument, 0, 'a'}, -      {"inputengine", required_argument, 0, 'i'}, -      {"inputparms", required_argument, 0, 'I'}, -      {"outputengine", required_argument, 0, 'o'}, -      {"outputparms", required_argument, 0, 'O'}, -      {"endpos", required_argument, 0, 'e'}, +	hugin_flags = HUG_FLAG_DEFAULT; +#endif /*DISABLE_HUGIN*/ + +	std::string outputengine; +	std::string inputengine; +	std::string iparms; +	std::string oparms; +	bool async = false; +	int endpos = -1; + +	EngineFactory factory; + +	int option_index = 0; +	while(1) +	{ +		static struct option long_options[] = { +		    {"async-load", no_argument, 0, 'a'}, +		    {"inputengine", required_argument, 0, 'i'}, +		    {"inputparms", required_argument, 0, 'I'}, +		    {"outputengine", required_argument, 0, 'o'}, +		    {"outputparms", required_argument, 0, 'O'}, +		    {"endpos", required_argument, 0, 'e'},  #ifndef DISABLE_HUGIN -      {"debug", required_argument, 0, 'D'}, -#endif/*DISABLE_HUGIN*/ -      {"version", no_argument, 0, 'v'}, -      {"help", no_argument, 0, 'h'}, -      {0, 0, 0, 0} -    }; -     -    c = getopt_long(argc, argv, "hvpo:O:i:I:e:a" +		    {"debug", required_argument, 0, 'D'}, +#endif /*DISABLE_HUGIN*/ +		    {"version", no_argument, 0, 'v'}, +		    {"help", no_argument, 0, 'h'}, +		    {0, 0, 0, 0}}; + +		c = getopt_long(argc, argv, "hvpo:O:i:I:e:a"  #ifndef DISABLE_HUGIN -                    "D:" -#endif/*DISABLE_HUGIN*/ -                    , long_options, &option_index); -     -    if (c == -1) -      break; - -    switch(c) { -    case 'i': -      inputengine = optarg; -      if(inputengine == "help") { -        printf("Available input engines: jackmidi, midifile.\n"); -        return 0; -      } -      break; +		                "D:" +#endif /*DISABLE_HUGIN*/ +		                , long_options, &option_index); + +		if(c == -1) { +			break; +		} + +		switch(c) +		{ +		case 'i': +			inputengine = optarg; +			if(inputengine == "help") +			{ +				std::cout << "Available Input Engines = { "; +				for(auto const& name : factory.getInputEngines()) +				{ +					std::cout << name << " "; +				} +				std::cout << "}\n"; +				return 0; +			} +			break;  #ifndef DISABLE_HUGIN -    case 'D': -      hugin_flags |= HUG_FLAG_USE_FILTER; -      hugin_filter = optarg; -      break; -#endif/*DISABLE_HUGIN*/ - -    case 'I': -      iparms = optarg; -      break; - -    case 'o': -      outputengine = optarg; -      if(outputengine == "help") { -        printf("Available output engines: alsa, jackaudio, wavfile.\n"); -        return 0; -      } -      break; - -    case 'O': -      oparms = optarg; -      break; - -    case 'a': -      async = true; -      break; -  -    case 'e': -      endpos = atoi(optarg); -      break; - -    case '?': -    case 'h': -      printf("%s", version_str); -      printf(usage_str, argv[0]); -      return 0; - -    case 'v': -      printf("%s", version_str); -      printf("%s", copyright_str); -      return 0; - -    default: -      break; -    } -  } - -  hug_status_t status = hug_init(hugin_flags, -                                 HUG_OPTION_FILTER, hugin_filter.c_str(), -                                 HUG_OPTION_END); -  if(status != HUG_STATUS_OK) { -    printf("Error: %d\n", status); -    return 1; -  } - -  DEBUG(drumgizmo, "Debug enabled."); - -  if(inputengine == "") { -    printf("Missing input engine\n"); -    return 1; -  } +		case 'D': +			hugin_flags |= HUG_FLAG_USE_FILTER; +			hugin_filter = optarg; +			break; +#endif /*DISABLE_HUGIN*/ + +		case 'I': +			iparms = optarg; +			break; + +		case 'o': +			outputengine = optarg; +			if(outputengine == "help") +			{ +				std::cout << "Available Output Engines = { "; +				for(auto const& name : factory.getOutputEngines()) +				{ +					std::cout << name << " "; +				} +				std::cout << "}\n"; +				return 0; +			} +			break; + +		case 'O': +			oparms = optarg; +			break; + +		case 'a': +			async = true; +			break; + +		case 'e': +			endpos = atoi(optarg); +			break; + +		case '?': +		case 'h': +			printf("%s", version_str); +			printf(usage_str, argv[0]); +			return 0; + +		case 'v': +			printf("%s", version_str); +			printf("%s", copyright_str); +			return 0; + +		default: +			break; +		} +	} -	EngineFactory factory; -	std::cout << "Available Input Engines = { "; -	for (auto const & name: factory.getInputEngines()) { -		std::cout << name << " "; +	hug_status_t status = hug_init(hugin_flags, HUG_OPTION_FILTER, +	                               hugin_filter.c_str(), HUG_OPTION_END); +	if(status != HUG_STATUS_OK) +	{ +		printf("Error: %d\n", status); +		return 1;  	} -	std::cout << "}\n"; -	std::cout << "Available Output Engines = { "; -	for (auto const & name: factory.getOutputEngines()) { -		std::cout << name << " "; + +	DEBUG(drumgizmo, "Debug enabled."); + +	if(inputengine == "") +	{ +		printf("Missing input engine\n"); +		return 1;  	} -	std::cout << "}\n"; -	 +  	auto ie = factory.createInput(inputengine); -  if(ie == NULL) { -    printf("Invalid input engine: %s\n", inputengine.c_str()); -    return 1; -  } - -  { -  std::string parm; -  std::string val; -  bool inval = false; -  for(size_t i = 0; i < iparms.size(); i++) { -    if(iparms[i] == ',') { -      ie->setParm(parm, val); -      parm = ""; -      val = ""; -      inval = false; -      continue; -    } - -    if(iparms[i] == '=') { -      inval = true; -      continue; -    } - -    if(inval) { -      val += iparms[i]; -    } else { -      parm += iparms[i]; -    } -  } -  if(parm != "") ie->setParm(parm, val); -  } - -  if(outputengine == "") { -    printf("Missing output engine\n"); -    return 1; -  } - -  auto oe = factory.createOutput(outputengine); - -  if(oe == NULL) { -    printf("Invalid output engine: %s\n", outputengine.c_str()); -    return 1; -  } - -  { -  std::string parm; -  std::string val; -  bool inval = false; -  for(size_t i = 0; i < oparms.size(); i++) { -    if(oparms[i] == ',') { -      oe->setParm(parm, val); -      parm = ""; -      val = ""; -      inval = false; -      continue; -    } - -    if(oparms[i] == '=') { -      inval = true; -      continue; -    } - -    if(inval) { -      val += oparms[i]; -    } else { -      parm += oparms[i]; -    } -  } -  if(parm != "") oe->setParm(parm, val); -  } - -  std::string kitfile; - -  if(option_index < argc) { -    while (optind < argc) { -      if(kitfile != "") { -        printf("Can only handle a single kitfile.\n"); -        printf(usage_str, argv[0]); -        return 1; -      } -      kitfile = argv[optind++]; -    } -    printf("\n"); -  } else { -    printf("Missing kitfile.\n"); -    printf(usage_str, argv[0]); -    return 1; -  } -   -  printf("Using kitfile: %s\n", kitfile.c_str()); - -  DrumGizmo gizmo(oe.get(), ie.get()); - -	gizmo.setFrameSize(oe->getBufferSize()); - -  if(kitfile == "" || !gizmo.loadkit(kitfile)) { -    printf("Failed to load \"%s\".\n", kitfile.c_str()); -    return 1; -  } - -  printf("Loading drumkit, this may take a while..."); -  fflush(stdout); -  loading = true; -  while(async == false && loading) { +	if(ie == NULL) +	{ +		printf("Invalid input engine: %s\n", inputengine.c_str()); +		return 1; +	} + +	{ +		std::string parm; +		std::string val; +		bool inval = false; +		for(size_t i = 0; i < iparms.size(); i++) +		{ +			if(iparms[i] == ',') +			{ +				ie->setParm(parm, val); +				parm = ""; +				val = ""; +				inval = false; +				continue; +			} + +			if(iparms[i] == '=') +			{ +				inval = true; +				continue; +			} + +			if(inval) +			{ +				val += iparms[i]; +			} +			else +			{ +				parm += iparms[i]; +			} +		} +		if(parm != "") { +			ie->setParm(parm, val); +		} +	} + +	if(outputengine == "") +	{ +		printf("Missing output engine\n"); +		return 1; +	} + +	auto oe = factory.createOutput(outputengine); + +	if(oe == NULL) +	{ +		printf("Invalid output engine: %s\n", outputengine.c_str()); +		return 1; +	} + +	{ +		std::string parm; +		std::string val; +		bool inval = false; +		for(size_t i = 0; i < oparms.size(); i++) +		{ +			if(oparms[i] == ',') +			{ +				oe->setParm(parm, val); +				parm = ""; +				val = ""; +				inval = false; +				continue; +			} + +			if(oparms[i] == '=') +			{ +				inval = true; +				continue; +			} + +			if(inval) +			{ +				val += oparms[i]; +			} +			else +			{ +				parm += oparms[i]; +			} +		} +		if(parm != "") { +			oe->setParm(parm, val); +		} +	} + +	std::string kitfile; + +	if(option_index < argc) +	{ +		while(optind < argc) +		{ +			if(kitfile != "") +			{ +				printf("Can only handle a single kitfile.\n"); +				printf(usage_str, argv[0]); +				return 1; +			} +			kitfile = argv[optind++]; +		} +		printf("\n"); +	} +	else +	{ +		printf("Missing kitfile.\n"); +		printf(usage_str, argv[0]); +		return 1; +	} + +	printf("Using kitfile: %s\n", kitfile.c_str()); + +	DrumGizmo gizmo(oe.get(), ie.get()); + +	// gizmo.setFrameSize(oe.getBufferSize()); + +	if(kitfile == "" || !gizmo.loadkit(kitfile)) +	{ +		printf("Failed to load \"%s\".\n", kitfile.c_str()); +		return 1; +	} + +	printf("Loading drumkit, this may take a while..."); +	fflush(stdout); +	loading = true; +	while(async == false && loading) +	{  #ifdef WIN32 -    SleepEx(500, FALSE); +		SleepEx(500, FALSE);  #else -    usleep(500000); -#endif/*WIN32*/ -    handleMessages(); -    printf("."); -    fflush(stdout); -  } -  printf("done.\n"); +		usleep(500000); +#endif /*WIN32*/ +		handleMessages(); +		printf("."); +		fflush(stdout); +	} +	printf("done.\n"); -  gizmo.setSamplerate(oe->samplerate()); +	gizmo.setSamplerate(oe->samplerate()); -  if(!gizmo.init()) { -    printf("Failed init engine.\n"); -    return 1; -  } +	if(!gizmo.init()) +	{ +		printf("Failed init engine.\n"); +		return 1; +	} -  gizmo.run(endpos); +	gizmo.run(endpos); -  printf("Quit.\n"); fflush(stdout); +	printf("Quit.\n"); +	fflush(stdout); -  hug_close(); +	hug_close(); -  return 0; +	return 0;  } -int main(int argc, char *argv[]) +int main(int argc, char* argv[])  { -  CliMain cli; - -  cli.run(argc, argv); +	CliMain cli; -  return 0; +	cli.run(argc, argv); +	return 0;  } diff --git a/drumgizmo/drumgizmoc.h b/drumgizmo/drumgizmoc.h index 4b6d4a1..cf15664 100644 --- a/drumgizmo/drumgizmoc.h +++ b/drumgizmo/drumgizmoc.h @@ -25,21 +25,20 @@   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ -#ifndef __DRUMGIZMOC_H__ -#define __DRUMGIZMOC_H__ +#pragma once  #include "messagereceiver.h" -class CliMain : public MessageReceiver { +class CliMain : public MessageReceiver +{  public: -  CliMain(); -  virtual ~CliMain(); +	CliMain(); +	virtual ~CliMain(); + +	int run(int argc, char* argv[]); +	void handleMessage(Message* msg); -  int run(int argc, char *argv[]); -  void handleMessage(Message *msg);  private: -  bool loading; +	bool loading;  }; -#endif//__DRUMGIZMOC_H__ - | 
