summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse2/ChangeLog11
-rw-r--r--muse2/muse/arranger/tlist.cpp67
-rw-r--r--muse2/muse/audio.cpp4
-rw-r--r--muse2/muse/audio.h2
-rw-r--r--muse2/muse/audiotrack.cpp52
-rw-r--r--muse2/muse/driver/dummyaudio.cpp66
-rw-r--r--muse2/muse/dssihost.cpp309
-rw-r--r--muse2/muse/dssihost.h19
-rw-r--r--muse2/muse/globaldefs.h8
-rw-r--r--muse2/muse/instruments/minstrument.h3
-rw-r--r--muse2/muse/midiport.cpp18
-rw-r--r--muse2/muse/midiport.h2
-rw-r--r--muse2/muse/mixer/astrip.cpp38
-rw-r--r--muse2/muse/mixer/rack.cpp1
-rw-r--r--muse2/muse/osc.cpp4
-rw-r--r--muse2/muse/plugin.cpp60
-rw-r--r--muse2/muse/plugin.h51
-rw-r--r--muse2/muse/remote/pyapi.cpp1
-rw-r--r--muse2/muse/seqmsg.cpp14
-rw-r--r--muse2/muse/song.cpp2
-rw-r--r--muse2/muse/synth.cpp51
-rw-r--r--muse2/muse/synth.h35
-rw-r--r--muse2/muse/ticksynth.cpp8
-rw-r--r--muse2/muse/vst.cpp8
-rw-r--r--muse2/muse/vst.h13
-rw-r--r--muse2/muse/widgets/genset.cpp12
-rw-r--r--muse2/muse/widgets/gensetbase.ui36
-rw-r--r--muse2/synti/deicsonze/deicsonze.cpp12
-rw-r--r--muse2/synti/deicsonze/deicsonze.h13
-rw-r--r--muse2/synti/fluid/fluid.cpp4
-rw-r--r--muse2/synti/fluid/fluid.h9
-rw-r--r--muse2/synti/fluidsynth/fluidsynti.cpp8
-rw-r--r--muse2/synti/fluidsynth/fluidsynti.h9
-rw-r--r--muse2/synti/libsynti/mess.cpp21
-rw-r--r--muse2/synti/libsynti/mess.h5
-rw-r--r--muse2/synti/organ/organ.cpp16
-rw-r--r--muse2/synti/organ/organ.h13
-rw-r--r--muse2/synti/s1/s1.cpp13
-rw-r--r--muse2/synti/simpledrums/simpledrums.cpp18
-rw-r--r--muse2/synti/simpledrums/simpledrums.h9
-rw-r--r--muse2/synti/simpledrums2/simpledrums.cpp18
-rw-r--r--muse2/synti/simpledrums2/simpledrums.h9
-rw-r--r--muse2/synti/vam/vam.cpp29
43 files changed, 811 insertions, 290 deletions
diff --git a/muse2/ChangeLog b/muse2/ChangeLog
index ebbed9ff..d42c3127 100644
--- a/muse2/ChangeLog
+++ b/muse2/ChangeLog
@@ -1,3 +1,14 @@
+10.04.2011:
+ * Added: Expanded all routing choices: Synth to Wave track, Wave track to Wave track etc. (Tim)
+ * Added: DSSI synths can now show generic LADSPA GUI as well as native. (Tim p4.0.20)
+ WIP: Controllers not finished + maybe need a chooser for which ones (of possibly 1000's) are shown.
+ I reserved an Audio track controller index of 9 for them. If we ever decide to increase the number
+ of rack plugins, that gives us room for 8 maximum, for now. (But increasing the maximum number
+ of controllers would mean altering the list structure, requiring a bump-up of file version.)
+ - Dummy audio: Fixed lockups, or crash at line: "while (drvPtr->cmdQueue.size())" in dummy loop. (Tim)
+ Replaced loop code with with muse_qt4_evolution's (usleep-based instead of timer).
+ TODO: Try subtracting process time from sleep time for more accuracy.
+ TODO: Use a better sleep routine - usleep may be have terrible resolution in some cases.
09.04.2011:
- No more sleep icon when cancelling a quit operation (rj)
- added Ctrl+Shift+LeftMouseButton to add entire rows to selection in all canvas editors (rj)
diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp
index b13f2ab0..b907b555 100644
--- a/muse2/muse/arranger/tlist.cpp
+++ b/muse2/muse/arranger/tlist.cpp
@@ -602,28 +602,48 @@ void TList::oportPropertyPopupMenu(Track* t, int x, int y)
SynthI* synth = (SynthI*)t;
QMenu* p = new QMenu;
- QAction* act = p->addAction(tr("Show Gui"));
- act->setCheckable(true);
+ //QAction* act = p->addAction(tr("Show Gui"));
+ QAction* gact = p->addAction(tr("show gui"));
+ //act->setCheckable(true);
+ gact->setCheckable(true);
//printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible());
- act->setEnabled(synth->hasGui());
- act->setChecked(synth->guiVisible());
+ //act->setEnabled(synth->hasGui());
+ //act->setChecked(synth->guiVisible());
+ gact->setEnabled(synth->hasGui());
+ gact->setChecked(synth->guiVisible());
+
+ QAction* nact = p->addAction(tr("show native gui"));
+ //act->setCheckable(true);
+ nact->setCheckable(true);
+ //printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible());
+ //act->setEnabled(synth->hasGui());
+ //act->setChecked(synth->guiVisible());
+ nact->setEnabled(synth->hasNativeGui());
+ nact->setChecked(synth->nativeGuiVisible());
// If it has a gui but we don't have OSC, disable the action.
#ifndef OSC_SUPPORT
#ifdef DSSI_SUPPORT
if(dynamic_cast<DssiSynthIF*>(synth->sif()))
{
- act->setChecked(false);
- act->setEnabled(false);
+ //act->setChecked(false);
+ //act->setEnabled(false);
+ nact->setChecked(false);
+ nact->setEnabled(false);
}
#endif
#endif
QAction* ract = p->exec(mapToGlobal(QPoint(x, y)), 0);
- if (ract == act) {
+ //if (ract == act) {
+ if (ract == gact) {
bool show = !synth->guiVisible();
audio->msgShowInstrumentGui(synth, show);
}
+ else if (ract == nact) {
+ bool show = !synth->nativeGuiVisible();
+ audio->msgShowInstrumentNativeGui(synth, show);
+ }
delete p;
return;
}
@@ -635,29 +655,46 @@ void TList::oportPropertyPopupMenu(Track* t, int x, int y)
MidiPort* port = &midiPorts[oPort];
QMenu* p = new QMenu;
- QAction* act = p->addAction(tr("Show Gui"));
- act->setCheckable(true);
+ //QAction* act = p->addAction(tr("Show Gui"));
+ QAction* gact = p->addAction(tr("show gui"));
+ //act->setCheckable(true);
+ gact->setCheckable(true);
//printf("synth hasgui %d, gui visible %d\n",port->hasGui(), port->guiVisible());
- act->setEnabled(port->hasGui());
- act->setChecked(port->guiVisible());
-
+ //act->setEnabled(port->hasGui());
+ //act->setChecked(port->guiVisible());
+ gact->setEnabled(port->hasGui());
+ gact->setChecked(port->guiVisible());
+
+ QAction* nact = p->addAction(tr("show native gui"));
+ nact->setCheckable(true);
+ //printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible());
+ nact->setEnabled(port->hasNativeGui());
+ nact->setChecked(port->nativeGuiVisible());
+
// If it has a gui but we don't have OSC, disable the action.
#ifndef OSC_SUPPORT
#ifdef DSSI_SUPPORT
MidiDevice* dev = port->device();
if(dev && dev->isSynti() && (dynamic_cast<DssiSynthIF*>(((SynthI*)dev)->sif())))
{
- act->setChecked(false);
- act->setEnabled(false);
+ //act->setChecked(false);
+ //act->setEnabled(false);
+ nact->setChecked(false);
+ nact->setEnabled(false);
}
#endif
#endif
QAction* ract = p->exec(mapToGlobal(QPoint(x, y)), 0);
- if (ract == act) {
+ //if (ract == act) {
+ if (ract == gact) {
bool show = !port->guiVisible();
audio->msgShowInstrumentGui(port->instrument(), show);
}
+ else if (ract == nact) {
+ bool show = !port->nativeGuiVisible();
+ audio->msgShowInstrumentNativeGui(port->instrument(), show);
+ }
delete p;
}
diff --git a/muse2/muse/audio.cpp b/muse2/muse/audio.cpp
index f541a10c..a4b04436 100644
--- a/muse2/muse/audio.cpp
+++ b/muse2/muse/audio.cpp
@@ -65,6 +65,7 @@ const char* seqMsgList[] = {
"SEQM_SET_AUX",
"SEQM_UPDATE_SOLO_STATES",
"MIDI_SHOW_INSTR_GUI",
+ "MIDI_SHOW_INSTR_NATIVE_GUI",
"AUDIO_RECORD",
"AUDIO_ROUTEADD", "AUDIO_ROUTEREMOVE", "AUDIO_REMOVEROUTES",
"AUDIO_VOL", "AUDIO_PAN",
@@ -736,6 +737,9 @@ void Audio::processMsg(AudioMsg* msg)
case MIDI_SHOW_INSTR_GUI:
midiSeq->msgUpdatePollFd();
break;
+ case MIDI_SHOW_INSTR_NATIVE_GUI: // p4.0.20
+ midiSeq->msgUpdatePollFd();
+ break;
case SEQM_ADD_TEMPO:
case SEQM_REMOVE_TEMPO:
case SEQM_SET_GLOBAL_TEMPO:
diff --git a/muse2/muse/audio.h b/muse2/muse/audio.h
index ba188f8a..58f399e3 100644
--- a/muse2/muse/audio.h
+++ b/muse2/muse/audio.h
@@ -58,6 +58,7 @@ enum {
SEQM_SET_AUX,
SEQM_UPDATE_SOLO_STATES,
MIDI_SHOW_INSTR_GUI,
+ MIDI_SHOW_INSTR_NATIVE_GUI,
AUDIO_RECORD,
AUDIO_ROUTEADD, AUDIO_ROUTEREMOVE, AUDIO_REMOVEROUTES,
AUDIO_VOL, AUDIO_PAN,
@@ -218,6 +219,7 @@ class Audio {
void msgAddSig(int tick, int z, int n, bool doUndoFlag = true);
void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true);
void msgShowInstrumentGui(MidiInstrument*, bool);
+ void msgShowInstrumentNativeGui(MidiInstrument*, bool);
void msgPanic();
void sendMsg(AudioMsg*);
bool sendMessage(AudioMsg* m, bool doUndo);
diff --git a/muse2/muse/audiotrack.cpp b/muse2/muse/audiotrack.cpp
index 28020caf..98e74331 100644
--- a/muse2/muse/audiotrack.cpp
+++ b/muse2/muse/audiotrack.cpp
@@ -12,6 +12,7 @@
#include <QMessageBox>
+#include "globaldefs.h"
#include "track.h"
#include "event.h"
#include "song.h"
@@ -20,6 +21,8 @@
#include "xml.h"
#include "plugin.h"
#include "audiodev.h"
+#include "synth.h"
+#include "dssihost.h"
bool AudioAux::_isVisible=true;
bool AudioInput::_isVisible=true;
@@ -983,7 +986,8 @@ bool AudioTrack::readProperties(Xml& xml, const QString& tag)
// controls would all be set to zero.
// But we will allow for the (unintended, useless) possibility of a controller
// with no matching plugin control.
- PluginI* p = 0;
+ //PluginI* p = 0;
+ PluginIBase* p = 0;
bool ctlfound = false;
int m = l->id() & AC_PLUGIN_CTL_ID_MASK;
int n = (l->id() >> AC_PLUGIN_CTL_BASE_POW) - 1;
@@ -993,6 +997,25 @@ bool AudioTrack::readProperties(Xml& xml, const QString& tag)
if(p && m < p->parameters())
ctlfound = true;
}
+ // Support a special block for dssi synth ladspa controllers. p4.0.20
+ else if(n == MAX_PLUGINS && type() == AUDIO_SOFTSYNTH)
+ {
+ SynthI* synti = dynamic_cast < SynthI* > (this);
+ if(synti)
+ {
+ SynthIF* sif = synti->sif();
+ if(sif)
+ {
+ DssiSynthIF* dsif = dynamic_cast < DssiSynthIF* > (sif);
+ if(dsif)
+ {
+ p = dsif;
+ if(p && m < p->parameters())
+ ctlfound = true;
+ }
+ }
+ }
+ }
iCtrlList icl = _controller.find(l->id());
if (icl == _controller.end())
@@ -1128,7 +1151,7 @@ void AudioTrack::mapRackPluginsToControllers()
}
}
- // The loop is a safe way to delete while iterating 'non-linear' lists.
+ // FIXME: The loop is a safe way to delete while iterating lists.
bool loop;
do
{
@@ -1142,7 +1165,28 @@ void AudioTrack::mapRackPluginsToControllers()
continue;
int param = id & AC_PLUGIN_CTL_ID_MASK;
int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1;
- PluginI* p = (*_efxPipe)[idx];
+ //PluginI* p = (*_efxPipe)[idx];
+
+ // p4.0.20
+ PluginIBase* p = 0;
+ if(idx >= 0 && idx < PipelineDepth)
+ p = (*_efxPipe)[idx];
+ // Support a special block for dssi synth ladspa controllers.
+ else if(idx == MAX_PLUGINS && type() == AUDIO_SOFTSYNTH)
+ {
+ SynthI* synti = dynamic_cast < SynthI* > (this);
+ if(synti)
+ {
+ SynthIF* sif = synti->sif();
+ if(sif)
+ {
+ DssiSynthIF* dsif = dynamic_cast < DssiSynthIF* > (sif);
+ if(dsif)
+ p = dsif;
+ }
+ }
+ }
+
// If there's no plugin at that rack position, or the param is out of range of
// the number of controls in the plugin, then it's a stray controller. Delete it.
// Future: Leave room for possible bypass controller at AC_PLUGIN_CTL_ID_MASK -1.
@@ -1159,7 +1203,7 @@ void AudioTrack::mapRackPluginsToControllers()
while (loop);
- // Although this tested OK, and is the 'official' way to erase while iterating,
+ // FIXME: Although this tested OK, and is the 'official' way to erase while iterating,
// I don't trust it. I'm weary of this method. The technique didn't work
// in Audio::msgRemoveTracks(), see comments there.
/*
diff --git a/muse2/muse/driver/dummyaudio.cpp b/muse2/muse/driver/dummyaudio.cpp
index dfa7a86b..597ecf2b 100644
--- a/muse2/muse/driver/dummyaudio.cpp
+++ b/muse2/muse/driver/dummyaudio.cpp
@@ -57,6 +57,7 @@ class DummyAudioDevice : public AudioDevice {
int _framePos;
int playPos;
bool realtimeFlag;
+ bool seekflag;
DummyAudioDevice();
virtual ~DummyAudioDevice()
@@ -117,8 +118,7 @@ class DummyAudioDevice : public AudioDevice {
virtual int getState() {
// if(DEBUG_DUMMY)
// printf("DummyAudioDevice::getState %d\n", state);
-
- return state; }
+ return state; }
virtual unsigned getCurFrame() {
if(DEBUG_DUMMY)
printf("DummyAudioDevice::getCurFrame %d\n", _framePos);
@@ -133,10 +133,14 @@ class DummyAudioDevice : public AudioDevice {
virtual void startTransport() {
if(DEBUG_DUMMY)
printf("DummyAudioDevice::startTransport playPos=%d\n", playPos);
+#if 0
Msg trcmd;
trcmd.cmd = trStart;
trcmd.arg = playPos;
cmdQueue.push_front(trcmd);
+#else
+ state = Audio::PLAY;
+#endif
/* state = Audio::START_PLAY;
audio->sync(state, playPos);
state = Audio::PLAY;*/
@@ -152,20 +156,33 @@ class DummyAudioDevice : public AudioDevice {
{
if(DEBUG_DUMMY)
printf("DummyAudioDevice::seekTransport frame=%d topos=%d\n",playPos, p.frame());
+#if 0
Msg trcmd;
trcmd.cmd = trSeek;
trcmd.arg = p.frame();
cmdQueue.push_front(trcmd);
playPos = p.frame();
+#else
+ seekflag = true;
+ //pos = n;
+ playPos = p.frame();
+#endif
+
}
virtual void seekTransport(unsigned pos) {
if(DEBUG_DUMMY)
printf("DummyAudioDevice::seekTransport frame=%d topos=%d\n",playPos,pos);
+#if 0
Msg trcmd;
trcmd.cmd = trSeek;
trcmd.arg = pos;
cmdQueue.push_front(trcmd);
playPos = pos;
+#else
+ seekflag = true;
+ //pos = n;
+ playPos = pos;
+#endif
/*
Audio::State tempState = state;
state = Audio::START_PLAY;
@@ -187,7 +204,9 @@ DummyAudioDevice::DummyAudioDevice()
dummyThread = 0;
realtimeFlag = false;
+ seekflag = false;
state = Audio::STOP;
+ //startTime = curTime();
_framePos = 0;
playPos = 0;
cmdQueue.clear();
@@ -259,6 +278,7 @@ static void* dummyLoop(void* ptr)
sampleRate = config.dummyAudioSampleRate;
//segmentSize = dummyFrames;
segmentSize = config.dummyAudioBufSize;
+#if 0
//unsigned int tickRate = sampleRate / dummyFrames;
unsigned int tickRate = sampleRate / segmentSize;
@@ -289,13 +309,15 @@ static void* dummyLoop(void* ptr)
sampleRate = tickRate * segmentSize;
timer.startTimer();
+#endif
DummyAudioDevice *drvPtr = (DummyAudioDevice *)ptr;
- pollfd myPollFd;
+ ///pollfd myPollFd;
+
+ ///myPollFd.fd = fd;
+ ///myPollFd.events = POLLIN;
- myPollFd.fd = fd;
- myPollFd.events = POLLIN;
/*
doSetuid();
@@ -360,6 +382,7 @@ static void* dummyLoop(void* ptr)
undoSetuid();
#endif
+#if 0
/* unsigned long tick = 0;*/ // prevent compiler warning: unused variable
for (;;) {
int _pollWait = 10; // ms
@@ -408,7 +431,38 @@ static void* dummyLoop(void* ptr)
drvPtr->playPos+=increment;
}
}
- timer.stopTimer();
+#else
+ // Adapted from muse_qt4_evolution. p4.0.20
+ for(;;)
+ {
+ //if(audioState == AUDIO_RUNNING)
+ if(audio->isRunning())
+ //audio->process(segmentSize, drvPtr->state);
+ audio->process(segmentSize);
+ //else if (audioState == AUDIO_START1)
+ // audioState = AUDIO_START2;
+ //usleep(dummyFrames*1000000/AL::sampleRate);
+ usleep(segmentSize*1000000/sampleRate);
+ //if(dummyAudio->seekflag)
+ if(drvPtr->seekflag)
+ {
+ //audio->sync(Audio::STOP, dummyAudio->pos);
+ //audio->sync(drvPtr->state, drvPtr->playPos);
+ audio->sync(Audio::STOP, drvPtr->playPos);
+
+ //dummyAudio->seekflag = false;
+ drvPtr->seekflag = false;
+ }
+
+ //if(dummyAudio->state == Audio::PLAY)
+ // dummyAudio->pos += dummyFrames;
+ drvPtr->_framePos += segmentSize;
+ if(drvPtr->state == Audio::PLAY)
+ drvPtr->playPos += segmentSize;
+ }
+#endif
+
+ ///timer.stopTimer();
pthread_exit(0);
}
diff --git a/muse2/muse/dssihost.cpp b/muse2/muse/dssihost.cpp
index ca867bd4..aa18025d 100644
--- a/muse2/muse/dssihost.cpp
+++ b/muse2/muse/dssihost.cpp
@@ -615,8 +615,9 @@ SynthIF* DssiSynth::createSIF(SynthI* synti)
_controlInPorts = 0;
_controlOutPorts = 0;
- pIdx.clear();
- opIdx.clear();
+ ///pIdx.clear();
+ ///opIdx.clear();
+
iIdx.clear();
oIdx.clear();
rpIdx.clear();
@@ -662,7 +663,7 @@ SynthIF* DssiSynth::createSIF(SynthI* synti)
{
rpIdx.push_back(_controlInPorts);
++_controlInPorts;
- pIdx.push_back(k);
+ ///pIdx.push_back(k);
// Set to false at first.
//synti->_guiUpdateControls.push_back(false);
}
@@ -670,7 +671,7 @@ SynthIF* DssiSynth::createSIF(SynthI* synti)
{
rpIdx.push_back((unsigned long)-1);
++_controlOutPorts;
- opIdx.push_back(k);
+ ///opIdx.push_back(k);
}
}
}
@@ -718,7 +719,8 @@ SynthIF* DssiSynth::createSIF(SynthI* synti)
// guiVisible
//---------------------------------------------------------
-bool DssiSynthIF::guiVisible() const
+//bool DssiSynthIF::guiVisible() const
+bool DssiSynthIF::nativeGuiVisible() const
{
//return _guiVisible;
#ifdef OSC_SUPPORT
@@ -727,11 +729,19 @@ bool DssiSynthIF::guiVisible() const
return false;
}
+bool DssiSynthIF::guiVisible() const
+ {
+ //return _guiVisible;
+ //return false;
+ return _gui && _gui->isVisible();
+ }
+
//---------------------------------------------------------
// showGui
//---------------------------------------------------------
-void DssiSynthIF::showGui(bool v)
+//void DssiSynthIF::showGui(bool v)
+void DssiSynthIF::showNativeGui(bool v)
{
#ifdef OSC_SUPPORT
@@ -786,6 +796,26 @@ void DssiSynthIF::showGui(bool v)
}
//---------------------------------------------------------
+// showGui
+//---------------------------------------------------------
+
+void DssiSynthIF::showGui(bool v)
+{
+ //if (_plugin)
+ {
+ if (v) {
+ if (_gui == 0)
+ makeGui();
+ _gui->show();
+ }
+ else {
+ if (_gui)
+ _gui->hide();
+ }
+ }
+}
+
+//---------------------------------------------------------
// receiveEvent
//---------------------------------------------------------
@@ -866,8 +896,10 @@ bool DssiSynthIF::init(DssiSynth* s)
synti->_guiUpdateControls.clear();
synti->_guiUpdateProgram = false;
+/*
for (int k = 0; k < controlPorts; ++k) {
int i = synth->pIdx[k];
+ controls[k].idx = i; // p4.0.20
//controls[k].val = ladspaDefaultValue(ld, i);
ladspaDefaultValue(ld, i, &controls[k].val);
@@ -937,85 +969,188 @@ bool DssiSynthIF::init(DssiSynth* s)
for (int k = 0; k < controlOutPorts; ++k) {
int i = synth->opIdx[k];
+ controlsOut[k].idx = i; // p4.0.20
#ifdef DSSI_DEBUG
printf("DssiSynthIF::init control output port:%d port idx:%d name:%s\n", k, i, ld->PortNames[i]);
#endif
-
- // p3.3.39 Removed.
- /*
-
- //controls[k].val = ladspaDefaultValue(ld, i);
- ladspaDefaultValue(ld, i, &controlsOut[k].val);
-
- // This code is duplicated in ::getControllerInfo()
- //
-
- int ctlnum = DSSI_NONE;
- if(dssi->get_midi_controller_for_port)
- ctlnum = dssi->get_midi_controller_for_port(handle, i);
-
- // No controller number? Try to give it a unique one...
- if(ctlnum == DSSI_NONE)
- {
- // FIXME: Be more careful. Must make sure to pick numbers not already chosen or which WILL BE chosen.
- // Simple but flawed solution: Start them at 0x60000 + 0x3000 = 0x63000. Max NRPN number is 0x3fff.
- // TODO: CC etc. etc.
- ctlnum = CTRL_NRPN14_OFFSET + 0x3000 + k;
- }
- else
- {
- int c = ctlnum;
- // Can be both CC and NRPN! Prefer CC over NRPN.
- if(DSSI_IS_CC(ctlnum))
- {
- #ifdef DSSI_DEBUG
- printf("DssiSynthIF::init is CC control\n");
- #endif
- ctlnum = DSSI_CC_NUMBER(c);
-
- #ifdef DSSI_DEBUG
- if(DSSI_IS_NRPN(ctlnum))
- printf("DssiSynthIF::init is also NRPN control. Using CC.\n");
- #endif
- }
- else
- if(DSSI_IS_NRPN(ctlnum))
- {
- #ifdef DSSI_DEBUG
- printf("DssiSynthIF::init is NRPN control\n");
- #endif
-
- ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET;
- }
-
- }
+ // - Control outs are not handled but still must be connected to something.
+ ld->connect_port(handle, i, &controlsOut[k].val);
+ }
+*/
+ // p4.0.20
+ int cip = 0;
+ int cop = 0;
+ for (unsigned long k = 0; k < synth->_portCount; ++k)
+ {
+ LADSPA_PortDescriptor pd = ld->PortDescriptors[k];
+
+ #ifdef DSSI_DEBUG
+ printf("DssiSynth::init ladspa plugin Port:%ld Name:%s descriptor:%x\n", k, ld->PortNames[k], pd);
+ #endif
+
+ if (LADSPA_IS_PORT_CONTROL(pd))
+ {
+ if (LADSPA_IS_PORT_INPUT(pd))
+ {
+ controls[cip].idx = k;
+ float val;
+ ladspaDefaultValue(ld, k, &val);
+ controls[cip].val = val;
+ controls[cip].tmpVal = val;
+ controls[cip].enCtrl = true;
+ controls[cip].en2Ctrl = true;
+
+ // Set to false at first.
+ synti->_guiUpdateControls.push_back(false);
+
+ #ifdef DSSI_DEBUG
+ printf("DssiSynthIF::init control port:%d port idx:%d name:%s\n", cip, k, ld->PortNames[k]);
+ #endif
+
+ // This code is duplicated in ::getControllerInfo()
+ //
+
+ int ctlnum = DSSI_NONE;
+ if(dssi->get_midi_controller_for_port)
+ ctlnum = dssi->get_midi_controller_for_port(handle, k);
+
+ // No controller number? Try to give it a unique one...
+ if(ctlnum == DSSI_NONE)
+ {
+ // FIXME: Be more careful. Must make sure to pick numbers not already chosen or which WILL BE chosen.
+ // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff.
+ // TODO: Update: Actually we want to try to use CC Controller7 controllers if possible (or a choice) because what if
+ // the user's controller hardware doesn't support RPN?
+ // If CC Controller7 is chosen we must make sure to use only non-common numbers. An already limited range
+ // of 127 now becomes narrower. See the cool document midi-controllers.txt in the DSSI source for a
+ // nice roundup of numbers and how to choose them and how they relate to synths and DSSI synths etc. !
+ ctlnum = CTRL_NRPN14_OFFSET + 0x2000 + cip;
+ }
+ else
+ {
+ int c = ctlnum;
+ // Can be both CC and NRPN! Prefer CC over NRPN.
+ if(DSSI_IS_CC(ctlnum))
+ {
+ #ifdef DSSI_DEBUG
+ printf("DssiSynthIF::init is CC control\n");
+ #endif
+ ctlnum = DSSI_CC_NUMBER(c);
#ifdef DSSI_DEBUG
- printf("DssiSynthIF::init inserting to midiCtl2PortMap: ctlnum:%d k:%d\n", ctlnum, k);
+ if(DSSI_IS_NRPN(ctlnum))
+ printf("DssiSynthIF::init is also NRPN control. Using CC.\n");
+ #endif
+ }
+ else
+ if(DSSI_IS_NRPN(ctlnum))
+ {
+ #ifdef DSSI_DEBUG
+ printf("DssiSynthIF::init is NRPN control\n");
#endif
- // We have a controller number! Insert it and the DSSI port number into the map.
- // p3.3.39 Removed. Doesn't say whether it's in or out! Don't need this for now.
- //synth->midiCtl2PortMap.insert(std::pair<int, int>(ctlnum, k));
-
- */
-
- // - Control outs are not handled but still must be connected to something.
- ld->connect_port(handle, i, &controlsOut[k].val);
+ ctlnum = DSSI_NRPN_NUMBER(c) + CTRL_NRPN14_OFFSET;
+ }
+
}
+
+ #ifdef DSSI_DEBUG
+ printf("DssiSynthIF::init inserting to midiCtl2PortMap: ctlnum:%d k:%d\n", ctlnum, cip);
+ #endif
+
+ // We have a controller number! Insert it and the DSSI port number into both maps.
+ synth->midiCtl2PortMap.insert(std::pair<int, int>(ctlnum, cip));
+ synth->port2MidiCtlMap.insert(std::pair<int, int>(cip, ctlnum));
+
+ // Support a special block for dssi synth ladspa controllers. p4.0.20
+ // Put the ID at a special block after plugins (far after).
+ int id = genACnum(MAX_PLUGINS, cip);
+ const char* name = ld->PortNames[k];
+ float min, max;
+ ladspaControlRange(ld, k, &min, &max);
+ CtrlList* cl;
+ CtrlListList* cll = ((AudioTrack*)synti)->controller();
+ iCtrlList icl = cll->find(id);
+ if (icl == cll->end())
+ {
+ cl = new CtrlList(id);
+ cll->add(cl);
+ cl->setCurVal(controls[cip].val);
+ }
+ else
+ {
+ cl = icl->second;
+ controls[cip].val = cl->curVal();
+ }
+ cl->setRange(min, max);
+ cl->setName(QString(name));
+ LADSPA_PortRangeHint range = ld->PortRangeHints[k];
+ if(LADSPA_IS_HINT_TOGGLED(range.HintDescriptor))
+ {
+ cl->setMode(CtrlList::DISCRETE);
+ cl->setValueType(VAL_BOOL);
+ }
+ else
+ {
+ cl->setMode(CtrlList::INTERPOLATE);
+ cl->setValueType(VAL_LINEAR);
+ }
+
+ ld->connect_port(handle, k, &controls[cip].val);
+
+ ++cip;
+ }
+ else if (LADSPA_IS_PORT_OUTPUT(pd))
+ {
+ controlsOut[cop].idx = k;
+ controls[cop].val = 0.0;
+ controls[cop].tmpVal = 0.0;
+ controls[cop].enCtrl = false;
+ controls[cop].en2Ctrl = false;
- // Set the latency to zero.
- //controls[controlPorts].val = 0.0;
- // Insert a controller for latency and the DSSI port number into the map.
- //synth->midiCtl2PortMap.insert(std::pair<int, int>(CTRL_NRPN14_OFFSET + 0x2000, controlPorts));
- // Connect the port.
- //ld->connect_port(handle, controlPorts, &controls[controlPorts].val);
-
- // Just a test. It works! We can instantiate a ladspa plugin for the synth. But it needs more work...
- //plugins.add(&synth->info, LADSPA_Descriptor_Function(NULL), ld, false);
+ #ifdef DSSI_DEBUG
+ printf("DssiSynthIF::init control output port:%d port idx:%d name:%s\n", cop, k, ld->PortNames[k]);
+ #endif
+
+ // Control outs are not handled but still must be connected to something.
+ ld->connect_port(handle, k, &controlsOut[cop].val);
+ ++cop;
+ }
+ }
+ }
+
+
+ /*
+ // Add the LADSPA controllers to the audio track controller list. p4.0.20
+ //int controller = plugin->parameters();
+ int controller = controlPorts;
+ for (int i = 0; i < controller; ++i)
+ {
+ //int id = genACnum(idx, i);
+ // Put the ID at a special block after plugins (far after).
+ int id = genACnum(MAX_PLUGINS, i);
+ const char* name = plugin->paramName(i);
+ synth->dssi->LADSPA_Plugin->PortNames[controls[i].idx]
+ float min, max;
+ plugin->range(i, &min, &max);
+ CtrlValueType t = plugin->valueType();
+ CtrlList* cl = new CtrlList(id);
+ cl->setRange(min, max);
+ cl->setName(QString(name));
+ cl->setValueType(t);
+ LADSPA_PortRangeHint range = plugin->range(i);
+ if(LADSPA_IS_HINT_TOGGLED(range.HintDescriptor))
+ cl->setMode(CtrlList::DISCRETE);
+ else
+ cl->setMode(CtrlList::INTERPOLATE);
+ cl->setCurVal(plugin->param(i));
+ addController(cl);
+ }
+ */
+
if (ld->activate)
ld->activate(handle);
@@ -1654,7 +1789,8 @@ bool DssiSynthIF::processEvent(const MidiPlayEvent& e, snd_seq_event_t* event)
//int num = ip->first;
unsigned long k = ip->second;
- unsigned long i = synth->pIdx[k];
+ ///unsigned long i = synth->pIdx[k];
+ unsigned long i = controls[k].idx;
int ctlnum = DSSI_NONE;
if(dssi->get_midi_controller_for_port)
@@ -2145,8 +2281,8 @@ void DssiSynth::incInstances(int val)
handle = 0;
dssi = NULL;
df = NULL;
- pIdx.clear();
- opIdx.clear();
+ ///pIdx.clear();
+ ///opIdx.clear();
iIdx.clear();
oIdx.clear();
rpIdx.clear();
@@ -2334,8 +2470,9 @@ void DssiSynthIF::guiHeartBeat()
{
if(synti->_guiUpdateControls[i])
{
- unsigned long k = synth->pIdx[i];
- _oscif.oscSendControl(k, controls[i].val);
+ ///unsigned long k = synth->pIdx[i];
+ ///_oscif.oscSendControl(k, controls[i].val);
+ _oscif.oscSendControl(controls[i].idx, controls[i].val);
// Reset.
synti->_guiUpdateControls[i] = false;
@@ -2376,8 +2513,10 @@ int DssiSynthIF::oscUpdate()
unsigned long ports = synth->_controlInPorts;
for(unsigned long i = 0; i < ports; ++i)
{
- unsigned long k = synth->pIdx[i];
- _oscif.oscSendControl(k, controls[i].val);
+ ///unsigned long k = synth->pIdx[i];
+ ///_oscif.oscSendControl(k, controls[i].val);
+ _oscif.oscSendControl(controls[i].idx, controls[i].val);
+
// Avoid overloading the GUI if there are lots and lots of ports.
if((i+1) % 50 == 0)
usleep(300000);
@@ -2835,8 +2974,9 @@ int DssiSynthIF::getControllerInfo(int id, const char** name, int* ctrl, int* mi
//int ctlnum = ip->first;
//int k = ip->second;
- int i = synth->pIdx[id];
+ ///int i = synth->pIdx[id];
//int i = synth->pIdx[k];
+ int i = controls[id].idx;
//ladspaDefaultValue(ld, i, &controls[id].val);
@@ -2964,7 +3104,8 @@ int DssiSynthIF::totalInChannels() const
bool DssiSynthIF::on() const { return true; } // Synth is not part of a rack plugin chain. Always on.
void DssiSynthIF::setOn(bool /*val*/) { }
int DssiSynthIF::pluginID() { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->UniqueID : 0; }
-int DssiSynthIF::id() { return 0; } // Synth is not part of a rack plugin chain. Always 0.
+//int DssiSynthIF::id() { return 0; } // Synth is not part of a rack plugin chain. Always 0.
+int DssiSynthIF::id() { return MAX_PLUGINS; } // Set for special block reserved for dssi synth. p4.0.20
QString DssiSynthIF::pluginLabel() const { return (synth && synth->dssi) ? QString(synth->dssi->LADSPA_Plugin->Label) : QString(); }
QString DssiSynthIF::name() const { return synti->name(); }
QString DssiSynthIF::lib() const { return synth ? synth->completeBaseName() : QString(); }
@@ -2980,9 +3121,9 @@ bool DssiSynthIF::readConfiguration(Xml& /*xml*/, bool /*readPreset*/) { return
int DssiSynthIF::parameters() const { return synth ? synth->_controlInPorts : 0; }
void DssiSynthIF::setParam(int i, double val) { setParameter(i, val); }
double DssiSynthIF::param(int i) const { return getParameter(i); }
-const char* DssiSynthIF::paramName(int i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortNames[i] : 0; }
+const char* DssiSynthIF::paramName(int i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortNames[controls[i].idx] : 0; }
//LADSPA_PortRangeHint DssiSynthIF::range(int i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortRangeHints[i] : 0; }
-LADSPA_PortRangeHint DssiSynthIF::range(int i) { return synth->dssi->LADSPA_Plugin->PortRangeHints[i]; }
+LADSPA_PortRangeHint DssiSynthIF::range(int i) { return synth->dssi->LADSPA_Plugin->PortRangeHints[controls[i].idx]; }
#else //DSSI_SUPPORT
diff --git a/muse2/muse/dssihost.h b/muse2/muse/dssihost.h
index a8607ce0..a98cfd87 100644
--- a/muse2/muse/dssihost.h
+++ b/muse2/muse/dssihost.h
@@ -64,8 +64,8 @@ class DssiSynth : public Synth {
const DSSI_Descriptor* dssi;
DSSI_Descriptor_Function df;
unsigned long _portCount, _inports, _outports, _controlInPorts, _controlOutPorts;
- std::vector<unsigned long> pIdx; // Control input index to port number.
- std::vector<unsigned long> opIdx; // Control output index to port number. This is sometimes a latency port and...?
+ //std::vector<unsigned long> pIdx; // Control input index to port number.
+ //std::vector<unsigned long> opIdx; // Control output index to port number. This is sometimes a latency port and...?
std::vector<unsigned long> iIdx; // Audio input index to port number.
std::vector<unsigned long> oIdx; // Audio output index to port number.
std::vector<bool> iUsedIdx; // During process, tells whether an audio input port was used by any input routes.
@@ -104,7 +104,7 @@ class DssiSynth : public Synth {
unsigned long inControls() const { return _controlInPorts; }
unsigned long outControls() const { return _controlOutPorts; }
- unsigned long inControlPortIdx(unsigned long i) { return pIdx[i]; }
+ //unsigned long inControlPortIdx(unsigned long i) { return pIdx[i]; }
};
//---------------------------------------------------------
@@ -160,10 +160,17 @@ class DssiSynthIF : public SynthIF, public PluginIBase
virtual bool initGui();
virtual void guiHeartBeat();
virtual bool guiVisible() const;
- virtual void showGui(bool v);
- virtual bool hasGui() const { return synth->_hasGui; }
- virtual void getGeometry(int*, int*, int*, int*) const {}
+ virtual void showGui(bool);
+ //virtual bool hasGui() const { return synth->_hasGui; }
+ virtual bool hasGui() const { return true; }
+ virtual bool nativeGuiVisible() const; // p4.0.20
+ virtual void showNativeGui(bool); //
+ //virtual bool hasNativeGui() const { /*return synth->_hasGui; */} //
+ virtual bool hasNativeGui() const { return !dssi_ui_filename().isEmpty(); } //
+ virtual void getGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
virtual void setGeometry(int, int, int, int) {}
+ virtual void getNativeGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
+ virtual void setNativeGeometry(int, int, int, int) {}
virtual void preProcessAlways();
diff --git a/muse2/muse/globaldefs.h b/muse2/muse/globaldefs.h
index 74c18d7d..92ccf0e0 100644
--- a/muse2/muse/globaldefs.h
+++ b/muse2/muse/globaldefs.h
@@ -21,9 +21,13 @@ enum AutomationType {
};
const int MAX_CHANNELS = 2; // max audio channels
-const int MAX_PLUGINS = 4; // plugins in mixer rack
+// Absolute max number of plugins in mixer rack (if we ever want to increase PipelineDepth).
+// Used to determine the index where special blocks (dssi ladspa controls) appear in the list of controllers.
+// The special block(s) must appear AFTER any rack plugins, so we need this variable to help us
+// leave some room in case we ever want to increase the number of rack plugins.
+const int MAX_PLUGINS = 8;
+const int PipelineDepth = 4; // plugins in mixer rack, max up to MAX_PLUGINS
-//const int MIDI_PORTS = 32; // max Number of Midi Ports
const int MIDI_PORTS = 200; // max Number of Midi Ports
#ifndef MIDI_CHANNELS
diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h
index 0c37701f..a8fb1168 100644
--- a/muse2/muse/instruments/minstrument.h
+++ b/muse2/muse/instruments/minstrument.h
@@ -111,6 +111,9 @@ class MidiInstrument {
virtual bool guiVisible() const { return false; }
virtual void showGui(bool) {}
virtual bool hasGui() const { return false; }
+ virtual bool nativeGuiVisible() const { return false; }
+ virtual void showNativeGui(bool) {}
+ virtual bool hasNativeGui() const { return false; }
virtual void writeToGui(const MidiPlayEvent&) {}
virtual void reset(int, MType);
diff --git a/muse2/muse/midiport.cpp b/muse2/muse/midiport.cpp
index 6d04cff2..7c4f73fb 100644
--- a/muse2/muse/midiport.cpp
+++ b/muse2/muse/midiport.cpp
@@ -101,6 +101,24 @@ bool MidiPort::hasGui() const
}
//---------------------------------------------------------
+// nativeGuiVisible
+//---------------------------------------------------------
+
+bool MidiPort::nativeGuiVisible() const
+ {
+ return _instrument ? _instrument->nativeGuiVisible() : false;
+ }
+
+//---------------------------------------------------------
+// hasNativeGui
+//---------------------------------------------------------
+
+bool MidiPort::hasNativeGui() const
+ {
+ return _instrument ? _instrument->hasNativeGui() : false;
+ }
+
+//---------------------------------------------------------
// setDevice
//---------------------------------------------------------
diff --git a/muse2/muse/midiport.h b/muse2/muse/midiport.h
index 46107a8d..916c7337 100644
--- a/muse2/muse/midiport.h
+++ b/muse2/muse/midiport.h
@@ -66,6 +66,8 @@ class MidiPort {
bool guiVisible() const;
bool hasGui() const;
+ bool nativeGuiVisible() const;
+ bool hasNativeGui() const;
int portno() const;
bool foundInSongFile() const { return _foundInSongFile; }
diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp
index b5ab3aee..2f1a2262 100644
--- a/muse2/muse/mixer/astrip.cpp
+++ b/muse2/muse/mixer/astrip.cpp
@@ -1262,16 +1262,18 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu
{
case Track::AUDIO_INPUT:
- id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
+ //id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); // Rem p4.0.20
case Track::WAVE:
case Track::AUDIO_GROUP:
case Track::AUDIO_SOFTSYNTH:
+ case Track::AUDIO_AUX: // p4.0.20
+ id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput);
id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput);
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
- break;
- case Track::AUDIO_AUX:
- id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput);
+ //break; // Rem p4.0.20
+ //case Track::AUDIO_AUX: //
+ //id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); //
break;
default:
break;
@@ -1290,13 +1292,14 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
break;
case Track::WAVE:
- id = addInPorts(t, chpup, id, mm, ch, 1, isOutput);
- break;
+ //id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); // Rem p4.0.20
+ //break;
case Track::AUDIO_SOFTSYNTH:
case Track::AUDIO_GROUP:
id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput);
id = addInPorts(t, chpup, id, mm, ch, 1, isOutput);
id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput);
+ id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput); // p4.0.20
id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput);
break;
default:
@@ -1344,17 +1347,19 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu
switch(t->type())
{
case Track::AUDIO_INPUT:
- id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput);
+ //id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); // Rem p4.0.20
case Track::WAVE:
case Track::AUDIO_GROUP:
case Track::AUDIO_SOFTSYNTH:
+ case Track::AUDIO_AUX: // p4.0.20
+ id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); // p4.0.20
id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput);
id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput);
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
break;
- case Track::AUDIO_AUX:
- id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput);
- break;
+ //case Track::AUDIO_AUX: // Rem p4.0.20
+ // id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput);
+ // break;
default:
break;
}
@@ -1371,13 +1376,14 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
break;
case Track::WAVE:
- id = addInPorts(t, chpup, id, mm, ch, 2, isOutput);
- break;
+ //id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); // Rem p4.0.20
+ //break;
case Track::AUDIO_SOFTSYNTH:
case Track::AUDIO_GROUP:
id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput);
id = addInPorts(t, chpup, id, mm, ch, 2, isOutput);
id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput);
+ id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput); // p4.0.20
id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput);
break;
default:
@@ -1838,12 +1844,17 @@ void AudioStrip::iRoutePressed()
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false);
break;
case Track::WAVE:
+ gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); // p4.0.20
gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
+ gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); //
+ gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); //
+ gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); //
break;
case Track::AUDIO_GROUP:
gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false);
gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false);
+ gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); // p4.0.20
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false);
break;
@@ -1975,11 +1986,12 @@ void AudioStrip::oRoutePressed()
break;
case Track::AUDIO_INPUT:
- gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
+ //gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); // Rem p4.0.20
case Track::WAVE:
case Track::AUDIO_GROUP:
case Track::AUDIO_AUX:
//case Track::AUDIO_SOFTSYNTH:
+ gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); // p4.0.20
gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
gid = addGroupPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true);
gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, true);
diff --git a/muse2/muse/mixer/rack.cpp b/muse2/muse/mixer/rack.cpp
index daebaa30..afb8ae49 100644
--- a/muse2/muse/mixer/rack.cpp
+++ b/muse2/muse/mixer/rack.cpp
@@ -26,6 +26,7 @@
#include "audio.h"
#include "icons.h"
#include "gconfig.h"
+#include "globaldefs.h"
#include "plugin.h"
#include "filedialog.h"
diff --git a/muse2/muse/osc.cpp b/muse2/muse/osc.cpp
index 8b125a6c..2b567856 100644
--- a/muse2/muse/osc.cpp
+++ b/muse2/muse/osc.cpp
@@ -105,9 +105,13 @@ static int oscDebugHandler(const char* path, const char* types, lo_arg** argv,
int oscMessageHandler(const char* path, const char* types, lo_arg** argv,
int argc, void* data, void* user_data)
+ //int argc, lo_message data, void* user_data)
{
const char* p = path;
+ // NOTE: Tried this, always returns 0 sec and 1 fractional. Shame, looks like timestamps are not used.
+ //lo_timetag lo_tt = lo_message_get_timestamp(data);
+
#ifdef OSC_DEBUG
if(argc)
{
diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp
index 7866bd39..e1abbb5e 100644
--- a/muse2/muse/plugin.cpp
+++ b/muse2/muse/plugin.cpp
@@ -38,6 +38,7 @@
#include <QHeaderView>
#include "globals.h"
+#include "globaldefs.h"
#include "gconfig.h"
#include "filedialog.h"
#include "slider.h"
@@ -578,6 +579,39 @@ void ladspaControlRange(const LADSPA_Descriptor* plugin, int i, float* min, floa
*max = 1.0;
}
+/*
+//---------------------------------------------------------
+// PluginBase
+//---------------------------------------------------------
+
+//---------------------------------------------------------
+// range
+//---------------------------------------------------------
+
+void PluginBase::range(unsigned long i, float* min, float* max) const
+ {
+ LADSPA_PortRangeHint range = plugin->PortRangeHints[i];
+ LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor;
+ if (desc & LADSPA_HINT_TOGGLED) {
+ *min = 0.0;
+ *max = 1.0;
+ return;
+ }
+ float m = 1.0;
+ if (desc & LADSPA_HINT_SAMPLE_RATE)
+ m = float(sampleRate);
+
+ if (desc & LADSPA_HINT_BOUNDED_BELOW)
+ *min = range.LowerBound * m;
+ else
+ *min = 0.0;
+ if (desc & LADSPA_HINT_BOUNDED_ABOVE)
+ *max = range.UpperBound * m;
+ else
+ *max = 1.0;
+ }
+*/
+
//---------------------------------------------------------
// Plugin
//---------------------------------------------------------
@@ -859,6 +893,7 @@ int Plugin::incReferences(int val)
void Plugin::range(unsigned long i, float* min, float* max) const
{
+ /*
LADSPA_PortRangeHint range = plugin->PortRangeHints[i];
LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor;
if (desc & LADSPA_HINT_TOGGLED) {
@@ -878,6 +913,8 @@ void Plugin::range(unsigned long i, float* min, float* max) const
*max = range.UpperBound * m;
else
*max = 1.0;
+ */
+ ladspaControlRange(plugin, i, min, max); // p4.0.20
}
//---------------------------------------------------------
@@ -1464,6 +1501,17 @@ void Pipeline::apply(int ports, unsigned long nframes, float** buffer1)
// PluginIBase
//---------------------------------------------------------
+PluginIBase::PluginIBase()
+{
+ _gui = 0;
+}
+
+PluginIBase::~PluginIBase()
+{
+ if(_gui)
+ delete _gui;
+}
+
QString PluginIBase::dssi_ui_filename() const
{
QString libr(lib());
@@ -1548,7 +1596,7 @@ void PluginI::init()
controlsOut = 0;
controlPorts = 0;
controlOutPorts = 0;
- _gui = 0;
+ //_gui = 0;
_on = true;
initControlValues = false;
_showNativeGuiPending = false;
@@ -1572,8 +1620,8 @@ PluginI::~PluginI()
deactivate();
_plugin->incReferences(-1);
}
- if (_gui)
- delete _gui;
+ //if (_gui)
+ // delete _gui;
if (controlsOut)
delete[] controlsOut;
if (controls)
@@ -2234,7 +2282,8 @@ bool PluginI::nativeGuiVisible()
// makeGui
//---------------------------------------------------------
-void PluginI::makeGui()
+//void PluginI::makeGui()
+void PluginIBase::makeGui()
{
_gui = new PluginGui(this);
}
@@ -2242,7 +2291,8 @@ void PluginI::makeGui()
//---------------------------------------------------------
// deleteGui
//---------------------------------------------------------
-void PluginI::deleteGui()
+//void PluginI::deleteGui()
+void PluginIBase::deleteGui()
{
if(_gui)
{
diff --git a/muse2/muse/plugin.h b/muse2/muse/plugin.h
index f138737c..41da1bfb 100644
--- a/muse2/muse/plugin.h
+++ b/muse2/muse/plugin.h
@@ -61,6 +61,18 @@ class PluginLoader : public QUiLoader
PluginLoader(QObject * parent = 0) : QUiLoader(parent) {}
};
+/*
+//---------------------------------------------------------
+// PluginBase
+//---------------------------------------------------------
+
+class PluginBase
+{
+ protected:
+ void range(unsigned long i, float*, float*) const;
+};
+*/
+
//---------------------------------------------------------
// Plugin
//---------------------------------------------------------
@@ -243,6 +255,7 @@ struct GuiWidgets {
};
class PluginI;
+class PluginGui;
/*
class PluginBase
@@ -282,7 +295,14 @@ class PluginBase
class PluginIBase
{
+ protected:
+ PluginGui* _gui;
+
+ void makeGui();
+
public:
+ PluginIBase();
+ ~PluginIBase();
virtual bool on() const = 0;
virtual void setOn(bool /*val*/) = 0;
virtual int pluginID() = 0;
@@ -309,6 +329,11 @@ class PluginIBase
virtual const char* paramName(int /*i*/) = 0;
virtual LADSPA_PortRangeHint range(int /*i*/) = 0;
QString dssi_ui_filename() const;
+
+ //virtual void showGui(bool) = 0; // p4.0.20
+ //virtual void showNativeGui(bool) = 0; //
+ PluginGui* gui() const { return _gui; }
+ void deleteGui();
};
//---------------------------------------------------------
@@ -381,7 +406,7 @@ class PluginI : public PluginIBase {
int controlPorts;
int controlOutPorts;
- PluginGui* _gui;
+ ///PluginGui* _gui;
bool _on;
bool initControlValues;
QString _name;
@@ -397,7 +422,7 @@ class PluginI : public PluginIBase {
bool _showNativeGuiPending;
void init();
- void makeGui();
+ ///void makeGui();
public:
PluginI();
@@ -406,8 +431,8 @@ class PluginI : public PluginIBase {
Plugin* plugin() const { return _plugin; }
bool on() const { return _on; }
void setOn(bool val) { _on = val; }
- PluginGui* gui() const { return _gui; }
- void deleteGui();
+ ///PluginGui* gui() const { return _gui; }
+ ///void deleteGui();
void setTrack(AudioTrack* t) { _track = t; }
AudioTrack* track() { return _track; }
@@ -471,19 +496,11 @@ class PluginI : public PluginIBase {
double defaultValue(unsigned int param) const;
const char* paramName(int i) { return _plugin->portName(controls[i].idx); }
LADSPA_PortDescriptor portd(int i) const { return _plugin->portd(controls[i].idx); }
- void range(int i, float* min, float* max) const {
- _plugin->range(controls[i].idx, min, max);
- }
- bool isAudioIn(int k) {
- return (_plugin->portd(k) & AUDIO_IN) == AUDIO_IN;
- }
- bool isAudioOut(int k) {
- return (_plugin->portd(k) & AUDIO_OUT) == AUDIO_OUT;
- }
+ void range(int i, float* min, float* max) const { _plugin->range(controls[i].idx, min, max); }
+ bool isAudioIn(int k) { return (_plugin->portd(k) & AUDIO_IN) == AUDIO_IN; }
+ bool isAudioOut(int k) { return (_plugin->portd(k) & AUDIO_OUT) == AUDIO_OUT; }
bool inPlaceCapable() const { return _plugin->inPlaceCapable(); }
- LADSPA_PortRangeHint range(int i) {
- return _plugin->range(controls[i].idx);
- }
+ LADSPA_PortRangeHint range(int i) { return _plugin->range(controls[i].idx); }
};
//---------------------------------------------------------
@@ -491,7 +508,7 @@ class PluginI : public PluginIBase {
// chain of connected efx inserts
//---------------------------------------------------------
-const int PipelineDepth = 4;
+//const int PipelineDepth = 4; // Moved to globaldefs.h
class Pipeline : public std::vector<PluginI*> {
float* buffer[MAX_CHANNELS];
diff --git a/muse2/muse/remote/pyapi.cpp b/muse2/muse/remote/pyapi.cpp
index 84543b18..29ea34b3 100644
--- a/muse2/muse/remote/pyapi.cpp
+++ b/muse2/muse/remote/pyapi.cpp
@@ -12,6 +12,7 @@
#include <QApplication>
#include "pyapi.h"
+#include "globaldefs.h"
#include "song.h"
#include "tempo.h"
#include "track.h"
diff --git a/muse2/muse/seqmsg.cpp b/muse2/muse/seqmsg.cpp
index d2225190..564cce42 100644
--- a/muse2/muse/seqmsg.cpp
+++ b/muse2/muse/seqmsg.cpp
@@ -726,6 +726,20 @@ void Audio::msgShowInstrumentGui(MidiInstrument* instr, bool val)
}
//---------------------------------------------------------
+// msgShowInstrumentNativeGui
+//---------------------------------------------------------
+
+void Audio::msgShowInstrumentNativeGui(MidiInstrument* instr, bool val)
+ {
+ instr->showNativeGui(val);
+ AudioMsg msg;
+ msg.id = MIDI_SHOW_INSTR_NATIVE_GUI;
+ msg.p1 = instr;
+ msg.a = val;
+ sendMessage(&msg, false);
+ }
+
+//---------------------------------------------------------
// msgAddTrack
//---------------------------------------------------------
diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp
index cf972b8c..dbb193d9 100644
--- a/muse2/muse/song.cpp
+++ b/muse2/muse/song.cpp
@@ -3431,6 +3431,8 @@ void Song::removeTrack1(Track* track)
SynthI* si = (SynthI*)track;
if(si->hasGui())
si->showGui(false);
+ if(si->hasNativeGui()) // p4.0.20
+ si->showNativeGui(false);
}
break;
default:
diff --git a/muse2/muse/synth.cpp b/muse2/muse/synth.cpp
index 13e3baa3..6212340f 100644
--- a/muse2/muse/synth.cpp
+++ b/muse2/muse/synth.cpp
@@ -61,23 +61,23 @@ const char* MessSynth::version() const
}
*/
-bool MessSynthIF::guiVisible() const
+bool MessSynthIF::nativeGuiVisible() const
{
- return _mess ? _mess->guiVisible() : false;
+ return _mess ? _mess->nativeGuiVisible() : false;
}
-void MessSynthIF::showGui(bool v)
+void MessSynthIF::showNativeGui(bool v)
{
- if (v == guiVisible())
+ if (v == nativeGuiVisible())
return;
if (_mess)
- _mess->showGui(v);
+ _mess->showNativeGui(v);
}
-bool MessSynthIF::hasGui() const
+bool MessSynthIF::hasNativeGui() const
{
if (_mess)
- return _mess->hasGui();
+ return _mess->hasNativeGui();
return false;
}
@@ -107,6 +107,18 @@ void MessSynthIF::setGeometry(int x, int y, int w, int h)
_mess->setGeometry(x, y, w, h);
}
+void MessSynthIF::getNativeGeometry(int* x, int* y, int* w, int* h) const
+ {
+ if (_mess)
+ _mess->getNativeGeometry(x, y, w, h);
+ }
+
+void MessSynthIF::setNativeGeometry(int x, int y, int w, int h)
+ {
+ if (_mess)
+ _mess->setNativeGeometry(x, y, w, h);
+ }
+
//---------------------------------------------------------
// findSynth
// search for synthesizer base class
@@ -658,6 +670,17 @@ void SynthI::write(int level, Xml& xml) const
getGeometry(&x, &y, &w, &h);
if (h || w)
xml.qrectTag(level, "geometry", QRect(x, y, w, h));
+ //xml.geometryTag(level, "geometry", _gui);
+ }
+
+ if (hasNativeGui()) {
+ xml.intTag(level, "nativeGuiVisible", nativeGuiVisible());
+ int x, y, w, h;
+ w = 0;
+ h = 0;
+ getNativeGeometry(&x, &y, &w, &h);
+ if (h || w)
+ xml.qrectTag(level, "nativeGeometry", QRect(x, y, w, h));
}
_stringParamMap.write(level, xml, "stringParam");
@@ -745,7 +768,8 @@ void SynthI::read(Xml& xml)
int port = -1;
bool startgui = false;
- QRect r;
+ bool startngui = false;
+ QRect r, nr;
for (;;) {
Xml::Token token = xml.parse();
@@ -763,6 +787,8 @@ void SynthI::read(Xml& xml)
port = xml.parseInt();
else if (tag == "guiVisible")
startgui = xml.parseInt();
+ else if (tag == "nativeGuiVisible")
+ startngui = xml.parseInt();
else if (tag == "midistate")
readMidiState(xml);
else if (tag == "param") {
@@ -775,6 +801,8 @@ void SynthI::read(Xml& xml)
readProgram(xml, tag);
else if (tag == "geometry")
r = readGeometry(xml, tag);
+ else if (tag == "nativeGeometry")
+ nr = readGeometry(xml, tag);
else if (AudioTrack::readProperties(xml, tag))
xml.unknown("softSynth");
break;
@@ -795,11 +823,14 @@ void SynthI::read(Xml& xml)
// No, initializing OSC without actually showing the gui doesn't work, at least for
// dssi-vst plugins - without showing the gui they exit after ten seconds.
//initGui();
- showGui(startgui);
- setGeometry(r.x(), r.y(), r.width(), r.height());
+ showNativeGui(startngui);
+ setNativeGeometry(nr.x(), nr.y(), nr.width(), nr.height());
mapRackPluginsToControllers();
+ showGui(startgui);
+ setGeometry(r.x(), r.y(), r.width(), r.height());
+
// Now that the track has been added to the lists in insertTrack2(), if it's a dssi synth
// OSC can find the track and its plugins, and start their native guis if required...
showPendingPluginNativeGuis();
diff --git a/muse2/muse/synth.h b/muse2/muse/synth.h
index f7d5d193..100d7bd6 100644
--- a/muse2/muse/synth.h
+++ b/muse2/muse/synth.h
@@ -120,8 +120,19 @@ class SynthIF {
virtual bool guiVisible() const = 0;
virtual void showGui(bool v) = 0;
virtual bool hasGui() const = 0;
+ //virtual bool guiVisible() const { return false; }
+ //virtual void showGui(bool v) { };
+ //virtual bool hasGui() const { return false; }
+ virtual bool nativeGuiVisible() const = 0;
+ virtual void showNativeGui(bool v) = 0;
+ virtual bool hasNativeGui() const = 0;
+ //virtual bool nativeGuiVisible() const { return false; }
+ //virtual void showNativeGui(bool v) { };
+ //virtual bool hasNativeGui() const { return false; }
virtual void getGeometry(int*, int*, int*, int*) const = 0;
virtual void setGeometry(int, int, int, int) = 0;
+ virtual void getNativeGeometry(int*, int*, int*, int*) const = 0;
+ virtual void setNativeGeometry(int, int, int, int) = 0;
virtual void preProcessAlways() = 0;
virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer) = 0;
virtual bool putEvent(const MidiPlayEvent& ev) = 0;
@@ -233,12 +244,21 @@ class SynthI : public AudioTrack, public MidiDevice,
bool guiVisible() const { return _sif->guiVisible(); }
void showGui(bool v) { _sif->showGui(v); }
bool hasGui() const { return _sif->hasGui(); }
+ bool nativeGuiVisible() const { return _sif->nativeGuiVisible(); }
+ void showNativeGui(bool v) { _sif->showNativeGui(v); }
+ bool hasNativeGui() const { return _sif->hasNativeGui(); }
void getGeometry(int* x, int* y, int* w, int* h) const {
_sif->getGeometry(x, y, w, h);
}
void setGeometry(int x, int y, int w, int h) {
_sif->setGeometry(x, y, w, h);
}
+ void getNativeGeometry(int* x, int* y, int* w, int* h) const {
+ _sif->getNativeGeometry(x, y, w, h);
+ }
+ void setNativeGeometry(int x, int y, int w, int h) {
+ _sif->setNativeGeometry(x, y, w, h);
+ }
bool putEvent(const MidiPlayEvent& ev);
@@ -267,13 +287,18 @@ class MessSynthIF : public SynthIF {
MessSynthIF(SynthI* s) : SynthIF(s) { _mess = 0; }
virtual ~MessSynthIF() { }
- virtual bool initGui() { return true; };
- virtual void guiHeartBeat() { }
- virtual bool guiVisible() const;
- virtual void showGui(bool v);
- virtual bool hasGui() const;
+ virtual bool initGui() { return true; }
+ virtual void guiHeartBeat() { }
+ virtual bool guiVisible() const { return false; }
+ virtual void showGui(bool) { };
+ virtual bool hasGui() const { return false; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool v);
+ virtual bool hasNativeGui() const;
virtual void getGeometry(int*, int*, int*, int*) const;
virtual void setGeometry(int, int, int, int);
+ virtual void getNativeGeometry(int*, int*, int*, int*) const;
+ virtual void setNativeGeometry(int, int, int, int);
virtual void preProcessAlways();
virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer);
virtual bool putEvent(const MidiPlayEvent& ev);
diff --git a/muse2/muse/ticksynth.cpp b/muse2/muse/ticksynth.cpp
index 69f3bf2d..c5d3a1e7 100644
--- a/muse2/muse/ticksynth.cpp
+++ b/muse2/muse/ticksynth.cpp
@@ -68,8 +68,14 @@ class MetronomeSynthIF : public SynthIF
virtual bool guiVisible() const { return false; }
virtual void showGui(bool) {}
virtual bool hasGui() const { return false; }
- virtual void getGeometry(int*, int*, int*, int*) const {}
+ virtual bool nativeGuiVisible() const { return false; }
+ virtual void showNativeGui(bool) { };
+ virtual bool hasNativeGui() const { return false; }
+
+ virtual void getGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
virtual void setGeometry(int, int, int, int) {}
+ virtual void getNativeGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
+ virtual void setNativeGeometry(int, int, int, int) {}
virtual void preProcessAlways() { };
virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer);
virtual bool putEvent(const MidiPlayEvent& ev);
diff --git a/muse2/muse/vst.cpp b/muse2/muse/vst.cpp
index b34b71ca..7bcae7f6 100644
--- a/muse2/muse/vst.cpp
+++ b/muse2/muse/vst.cpp
@@ -361,7 +361,7 @@ void initVST()
// guiVisible
//---------------------------------------------------------
-bool VstSynthIF::guiVisible() const
+bool VstSynthIF::nativeGuiVisible() const
{
return _guiVisible;
}
@@ -371,9 +371,9 @@ bool VstSynthIF::guiVisible() const
// showGui
//---------------------------------------------------------
-void VstSynthIF::showGui(bool v)
+void VstSynthIF::showNativeGui(bool v)
{
- if (v == guiVisible())
+ if (v == nativeGuiVisible())
return;
if (v)
fst_run_editor(_fst);
@@ -395,7 +395,7 @@ MidiPlayEvent VstSynthIF::receiveEvent()
// hasGui
//---------------------------------------------------------
-bool VstSynthIF::hasGui() const
+bool VstSynthIF::hasNativeGui() const
{
return _fst->plugin->flags & effFlagsHasEditor;
}
diff --git a/muse2/muse/vst.h b/muse2/muse/vst.h
index 93012093..d41502e5 100644
--- a/muse2/muse/vst.h
+++ b/muse2/muse/vst.h
@@ -54,11 +54,16 @@ class VstSynthIF : public SynthIF
virtual bool initGui() { return true; };
virtual void guiHeartBeat() { }
- virtual bool guiVisible() const;
- virtual void showGui(bool v);
- virtual bool hasGui() const;
- virtual void getGeometry(int*, int*, int*, int*) const {}
+ virtual bool guiVisible() const { return false; }
+ virtual void showGui(bool) { }
+ virtual bool hasGui() const { return false; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool v);
+ virtual bool hasNativeGui() const;
+ virtual void getGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
virtual void setGeometry(int, int, int, int) {}
+ virtual void getNativeGeometry(int*x, int*y, int*w, int*h) const { *x=0;*y=0;*w=0;*h=0; }
+ virtual void setNativeGeometry(int, int, int, int) {}
virtual void preProcessAlways() { };
virtual iMPEvent getData(MidiPort*, MPEventList*, iMPEvent, unsigned pos, int ports, unsigned n, float** buffer) ;
virtual bool putEvent(const MidiPlayEvent& ev);
diff --git a/muse2/muse/widgets/genset.cpp b/muse2/muse/widgets/genset.cpp
index 68405f9b..4a0550bb 100644
--- a/muse2/muse/widgets/genset.cpp
+++ b/muse2/muse/widgets/genset.cpp
@@ -83,7 +83,15 @@ GlobalSettingsConfig::GlobalSettingsConfig(QWidget* parent)
//DummyAudioDevice* dad = dynamic_cast<DummyAudioDevice*>(audioDevice);
//dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---");
- dummyAudioRealRate->setText(QString().setNum(sampleRate));
+ //dummyAudioRealRate->setText(QString().setNum(sampleRate)); // Not used any more. p4.0.20
+ // Just a record of what the gensetbase.ui file contained for dummyAudioRate whats this:
+ /* <property name="whatsThis">
+ <string>Actual rate used depends on limitations of
+ timer used. If a high rate timer is available,
+ short periods can be used with high sample rates.
+Period affects midi playback resolution.
+Shorter periods are desirable.</string>
+ </property> */
startSongEntry->setText(config.startSong);
startSongGroup->button(config.startMode)->setChecked(true);
@@ -188,7 +196,7 @@ void GlobalSettingsConfig::updateSettings()
//DummyAudioDevice* dad = dynamic_cast<DummyAudioDevice*>(audioDevice);
//dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---");
- dummyAudioRealRate->setText(QString().setNum(sampleRate));
+ //dummyAudioRealRate->setText(QString().setNum(sampleRate)); // Not used any more. p4.0.20
startSongEntry->setText(config.startSong);
startSongGroup->button(config.startMode)->setChecked(true);
diff --git a/muse2/muse/widgets/gensetbase.ui b/muse2/muse/widgets/gensetbase.ui
index cdbaea2c..e452de8b 100644
--- a/muse2/muse/widgets/gensetbase.ui
+++ b/muse2/muse/widgets/gensetbase.ui
@@ -23,7 +23,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
- <number>2</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="TabPage">
<attribute name="title">
@@ -774,7 +774,7 @@
<item row="0" column="0">
<widget class="QLabel" name="dummyAudioRateLabel">
<property name="text">
- <string>Preferred sample rate</string>
+ <string>Sample rate</string>
</property>
<property name="wordWrap">
<bool>false</bool>
@@ -783,13 +783,6 @@
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="dummyAudioRate">
- <property name="whatsThis">
- <string>Actual rate used depends on limitations of
- timer used. If a high rate timer is available,
- short periods can be used with high sample rates.
-Period affects midi playback resolution.
-Shorter periods are desirable.</string>
- </property>
<property name="suffix">
<string>Hz</string>
</property>
@@ -808,26 +801,6 @@ Shorter periods are desirable.</string>
</widget>
</item>
<item row="1" column="0">
- <widget class="QLabel" name="dummyAudioRealRateLabel">
- <property name="text">
- <string>Actual rate used now (dummy or not):</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="dummyAudioRealRate">
- <property name="text">
- <string>---</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
<widget class="QLabel" name="dummyAudioSizeLabel">
<property name="text">
<string>Period size (Frames per period):</string>
@@ -837,8 +810,11 @@ Shorter periods are desirable.</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="1" column="1">
<widget class="QComboBox" name="dummyAudioSize">
+ <property name="toolTip">
+ <string>Shorter periods give better midi playback resolution.</string>
+ </property>
<item>
<property name="text">
<string>16</string>
diff --git a/muse2/synti/deicsonze/deicsonze.cpp b/muse2/synti/deicsonze/deicsonze.cpp
index 78869cf6..62abed5d 100644
--- a/muse2/synti/deicsonze/deicsonze.cpp
+++ b/muse2/synti/deicsonze/deicsonze.cpp
@@ -263,7 +263,7 @@ float* DeicsOnze::getSinusWaveTable() {
//---------------------------------------------------------
// guiVisible
//---------------------------------------------------------
-bool DeicsOnze::guiVisible() const
+bool DeicsOnze::nativeGuiVisible() const
{
return _gui->isVisible();
}
@@ -271,16 +271,16 @@ bool DeicsOnze::guiVisible() const
//---------------------------------------------------------
// showGui
//---------------------------------------------------------
-void DeicsOnze::showGui(bool val)
+void DeicsOnze::showNativeGui(bool val)
{
_gui->setVisible(val);
}
//---------------------------------------------------------
-// getGeometry
+// getNativeGeometry
//---------------------------------------------------------
-void DeicsOnze::getGeometry(int* x, int* y, int* w, int* h) const {
+void DeicsOnze::getNativeGeometry(int* x, int* y, int* w, int* h) const {
QPoint pos(_gui->pos());
QSize size(_gui->size());
*x = pos.x();
@@ -299,10 +299,10 @@ void DeicsOnze::setSampleRate(int sr) {
}
//---------------------------------------------------------
-// setGeometry
+// setNativeGeometry
//---------------------------------------------------------
-void DeicsOnze::setGeometry(int x, int y, int w, int h) {
+void DeicsOnze::setNativeGeometry(int x, int y, int w, int h) {
_gui->resize(QSize(w, h));
_gui->move(QPoint(x, y));
}
diff --git a/muse2/synti/deicsonze/deicsonze.h b/muse2/synti/deicsonze/deicsonze.h
index 94da0865..dc7c533d 100644
--- a/muse2/synti/deicsonze/deicsonze.h
+++ b/muse2/synti/deicsonze/deicsonze.h
@@ -590,11 +590,14 @@ class DeicsOnze : public Mess {
virtual void process(float** buffer, int offset, int n);
// GUI interface routines
- virtual bool hasGui() const { return true; }
- virtual bool guiVisible() const;
- virtual void showGui(bool);
- virtual void getGeometry(int* x, int* y, int* w, int* h) const;
- virtual void setGeometry(int, int, int, int);
+ //virtual bool hasGui() const { return true; }
+ //virtual bool guiVisible() const;
+ //virtual void showGui(bool);
+ virtual bool hasNativeGui() const { return true; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool);
+ virtual void getNativeGeometry(int* x, int* y, int* w, int* h) const;
+ virtual void setNativeGeometry(int, int, int, int);
DeicsOnze();
~DeicsOnze();
diff --git a/muse2/synti/fluid/fluid.cpp b/muse2/synti/fluid/fluid.cpp
index d1802354..ad3d06a6 100644
--- a/muse2/synti/fluid/fluid.cpp
+++ b/muse2/synti/fluid/fluid.cpp
@@ -272,7 +272,7 @@ void ISynth::allNotesOff()
// guiVisible
//---------------------------------------------------------
-bool ISynth::guiVisible() const
+bool ISynth::nativeGuiVisible() const
{
return gui->isVisible();
}
@@ -281,7 +281,7 @@ bool ISynth::guiVisible() const
// showGui
//---------------------------------------------------------
-void ISynth::showGui(bool flag)
+void ISynth::showNativeGui(bool flag)
{
gui->setVisible(flag);
}
diff --git a/muse2/synti/fluid/fluid.h b/muse2/synti/fluid/fluid.h
index c1669846..e80f1463 100644
--- a/muse2/synti/fluid/fluid.h
+++ b/muse2/synti/fluid/fluid.h
@@ -64,9 +64,12 @@ class ISynth : public Mess {
virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const;
virtual void getInitData(int*, const unsigned char**);
- virtual bool guiVisible() const;
- virtual void showGui(bool);
- virtual bool hasGui() const { return true; }
+ //virtual bool guiVisible() const;
+ //virtual void showGui(bool);
+ //virtual bool hasGui() const { return true; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool);
+ virtual bool hasNativeGui() const { return true; }
public:
ISynth();
diff --git a/muse2/synti/fluidsynth/fluidsynti.cpp b/muse2/synti/fluidsynth/fluidsynti.cpp
index 327cde39..aadc92ef 100644
--- a/muse2/synti/fluidsynth/fluidsynti.cpp
+++ b/muse2/synti/fluidsynth/fluidsynti.cpp
@@ -723,20 +723,20 @@ void FluidSynth::dumpInfo()
}
//---------------------------------------------------------
-// guiVisible
+// nativeGuiVisible
//---------------------------------------------------------
-bool FluidSynth::guiVisible() const
+bool FluidSynth::nativeGuiVisible() const
{
return gui->isVisible();
}
//---------------------------------------------------------
-// showGui
+// showNativeGui
//---------------------------------------------------------
-void FluidSynth::showGui(bool val)
+void FluidSynth::showNativeGui(bool val)
{
gui->setVisible(val);
}
diff --git a/muse2/synti/fluidsynth/fluidsynti.h b/muse2/synti/fluidsynth/fluidsynti.h
index 0816475c..a371de9e 100644
--- a/muse2/synti/fluidsynth/fluidsynti.h
+++ b/muse2/synti/fluidsynth/fluidsynti.h
@@ -115,9 +115,12 @@ public:
virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;
virtual bool processEvent(const MidiPlayEvent&);
- virtual bool hasGui() const { return true; }
- virtual bool guiVisible() const;
- virtual void showGui(bool val);
+ //virtual bool hasGui() const { return true; }
+ //virtual bool guiVisible() const;
+ //virtual void showGui(bool val);
+ virtual bool hasNativeGui() const { return true; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool val);
void sendError(const char*);
void sendSoundFontData();
diff --git a/muse2/synti/libsynti/mess.cpp b/muse2/synti/libsynti/mess.cpp
index 8c23d8ea..aa771056 100644
--- a/muse2/synti/libsynti/mess.cpp
+++ b/muse2/synti/libsynti/mess.cpp
@@ -53,10 +53,23 @@ Mess::~Mess()
void Mess::getGeometry(int* x, int* y, int* w, int* h) const
{
- x = 0;
- y = 0;
- w = 0;
- h = 0;
+ *x = 0;
+ *y = 0;
+ *w = 0;
+ *h = 0;
+ }
+
+//---------------------------------------------------------
+// getNativeGeometry
+// dummy
+//---------------------------------------------------------
+
+void Mess::getNativeGeometry(int* x, int* y, int* w, int* h) const
+ {
+ *x = 0;
+ *y = 0;
+ *w = 0;
+ *h = 0;
}
//---------------------------------------------------------
diff --git a/muse2/synti/libsynti/mess.h b/muse2/synti/libsynti/mess.h
index ea4f425f..bf9ad0de 100644
--- a/muse2/synti/libsynti/mess.h
+++ b/muse2/synti/libsynti/mess.h
@@ -78,8 +78,13 @@ class Mess {
virtual bool hasGui() const { return false; }
virtual bool guiVisible() const { return false; }
virtual void showGui(bool) {}
+ virtual bool hasNativeGui() const { return false; }
+ virtual bool nativeGuiVisible() const { return false; }
+ virtual void showNativeGui(bool) {}
virtual void getGeometry(int* x, int* y, int* w, int* h) const;
virtual void setGeometry(int, int, int, int) {}
+ virtual void getNativeGeometry(int* x, int* y, int* w, int* h) const;
+ virtual void setNativeGeometry(int, int, int, int) {}
};
//---------------------------------------------------------
diff --git a/muse2/synti/organ/organ.cpp b/muse2/synti/organ/organ.cpp
index 1aa87742..56fb4db1 100644
--- a/muse2/synti/organ/organ.cpp
+++ b/muse2/synti/organ/organ.cpp
@@ -636,28 +636,28 @@ int Organ::getControllerInfo(int id, const char** name, int* controller,
}
//---------------------------------------------------------
-// guiVisible
+// nativeGuiVisible
//---------------------------------------------------------
-bool Organ::guiVisible() const
+bool Organ::nativeGuiVisible() const
{
return gui->isVisible();
}
//---------------------------------------------------------
-// showGui
+// showNativeGui
//---------------------------------------------------------
-void Organ::showGui(bool val)
+void Organ::showNativeGui(bool val)
{
gui->setVisible(val);
}
//---------------------------------------------------------
-// getGeometry
+// getNativeGeometry
//---------------------------------------------------------
-void Organ::getGeometry(int* x, int* y, int* w, int* h) const
+void Organ::getNativeGeometry(int* x, int* y, int* w, int* h) const
{
QPoint pos(gui->pos());
QSize size(gui->size());
@@ -668,10 +668,10 @@ void Organ::getGeometry(int* x, int* y, int* w, int* h) const
}
//---------------------------------------------------------
-// setGeometry
+// setNativeGeometry
//---------------------------------------------------------
-void Organ::setGeometry(int x, int y, int w, int h)
+void Organ::setNativeGeometry(int x, int y, int w, int h)
{
gui->resize(QSize(w, h));
gui->move(QPoint(x, y));
diff --git a/muse2/synti/organ/organ.h b/muse2/synti/organ/organ.h
index 308646e1..60fee98a 100644
--- a/muse2/synti/organ/organ.h
+++ b/muse2/synti/organ/organ.h
@@ -182,11 +182,14 @@ class Organ : public Mess {
virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;
virtual void getInitData(int*, const unsigned char**) const;
- virtual bool guiVisible() const;
- virtual void showGui(bool);
- virtual bool hasGui() const { return true; }
- virtual void getGeometry(int* x, int* y, int* w, int* h) const;
- virtual void setGeometry(int x, int y, int w, int h);
+ //virtual bool guiVisible() const;
+ //virtual void showGui(bool);
+ //virtual bool hasGui() const { return true; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool);
+ virtual bool hasNativeGui() const { return true; }
+ virtual void getNativeGeometry(int* x, int* y, int* w, int* h) const;
+ virtual void setNativeGeometry(int x, int y, int w, int h);
virtual bool sysex(int, const unsigned char*);
static SynthCtrl synthCtrl[];
Organ(int sampleRate);
diff --git a/muse2/synti/s1/s1.cpp b/muse2/synti/s1/s1.cpp
index 0dca2656..c44676ce 100644
--- a/muse2/synti/s1/s1.cpp
+++ b/muse2/synti/s1/s1.cpp
@@ -42,9 +42,12 @@ class S1 : public MessMono {
virtual void note(int channel, int pitch, int velo);
//virtual void processMessages();
virtual void process(float** buffer, int offset, int n);
- virtual bool hasGui() const { return true; }
- virtual bool guiVisible() const { return _showGui; }
- virtual void showGui(bool);
+ //virtual bool hasGui() const { return true; }
+ //virtual bool guiVisible() const { return _showGui; }
+ //virtual void showGui(bool);
+ virtual bool hasNativeGui() const { return true; }
+ virtual bool nativeGuiVisible() const { return _showGui; }
+ virtual void showNativeGui(bool);
virtual bool setController(int channel, int ctrl, int val);
virtual int getControllerInfo(int id, const char** name, int* ctrl, int* min, int* max, int* initval) const;
@@ -76,7 +79,7 @@ S1::S1() : MessMono()
param = 0;
_showGui=false;
- showGui(true);
+ showNativeGui(true);
}
//---------------------------------------------------------
@@ -165,7 +168,7 @@ void S1::process(float** buffer, int offset, int n)
//---------------------------------------------------------
-void S1::showGui(bool show)
+void S1::showNativeGui(bool show)
{
if (show)
QMessageBox::information( NULL, "S1",
diff --git a/muse2/synti/simpledrums/simpledrums.cpp b/muse2/synti/simpledrums/simpledrums.cpp
index 43f9ccee..22f83bd4 100644
--- a/muse2/synti/simpledrums/simpledrums.cpp
+++ b/muse2/synti/simpledrums/simpledrums.cpp
@@ -237,14 +237,14 @@ SimpleSynth::~SimpleSynth()
}
//---------------------------------------------------------
-// guiVisible
+// nativeGuiVisible
/*!
- \fn SimpleSynth::guiVisible
+ \fn SimpleSynth::nativeGuiVisible
\brief Tells if the gui is hidden or shown
\return true/false if gui is shown/hidden
*/
//---------------------------------------------------------
-bool SimpleSynth::guiVisible() const
+bool SimpleSynth::nativeGuiVisible() const
{
SS_TRACE_IN
bool v = gui->isVisible();
@@ -253,14 +253,14 @@ bool SimpleSynth::guiVisible() const
}
//---------------------------------------------------------
-// hasGui
+// hasNativeGui
/*!
- \fn SimpleSynth::hasGui
+ \fn SimpleSynth::hasNativeGui
\brief Tells if the synth has a gui or not
\return true if synth has gui, false it synth has no gui
*/
//---------------------------------------------------------
-bool SimpleSynth::hasGui() const
+bool SimpleSynth::hasNativeGui() const
{
SS_TRACE_IN
SS_TRACE_OUT
@@ -844,14 +844,14 @@ void SimpleSynth::process(float** out, int offset, int len)
}
//---------------------------------------------------------
-// showGui
+// showNativeGui
/*!
- \fn SimpleSynth::showGui
+ \fn SimpleSynth::showNativeGui
\brief Displays or hides the gui window
\param val true or false = gui shown or hidden
*/
//---------------------------------------------------------
-void SimpleSynth::showGui(bool val)
+void SimpleSynth::showNativeGui(bool val)
{
SS_TRACE_IN
gui->setVisible(val);
diff --git a/muse2/synti/simpledrums/simpledrums.h b/muse2/synti/simpledrums/simpledrums.h
index 47a71ca6..7f006d73 100644
--- a/muse2/synti/simpledrums/simpledrums.h
+++ b/muse2/synti/simpledrums/simpledrums.h
@@ -117,8 +117,10 @@ class SimpleSynth : public Mess
virtual ~SimpleSynth();
- virtual bool guiVisible() const;
- virtual bool hasGui() const;
+ //virtual bool guiVisible() const;
+ //virtual bool hasGui() const;
+ virtual bool nativeGuiVisible() const;
+ virtual bool hasNativeGui() const;
virtual bool playNote(int arg1, int arg2, int arg3);
virtual bool processEvent(const MidiPlayEvent& arg1);
virtual bool setController(int arg1, int arg2, int arg3);
@@ -128,7 +130,8 @@ class SimpleSynth : public Mess
virtual int getControllerInfo(int arg1, const char** arg2, int* arg3, int* arg4, int* arg5, int* arg6) const;
virtual void processMessages();
virtual void process(float** data, int offset, int len);
- virtual void showGui(bool arg1);
+ //virtual void showGui(bool arg1);
+ virtual void showNativeGui(bool arg1);
virtual void getInitData(int*, const unsigned char**) const;
bool init(const char* name);
void guiSendSampleLoaded(bool success, int ch, const char* filename);
diff --git a/muse2/synti/simpledrums2/simpledrums.cpp b/muse2/synti/simpledrums2/simpledrums.cpp
index ecd03d35..f14a0627 100644
--- a/muse2/synti/simpledrums2/simpledrums.cpp
+++ b/muse2/synti/simpledrums2/simpledrums.cpp
@@ -237,14 +237,14 @@ SimpleSynth::~SimpleSynth()
}
//---------------------------------------------------------
-// guiVisible
+// nativeGuiVisible
/*!
- \fn SimpleSynth::guiVisible
+ \fn SimpleSynth::nativeGuiVisible
\brief Tells if the gui is hidden or shown
\return true/false if gui is shown/hidden
*/
//---------------------------------------------------------
-bool SimpleSynth::guiVisible() const
+bool SimpleSynth::nativeGuiVisible() const
{
SS_TRACE_IN
bool v = gui->isVisible();
@@ -253,14 +253,14 @@ bool SimpleSynth::guiVisible() const
}
//---------------------------------------------------------
-// hasGui
+// hasNativeGui
/*!
- \fn SimpleSynth::hasGui
+ \fn SimpleSynth::hasNativeGui
\brief Tells if the synth has a gui or not
\return true if synth has gui, false it synth has no gui
*/
//---------------------------------------------------------
-bool SimpleSynth::hasGui() const
+bool SimpleSynth::hasNativeGui() const
{
SS_TRACE_IN
SS_TRACE_OUT
@@ -808,14 +808,14 @@ void SimpleSynth::process(float** out, int offset, int len)
}
//---------------------------------------------------------
-// showGui
+// showNativeGui
/*!
- \fn SimpleSynth::showGui
+ \fn SimpleSynth::showNativeGui
\brief Displays or hides the gui window
\param val true or false = gui shown or hidden
*/
//---------------------------------------------------------
-void SimpleSynth::showGui(bool val)
+void SimpleSynth::showNativeGui(bool val)
{
SS_TRACE_IN
gui->setVisible(val);
diff --git a/muse2/synti/simpledrums2/simpledrums.h b/muse2/synti/simpledrums2/simpledrums.h
index 7aab4ed3..58a5945e 100644
--- a/muse2/synti/simpledrums2/simpledrums.h
+++ b/muse2/synti/simpledrums2/simpledrums.h
@@ -114,8 +114,10 @@ class SimpleSynth : public Mess
virtual ~SimpleSynth();
- virtual bool guiVisible() const;
- virtual bool hasGui() const;
+ //virtual bool guiVisible() const;
+ //virtual bool hasGui() const;
+ virtual bool nativeGuiVisible() const;
+ virtual bool hasNativeGui() const;
virtual bool playNote(int arg1, int arg2, int arg3);
virtual bool processEvent(const MidiPlayEvent& arg1);
virtual bool setController(int arg1, int arg2, int arg3);
@@ -124,7 +126,8 @@ class SimpleSynth : public Mess
virtual const MidiPatch* getPatchInfo(int arg1, const MidiPatch* arg2) const;
virtual int getControllerInfo(int arg1, const char** arg2, int* arg3, int* arg4, int* arg5);
virtual void process(float** data, int offset, int len);
- virtual void showGui(bool arg1);
+ //virtual void showGui(bool arg1);
+ virtual void showNativeGui(bool arg1);
virtual void getInitData(int*, const unsigned char**);
bool init(const char* name);
void guiSendSampleLoaded(bool success, int ch, const char* filename);
diff --git a/muse2/synti/vam/vam.cpp b/muse2/synti/vam/vam.cpp
index 6d9d181c..fd71d9ea 100644
--- a/muse2/synti/vam/vam.cpp
+++ b/muse2/synti/vam/vam.cpp
@@ -193,11 +193,14 @@ class VAM : public MessMono {
public:
virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;
virtual void getInitData(int* n, const unsigned char**p) const;
- virtual bool guiVisible() const;
- virtual void showGui(bool);
- virtual bool hasGui() const { return true; }
- virtual void getGeometry(int* x, int* y, int* w, int* h) const;
- virtual void setGeometry(int x, int y, int w, int h);
+ //virtual bool guiVisible() const;
+ //virtual void showGui(bool);
+ //virtual bool hasGui() const { return true; }
+ virtual bool nativeGuiVisible() const;
+ virtual void showNativeGui(bool);
+ virtual bool hasNativeGui() const { return true; }
+ virtual void getNativeGeometry(int* x, int* y, int* w, int* h) const;
+ virtual void setNativeGeometry(int x, int y, int w, int h);
virtual void processMessages();
virtual void process(float**, int, int);
virtual void note(int channel, int pitch, int velo);
@@ -979,28 +982,28 @@ bool VAM::sysex(int n, const unsigned char* data)
}
//---------------------------------------------------------
-// guiVisible
+// nativeGuiVisible
//---------------------------------------------------------
-bool VAM::guiVisible() const
+bool VAM::nativeGuiVisible() const
{
return gui->isVisible();
}
//---------------------------------------------------------
-// showGui
+// showNativeGui
//---------------------------------------------------------
-void VAM::showGui(bool val)
+void VAM::showNativeGui(bool val)
{
gui->setVisible(val);
}
//---------------------------------------------------------
-// getGeometry
+// getNativeGeometry
//---------------------------------------------------------
-void VAM::getGeometry(int* x, int* y, int* w, int* h) const
+void VAM::getNativeGeometry(int* x, int* y, int* w, int* h) const
{
QPoint pos(gui->pos());
QSize size(gui->size());
@@ -1011,10 +1014,10 @@ void VAM::getGeometry(int* x, int* y, int* w, int* h) const
}
//---------------------------------------------------------
-// setGeometry
+// setNativeGeometry
//---------------------------------------------------------
-void VAM::setGeometry(int x, int y, int w, int h)
+void VAM::setNativeGeometry(int x, int y, int w, int h)
{
gui->resize(QSize(w, h));
gui->move(QPoint(x, y));