From 711c3124bb939a8edfa8e483001307826d0c5d86 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 8 Feb 2015 10:30:21 +0100 Subject: [PATCH] Wait for the drumkit to get loaded before starting playback (by Sergey 'Jin' Bostandzhyan) --- drumgizmo/Makefile.am | 1 + drumgizmo/drumgizmoc.cc | 58 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/drumgizmo/Makefile.am b/drumgizmo/Makefile.am index aaef1ee..687485d 100644 --- a/drumgizmo/Makefile.am +++ b/drumgizmo/Makefile.am @@ -25,6 +25,7 @@ drumgizmo_SOURCES = \ EXTRA_DIST = \ audioinputenginedl.h \ audiooutputenginedl.h \ + drumgizmoc.h \ jackclient.h endif diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 61f8eaa..d8479fa 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -30,8 +30,10 @@ #include #include #include +#include #include "drumgizmo.h" +#include "drumgizmoc.h" #include "audiooutputenginedl.h" #include "audioinputenginedl.h" @@ -64,7 +66,29 @@ static const char usage_str[] = " -h, --help Print this message and exit.\n" ; -int main(int argc, char *argv[]) +CliMain::CliMain() : MessageReceiver(MSGRCV_UI), loading(false) +{} + +CliMain::~CliMain() +{} + +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; + } +} + +int CliMain::run(int argc, char *argv[]) { int c; @@ -243,11 +267,27 @@ int main(int argc, char *argv[]) printf("Using kitfile: %s\n", kitfile.c_str()); DrumGizmo gizmo(oe, ie); + 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 (loading) { +#ifdef WIN32 + SleepEx(500, FALSE); +#else + usleep(500000); +#endif/*WIN32*/ + handleMessages(); + printf("."); + fflush(stdout); + } + printf("done.\n"); + gizmo.setSamplerate(oe->samplerate()); if(!gizmo.init(preload)) { @@ -264,3 +304,19 @@ int main(int argc, char *argv[]) return 0; } + +int main(int argc, char *argv[]) +{ + + CliMain* cli = new CliMain(); + if (cli == NULL) { + printf("Could not initialize command line client\n"); + return 1; + } + + cli->run(argc, argv); + delete cli; + + return 0; + +} -- cgit v1.2.3 From 4e216965d026c7db0af5626d07657db3c5421351 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 8 Feb 2015 10:44:33 +0100 Subject: Delay TYPE_STOP event until the last active samples are done playing. --- src/drumgizmo.cc | 19 ++++++++++++++++++- src/drumgizmo.h | 11 ++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 6b48cda..7fded57 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -47,6 +47,7 @@ DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i) : MessageReceiver(MSGRCV_ENGINE), loader(), oe(o), ie(i) { + is_stopping = false; } DrumGizmo::~DrumGizmo() @@ -255,7 +256,23 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) } if(evs[e].type == TYPE_STOP) { - return false; + is_stopping = true; + } + + if(is_stopping) { + // Count the number of active events. + int num_active_events = 0; + Channels::iterator j = kit.channels.begin(); + while(j != kit.channels.end()) { + Channel &ch = *j; + num_active_events += activeevents[ch.num].size(); + j++; + } + + if(num_active_events == 0) { + // No more active events - now we can stop the engine. + return false; + } } } diff --git a/src/drumgizmo.h b/src/drumgizmo.h index 138e61c..403b43e 100644 --- a/src/drumgizmo.h +++ b/src/drumgizmo.h @@ -51,14 +51,13 @@ class DrumGizmo : public MessageReceiver { public: - DrumGizmo(AudioOutputEngine *outputengine, - AudioInputEngine *inputengine); + DrumGizmo(AudioOutputEngine *outputengine, AudioInputEngine *inputengine); virtual ~DrumGizmo(); bool loadkit(std::string kitfile); bool init(bool preload = true); - + /** * @param endpos number of samples to process, -1 := never stop. */ @@ -68,8 +67,6 @@ public: void getSamples(int ch, int pos, sample_t *s, size_t sz); - bool isRunning() { return is_running; } - std::string configString(); bool setConfigString(std::string cfg); @@ -77,12 +74,12 @@ public: int samplerate(); void setSamplerate(int samplerate); - + private: DrumKitLoader loader; Mutex mutex; - bool is_running; + bool is_stopping; ///< Is set to true when a TYPE_STOP event has been seen. AudioOutputEngine *oe; AudioInputEngine *ie; -- cgit v1.2.3 From 225adcb9d4b13e2b3ada5f9674729f90b91483fc Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 8 Feb 2015 12:10:25 +0100 Subject: [PATCH] Wait for the drumkit to get loaded before starting playback (by Sergey 'Jin' Bostandzhyan) --- drumgizmo/drumgizmoc.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 drumgizmo/drumgizmoc.h diff --git a/drumgizmo/drumgizmoc.h b/drumgizmo/drumgizmoc.h new file mode 100644 index 0000000..4b6d4a1 --- /dev/null +++ b/drumgizmo/drumgizmoc.h @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * drumgizmoc.h + * + * Mon Jan 12 00:36:37 CET 2015 + * Copyright 2015 Sergey 'Jin' Bostandzhyan + * jin@mediatomb.cc + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ + +#ifndef __DRUMGIZMOC_H__ +#define __DRUMGIZMOC_H__ + +#include "messagereceiver.h" + +class CliMain : public MessageReceiver { +public: + CliMain(); + virtual ~CliMain(); + + int run(int argc, char *argv[]); + void handleMessage(Message *msg); +private: + bool loading; +}; + +#endif//__DRUMGIZMOC_H__ + -- cgit v1.2.3 From 0fdf66b095324a7cc410589b12e682c94e664715 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Mon, 9 Feb 2015 20:18:40 +0100 Subject: Extended usage information. --- drumgizmo/drumgizmoc.cc | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index d8479fa..4bfd608 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -57,13 +57,31 @@ static const char usage_str[] = "Usage: %s [options] drumkitfile\n" "Options:\n" " -p, --preload Load entire kit audio files into memory (uses ALOT of memory).\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|jack|sndfile Use said audio output engine.\n" -" -O, --outputparms parmlist Set output engine parameters.\n" -" -e, --endpos Number of samples to process, -1: infinite.\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|jack|sndfile Use said audio output engine.\n" +" -O, --outputparms parmlist Set output engine parameters.\n" +" -e, --endpos Number of samples to process, -1: infinite.\n" " -v, --version Print version information and exit.\n" " -h, --help Print this message and exit.\n" +"\n" +"Input engine parameters:\n" +" jackmidi: midimap=\n" +" midifile: file=, speed= (default 1.0),\n" +" track= (default -1, all tracks)\n" +" midimap=, loop=\n" +" test: p= (default 0.1)\n" +" instr= (default -1, random instrument)\n" +" len= (default -1, forever)\n" +" dummy:\n" +"\n" +"Output engine parameters:\n" +" alsa: dev= (default 'default'), frames= (default 32)\n" +" srate= (default 441000)\n" +" wavfile: file= (default 'output'), srate= (default 44100)\n" +" jackaudio:\n" +" dummy:\n" +"\n" ; CliMain::CliMain() : MessageReceiver(MSGRCV_UI), loading(false) -- cgit v1.2.3 From aec6b3361b3de8391177261469da6edafd39a080 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 12:56:43 +0100 Subject: Fix locale sensitive float parsing/printing. --- src/Makefile.am | 1 + src/drumgizmo.cc | 6 ++-- src/instrumentparser.cc | 8 +++-- src/nolocale.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 src/nolocale.h diff --git a/src/Makefile.am b/src/Makefile.am index b9b0aae..df9f4ca 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,6 +23,7 @@ EXTRA_DIST = \ midimapparser.h \ midimapper.h \ mutex.h \ + nolocale.h \ path.h \ powerlist.h \ rangemap.h \ diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 6b48cda..5d7de70 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -43,6 +43,8 @@ #include "configuration.h" #include "configparser.h" +#include "nolocale.h" + DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i) : MessageReceiver(MSGRCV_ENGINE), loader(), oe(o), ie(i) @@ -451,7 +453,7 @@ void DrumGizmo::setSamplerate(int samplerate) std::string float2str(float a) { char buf[256]; - sprintf(buf, "%f", a); + snprintf_nol(buf, sizeof(buf) - 1, "%f", a); return buf; } @@ -463,7 +465,7 @@ std::string bool2str(bool a) float str2float(std::string a) { if(a == "") return 0.0; - return atof(a.c_str()); + return atof_nol(a.c_str()); } std::string DrumGizmo::configString() diff --git a/src/instrumentparser.cc b/src/instrumentparser.cc index 0889d74..1f25bc7 100644 --- a/src/instrumentparser.cc +++ b/src/instrumentparser.cc @@ -33,6 +33,8 @@ #include "path.h" +#include "nolocale.h" + InstrumentParser::InstrumentParser(const std::string &file, Instrument &i) : instrument(i) { @@ -84,7 +86,7 @@ void InstrumentParser::startTag(std::string name, if(attr.find("power") == attr.end()) { power = -1; } else { - power = atof(attr["power"].c_str()); + power = atof_nol(attr["power"].c_str()); DEBUG(instrparser, "Instrument power set to %f\n", power); } @@ -136,8 +138,8 @@ void InstrumentParser::startTag(std::string name, return; } - lower = atof(attr["lower"].c_str()); - upper = atof(attr["upper"].c_str()); + lower = atof_nol(attr["lower"].c_str()); + upper = atof_nol(attr["upper"].c_str()); } if(name == "sampleref") { diff --git a/src/nolocale.h b/src/nolocale.h new file mode 100644 index 0000000..ac83dda --- /dev/null +++ b/src/nolocale.h @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * nolocale.h + * + * Fri Feb 13 12:48:10 CET 2015 + * Copyright 2015 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ +#ifndef __DRUMGIZMO_NOLOCALE_H__ +#define __DRUMGIZMO_NOLOCALE_H__ + +#include +#include + +static inline double atof_nol(const char *nptr) +{ + double res; + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + res = atof(nptr); + + uselocale(prev_locale); + freelocale(new_locale); + + return res; +} + +static inline int sprintf_nol(char *str, const char *format, ...) +{ + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + va_list vl; + va_start(vl, format); + int ret = vsprintf(str, format, vl); + va_end(vl); + + uselocale(prev_locale); + freelocale(new_locale); + + return ret; +} + +static inline int snprintf_nol(char *str, size_t size, const char *format, ...) +{ + locale_t new_locale, prev_locale; + + new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); + prev_locale = uselocale(new_locale); + + va_list vl; + va_start(vl, format); + int ret = vsnprintf(str, size, format, vl); + va_end(vl); + + uselocale(prev_locale); + freelocale(new_locale); + + return ret; +} + +#endif/*__DRUMGIZMO_NOLOCALE_H__*/ -- cgit v1.2.3 From 5be85a677f8f228614d8e449674c8fe3161b3d71 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 13:54:14 +0100 Subject: Possible win32 fix for missing locale_t type. --- src/nolocale.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nolocale.h b/src/nolocale.h index ac83dda..f8a5303 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -30,6 +30,10 @@ #include #include +#ifdef WIN32 +typedef _locale_t locale_t; +#endif + static inline double atof_nol(const char *nptr) { double res; -- cgit v1.2.3 From 56dea4ff4571de433642ce397c199c021ee94f55 Mon Sep 17 00:00:00 2001 From: Lars Bisballe Jensen Date: Fri, 13 Feb 2015 14:28:07 +0100 Subject: Mismatch with expected option parms now fixed for jackaudio and wavfile. Was called jack and sndfile before --- drumgizmo/drumgizmoc.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 61f8eaa..ce4d9e2 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -57,7 +57,7 @@ static const char usage_str[] = " -p, --preload Load entire kit audio files into memory (uses ALOT of memory).\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|jack|sndfile Use said audio output engine.\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" " -v, --version Print version information and exit.\n" @@ -110,7 +110,7 @@ int main(int argc, char *argv[]) case 'o': outputengine = optarg; if(outputengine == "help") { - printf("Available output engines: alsa, jack, sndfile.\n"); + printf("Available output engines: alsa, jackaudio, wavfile.\n"); return 0; } break; -- cgit v1.2.3 From da2d01a87c911f0db602e8e4376bb485fdfc31f1 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 14:59:09 +0100 Subject: Possible win32 fix for missing locale_t type - part2. --- src/nolocale.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index f8a5303..1b71ef2 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -30,13 +30,20 @@ #include #include -#ifdef WIN32 -typedef _locale_t locale_t; -#endif - static inline double atof_nol(const char *nptr) { double res; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + res = _atof_l(nptr, l); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -47,11 +54,28 @@ static inline double atof_nol(const char *nptr) uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return res; } static inline int sprintf_nol(char *str, const char *format, ...) { + int ret; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + va_list vl; + va_start(vl, format); + ret = _vsprintf_l(str, format, vl, l); + va_end(vl); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -59,17 +83,34 @@ static inline int sprintf_nol(char *str, const char *format, ...) va_list vl; va_start(vl, format); - int ret = vsprintf(str, format, vl); + ret = vsprintf(str, format, vl); va_end(vl); uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return ret; } static inline int snprintf_nol(char *str, size_t size, const char *format, ...) { + int ret; + +#ifdef WIN32 + + _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + + va_list vl; + va_start(vl, format); + ret = vsnprintf(str, size, format, vl, l); + va_end(vl); + + _free_locale(l); + +#else/*WIN32*/ + locale_t new_locale, prev_locale; new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); @@ -77,12 +118,14 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - int ret = vsnprintf(str, size, format, vl); + ret = vsnprintf(str, size, format, vl); va_end(vl); uselocale(prev_locale); freelocale(new_locale); +#endif/*WIN32*/ + return ret; } -- cgit v1.2.3 From 92abe7381596a5baaf62eec3e55172678ed1f1dd Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:07:25 +0100 Subject: Possible win32 fix for missing locale_t type - part3. --- src/nolocale.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index 1b71ef2..3d8d50d 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -36,7 +36,7 @@ static inline double atof_nol(const char *nptr) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); res = _atof_l(nptr, l); @@ -65,7 +65,7 @@ static inline int sprintf_nol(char *str, const char *format, ...) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); @@ -100,7 +100,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) #ifdef WIN32 - _locale_t l = _create_locale(LC_NUMERIC_MASK, "C"); + _locale_t l = _create_locale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); -- cgit v1.2.3 From cc4205dd6d9b6024d4bedf7e58abb1b73f276def Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:11:34 +0100 Subject: Possible win32 fix for missing locale_t type - part4. --- src/nolocale.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nolocale.h b/src/nolocale.h index 3d8d50d..18ae03f 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = vsnprintf(str, size, format, vl, l); + ret = vsnprintf_l(str, size, format, vl, l); va_end(vl); _free_locale(l); -- cgit v1.2.3 From 7a1136d0efdc71251104dd2f4cbbda03887e0e9d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:14:27 +0100 Subject: Possible win32 fix for missing locale_t type - part5. --- src/nolocale.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nolocale.h b/src/nolocale.h index 18ae03f..59489cd 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = vsnprintf_l(str, size, format, vl, l); + ret = _vsnprintf_l(str, size, format, vl, l); va_end(vl); _free_locale(l); -- cgit v1.2.3 From f28bf71b7c105da7cd0a7db67e21bbceb5df8a1b Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 15:21:07 +0100 Subject: Possible win32 fix for missing locale_t type - part6 (this is getting a bit embarrasing...). --- src/nolocale.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index 59489cd..d61abbb 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -69,7 +69,7 @@ static inline int sprintf_nol(char *str, const char *format, ...) va_list vl; va_start(vl, format); - ret = _vsprintf_l(str, format, vl, l); + ret = _vsprintf_l(str, format, l, vl); va_end(vl); _free_locale(l); @@ -104,7 +104,7 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) va_list vl; va_start(vl, format); - ret = _vsnprintf_l(str, size, format, vl, l); + ret = _vsnprintf_l(str, size, format, l, vl); va_end(vl); _free_locale(l); -- cgit v1.2.3 From 3d695f697e7230f3b4fa8922847b20eae632226f Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 18:22:45 +0100 Subject: More portable way of switching locale. --- src/nolocale.h | 68 ++++++---------------------------------------------------- 1 file changed, 7 insertions(+), 61 deletions(-) diff --git a/src/nolocale.h b/src/nolocale.h index d61abbb..816dd9c 100644 --- a/src/nolocale.h +++ b/src/nolocale.h @@ -34,27 +34,11 @@ static inline double atof_nol(const char *nptr) { double res; -#ifdef WIN32 + const char *locale = setlocale(LC_NUMERIC, "C"); - _locale_t l = _create_locale(LC_NUMERIC, "C"); + res = atof(nptr); - res = _atof_l(nptr, l); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); - - res = atof(nptr); - - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return res; } @@ -63,33 +47,14 @@ static inline int sprintf_nol(char *str, const char *format, ...) { int ret; -#ifdef WIN32 - - _locale_t l = _create_locale(LC_NUMERIC, "C"); - - va_list vl; - va_start(vl, format); - ret = _vsprintf_l(str, format, l, vl); - va_end(vl); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); + const char *locale = setlocale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); ret = vsprintf(str, format, vl); va_end(vl); - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return ret; } @@ -98,33 +63,14 @@ static inline int snprintf_nol(char *str, size_t size, const char *format, ...) { int ret; -#ifdef WIN32 - - _locale_t l = _create_locale(LC_NUMERIC, "C"); - - va_list vl; - va_start(vl, format); - ret = _vsnprintf_l(str, size, format, l, vl); - va_end(vl); - - _free_locale(l); - -#else/*WIN32*/ - - locale_t new_locale, prev_locale; - - new_locale = newlocale(LC_NUMERIC_MASK, "C", NULL); - prev_locale = uselocale(new_locale); + const char *locale = setlocale(LC_NUMERIC, "C"); va_list vl; va_start(vl, format); ret = vsnprintf(str, size, format, vl); va_end(vl); - uselocale(prev_locale); - freelocale(new_locale); - -#endif/*WIN32*/ + setlocale(LC_NUMERIC, locale); return ret; } -- cgit v1.2.3 From 8660860404db3fed04a1d9373d6b90a8f173c809 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 13 Feb 2015 19:37:02 +0100 Subject: Remove wavfile.la in output module dir. --- drumgizmo/output/wavfile/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drumgizmo/output/wavfile/Makefile.am b/drumgizmo/output/wavfile/Makefile.am index ae0eb76..ad26294 100644 --- a/drumgizmo/output/wavfile/Makefile.am +++ b/drumgizmo/output/wavfile/Makefile.am @@ -26,4 +26,4 @@ wavfile_la_LIBADD = wavfile_la_SOURCES = $(wavfilebuildsources) install-exec-hook: - rm -f $(DESTDIR)$(libdir)/alsa.la + rm -f $(DESTDIR)$(libdir)/wavfile.la -- cgit v1.2.3 From 2214806138113feb91a76d640f89773c1088b705 Mon Sep 17 00:00:00 2001 From: Lars Bisballe Jensen Date: Mon, 16 Feb 2015 12:41:46 +0100 Subject: man page is now correctly formatted --- man/drumgizmo.1 | 138 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 60 deletions(-) diff --git a/man/drumgizmo.1 b/man/drumgizmo.1 index 3472ddc..ad9b1f2 100644 --- a/man/drumgizmo.1 +++ b/man/drumgizmo.1 @@ -4,7 +4,7 @@ drumgizmo \- drum application .SH SYNOPSIS -\fBdrumgizmo\fR [OPTIONS] \fIdrumkitfile +\fBdrumgizmo\fR [OPTIONS] drumkitfile .SH "DESCRIPTION" .PP @@ -13,86 +13,104 @@ drumgizmo \- drum application DrumGizmo uses an open drumkit file format, allowing the community to create their own drumkits. It has multichannel output, making it possible to mix it just the way you would a real drumkit. The optional built-in humanizer analyzes the midi notes, adjusting velocities on-the-fly. This client can be a stand-alone midi renderer, generating .wav files, 1 for each channel. Or use DrumGizmo as a software sampler for an electronic drumkit. There are also plugin versions available. .SH "OPTIONS" -.TP -\fB-p, --preload -Load entire kit audio files into memory (uses A LOT of memory). -.TP +.PD 0 +.RE +.RS 7 \fB-i, --inputengine \fR{dummy|test|jackmidi|midifile} +.RS 7 Use said event input engine. -.TP -\fB-I, --inputparms parmlist + +.RE +\fB-I, --inputparms parmlist\fR +.RS 7 Set input engine parameters. -.TP -.SS -\fBjackmidi: + +\fBjackmidi:\fR +.P midimap= -.TP -.SS -\fBmidifile: -file=, speed= (default 1.0) -.br + +\fBmidifile:\fR +.P +file= +.P +speed= (default 1.0) +.P track= (default -1, all tracks) -.br -midimap=, loop= -.TP -.SS -\fBtest: +.P +midimap= +.P +loop= + +\fBtest:\fR +.P p= (default 0.1) -.br +.P instr= (default -1, random instrument) -.br +.P len= (default -1, forever) -.TP -.SS -\fBdummy: -.TP + +\fBdummy:\fR + +.RE \fB-o, --outputengine \fR{dummy|alsa|jackaudio|wavfile} +.RS 7 Use said audio output engine. -.TP -\fB-O, --outputparms parmlist + +.RE +\fB-O, --outputparms parmlist\fR +.RS 7 Set output engine parameters. -.TP -.SS -\fBalsa: + +\fBalsa:\fR +.P dev= (default 'default') -.br +.P frames= (default 32) -.br +.P srate= (default 441000) -.TP -.SS -\fBwavfile: + +\fBwavfile:\fR +.P file= (default 'output') -.br +.P srate= (default 44100) -.TP -.SS -\fBjackaudio: -.TP -.SS -\fBdummy: -.TP -\fB-e, --endpos + +\fBjackaudio:\fR + +\fBdummy:\fR + +.RE +\fB-e, --endpos\fR +.RS 7 Number of samples to process, -1: infinite. -.TP -\fB-v, --version + +.RE +\fB-v, --version\fR +.RS 7 Print drumgizmo version and exit. -.TP -\fB-h, --help + +.RE +\fB-h, --help\fR +.RS 7 Print command line help and exit. -.TP -\fB\fIdrumkitfile + +.RE +\fBdrumkitfile\fR +.RS 7 Load the drumkitfile. -.El -.Sh "EXAMPLES" -Render midifile to wav files: -.Bb -literal -offset indent -compact -drumgizmo -p -i midifile -I file=file.mid,midimap=midimap.xml -o wavfile -O file=file.wav drumkit.xml -.Ed -Recieve midi from Jack and send audio output to speakers: -drumgizmo -p -i jackmidi -I midimap=midimap.xml -o jackaudio drumkit.xml + +.RE +.SH "EXAMPLES" +\fBRender midifile to wav files:\fR +.RS 7 +drumgizmo -i midifile -I file=file.mid,midimap=midimap.xml -o wavfile -O file=file.wav drumkit.xml +.RE +\fBRecieve midi from Jack and send audio output to speakers:\fR +.RS 7 +drumgizmo -i jackmidi -I midimap=midimap.xml -o jackaudio drumkit.xml +.RE .SH "BUGS" Report bugs to http://www.drumgizmo.org/wiki/doku.php?id=bugs. .SH "ADDITIONAL INFORMATION" -For further information, visit the website http://www.drumgizmo.org/. +For further information, visit the website http://www.drumgizmo.org. -- cgit v1.2.3 From 60c6a871670e586beca2a76075efe996db833a96 Mon Sep 17 00:00:00 2001 From: Lars Bisballe Jensen Date: Mon, 16 Feb 2015 12:44:19 +0100 Subject: Minor correction to options, sndfile changed to wavfile --- drumgizmo/drumgizmoc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index 6315491..02e926e 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -59,7 +59,7 @@ static const char usage_str[] = " -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|sndfile Use said audio output engine.\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" " -v, --version Print version information and exit.\n" -- cgit v1.2.3 From b16f9d793d6e3e4ab88efff112f2fca30ed87be5 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Tue, 17 Feb 2015 19:29:11 +0100 Subject: Remove events from activeevents when ramped down. --- src/drumgizmo.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 2f2232c..ddb6358 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -422,12 +422,13 @@ void DrumGizmo::getSamples(int ch, int pos, sample_t *s, size_t sz) evt->rampdown--; } + if(evt->rampdown == 0) { + removeevent = true; // Down ramp done. Remove event. + } } if(evt->t >= af->size) { removeevent = true; -// LAZYLOAD: -// loader.reset(af); } } -- cgit v1.2.3