diff options
-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__ - |