From f91925f34aa1ee8ecacb12b8c4943c7e8aaabbfe Mon Sep 17 00:00:00 2001 From: Rafael Ruggiero Date: Tue, 15 Jul 2014 17:41:07 -0300 Subject: [PATCH 1/5] Update bode_shifter_cv_1432.c --- plugins/LadspaEffect/swh/bode_shifter_cv_1432.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c index 967edf646..a9c764e59 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c +++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c @@ -350,7 +350,7 @@ static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_ /* Perform the Hilbert FIR convolution * (probably FFT would be faster) */ hilb = 0.0f; - for (i = 0; i <= NZEROS/2; i++) { + for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } From ad35c553b39fc70237605952bf2c6ff1fac5b7b7 Mon Sep 17 00:00:00 2001 From: Rafael Ruggiero Date: Tue, 15 Jul 2014 17:42:01 -0300 Subject: [PATCH 2/5] Update surround_encoder_1401.c --- plugins/LadspaEffect/swh/surround_encoder_1401.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c index d4b6ace01..100a03e5a 100644 --- a/plugins/LadspaEffect/swh/surround_encoder_1401.c +++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c @@ -228,7 +228,7 @@ static void runSurroundEncoder(LADSPA_Handle instance, unsigned long sample_coun for (pos = 0; pos < sample_count; pos++) { delay[dptr] = s[pos]; hilb = 0.0f; - for (i = 0; i <= NZEROS/2; i++) { + for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } dptr = (dptr + 1) & (D_SIZE - 1); @@ -296,7 +296,7 @@ static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sampl for (pos = 0; pos < sample_count; pos++) { delay[dptr] = s[pos]; hilb = 0.0f; - for (i = 0; i <= NZEROS/2; i++) { + for (i = 0; i < NZEROS/2; i++) { hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]); } dptr = (dptr + 1) & (D_SIZE - 1); From a12774f50d3e2761757c990940be56346730a39f Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 16 Jul 2014 23:33:44 +0200 Subject: [PATCH 3/5] ZynAddSubFX: imported current head Imported current head of LMMS-specific ZynAddSubFX source code. The current code is based on version 2.4.4 of ZynAddSubFX. HEAD: 9a993c4936ce987bb30f93eee2a573466ece3712 --- plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt | 3 +- .../zynaddsubfx/zynaddsubfx/CMakeLists.txt | 2 +- plugins/zynaddsubfx/zynaddsubfx/ChangeLog | 2 + plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt | 17 +++ plugins/zynaddsubfx/zynaddsubfx/README.txt | 2 +- .../zynaddsubfx/zynaddsubfx/ZynAddSubFX.lsm | 22 --- .../zynaddsubfx/src/Misc/XMLwrapper.cpp | 2 +- .../zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp | 12 +- .../zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h | 3 +- .../zynaddsubfx/src/Nio/SafeQueue.cpp | 26 ++-- .../zynaddsubfx/src/Nio/SafeQueue.h | 5 +- .../zynaddsubfx/src/Nio/WavEngine.cpp | 9 +- .../zynaddsubfx/src/Nio/WavEngine.h | 4 +- .../zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h | 112 ++++++++++++++ .../src/Params/ADnoteParameters.cpp | 4 + .../zynaddsubfx/src/Params/ADnoteParameters.h | 3 + .../src/Params/PADnoteParameters.cpp | 3 + .../src/Params/SUBnoteParameters.cpp | 80 ++++++++++ .../src/Params/SUBnoteParameters.h | 9 ++ .../zynaddsubfx/src/Synth/ADnote.cpp | 5 +- .../zynaddsubfx/src/Synth/Envelope.cpp | 16 +- .../zynaddsubfx/src/Synth/Envelope.h | 2 + .../zynaddsubfx/src/Synth/OscilGen.cpp | 6 +- .../zynaddsubfx/src/Synth/SUBnote.cpp | 37 ++++- .../zynaddsubfx/src/Synth/SUBnote.h | 4 + .../zynaddsubfx/src/Tests/AdNoteTest.h | 4 +- .../zynaddsubfx/src/Tests/PadNoteTest.h | 6 +- .../zynaddsubfx/src/Tests/guitar-adnote.xmz | 10 +- .../zynaddsubfx/src/UI/ADnoteUI.fl | 49 +++--- .../zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl | 20 +-- .../zynaddsubfx/src/UI/ConfigUI.fl | 53 +------ .../zynaddsubfx/src/UI/EnvelopeUI.fl | 75 ++++++--- .../zynaddsubfx/src/UI/FilterUI.fl | 12 +- .../zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl | 4 +- .../zynaddsubfx/src/UI/MasterUI.fl | 12 +- .../zynaddsubfx/src/UI/OscilGenUI.fl | 44 +++--- .../zynaddsubfx/src/UI/PADnoteUI.fl | 10 +- .../zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl | 16 +- .../zynaddsubfx/src/UI/ResonanceUI.fl | 4 +- .../zynaddsubfx/src/UI/SUBnoteUI.fl | 144 +++++++++++++----- plugins/zynaddsubfx/zynaddsubfx/src/main.cpp | 5 +- 41 files changed, 597 insertions(+), 261 deletions(-) delete mode 100644 plugins/zynaddsubfx/zynaddsubfx/ZynAddSubFX.lsm create mode 100644 plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h diff --git a/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt b/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt index e53ca18b6..4c196ae5f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt +++ b/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt @@ -25,7 +25,8 @@ Contributors: Jonathan Liles (NSM & NTK support) Johannes Lorenz (Effect Documentation) Ilario Glasgo (Italian Doc Translation) - Christopher Oliver (Unison + presets fix, mousewheel support) + Christopher Oliver (Unison + presets fix, mousewheel support, + SUBnote overtones, unison enhancements, ...) Filipe Coelho (Globals Cleanup) Andre Sklenar (UI Pixmaps) diff --git a/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt index 169877a3d..d36aa8078 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.8) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/") project(zynaddsubfx) -set(VERSION "2.4.3") +set(VERSION "2.4.4") enable_testing() include(CTestConfig.cmake) diff --git a/plugins/zynaddsubfx/zynaddsubfx/ChangeLog b/plugins/zynaddsubfx/zynaddsubfx/ChangeLog index 113447e9d..8030d671c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/ChangeLog +++ b/plugins/zynaddsubfx/zynaddsubfx/ChangeLog @@ -1034,3 +1034,5 @@ 31 Mar 2012 (Olaf Schulz) - Added Midi aftertouch support + +Please See git log For future information diff --git a/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt b/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt index 22f691f4e..2631914ef 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt +++ b/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt @@ -1,3 +1,20 @@ +2.4.4 (28 Jun 2014) + - Add UI Mousewheel Support + - Add Spectral Adjust Parameter Rescaling + - Add Subnote filter smoothing + - Add Unison derandomization options + - Add NSM import/export + - Add NTK UI compatiability + - (re)Add OSX Support + - Enhance performance of ADnote and SUBnote + - Enhance Installer + - Fix JACK2 specific segfault + - Fix possible DSSI specific segfaults + - Fix Unison Regressions + - Documentation additions + - Misc bug fixes + + 2.4.3 (15 Jun 2012) - Non-session manager support - Midi aftertouch support diff --git a/plugins/zynaddsubfx/zynaddsubfx/README.txt b/plugins/zynaddsubfx/zynaddsubfx/README.txt index c8f419b2d..76b56c6a4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/README.txt +++ b/plugins/zynaddsubfx/zynaddsubfx/README.txt @@ -1,7 +1,7 @@ ZynAddSubFX ----------- It is a realtime software synthesizer for Linux and Windows with many features. Please see the docs for details. -Copyright (c) 2002-2011 Nasca Octavian Paul and others contributors +Copyright (c) 2002-2014 Nasca Octavian Paul and others contributors e-mail: zynaddsubfx AT yahoo D0T com ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (and only version 2) - see the file COPYING. diff --git a/plugins/zynaddsubfx/zynaddsubfx/ZynAddSubFX.lsm b/plugins/zynaddsubfx/zynaddsubfx/ZynAddSubFX.lsm deleted file mode 100644 index 04322988b..000000000 --- a/plugins/zynaddsubfx/zynaddsubfx/ZynAddSubFX.lsm +++ /dev/null @@ -1,22 +0,0 @@ -Begin4 -Title: ZynAddSubFX -Version: 2.2.1 -Entered-date: 28-04-2005 -Description: A real-time software synthesizer for Linux with many - features, including polyphony, multi-timbral and microtonal - capabilities. It includes randomness of some parameters,which - makes warm sounds, like analogue synthesizers. - The program has system/insertion effects, too. - ZynAddSubFX has much more features, don't let be cheated by - the size of the source code :) -Keywords: synthesizer,MIDI,ALSA,music,X11,microtonal,real-time -Author: zynaddsubfx@yahoo.com (Nasca Paul) -Maintained-by: zynaddsubfx@yahoo.com (Nasca Paul) -Primary-site: zynaddsubfx.sourceforge.net - sourceforge.net/projects/zynaddsubfx - 920k ZynAddSubFX-2.2.0.tar.bz2 (source code) -Alternate-site: -Original-site: -Platforms: Linux with X11 -Copying-policy: GNU General Public License (version 2) -End diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp index 0fd40f35c..6148d68de 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp @@ -98,7 +98,7 @@ XMLwrapper::XMLwrapper() { version.Major = 2; version.Minor = 4; - version.Revision = 3; + version.Revision = 4; minimal = true; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp index b9db3fbd6..441a6dcdf 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp @@ -44,13 +44,12 @@ InMgr::InMgr() :queue(100), master(Master::getInstance()) { current = NULL; - sem_init(&work, PTHREAD_PROCESS_PRIVATE, 0); + work.init(PTHREAD_PROCESS_PRIVATE, 0); } InMgr::~InMgr() { //lets stop the consumer thread - sem_destroy(&work); } void InMgr::putEvent(MidiEvent ev) @@ -58,17 +57,17 @@ void InMgr::putEvent(MidiEvent ev) if(queue.push(ev)) //check for error cerr << "ERROR: Midi Ringbuffer is FULL" << endl; else - sem_post(&work); + work.post(); } void InMgr::flush(unsigned frameStart, unsigned frameStop) { MidiEvent ev; - while(!sem_trywait(&work)) { + while(!work.trywait()) { queue.peak(ev); if(ev.time < (int)frameStart || ev.time > (int)frameStop) { //Back out of transaction - sem_post(&work); + work.post(); //printf("%d vs [%d..%d]\n",ev.time, frameStart, frameStop); break; } @@ -102,8 +101,7 @@ void InMgr::flush(unsigned frameStart, unsigned frameStop) bool InMgr::empty(void) const { - int semvalue = 0; - sem_getvalue(&work, &semvalue); + int semvalue = work.getvalue(); return semvalue <= 0; } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h index e9ddc580e..abaf925cb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h @@ -2,6 +2,7 @@ #define INMGR_H #include +#include "ZynSema.h" #include "SafeQueue.h" enum midi_type { @@ -44,7 +45,7 @@ class InMgr InMgr(); class MidiIn *getIn(std::string name); SafeQueue queue; - mutable sem_t work; + mutable ZynSema work; class MidiIn * current; /**the link to the rest of zyn*/ diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp index 25b358900..510e4b208 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp @@ -3,16 +3,14 @@ template SafeQueue::SafeQueue(size_t maxlen) :writePtr(0), readPtr(0), bufSize(maxlen) { - sem_init(&w_space, PTHREAD_PROCESS_PRIVATE, maxlen - 1); - sem_init(&r_space, PTHREAD_PROCESS_PRIVATE, 0); + w_space.init(PTHREAD_PROCESS_PRIVATE, maxlen - 1); + r_space.init(PTHREAD_PROCESS_PRIVATE, 0); buffer = new T[maxlen]; } template SafeQueue::~SafeQueue() { - sem_destroy(&w_space); - sem_destroy(&r_space); delete [] buffer; } @@ -25,17 +23,13 @@ unsigned int SafeQueue::size() const template unsigned int SafeQueue::rSpace() const { - int space = 0; - sem_getvalue(&r_space, &space); - return space; + return r_space.getvalue(); } template unsigned int SafeQueue::wSpace() const { - int space = 0; - sem_getvalue(&w_space, &space); - return space; + return w_space.getvalue(); } template @@ -50,8 +44,8 @@ int SafeQueue::push(const T &in) writePtr = w; //adjust ranges - sem_wait(&w_space); //guaranteed not to wait - sem_post(&r_space); + w_space.wait(); //guaranteed not to wait + r_space.post(); return 0; } @@ -80,8 +74,8 @@ int SafeQueue::pop(T &out) readPtr = r; //adjust ranges - sem_wait(&r_space); //guaranteed not to wait - sem_post(&w_space); + r_space.wait(); //guaranteed not to wait + w_space.post(); return 0; } @@ -89,7 +83,7 @@ template void SafeQueue::clear() { //thread unsafe - while(!sem_trywait(&r_space)) - sem_post(&w_space); + while(!r_space.trywait()) + w_space.post(); readPtr = writePtr; } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h index d1ad1099a..9bba53a60 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h @@ -2,6 +2,7 @@ #ifndef SAFEQUEUE_H #define SAFEQUEUE_H #include +#include "ZynSema.h" #include #include @@ -32,9 +33,9 @@ class SafeQueue unsigned int rSpace() const; //write space - mutable sem_t w_space; + mutable ZynSema w_space; //read space - mutable sem_t r_space; + mutable ZynSema r_space; //next writing spot size_t writePtr; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp index 9d0d2df09..1c3d66ec8 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp @@ -28,13 +28,12 @@ using namespace std; WavEngine::WavEngine() :AudioOut(), file(NULL), buffer(synth->samplerate * 4), pThread(NULL) { - sem_init(&work, PTHREAD_PROCESS_PRIVATE, 0); + work.init(PTHREAD_PROCESS_PRIVATE, 0); } WavEngine::~WavEngine() { Stop(); - sem_destroy(&work); destroyFile(); } @@ -65,7 +64,7 @@ void WavEngine::Stop() pthread_t *tmp = pThread; pThread = NULL; - sem_post(&work); + work.post(); pthread_join(*tmp, NULL); delete pThread; } @@ -81,7 +80,7 @@ void WavEngine::push(Stereo smps, size_t len) buffer.push(*smps.l++); buffer.push(*smps.r++); } - sem_post(&work); + work.post(); } void WavEngine::newFile(WavFile *_file) @@ -113,7 +112,7 @@ void *WavEngine::AudioThread() { short *recordbuf_16bit = new short[2 * synth->buffersize]; - while(!sem_wait(&work) && pThread) { + while(!work.wait() && pThread) { for(int i = 0; i < synth->buffersize; ++i) { float left = 0.0f, right = 0.0f; buffer.pop(left); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h index 8f55238e2..73f553c96 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h @@ -25,7 +25,7 @@ #include "AudioOut.h" #include #include -#include +#include "ZynSema.h" #include "SafeQueue.h" class WavFile; @@ -53,7 +53,7 @@ class WavEngine:public AudioOut private: WavFile *file; - sem_t work; + ZynSema work; SafeQueue buffer; pthread_t *pThread; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h new file mode 100644 index 000000000..c41477e00 --- /dev/null +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h @@ -0,0 +1,112 @@ +#ifndef ZYNSEMA_H +#define ZYNSEMA_H + +#if defined __APPLE__ || defined WIN32 + +#include + +class ZynSema +{ +public: + ZynSema (void) : _count (0) + { + } + + ~ZynSema (void) + { + pthread_mutex_destroy (&_mutex); + pthread_cond_destroy (&_cond); + } + + int init (int, int v) + { + _count = v; + return pthread_mutex_init (&_mutex, 0) || pthread_cond_init (&_cond, 0); + } + + int post (void) + { + pthread_mutex_lock (&_mutex); + if (++_count == 1) pthread_cond_signal (&_cond); + pthread_mutex_unlock (&_mutex); + return 0; + } + + int wait (void) + { + pthread_mutex_lock (&_mutex); + while (_count < 1) pthread_cond_wait (&_cond, &_mutex); + --_count; + pthread_mutex_unlock (&_mutex); + return 0; + } + + int trywait (void) + { + if (pthread_mutex_trylock (&_mutex)) return -1; + if (_count < 1) + { + pthread_mutex_unlock (&_mutex); + return -1; + } + --_count; + pthread_mutex_unlock (&_mutex); + return 0; + } + + int getvalue (void) const + { + return _count; + } + + +private: + int _count; + pthread_mutex_t _mutex; + pthread_cond_t _cond; +}; + +#else // POSIX sempahore + +#include + +class ZynSema +{ +public: + ZynSema (void) + { + } + ~ZynSema (void) + { + sem_destroy (&_sema); + } + int init (int s, int v) + { + return sem_init (&_sema, s, v); + } + int post (void) + { + return sem_post (&_sema); + } + int wait (void) + { + return sem_wait (&_sema); + } + int trywait (void) + { + return sem_trywait (&_sema); + } + int getvalue(void) + { + int v = 0; + sem_getvalue(&_sema, &v); + return v; + } + +private: + sem_t _sema; +}; + +#endif // POSIX semapore + +#endif // ZYNSEMA_H diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp index 9ebdcc681..02564dbbf 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp @@ -127,6 +127,7 @@ void ADnoteVoiceParam::defaults() Unison_vibratto = 64; Unison_vibratto_speed = 64; Unison_invert_phase = 0; + Unison_phase_randomness = 127; Type = 0; Pfixedfreq = 0; @@ -351,6 +352,7 @@ void ADnoteVoiceParam::add2XML(XMLwrapper *xml, bool fmoscilused) xml->addpar("unison_vibratto", Unison_vibratto); xml->addpar("unison_vibratto_speed", Unison_vibratto_speed); xml->addpar("unison_invert_phase", Unison_invert_phase); + xml->addpar("unison_phase_randomness", Unison_phase_randomness); xml->addpar("delay", PDelay); xml->addparbool("resonance", Presonance); @@ -664,6 +666,8 @@ void ADnoteVoiceParam::getfromXML(XMLwrapper *xml, unsigned nvoice) Unison_vibratto_speed); Unison_invert_phase = xml->getpar127("unison_invert_phase", Unison_invert_phase); + Unison_phase_randomness = xml->getpar127("unison_phase_randomness", + Unison_phase_randomness); Type = xml->getpar127("type", Type); PDelay = xml->getpar127("delay", PDelay); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h index 291d5b420..a95e1d1bd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h @@ -133,6 +133,9 @@ struct ADnoteVoiceParam { /** How subvoices are spread */ unsigned char Unison_frequency_spread; + /** How much phase randomization */ + unsigned char Unison_phase_randomness; + /** Stereo spread of the subvoices*/ unsigned char Unison_stereo_spread; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp index 9a493f0fa..027289b61 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp @@ -364,6 +364,9 @@ float PADnoteParameters::getNhr(int n) tmp = powf(par2 * 2.0f, 2.0f) + 0.1f; result = n0 * powf(1.0f + par1 * powf(n0 * 0.8f, tmp), tmp) + 1.0f; break; + case 7: + result = (n + Phrpos.par1 / 255.0f) / (Phrpos.par1 / 255.0f + 1); + break; default: result = n; break; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp index 5813b268e..7e303742b 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp @@ -23,6 +23,7 @@ #include "../globals.h" #include "SUBnoteParameters.h" #include +#include SUBnoteParameters::SUBnoteParameters():Presets() { @@ -63,6 +64,12 @@ void SUBnoteParameters::defaults() PFreqEnvelopeEnabled = 0; PBandWidthEnvelopeEnabled = 0; + POvertoneSpread.type = 0; + POvertoneSpread.par1 = 0; + POvertoneSpread.par2 = 0; + POvertoneSpread.par3 = 0; + updateFrequencyMultipliers(); + for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { Phmag[n] = 0; Phrelbw[n] = 64; @@ -127,6 +134,10 @@ void SUBnoteParameters::add2XML(XMLwrapper *xml) xml->addpar("detune", PDetune); xml->addpar("coarse_detune", PCoarseDetune); + xml->addpar("overtone_spread_type", POvertoneSpread.type); + xml->addpar("overtone_spread_par1", POvertoneSpread.par1); + xml->addpar("overtone_spread_par2", POvertoneSpread.par2); + xml->addpar("overtone_spread_par3", POvertoneSpread.par3); xml->addpar("detune_type", PDetuneType); xml->addpar("bandwidth", Pbandwidth); @@ -166,6 +177,66 @@ void SUBnoteParameters::add2XML(XMLwrapper *xml) xml->endbranch(); } + + +void SUBnoteParameters::updateFrequencyMultipliers(void) { + float par1 = POvertoneSpread.par1 / 255.0f; + float par1pow = powf(10.0f, + -(1.0f - POvertoneSpread.par1 / 255.0f) * 3.0f); + float par2 = POvertoneSpread.par2 / 255.0f; + float par3 = 1.0f - POvertoneSpread.par3 / 255.0f; + float result; + float tmp = 0.0f; + int thresh = 0; + + for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { + float n1 = n + 1.0f; + switch(POvertoneSpread.type) { + case 1: + thresh = (int)(100.0f * par2 * par2) + 1; + if (n1 < thresh) + result = n1; + else + result = n1 + 8.0f * (n1 - thresh) * par1pow; + break; + case 2: + thresh = (int)(100.0f * par2 * par2) + 1; + if (n1 < thresh) + result = n1; + else + result = n1 + 0.9f * (thresh - n1) * par1pow; + break; + case 3: + tmp = par1pow * 100.0f + 1.0f; + result = powf(n / tmp, 1.0f - 0.8f * par2) * tmp + 1.0f; + break; + case 4: + result = n * (1.0f - par1pow) + + powf(0.1f * n, 3.0f * par2 + 1.0f) * + 10.0f * par1pow + 1.0f; + break; + + case 5: + result = n1 + 2.0f * sinf(n * par2 * par2 * PI * 0.999f) * + sqrt(par1pow); + break; + case 6: + tmp = powf(2.0f * par2, 2.0f) + 0.1f; + result = n * powf(par1 * powf(0.8f * n, tmp) + 1.0f, tmp) + + 1.0f; + break; + + case 7: + result = (n1 + par1) / (par1 + 1); + break; + default: + result = n1; + } + float iresult = floor(result + 0.5f); + POvertoneFreqMult[n] = iresult + par3 * (result - iresult); + } +} + void SUBnoteParameters::getfromXML(XMLwrapper *xml) { Pnumstages = xml->getpar127("num_stages", Pnumstages); @@ -203,6 +274,15 @@ void SUBnoteParameters::getfromXML(XMLwrapper *xml) PDetune = xml->getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383); + POvertoneSpread.type = + xml->getpar127("overtone_spread_type", POvertoneSpread.type); + POvertoneSpread.par1 = + xml->getpar("overtone_spread_par1", POvertoneSpread.par1, 0, 255); + POvertoneSpread.par2 = + xml->getpar("overtone_spread_par2", POvertoneSpread.par2, 0, 255); + POvertoneSpread.par3 = + xml->getpar("overtone_spread_par3", POvertoneSpread.par3, 0, 255); + updateFrequencyMultipliers(); PDetuneType = xml->getpar127("detune_type", PDetuneType); Pbandwidth = xml->getpar127("bandwidth", Pbandwidth); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h index 111841e5c..adbfca3ec 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h @@ -38,6 +38,7 @@ class SUBnoteParameters:public Presets void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); + void updateFrequencyMultipliers(void); //Parameters //AMPLITUDE PARAMETRERS @@ -74,6 +75,14 @@ class SUBnoteParameters:public Presets if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */ unsigned char PfixedfreqET; + // Overtone spread parameters + struct { + unsigned char type; + unsigned char par1; + unsigned char par2; + unsigned char par3; + } POvertoneSpread; + float POvertoneFreqMult[MAX_SUB_HARMONICS]; //how many times the filters are applied unsigned char Pnumstages; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index f4d169ced..c43f1fa3f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -302,7 +302,10 @@ ADnote::ADnote(ADnoteParameters *pars, for(int k = 0; k < unison; ++k) { oscposhi[nvoice][k] = oscposhi_start; - oscposhi_start = (int)(RND * (synth->oscilsize - 1)); //put random starting point for other subvoices + //put random starting point for other subvoices + oscposhi_start = + (int)(RND * pars->VoicePar[nvoice].Unison_phase_randomness / + 127.0f * (synth->oscilsize - 1)); } NoteVoicePar[nvoice].FreqLfo = NULL; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp index d03a2d622..41bb80473 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp @@ -159,6 +159,14 @@ float Envelope::envout() return out; } +inline float Envelope::env_dB2rap(float db) { + return (powf(10.0f, db / 20.0f) - 0.01)/.99f; +} + +inline float Envelope::env_rap2dB(float rap) { + return 20.0f * log10f(rap * 0.99f + 0.01); +} + /* * Envelope Output (dB) */ @@ -169,8 +177,8 @@ float Envelope::envout_dB() return envout(); if((currentpoint == 1) && (!keyreleased || (forcedrelase == 0))) { //first point is always lineary interpolated - float v1 = dB2rap(envval[0]); - float v2 = dB2rap(envval[1]); + float v1 = env_dB2rap(envval[0]); + float v2 = env_dB2rap(envval[1]); out = v1 + (v2 - v1) * t; t += inct; @@ -182,12 +190,12 @@ float Envelope::envout_dB() } if(out > 0.001f) - envoutval = rap2dB(out); + envoutval = env_rap2dB(out); else envoutval = MIN_ENVELOPE_DB; } else - out = dB2rap(envout()); + out = env_dB2rap(envout()); return out; } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h index ee75e0a33..8c6b082a7 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h @@ -42,6 +42,8 @@ class Envelope * @return returns 1 if the envelope is finished*/ bool finished() const; private: + float env_rap2dB(float rap); + float env_dB2rap(float db); int envpoints; int envsustain; //"-1" means disabled float envdt[MAX_ENVELOPE_POINTS]; //millisecons diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp index 2d9d2f4a9..d51957eaa 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp @@ -504,10 +504,10 @@ void OscilGen::spectrumadjust() par = powf(8.0f, par); break; case 2: - par = powf(10.0f, (1.0f - par) * 3.0f) * 0.25f; + par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f; break; case 3: - par = powf(10.0f, (1.0f - par) * 3.0f) * 0.25f; + par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f; break; } @@ -516,7 +516,7 @@ void OscilGen::spectrumadjust() for(int i = 0; i < synth->oscilsize / 2; ++i) { float mag = abs(oscilFFTfreqs, i); - float phase = arg(oscilFFTfreqs, i); + float phase = M_PI_2 - arg(oscilFFTfreqs, i); switch(Psatype) { case 1: diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp index db54e6d84..6c6144718 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp @@ -101,13 +101,12 @@ void SUBnote::setup(float freq, GlobalFilterEnvelope = NULL; } - //select only harmonics that desire to compute int harmonics = 0; + + //select only harmonics that desire to compute for(int n = 0; n < MAX_SUB_HARMONICS; ++n) { if(pars->Phmag[n] == 0) continue; - if(n * basefreq > synth->samplerate_f / 2.0f) - break; //remove the freqs above the Nyquist freq pos[harmonics++] = n; } if(!legato) @@ -136,7 +135,9 @@ void SUBnote::setup(float freq, float reduceamp = 0.0f; for(int n = 0; n < numharmonics; ++n) { - float freq = basefreq * (pos[n] + 1); + float freq = basefreq * pars->POvertoneFreqMult[pos[n]]; + overtone_freq[n] = freq; + overtone_rolloff[n] = computerolloff(freq); //the bandwidth is not absolute(Hz); it is relative to frequency float bw = @@ -387,6 +388,25 @@ void SUBnote::initparameters(float freq) computecurrentparameters(); } +/* + * Compute how much to reduce amplitude near nyquist or subaudible frequencies. + */ +float SUBnote::computerolloff(float freq) +{ + const float lower_limit = 10.0f; + const float lower_width = 10.0f; + const float upper_width = 200.0f; + float upper_limit = synth->samplerate / 2.0f; + + if (freq > lower_limit + lower_width && + freq < upper_limit - upper_width) + return 1.0f; + if (freq <= lower_limit || freq >= upper_limit) + return 0.0f; + if (freq <= lower_limit + lower_width) + return (1.0f - cosf(M_PI * (freq - lower_limit) / lower_width)) / 2.0f; + return (1.0f - cosf(M_PI * (freq - upper_limit) / upper_width)) / 2.0f; +} /* * Compute Parameters of SUBnote for each tick @@ -421,6 +441,9 @@ void SUBnote::computecurrentparameters() float tmpgain = 1.0f / sqrt(envbw * envfreq); + for(int n = 0; n < numharmonics; ++n) { + overtone_rolloff[n] = computerolloff(overtone_freq[n] * envfreq); + } for(int n = 0; n < numharmonics; ++n) for(int nph = 0; nph < numstages; ++nph) { if(nph == 0) @@ -488,11 +511,12 @@ int SUBnote::noteout(float *outl, float *outr) for(int i = 0; i < synth->buffersize; ++i) tmprnd[i] = RND * 2.0f - 1.0f; for(int n = 0; n < numharmonics; ++n) { + float rolloff = overtone_rolloff[n]; memcpy(tmpsmp, tmprnd, synth->bufferbytes); for(int nph = 0; nph < numstages; ++nph) filter(lfilter[nph + n * numstages], tmpsmp); for(int i = 0; i < synth->buffersize; ++i) - outl[i] += tmpsmp[i]; + outl[i] += tmpsmp[i] * rolloff; } if(GlobalFilterL != NULL) @@ -503,11 +527,12 @@ int SUBnote::noteout(float *outl, float *outr) for(int i = 0; i < synth->buffersize; ++i) tmprnd[i] = RND * 2.0f - 1.0f; for(int n = 0; n < numharmonics; ++n) { + float rolloff = overtone_rolloff[n]; memcpy(tmpsmp, tmprnd, synth->bufferbytes); for(int nph = 0; nph < numstages; ++nph) filter(rfilter[nph + n * numstages], tmpsmp); for(int i = 0; i < synth->buffersize; ++i) - outr[i] += tmpsmp[i]; + outr[i] += tmpsmp[i] * rolloff; } if(GlobalFilterR != NULL) GlobalFilterR->filterout(&outr[0]); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h index cd95b8104..87e1e93a2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h @@ -91,6 +91,7 @@ class SUBnote:public SynthNote float bw, float amp, float mag); + float computerolloff(float freq); void computefiltercoefs(bpfilter &filter, float freq, float bw, @@ -99,6 +100,9 @@ class SUBnote:public SynthNote bpfilter *lfilter, *rfilter; + float overtone_rolloff[MAX_SUB_HARMONICS]; + float overtone_freq[MAX_SUB_HARMONICS]; + Controller *ctl; int oldpitchwheel, oldbandwidth; float globalfiltercenterq; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h index c296e9cb4..bd66704e0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h @@ -158,7 +158,7 @@ class AdNoteTest:public CxxTest::TestSuite note->noteout(outL, outR); sampleCount += synth->buffersize; - TS_ASSERT_DELTA(outL[255], -0.111422f, 0.0001f); + TS_ASSERT_DELTA(outL[255], -0.111261f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; @@ -166,7 +166,7 @@ class AdNoteTest:public CxxTest::TestSuite note->noteout(outL, outR); sampleCount += synth->buffersize; - TS_ASSERT_DELTA(outL[255], 0.149882f, 0.0001f); + TS_ASSERT_DELTA(outL[255], 0.149149f, 0.0001f); while(!note->finished()) { note->noteout(outL, outR); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h index 5e202b362..086efcdf0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h @@ -163,15 +163,15 @@ class PadNoteTest:public CxxTest::TestSuite note->noteout(outL, outR); sampleCount += synth->buffersize; - TS_ASSERT_DELTA(outL[255], 0.0613f, 0.0001f); + TS_ASSERT_DELTA(outL[255], 0.060818f, 0.0001f); note->noteout(outL, outR); sampleCount += synth->buffersize; - TS_ASSERT_DELTA(outL[255], 0.0378f, 0.0005f); + TS_ASSERT_DELTA(outL[255], 0.036895f, 0.0005f); note->noteout(outL, outR); sampleCount += synth->buffersize; - TS_ASSERT_DELTA(outL[255], -0.0070f, 0.0001f); + TS_ASSERT_DELTA(outL[255], -0.006623f, 0.0001f); while(!note->finished()) { note->noteout(outL, outR); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz index 9922ba96b..595a770c2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz @@ -1,7 +1,7 @@ +version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul"> @@ -180,6 +180,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul"> + @@ -424,6 +425,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul"> + @@ -506,6 +508,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul"> + @@ -588,6 +591,7 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul"> + @@ -989,6 +993,10 @@ version-revision="3" ZynAddSubFX-author="Nasca Octavian Paul"> + + + + diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl index 65e20ff6b..1a21cb18f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl @@ -117,7 +117,7 @@ detunevalueoutput->do_callback();} voicelfofreq->deactivate(); voiceoscil->deactivate(); };} - xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 7 + xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 53 code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();} } } @@ -178,15 +178,15 @@ class ADvoiceUI {open : {public Fl_Group} } { Fl_Window ADnoteVoiceParameters { label Voice open - xywh {84 305 765 590} type Double box FLAT_BOX + xywh {863 89 765 595} type Double box NO_BOX class Fl_Group visible } { Fl_Group voiceparametersgroup {open - xywh {0 0 765 595} color 48 + xywh {0 0 770 590} color 48 code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();} } { Fl_Group voicemodegroup {open - xywh {0 5 765 590} color 64 + xywh {0 5 770 585} color 64 } { Fl_Group voiceFMparametersgroup { label MODULATOR open @@ -549,12 +549,12 @@ voiceonbutton->redraw();} open code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);} } {} Fl_Group {} {open - xywh {5 540 515 45} box UP_FRAME + xywh {5 540 520 50} box UP_FRAME } { Fl_Dial {} { label Stereo callback {pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();} - tooltip {Stereo Spread} xywh {285 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 + tooltip {Stereo Spread} xywh {322 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_stereo_spread);} class WidgetPDial } @@ -568,7 +568,7 @@ voiceonbutton->redraw();} open Fl_Dial {} { label Vibrato callback {pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();} - tooltip Vibrato xywh {340 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 + tooltip Vibrato xywh {364 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto);} class WidgetPDial } @@ -593,12 +593,19 @@ unisonspreadoutput->do_callback();} code0 {o->value(pars->getUnisonFrequencySpreadCents(nvoice));} } Fl_Dial {} { - label {Vib.speed} - callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();} - tooltip {Vibrato Average Speed} xywh {390 555 25 30} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 + label {V.speed} + callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();} selected + tooltip {Vibrato Average Speed} xywh {406 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);} class WidgetPDial } + Fl_Dial {} { + label {Ph.rand} + callback {pars->VoicePar[nvoice].Unison_phase_randomness=(int)o->value();} + tooltip {Phase randomness} xywh {280 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1 + code0 {o->value(pars->VoicePar[nvoice].Unison_phase_randomness);} + class WidgetPDial + } } } Fl_Group {} { @@ -760,7 +767,7 @@ bypassfiltercheckbutton->redraw();} Fl_Box noiselabel { label {White Noise} callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();} - xywh {150 430 300 65} labelfont 1 labelsize 50 labelcolor 7 + xywh {150 430 300 65} labelfont 1 labelsize 50 labelcolor 53 code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();} } } @@ -1011,20 +1018,20 @@ resui->resonancewindow->show();} Fl_Button {} { label C callback {presetsui->copyArray(pars);} - xywh {405 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {405 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->pasteArray(pars,this);} - xywh {435 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {435 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window ADnoteVoice { label {ADsynth Voice Parameters} open - xywh {512 361 765 620} type Double visible + xywh {1142 229 765 630} type Double visible } { - Fl_Group advoice { - xywh {0 0 765 585} + Fl_Group advoice {open + xywh {0 0 765 595} code0 {o->init(pars,nvoice,master);} code1 {o->show();} class ADvoiceUI @@ -1032,7 +1039,7 @@ resui->resonancewindow->show();} Fl_Button {} { label {Close Window} callback {ADnoteVoice->hide();} - xywh {305 590 195 25} box THIN_UP_BOX labelfont 1 + xywh {305 601 195 25} box THIN_UP_BOX labelfont 1 } Fl_Counter currentvoicecounter { label {Current Voice} @@ -1040,23 +1047,23 @@ resui->resonancewindow->show();} advoice->hide(); ADnoteVoice->remove(advoice); delete advoice; -advoice=new ADvoiceUI(0,0,765,585); +advoice=new ADvoiceUI(0,0,765,590); ADnoteVoice->add(advoice); advoice->init(pars,nvoice,master); advoice->show(); ADnoteVoice->redraw();} - xywh {10 590 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13 + xywh {10 601 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13 code0 {o->bounds(1,NUM_VOICES);} } Fl_Button {} { label C callback {presetsui->copy(pars,nvoice);} - xywh {705 595 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {705 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this,nvoice);} - xywh {735 595 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {735 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window ADnoteVoiceList { diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl index f29f8c1ff..a7eab825a 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl @@ -89,7 +89,7 @@ refresh();} {} code {if (bank->emptyslot(nslot)) color(46); else if (bank->isPADsynth_used(nslot)) - color(26); + color(124); else color(51); @@ -152,32 +152,32 @@ class BankUI {open : {public BankProcess_} Fl_Group modeselect { xywh {5 528 425 42} box ENGRAVED_BOX } { - Fl_Light_Button writebutton { + Fl_Check_Button writebutton { label WRITE callback {if (o->value()>0.5) mode=2; removeselection();} - xywh {116 534 99 30} type Radio down_box THIN_DOWN_BOX selection_color 1 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13 + xywh {116 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } - Fl_Light_Button readbutton { - label READ + Fl_Check_Button readbutton { + label READ selected callback {if (o->value()>0.5) mode=1; removeselection();} - xywh {11 534 99 30} type Radio down_box THIN_DOWN_BOX selection_color 101 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13 + xywh {11 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {o->value(1);} } - Fl_Light_Button clearbutton { + Fl_Check_Button clearbutton { label CLEAR callback {if (o->value()>0.5) mode=3; removeselection();} - xywh {221 534 99 30} type Radio down_box THIN_DOWN_BOX selection_color 0 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13 + xywh {221 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } - Fl_Light_Button swapbutton { + Fl_Check_Button swapbutton { label SWAP callback {if (o->value()>0.5) mode=4; removeselection();} - xywh {325 534 99 30} type Radio down_box THIN_DOWN_BOX selection_color 227 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13 + xywh {325 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13 code0 {if (bank->locked()) o->deactivate();} } } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl index 83dc2fd1d..c7ec12d53 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl @@ -1,5 +1,5 @@ # data file for the Fltk User Interface Designer (fluid) -version 1.0300 +version 1.0302 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local @@ -112,10 +112,10 @@ config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);} code1 {snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);} code2 {delete []tmpbuf;} } - Fl_Light_Button {} { + Fl_Check_Button {} { label {Swap Stereo } callback {config.cfg.SwapStereo=(int) o->value();} - xywh {20 80 85 20} box THIN_UP_BOX labelsize 10 + xywh {15 80 95 20} box NO_BOX labelsize 11 code0 {o->value(config.cfg.SwapStereo);} } Fl_Choice {} { @@ -178,7 +178,7 @@ config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);} label {Dump notes} callback {config.cfg.DumpNotesToFile=(int) o->value(); dump.startnow();//this has effect only if this option was disabled} - xywh {20 130 100 20} down_box DOWN_BOX + xywh {20 130 110 20} down_box DOWN_BOX code0 {o->value(config.cfg.DumpNotesToFile);} } Fl_Check_Button {} { @@ -188,49 +188,6 @@ dump.startnow();//this has effect only if this option was disabled} code0 {o->value(config.cfg.DumpAppend);} } } - Fl_Group {} { - xywh {255 45 245 260} box ENGRAVED_FRAME - } { - Fl_Box {} { - label {Note: Not all the following settings are used (this depends on the operating system, etc..)} - xywh {260 50 235 45} labelfont 1 labelsize 11 align 128 - } - Fl_Group {} { - label Linux - xywh {260 110 235 115} box ENGRAVED_BOX labelfont 1 labelsize 13 align 5 - } { - Fl_File_Input {} { - label {OSS Sequencer Device (/dev/...)} - callback {snprintf(config.cfg.LinuxOSSSeqInDev,config.maxstringsize,"%s",o->value());} - xywh {265 180 225 35} align 5 - code0 {o->insert(config.cfg.LinuxOSSSeqInDev);} - } - Fl_File_Input {} { - label {OSS Wave Out Device (/dev/...)} - callback {snprintf(config.cfg.LinuxOSSWaveOutDev,config.maxstringsize,"%s",o->value());} - xywh {265 130 225 35} align 5 - code0 {o->insert(config.cfg.LinuxOSSWaveOutDev);} - } - } - Fl_Group {} { - label Windows - xywh {260 250 235 50} box ENGRAVED_BOX labelfont 1 labelsize 13 align 5 - } { - Fl_Counter {} { - label {Midi In Dev} - callback {config.cfg.WindowsMidiInId=(int) o->value(); -midiinputnamebox->label(config.winmididevices[config.cfg.WindowsMidiInId].name);} - xywh {270 270 65 20} type Simple labelsize 11 align 1 minimum 0 maximum 100 step 1 - code0 {o->maximum(config.winmidimax-1);} - code1 {o->value(config.cfg.WindowsMidiInId);} - } - Fl_Box midiinputnamebox { - label {Midi input device name} - xywh {340 260 150 35} labelfont 1 labelsize 11 align 212 - code0 {o->label(config.winmididevices[config.cfg.WindowsMidiInId].name);} - } - } - } Fl_Counter {} { label {XML compression level} callback {config.cfg.GzipCompression=(int) o->value();} @@ -282,7 +239,7 @@ midiinputnamebox->label(config.winmididevices[config.cfg.WindowsMidiInId].name); Fl_Check_Button {} { label {Ignore MIDI Program Change} callback {config.cfg.IgnoreProgramChange=(int) o->value();} - xywh {10 255 230 20} down_box DOWN_BOX + xywh {10 255 220 20} down_box DOWN_BOX code0 {o->value(config.cfg.IgnoreProgramChange);} } } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl index f9dcfff9d..359f64caf 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl @@ -50,7 +50,8 @@ pair=NULL;} {} oldx=-1; currentpoint=-1; cpx=0; -lastpoint=-1;} {} +lastpoint=-1; +ctrldown=false;} {} } Function {setpair(Fl_Box *pair_)} {} { code {pair=pair_;} {} @@ -140,23 +141,52 @@ if (env->Penvsustain>0){ //Show the envelope duration and the current line duration fl_font(FL_HELVETICA|FL_BOLD,10); float time=0.0; -if (currentpoint<=0){ +if (currentpoint<=0 && (!ctrldown||lastpoint <= 0)){ fl_color(alb); for (int i=1;igetdt(i); } else { fl_color(255,0,0); - time=env->getdt(currentpoint); + time=env->getdt(lastpoint); }; char tmpstr[20]; if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time); else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0); -fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);} {} +fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0); +if (lastpoint>=0){ + snprintf((char *)&tmpstr,20,"%d", env->Penvval[lastpoint]); + fl_draw(tmpstr,ox+lx-20,oy+ly-23,20,10,FL_ALIGN_RIGHT,NULL,0); +}} {} } Function {handle(int event)} {return_type int } { code {int x_=Fl::event_x()-x(); int y_=Fl::event_y()-y(); +// Some window magic makes us lose focus, so reassert it. +if (event==FL_ENTER) + Fl::focus(this); + +if ((event==FL_KEYDOWN || event==FL_KEYUP)){ + int key = Fl::event_key(); + if (key==FL_Control_L || key==FL_Control_R){ + ctrldown = (event==FL_KEYDOWN); + redraw(); + if (pair!=NULL) pair->redraw(); + } +} + +if (event==FL_MOUSEWHEEL && lastpoint>=0) { + if (!ctrldown) { + int ny=env->Penvval[lastpoint] - Fl::event_dy(); + env->Penvval[lastpoint]=ny < 0 ? 0 : ny > 127 ? 127 : ny; + } else if (lastpoint > 0) { + int newdt = Fl::event_dy() + env->Penvdt[lastpoint]; + env->Penvdt[lastpoint] = newdt < 0 ? 0 : newdt > 127 ? 127 : newdt; + } + redraw(); + if (pair!=NULL) pair->redraw(); +} + if (event==FL_PUSH) { currentpoint=getnearest(x_,y_); cpx=x_; @@ -196,6 +226,7 @@ return(1);} {} decl {int currentpoint,cpx,cpdt;} {} decl {int lastpoint;} {public } + decl {bool ctrldown;} {} } class EnvelopeUI {open : {public Fl_Group,PresetsUI_} @@ -281,7 +312,7 @@ sustaincounter->maximum(env->Penvpoints-2);} xywh {200 155 80 20} box THIN_UP_BOX labelsize 11 code0 {if (env->Pfreemode==0) o->hide();} } - Fl_Light_Button freemodebutton { + Fl_Check_Button freemodebutton { label FreeMode callback {reinit(); @@ -329,12 +360,12 @@ envfree->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } @@ -408,12 +439,12 @@ freeedit->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } @@ -477,12 +508,12 @@ freeedit->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } Fl_Button {} { @@ -572,12 +603,12 @@ freeedit->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } @@ -642,12 +673,12 @@ freeedit->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } Fl_Button {} { @@ -684,12 +715,12 @@ freeedit->redraw();} Fl_Button {} { label C callback {presetsui->copy(env);} - xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(env,this);} - xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } @@ -781,10 +812,18 @@ if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide(); forcedreleasecheck->value(env->Pforcedrelease); if (env->Pfreemode==0) forcedreleasecheck->hide(); + else forcedreleasecheck->show(); + +if (env->Pfreemode==0){ + addpoint->hide(); + deletepoint->hide(); +} else { + addpoint->show(); + deletepoint->show(); +} freeedit->redraw(); - if (env->Pfreemode==0){ switch(env->Envmode){ case(1): diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl index 83fa1ef2d..632e37b60 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl @@ -333,12 +333,12 @@ pars->changed=true;} open Fl_Button {} { label C callback {presetsui->copyArray(pars);} - xywh {186 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {186 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->pasteArray(pars,this);} - xywh {203 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {203 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } @@ -508,12 +508,12 @@ pars->changed=true;} Fl_Button {} { label C callback {presetsui->copy(pars,nvowel);} - xywh {635 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {635 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this,nvowel);} - xywh {665 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {665 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Box {} { label Vowel @@ -539,8 +539,8 @@ vowel_counter->value(pars->Psequence[nseqpos].nvowel);} {} code {update_formant_window(); formantfiltergraph->redraw(); -if (pars->Pcategory==0) svfiltertypechoice->value(pars->Ptype); -if (pars->Pcategory==2) analogfiltertypechoice->value(pars->Ptype); +if (pars->Pcategory==2) svfiltertypechoice->value(pars->Ptype); +if (pars->Pcategory==0) analogfiltertypechoice->value(pars->Ptype); filtertype->value(pars->Pcategory); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl index 889a38611..2f6cecda9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl @@ -144,12 +144,12 @@ hide(); Fl_Button {} { label C callback {presetsui->copy(pars);} - xywh {145 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {145 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} - xywh {162 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7 + xywh {162 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55 } } } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl index aea30d6b7..254e505a2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl @@ -803,14 +803,14 @@ syseffectui->refresh(master->sysefx[nsyseff]);} Fl_Button {} { label C callback {presetsui->copy(master->sysefx[nsyseff]);} - xywh {180 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {180 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->sysefx[nsyseff],syseffectui); pthread_mutex_unlock(&master->mutex);} - xywh {210 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {210 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { @@ -916,14 +916,14 @@ master->insefx[ninseff]->cleanup();} open Fl_Button {} { label C callback {presetsui->copy(master->insefx[ninseff]);} - xywh {180 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {180 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->insefx[ninseff],inseffectui); pthread_mutex_unlock(&master->mutex);} - xywh {210 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {210 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } @@ -1438,7 +1438,7 @@ simplesyseffectui->refresh(master->sysefx[nsyseff]);} callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->sysefx[nsyseff],simplesyseffectui); pthread_mutex_unlock(&master->mutex);} - xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { @@ -1546,7 +1546,7 @@ master->insefx[ninseff]->cleanup();} open callback {pthread_mutex_lock(&master->mutex); presetsui->paste(master->insefx[ninseff],simpleinseffectui); pthread_mutex_unlock(&master->mutex);} - xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl index 45f3ba534..54329db52 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl @@ -549,7 +549,7 @@ if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodula callback {oscil->Pbasefuncmodulation=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} - tooltip {Base function modulation} xywh {599 281 50 15} down_box BORDER_BOX labelsize 10 textsize 10 + tooltip {Base function modulation} xywh {601 281 50 15} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None @@ -689,14 +689,14 @@ redrawoscil();} xywh {670 505 55 15} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group {} { - xywh {135 308 150 30} box UP_FRAME + xywh {136 308 150 30} box UP_FRAME } { Fl_Choice wshbutton { label {Wsh.} callback {oscil->Pwaveshapingfunction=(int) o->value(); basefuncdisplaygroup->redraw(); redrawoscil();} open - tooltip {Waveshaping function} xywh {165 313 55 20} down_box BORDER_BOX labelsize 10 textsize 10 + tooltip {Waveshaping function} xywh {166 313 55 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None @@ -763,26 +763,26 @@ redrawoscil();} open callback {oscil->Pwaveshaping=(int)o->value()+64; wsparval->value(oscil->Pwaveshaping-64); redrawoscil();} - tooltip {Waveshaping Parameter} xywh {260 313 20 20} minimum -64 maximum 63 step 1 + tooltip {Waveshaping Parameter} xywh {261 313 20 20} minimum -64 maximum 63 step 1 class WidgetPDial } Fl_Value_Output wsparval { - xywh {228 316 25 15} labelsize 12 minimum -63 maximum 63 step 1 + xywh {229 316 25 15} labelsize 12 minimum -63 maximum 63 step 1 } } - Fl_Light_Button autoclearbutton { + Fl_Check_Button autoclearbutton { label {Clr.} - tooltip {Auto clear when using the oscillator as base function} xywh {95 313 35 20} box THIN_UP_BOX value 1 labelfont 1 labelsize 10 + tooltip {Auto clear when using the oscillator as base function} xywh {94 313 38 20} box THIN_UP_BOX value 1 labelfont 1 labelsize 10 } Fl_Group {} { - xywh {285 308 155 30} box UP_FRAME + xywh {287 308 155 30} box UP_FRAME } { Fl_Choice fltbutton { label Filter callback {oscil->Pfiltertype=(int) o->value(); redrawoscil();} - tooltip {Oscillator's filter type} xywh {315 313 50 20} down_box BORDER_BOX labelsize 10 textsize 10 + tooltip {Oscillator's filter type} xywh {317 313 50 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None @@ -845,7 +845,7 @@ redrawoscil();} callback {oscil->Pfilterpar1=(int)o->value(); redrawoscil();} - tooltip {Oscillator's filter parameter1} xywh {367 313 20 20} maximum 127 step 1 + tooltip {Oscillator's filter parameter1} xywh {369 313 20 20} maximum 127 step 1 class WidgetPDial } Fl_Check_Button filterpref { @@ -853,24 +853,24 @@ redrawoscil();} callback {oscil->Pfilterbeforews=(int)o->value(); redrawoscil();} - tooltip {Apply the filter before the waveshaping} xywh {415 313 20 20} down_box DOWN_BOX labelsize 10 align 24 + tooltip {Apply the filter before the waveshaping} xywh {417 313 20 20} down_box DOWN_BOX labelsize 10 align 24 } Fl_Dial filtervalue2 { callback {oscil->Pfilterpar2=(int)o->value(); redrawoscil();} - tooltip {Oscillator's filter parameter2} xywh {392 313 20 20} maximum 127 step 1 + tooltip {Oscillator's filter parameter2} xywh {394 313 20 20} maximum 127 step 1 class WidgetPDial } } Fl_Group {} { - xywh {590 308 135 30} box UP_FRAME + xywh {594 308 135 30} box UP_FRAME } { Fl_Choice sabutton { label {Sp.adj.} callback {oscil->Psatype=(int) o->value(); redrawoscil();} - tooltip {Oscillator's spectrum adjust} xywh {630 313 60 20} down_box BORDER_BOX labelsize 10 textsize 10 + tooltip {Oscillator's spectrum adjust} xywh {635 313 60 20} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None @@ -892,7 +892,7 @@ redrawoscil();} Fl_Dial sadjpar { callback {oscil->Psapar=(int)o->value(); redrawoscil();} - tooltip {Oscillator's spectrum adjust parameter} xywh {695 313 20 20} maximum 127 step 1 + tooltip {Oscillator's spectrum adjust parameter} xywh {702 313 20 20} maximum 127 step 1 class WidgetPDial } } @@ -986,14 +986,14 @@ redrawoscil();} } } Fl_Group {} { - xywh {440 308 150 30} box UP_FRAME + xywh {443 308 150 30} box UP_FRAME } { Fl_Choice modtype { label {Mod.} callback {oscil->Pmodulation=(int) o->value(); redrawoscil();} - tooltip modulation xywh {470 315 50 15} down_box BORDER_BOX labelsize 10 textsize 10 + tooltip modulation xywh {476 315 50 15} down_box BORDER_BOX labelsize 10 textsize 10 } { MenuItem {} { label None @@ -1016,20 +1016,20 @@ redrawoscil();} callback {oscil->Pmodulationpar1=(int)o->value(); redrawoscil();} - tooltip {Oscillator's modulation parameter 1} xywh {530 315 15 15} maximum 127 step 1 + tooltip {Oscillator's modulation parameter 1} xywh {534 315 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial modpar2 { callback {oscil->Pmodulationpar2=(int)o->value(); redrawoscil();} - tooltip {Oscillator's modulation parameter 2} xywh {550 315 15 15} maximum 127 step 1 + tooltip {Oscillator's modulation parameter 2} xywh {554 315 15 15} maximum 127 step 1 class WidgetPDial } Fl_Dial modpar3 { callback {oscil->Pmodulationpar3=(int)o->value(); redrawoscil();} - tooltip {Oscillator's modulation parameter 3} xywh {570 315 15 15} maximum 127 step 1 + tooltip {Oscillator's modulation parameter 3} xywh {574 315 15 15} maximum 127 step 1 class WidgetPDial } } @@ -1048,12 +1048,12 @@ refresh();} Fl_Button {} { label C callback {presetsui->copy(oscil);} - xywh {670 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {670 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(oscil,this);} - xywh {700 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {700 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Scroll _this_has_to_be_the_last { xywh {5 340 660 250} type HORIZONTAL box FLAT_BOX diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl index 200cd2722..33a071341 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl @@ -240,7 +240,7 @@ make_window();} {} } { Fl_Window padnotewindow { label {PAD synth Parameters} open - xywh {294 392 535 435} type Double visible + xywh {288 386 535 435} type Double visible } { Fl_Tabs {} { callback {if (o->value()!=harmonicstructuregroup) applybutton->hide(); @@ -501,6 +501,10 @@ cbwidget->do_callback();} label Power xywh {120 120 100 20} labelfont 1 labelsize 11 } + MenuItem {} { + label Shift selected + xywh {130 130 100 20} labelfont 1 labelsize 11 + } } Fl_Dial hrpospar1 { label Par1 @@ -980,12 +984,12 @@ if (resui!=NULL) { Fl_Button {} { label C callback {presetsui->copy(pars);} - xywh {65 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {65 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} - xywh {95 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {95 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label export diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl index 62f24b6c7..0040bbf87 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl @@ -744,14 +744,14 @@ if (x==2) part->partefx[ninseff]->setdryonly(true); Fl_Button {} { label C callback {presetsui->copy(part->partefx[ninseff]);} - xywh {90 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {90 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {pthread_mutex_lock(&master->mutex); presetsui->paste(part->partefx[ninseff],inseffectui); pthread_mutex_unlock(&master->mutex);} - xywh {120 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {120 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Window instrumentkitlist { @@ -858,12 +858,12 @@ if (part->Pkitmode==0) { part->kit[0].Ppadenabled=x; if (x==0) padeditbutton->deactivate(); else padeditbutton->activate();} - tooltip {enable/disable PADsynth} xywh {215 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 51 labelfont 1 labelsize 11 + tooltip {enable/disable PADsynth} xywh {215 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Ppadenabled);} } } Fl_Group {} { - label ADDsynth + label ADsynth xywh {5 245 100 80} box ENGRAVED_FRAME labelfont 1 } { Fl_Check_Button adsynenabledcheck { @@ -872,7 +872,7 @@ if (x==0) padeditbutton->deactivate(); part->kit[0].Padenabled=x; if (x==0) adeditbutton->deactivate(); else adeditbutton->activate();} - tooltip {enable/disable ADsynth} xywh {15 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 51 labelfont 1 labelsize 11 + tooltip {enable/disable ADsynth} xywh {15 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Padenabled);} } Fl_Button adeditbutton { @@ -892,7 +892,7 @@ if (x==0) adeditbutton->deactivate(); part->kit[0].Psubenabled=x; if (x==0) subeditbutton->deactivate(); else subeditbutton->activate();} - tooltip {enable/disable SUBsynth} xywh {115 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 51 labelfont 1 labelsize 11 + tooltip {enable/disable SUBsynth} xywh {115 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11 code1 {o->value(part->kit[0].Psubenabled);} } Fl_Button subeditbutton { @@ -919,14 +919,14 @@ if (x==0) subeditbutton->deactivate(); Fl_Input {} { label {Author and Copyright} callback {snprintf((char *)part->info.Pauthor,MAX_INFO_TEXT_SIZE,"%s",o->value());} - xywh {5 60 385 50} type Multiline color 26 labelsize 10 align 5 + xywh {5 60 385 50} type Multiline color 124 labelsize 10 align 5 code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);} code1 {o->value((char *) &part->info.Pauthor);} } Fl_Input {} { label Comments callback {snprintf((char *)part->info.Pcomments,MAX_INFO_TEXT_SIZE,"%s",o->value());} - xywh {5 125 385 90} type Multiline color 26 labelsize 11 align 5 + xywh {5 125 385 90} type Multiline color 124 labelsize 11 align 5 code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);} code1 {o->value((char *) &part->info.Pcomments);} } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl index 12e591ab5..f1b887cd5 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl @@ -330,12 +330,12 @@ redrawPADnoteApply();} Fl_Button {} { label C callback {presetsui->copy(respar);} - xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(respar,this);} - xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button applybutton { label Apply diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl index a6bbb92cd..f77beef6c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl @@ -41,7 +41,7 @@ class SUBnoteharmonic {: {public Fl_Group} Function {make_window()} {private } { Fl_Window harmonic { - xywh {329 403 90 225} type Double hide + xywh {1257 22 90 305} type Double hide class Fl_Group } { Fl_Slider mag { @@ -51,7 +51,7 @@ if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value(); pars->Phmag[n]=x; if (pars->Phmag[n]==0) o->selection_color(0); else o->selection_color(222);} - tooltip {harmonic's magnitude} xywh {0 15 10 115} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127 + tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127 code0 {o->value(127-pars->Phmag[n]);} code1 {if (pars->Phmag[n]==0) o->selection_color(0);} } @@ -60,16 +60,16 @@ if (pars->Phmag[n]==0) o->selection_color(0); if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value(); else o->value(x); pars->Phrelbw[n]=x;} - tooltip {harmonic's bandwidth} xywh {0 135 10 75} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64 + tooltip {harmonic's bandwidth} xywh {0 157 10 130} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64 code0 {o->value(127-pars->Phrelbw[n]);} } Fl_Box {} { - xywh {10 170 5 5} box FLAT_BOX color 45 + xywh {10 219 5 5} box FLAT_BOX color 45 code0 {if (n+1==MAX_SUB_HARMONICS) o->hide();} } Fl_Box {} { label 01 - xywh {0 210 10 15} labelfont 1 labelsize 9 align 20 + xywh {0 288 10 15} labelfont 1 labelsize 9 align 20 code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));} } Fl_Box {} { @@ -109,24 +109,24 @@ class SUBnoteUI {open : {public PresetsUI_} } { Fl_Window SUBparameters { label {SUBsynth Parameters} open - xywh {542 489 735 390} type Double visible + xywh {213 147 735 470} type Double visible } { Fl_Scroll {} { label scroll open - xywh {5 140 435 245} type HORIZONTAL box FLAT_BOX labeltype NO_LABEL + xywh {5 140 434 325} type HORIZONTAL box FLAT_BOX labeltype NO_LABEL } { - Fl_Pack harmonics {open - xywh {10 145 425 235} type HORIZONTAL + Fl_Pack harmonics { + xywh {5 145 430 325} type HORIZONTAL code0 {for (int i=0;ih(),"");h[i]->init(pars,i);}} } {} } Fl_Button {} { label Close callback {SUBparameters->hide();} - xywh {625 365 105 20} box THIN_UP_BOX labelfont 1 labelsize 11 + xywh {625 446 105 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group {} { - label AMPLITUDE + label AMPLITUDE open xywh {5 5 215 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Value_Slider vol { @@ -156,18 +156,18 @@ class SUBnoteUI {open : {public PresetsUI_} } {} } Fl_Group {} { - xywh {495 325 235 35} box UP_FRAME + xywh {495 406 235 35} box UP_FRAME } { Fl_Counter filterstages { label {Filter Stages} callback {pars->Pnumstages=(int) o->value();} - tooltip {How many times the noise is filtered} xywh {515 340 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10 + tooltip {How many times the noise is filtered} xywh {515 421 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10 code0 {o->value(pars->Pnumstages);} } Fl_Choice magtype { label {Mag.Type} callback {pars->Phmagtype=(int) o->value();} - xywh {585 340 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 + xywh {585 421 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 code0 {o->value(pars->Phmagtype);} } { MenuItem {} { @@ -194,7 +194,7 @@ class SUBnoteUI {open : {public PresetsUI_} Fl_Choice start { label Start callback {pars->Pstart=(int) o->value();} open - xywh {670 340 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 + xywh {670 421 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11 code0 {o->value(pars->Pstart);} } { MenuItem {} { @@ -212,12 +212,12 @@ class SUBnoteUI {open : {public PresetsUI_} } } Fl_Group freqsettingsui { - label FREQUENCY - xywh {440 5 290 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 + label FREQUENCY open + xywh {440 5 295 146} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 } { Fl_Group freqenvelopegroup { label {SUBsynth - Frequency Envelope} open - xywh {445 65 205 70} box FLAT_BOX color 51 align 144 + xywh {445 75 205 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->FreqEnvelope);} code1 {if (pars->PFreqEnvelopeEnabled==0) o->deactivate();} class EnvelopeUI @@ -229,7 +229,7 @@ if (o->value()==0) freqenvelopegroup->deactivate(); else freqenvelopegroup->activate(); o->show(); freqsettingsui->redraw();} - xywh {445 68 55 15} down_box DOWN_BOX labelfont 1 labelsize 10 + xywh {445 77 55 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->PFreqEnvelopeEnabled);} } Fl_Counter octave { @@ -238,7 +238,7 @@ freqsettingsui->redraw();} if (k<0) k+=16; pars->PCoarseDetune = k*1024+ pars->PCoarseDetune%1024;} - tooltip Octave xywh {670 50 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 + tooltip Octave xywh {670 58 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;} code2 {o->value(k);} } @@ -248,7 +248,7 @@ pars->PCoarseDetune = k*1024+ if (k<0) k+=1024; pars->PCoarseDetune = k+ (pars->PCoarseDetune/1024)*1024;} - tooltip {Coarse Detune} xywh {655 115 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11 + tooltip {Coarse Detune} xywh {655 125 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11 code0 {int k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;} code2 {o->value(k);} code3 {o->lstep(10);} @@ -256,13 +256,13 @@ pars->PCoarseDetune = k+ Fl_Slider detune { callback {pars->PDetune=(int)o->value()+8192; detunevalueoutput->do_callback();} - tooltip {Fine Detune (cents)} xywh {495 25 230 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1 + tooltip {Fine Detune (cents)} xywh {495 27 230 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1 code0 {o->value(pars->PDetune-8192);} } Fl_Value_Output detunevalueoutput { label Detune callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} - xywh {448 25 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 + xywh {448 27 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10 code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));} } Fl_Check_Button hz440 { @@ -271,13 +271,13 @@ detunevalueoutput->do_callback();} pars->Pfixedfreq=x; if (x==0) fixedfreqetdial->deactivate(); else fixedfreqetdial->activate();} - tooltip {set the base frequency to 440Hz} xywh {555 45 50 15} down_box DOWN_BOX labelfont 1 labelsize 10 + tooltip {set the base frequency to 440Hz} xywh {555 53 50 15} down_box DOWN_BOX labelfont 1 labelsize 10 code0 {o->value(pars->Pfixedfreq);} } Fl_Dial fixedfreqetdial { label {Eq.T.} callback {pars->PfixedfreqET=(int) o->value();} - tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 45 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1 + tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1 code0 {o->value(pars->PfixedfreqET);} code1 {if (pars->Pfixedfreq==0) o->deactivate();} class WidgetPDial @@ -286,15 +286,15 @@ if (x==0) fixedfreqetdial->deactivate(); label {Detune Type} callback {pars->PDetuneType=(int) o->value()+1; detunevalueoutput->do_callback();} open - xywh {655 85 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 + xywh {655 94 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");} code1 {o->value(pars->PDetuneType-1);} } {} } Fl_Check_Button stereo { label Stereo - callback {pars->Pstereo=(int) o->value();} selected - xywh {440 325 55 35} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 + callback {pars->Pstereo=(int) o->value();} + xywh {440 406 55 35} box THIN_UP_BOX down_box DOWN_BOX labelsize 10 code0 {o->value(pars->Pstereo);} } Fl_Button {} { @@ -308,7 +308,7 @@ detunevalueoutput->do_callback();} open pars->Phmag[0]=127; h[0]->mag->value(0); SUBparameters->redraw();} - tooltip {Clear the harmonics} xywh {445 365 70 20} box THIN_UP_BOX labelfont 1 labelsize 11 + tooltip {Clear the harmonics} xywh {445 446 70 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Group bandwidthsettingsui { label BANDWIDTH @@ -346,18 +346,18 @@ bandwidthsettingsui->redraw();} } Fl_Group globalfiltergroup { label FILTER - xywh {440 140 290 185} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17 + xywh {440 221 290 185} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 code0 {if (pars->PGlobalFilterEnabled==0) o->deactivate();} } { Fl_Group filterenv { label {SUBsynth - Filter Envelope} open - xywh {445 250 275 70} box FLAT_BOX color 51 align 144 + xywh {445 331 275 70} box FLAT_BOX color 51 align 144 code0 {o->init(pars->GlobalFilterEnvelope);} class EnvelopeUI } {} Fl_Group filterui { label {SUBsynthl - Filter} open - xywh {445 165 275 75} box FLAT_BOX color 50 align 144 + xywh {445 246 275 75} box FLAT_BOX color 50 align 144 code0 {o->init(pars->GlobalFilter,&pars->PGlobalFilterVelocityScale,&pars->PGlobalFilterVelocityScaleFunction);} class FilterUI } {} @@ -369,18 +369,87 @@ if (o->value()==0) globalfiltergroup->deactivate(); else globalfiltergroup->activate(); o->show(); globalfiltergroup->redraw();} - xywh {445 145 85 20} down_box DOWN_BOX labelfont 1 labelsize 11 + xywh {445 226 85 20} down_box DOWN_BOX labelfont 1 labelsize 11 code0 {o->value(pars->PGlobalFilterEnabled);} } Fl_Button {} { label C callback {presetsui->copy(pars);} - xywh {540 370 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {540 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(pars,this);} - xywh {570 370 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7 + xywh {570 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 + } + Fl_Group {} { + label OVERTONES open + xywh {440 151 220 70} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17 + } { + Fl_Choice spreadtype { + label OvertonesPosition + callback {pars->POvertoneSpread.type = (int)o->value(); +pars->updateFrequencyMultipliers();} open + xywh {450 190 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 10 + code0 {o->value(pars->POvertoneSpread.type);} + } { + MenuItem {} { + label Harmonic + xywh {0 0 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label ShiftU + xywh {10 10 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label ShiftL + xywh {20 20 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label PowerU + xywh {20 20 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label PowerL + xywh {30 30 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label Sine + xywh {40 40 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label Power + xywh {50 50 34 20} labelfont 1 labelsize 11 + } + MenuItem {} { + label Shift selected + xywh {20 20 34 20} labelfont 1 labelsize 11 + } + } + Fl_Dial spreadpar1 { + label Par1 + callback {pars->POvertoneSpread.par1 = o->value(); +pars->updateFrequencyMultipliers();} + xywh {548 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 + code0 {o->value(pars->POvertoneSpread.par1);} + class WidgetPDial + } + Fl_Dial spreadpar2 { + label Par2 + callback {pars->POvertoneSpread.par2 = o->value(); +pars->updateFrequencyMultipliers();} + xywh {583 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 + code0 {o->value(pars->POvertoneSpread.par2);} + class WidgetPDial + } + Fl_Dial spreadpar3 { + label ForceH + callback {pars->POvertoneSpread.par3 = o->value(); +pars->updateFrequencyMultipliers();} + xywh {618 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1 + code0 {o->value(pars->POvertoneSpread.par3);} + class WidgetPDial + } } } } @@ -400,6 +469,11 @@ bwee->show(); bandwidthsettingsui->redraw(); detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune)); +spreadtype->value(pars->POvertoneSpread.type); +spreadpar1->value(pars->POvertoneSpread.par1); +spreadpar2->value(pars->POvertoneSpread.par2); +spreadpar3->value(pars->POvertoneSpread.par3); + freqee->value(pars->PFreqEnvelopeEnabled); if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate(); else freqenvelopegroup->activate(); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp index d0adfd938..555b1b429 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp @@ -3,7 +3,7 @@ main.cpp - Main file of the synthesizer Copyright (C) 2002-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul + Copyright (C) 2012-2014 Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License @@ -179,6 +179,9 @@ int main(int argc, char *argv[]) cerr << "\nZynAddSubFX - Copyright (c) 2002-2011 Nasca Octavian Paul and others" << endl; + cerr + << " Copyright (c) 2009-2014 Mark McCurry [active maintainer]" + << endl; cerr << "Compiled: " << __DATE__ << " " << __TIME__ << endl; cerr << "This program is free software (GNU GPL v.2 or later) and \n"; cerr << "it comes with ABSOLUTELY NO WARRANTY.\n" << endl; From 7b279d3f85de2930bc2b9f7f835fe933958af16d Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 16 Jul 2014 23:46:47 +0200 Subject: [PATCH 4/5] Pattern: add undo/redo support for "Clear all notes" operation in context menu Simply add a journal checkpoint before clearing pattern. --- src/tracks/pattern.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tracks/pattern.cpp b/src/tracks/pattern.cpp index 6e8b23187..3ba6b3614 100644 --- a/src/tracks/pattern.cpp +++ b/src/tracks/pattern.cpp @@ -422,6 +422,7 @@ void pattern::loadSettings( const QDomElement & _this ) void pattern::clear() { + addJournalCheckPoint(); clearNotes(); ensureBeatNotes(); } From 1a2351bbd0c0901bae92777d41a8fc7e8d8e55ab Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 17 Jul 2014 01:48:24 +0300 Subject: [PATCH 5/5] Improve performance of effect processing, fix autoquit bugs Also a slight NPH tweak --- include/Effect.h | 7 +++---- src/core/Effect.cpp | 9 +++------ src/core/FxMixer.cpp | 10 ++++------ src/core/NotePlayHandle.cpp | 17 ++++++++++++----- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/include/Effect.h b/include/Effect.h index 10d3fcf23..e0ad3ebad 100644 --- a/include/Effect.h +++ b/include/Effect.h @@ -23,8 +23,8 @@ * */ -#ifndef _EFFECT_H -#define _EFFECT_H +#ifndef EFFECT_H +#define EFFECT_H #include "Plugin.h" #include "engine.h" @@ -118,8 +118,7 @@ public: inline float gate() const { const float level = m_gateModel.value(); - return level*level * m_processors * - engine::mixer()->framesPerPeriod(); + return level*level * m_processors; } inline f_cnt_t bufferCount() const diff --git a/src/core/Effect.cpp b/src/core/Effect.cpp index 619ed438e..fc94132cb 100644 --- a/src/core/Effect.cpp +++ b/src/core/Effect.cpp @@ -25,9 +25,6 @@ #include -#include -#include - #include "Effect.h" #include "engine.h" #include "EffectChain.h" @@ -136,7 +133,7 @@ void Effect::checkGate( double _out_sum ) { // Check whether we need to continue processing input. Restart the // counter if the threshold has been exceeded. - if( _out_sum <= gate() + FLT_MIN ) + if( _out_sum - gate() <= typeInfo::minEps() ) { incrementBufferCount(); if( bufferCount() > timeout() ) @@ -176,7 +173,7 @@ void Effect::reinitSRC() libsrcInterpolation(), DEFAULT_CHANNELS, &error ) ) == NULL ) { - fprintf( stderr, "Error: src_new() failed in effect.cpp!\n" ); + qFatal( "Error: src_new() failed in effect.cpp!\n" ); } } } @@ -202,7 +199,7 @@ void Effect::resample( int _i, const sampleFrame * _src_buf, int error; if( ( error = src_process( m_srcState[_i], &m_srcData[_i] ) ) ) { - fprintf( stderr, "Effect::resample(): error while resampling: %s\n", + qFatal( "Effect::resample(): error while resampling: %s\n", src_strerror( error ) ); } } diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp index 98aea9811..c9df355b8 100644 --- a/src/core/FxMixer.cpp +++ b/src/core/FxMixer.cpp @@ -137,9 +137,8 @@ void FxChannel::doProcessing( sampleFrame * _buf ) _buf[f][1] += ch_buf[f][1] * v; } } - // if sender channel hasInput, then we hasInput too - if( sender->m_hasInput ) m_hasInput = true; + if( sender->m_hasInput ) { m_hasInput = true; } } } @@ -150,10 +149,9 @@ void FxChannel::doProcessing( sampleFrame * _buf ) // only start fxchain when we have input... m_fxChain.startRunning(); } - if( m_hasInput || m_stillRunning ) - { - m_stillRunning = m_fxChain.processAudioBuffer( _buf, fpp, m_hasInput ); - } + + m_stillRunning = m_fxChain.processAudioBuffer( _buf, fpp, m_hasInput ); + m_peakLeft = qMax( m_peakLeft, engine::mixer()->peakValueLeft( _buf, fpp ) * v ); m_peakRight = qMax( m_peakRight, engine::mixer()->peakValueRight( _buf, fpp ) * v ); } diff --git a/src/core/NotePlayHandle.cpp b/src/core/NotePlayHandle.cpp index 0a3107acd..67f2319ab 100644 --- a/src/core/NotePlayHandle.cpp +++ b/src/core/NotePlayHandle.cpp @@ -192,11 +192,18 @@ void NotePlayHandle::play( sampleFrame * _working_buffer ) { if( m_scheduledNoteOff >= 0 ) // always trigger scheduled noteoffs, because they're only scheduled if the note is released { - m_instrumentTrack->processOutEvent( - MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ), - MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ), - m_scheduledNoteOff ); - m_scheduledNoteOff = -1; + if( m_scheduledNoteOff < engine::mixer()->framesPerPeriod() ) + { + m_instrumentTrack->processOutEvent( + MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ), + MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ), + m_scheduledNoteOff ); + m_scheduledNoteOff = -1; + } + else + { + m_scheduledNoteOff -= engine::mixer()->framesPerPeriod(); + } } if( m_muted )