summaryrefslogtreecommitdiff
path: root/muse2/muse/arranger
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2010-12-24 01:08:57 +0000
committerTim E. Real <termtech@rogers.com>2010-12-24 01:08:57 +0000
commit877ccd787443eb6a944c98487583f242add5a944 (patch)
treec7bd278a684017698a1a2f14e6f5ca743f30f8fa /muse2/muse/arranger
parent31c7e7e3594b80c880f905a8bd2948e2bb75c7d8 (diff)
MidiTrackInfo is now self-contained.
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r--muse2/muse/arranger/CMakeLists.txt1
-rw-r--r--muse2/muse/arranger/arranger.cpp224
-rw-r--r--muse2/muse/arranger/arranger.h52
-rw-r--r--muse2/muse/arranger/pcanvas.cpp2
-rw-r--r--muse2/muse/arranger/trackinfo.cpp1599
5 files changed, 113 insertions, 1765 deletions
diff --git a/muse2/muse/arranger/CMakeLists.txt b/muse2/muse/arranger/CMakeLists.txt
index bb425339..21a06698 100644
--- a/muse2/muse/arranger/CMakeLists.txt
+++ b/muse2/muse/arranger/CMakeLists.txt
@@ -36,7 +36,6 @@ file (GLOB arranger_source_files
arranger.cpp
pcanvas.cpp
tlist.cpp
- trackinfo.cpp
)
#
diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp
index 2173e6c7..d2bd4412 100644
--- a/muse2/muse/arranger/arranger.cpp
+++ b/muse2/muse/arranger/arranger.cpp
@@ -21,9 +21,11 @@
#include <QToolButton>
#include <QVBoxLayout>
#include <QWheelEvent>
+#include <QPainter>
#include "arranger.h"
#include "song.h"
+#include "app.h"
#include "mtscale.h"
#include "scrollscale.h"
#include "pcanvas.h"
@@ -31,6 +33,7 @@
#include "xml.h"
#include "splitter.h"
#include "lcombo.h"
+#include "mtrackinfo.h"
#include "midiport.h"
#include "mididev.h"
#include "utils.h"
@@ -97,9 +100,9 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
selected = 0;
// Since program covers 3 controls at once, it is in 'midi controller' units rather than 'gui control' units.
//program = -1;
- program = CTRL_VAL_UNKNOWN;
- pan = -65;
- volume = -1;
+ ///program = CTRL_VAL_UNKNOWN;
+ ///pan = -65;
+ ///volume = -1;
setMinimumSize(600, 50);
showTrackinfoFlag = true;
@@ -251,7 +254,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
infoScroll = new QScrollBar(Qt::Vertical, tracklist);
infoScroll->setObjectName("infoScrollBar");
- genTrackInfo(tracklist);
+ //genTrackInfo(tracklist); // Moved below
// Track-Info Button
ib = new QToolButton(tracklist);
@@ -291,6 +294,9 @@ Arranger::Arranger(QMainWindow* parent, const char* name)
header->setMovable (true );
list = new TList(header, tracklist, "tracklist");
+ // Do this now that the list is available.
+ genTrackInfo(tracklist);
+
connect(list, SIGNAL(selectionChanged()), SLOT(trackSelectionChanged()));
connect(header, SIGNAL(sectionResized(int,int,int)), list, SLOT(redraw()));
connect(header, SIGNAL(sectionMoved(int,int,int)), list, SLOT(redraw()));
@@ -788,116 +794,6 @@ void Arranger::verticalScrollSetYpos(unsigned ypos)
}
//---------------------------------------------------------
-// progRecClicked
-//---------------------------------------------------------
-
-void Arranger::progRecClicked()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int portno = track->outPort();
- int channel = track->outChannel();
- MidiPort* port = &midiPorts[portno];
- int program = port->hwCtrlState(channel, CTRL_PROGRAM);
- if(program == CTRL_VAL_UNKNOWN || program == 0xffffff)
- return;
-
- unsigned tick = song->cpos();
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_PROGRAM);
- a.setB(program);
-
- song->recordEvent(track, a);
- }
-
-//---------------------------------------------------------
-// volRecClicked
-//---------------------------------------------------------
-
-void Arranger::volRecClicked()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int portno = track->outPort();
- int channel = track->outChannel();
- MidiPort* port = &midiPorts[portno];
- int volume = port->hwCtrlState(channel, CTRL_VOLUME);
- if(volume == CTRL_VAL_UNKNOWN)
- return;
-
- unsigned tick = song->cpos();
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_VOLUME);
- a.setB(volume);
-
- song->recordEvent(track, a);
- }
-
-//---------------------------------------------------------
-// panRecClicked
-//---------------------------------------------------------
-
-void Arranger::panRecClicked()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int portno = track->outPort();
- int channel = track->outChannel();
- MidiPort* port = &midiPorts[portno];
- int pan = port->hwCtrlState(channel, CTRL_PANPOT);
- if(pan == CTRL_VAL_UNKNOWN)
- return;
-
- unsigned tick = song->cpos();
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_PANPOT);
- a.setB(pan);
-
- song->recordEvent(track, a);
- }
-
-//---------------------------------------------------------
-// recordClicked
-//---------------------------------------------------------
-
-void Arranger::recordClicked()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int portno = track->outPort();
- int channel = track->outChannel();
- MidiPort* port = &midiPorts[portno];
- unsigned tick = song->cpos();
-
- int program = port->hwCtrlState(channel, CTRL_PROGRAM);
- if(program != CTRL_VAL_UNKNOWN && program != 0xffffff)
- {
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_PROGRAM);
- a.setB(program);
- song->recordEvent(track, a);
- }
- int volume = port->hwCtrlState(channel, CTRL_VOLUME);
- if(volume != CTRL_VAL_UNKNOWN)
- {
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_VOLUME);
- a.setB(volume);
- song->recordEvent(track, a);
- }
- int pan = port->hwCtrlState(channel, CTRL_PANPOT);
- if(pan != CTRL_VAL_UNKNOWN)
- {
- Event a(Controller);
- a.setTick(tick);
- a.setA(CTRL_PANPOT);
- a.setB(pan);
- song->recordEvent(track, a);
- }
- }
-
-//---------------------------------------------------------
// trackInfoScroll
//---------------------------------------------------------
@@ -1012,3 +908,103 @@ void Arranger::controllerChanged(Track *t)
{
canvas->controllerChanged(t);
}
+
+//---------------------------------------------------------
+// showTrackInfo
+//---------------------------------------------------------
+
+void Arranger::showTrackInfo(bool flag)
+ {
+ showTrackinfoFlag = flag;
+ trackInfo->setShown(flag);
+ infoScroll->setShown(flag);
+ updateTrackInfo(-1);
+ }
+
+//---------------------------------------------------------
+// genTrackInfo
+//---------------------------------------------------------
+
+void Arranger::genTrackInfo(QWidget* parent)
+ {
+ trackInfo = new WidgetStack(parent, "trackInfoStack");
+
+ noTrackInfo = new QWidget(trackInfo);
+ QPixmap *noInfoPix = new QPixmap(160, 1000); //muse_leftside_logo_xpm);
+ const QPixmap *logo = new QPixmap(*museLeftSideLogo);
+ noInfoPix->fill(noTrackInfo->palette().color(QPalette::Window) );
+ // Orcan - check
+ //copyBlt(noInfoPix, 10, 0, logo, 0,0, logo->width(), logo->height());
+ QPainter p;
+ p.begin(noInfoPix);
+ p.drawImage(10, 0, logo->toImage(), 0,0, logo->width(), logo->height());
+
+ //noTrackInfo->setPaletteBackgroundPixmap(*noInfoPix);
+ QPalette palette;
+ palette.setBrush(noTrackInfo->backgroundRole(), QBrush(*noInfoPix));
+ noTrackInfo->setPalette(palette);
+ noTrackInfo->setGeometry(0, 0, 65, 200);
+ noTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding));
+
+ midiTrackInfo = new MidiTrackInfo(trackInfo);
+ trackInfo->addWidget(noTrackInfo, 0);
+ trackInfo->addWidget(midiTrackInfo, 1);
+ trackInfo->addWidget(0, 2);
+
+/// genMidiTrackInfo();
+ connect(midiTrackInfo, SIGNAL(outputPortChanged(int)), list, SLOT(redraw()));
+ }
+
+//---------------------------------------------------------
+// updateTrackInfo
+//---------------------------------------------------------
+
+void Arranger::updateTrackInfo(int flags)
+ {
+ if (!showTrackinfoFlag) {
+ switchInfo(-1);
+ return;
+ }
+ if (selected == 0) {
+ switchInfo(0);
+ return;
+ }
+ if (selected->isMidiTrack()) {
+ switchInfo(1);
+ ///updateMidiTrackInfo(flags);
+ midiTrackInfo->setTrack(selected);
+ midiTrackInfo->updateTrackInfo(flags);
+ }
+ else {
+ switchInfo(2);
+ }
+ }
+
+//---------------------------------------------------------
+// switchInfo
+//---------------------------------------------------------
+
+void Arranger::switchInfo(int n)
+ {
+ if (n == 2) {
+ AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2));
+ if (w == 0 || selected != w->getTrack()) {
+ if (w)
+ delete w;
+ w = new AudioStrip(trackInfo, (AudioTrack*)selected);
+ connect(song, SIGNAL(songChanged(int)), w, SLOT(songChanged(int)));
+ connect(muse, SIGNAL(configChanged()), w, SLOT(configChanged()));
+ w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
+ trackInfo->addWidget(w, 2);
+ w->show();
+ tgrid->activate();
+ tgrid->update(); // muse-2 Qt4
+ }
+ }
+ if (trackInfo->curIdx() == n)
+ return;
+ trackInfo->raiseWidget(n);
+ tgrid->activate();
+ tgrid->update(); // muse-2 Qt4
+ }
+
diff --git a/muse2/muse/arranger/arranger.h b/muse2/muse/arranger/arranger.h
index fa4bb06b..e86444bf 100644
--- a/muse2/muse/arranger/arranger.h
+++ b/muse2/muse/arranger/arranger.h
@@ -12,7 +12,6 @@
#include "midieditor.h"
#include "pcanvas.h"
-#include "ui_mtrackinfobase.h"
#include "trackautomationview.h"
class QAction;
@@ -32,7 +31,7 @@ class Xml;
class Splitter;
class LabelCombo;
class PosLabel;
-class MidiTrackInfoBase;
+class MidiTrackInfo;
class TLLayout;
class WidgetStack;
class AudioStrip;
@@ -57,17 +56,6 @@ class WidgetStack : public QWidget {
QSize minimumSizeHint() const;
};
-
-//---------------------------------------------------------
-// MidiTrackInfo
-//---------------------------------------------------------
-
-class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase {
- public:
- bool _midiDetect;
- MidiTrackInfo(QWidget* parent) : QWidget(parent) { setupUi(this); _midiDetect = false; }
- };
-
//---------------------------------------------------------
// Arranger
//---------------------------------------------------------
@@ -103,13 +91,11 @@ class Arranger : public QWidget {
PosLabel* cursorPos;
SpinBox* globalTempoSpinBox;
SpinBox* globalPitchSpinBox;
- int program, pan, volume;
unsigned cursVal;
void genTrackInfo(QWidget* parent);
void genMidiTrackInfo();
void genWaveTrackInfo();
- void updateMidiTrackInfo(int flags);
void switchInfo(int);
void setHeaderToolTips();
void setHeaderWhatsThis();
@@ -120,28 +106,8 @@ class Arranger : public QWidget {
void showTrackInfo(bool);
void trackSelectionChanged();
void trackInfoScroll(int);
-
- //void iNameChanged();
- ///void iInputChannelChanged(const QString&);
- void iOutputChannelChanged(int);
- ///void iInputPortChanged(const QString&);
- void iOutputPortChanged(int);
- void iProgHBankChanged();
- void iProgLBankChanged();
- void iProgramChanged();
- void iProgramDoubleClicked();
- void iLautstChanged(int);
- void iLautstDoubleClicked();
- void iTranspChanged(int);
- void iAnschlChanged(int);
- void iVerzChanged(int);
- void iLenChanged(int);
- void iKomprChanged(int);
- void iPanChanged(int);
- void iPanDoubleClicked();
void songChanged(int);
void modeChange(int);
- void instrPopup();
void setTime(unsigned);
void headerMoved();
void globalPitchChanged(int);
@@ -150,16 +116,7 @@ class Arranger : public QWidget {
void setTempo100();
void setTempo200();
//void seek();
- void recordClicked();
- void progRecClicked();
- void volRecClicked();
- void panRecClicked();
- void recEchoToggled(bool);
void verticalScrollSetYpos(unsigned);
- void inRoutesPressed();
- void outRoutesPressed();
- void routingPopupMenuActivated(QAction*);
- //void routingPopupViewActivated(const QModelIndex&);
signals:
void redirectWheelEvent(QWheelEvent*);
@@ -174,12 +131,8 @@ class Arranger : public QWidget {
protected:
-
virtual void wheelEvent(QWheelEvent* e);
- protected slots:
- virtual void midiTrackInfoHeartBeat();
-
public slots:
void dclickPart(Track*);
void setTool(int);
@@ -194,9 +147,6 @@ class Arranger : public QWidget {
Arranger(QMainWindow* parent, const char* name = 0);
void setMode(int);
void reset();
-
- void setTrackInfoLabelText();
- void setTrackInfoLabelFont();
void writeStatus(int level, Xml&);
void readStatus(Xml&);
diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp
index e6c30f0e..714e9a16 100644
--- a/muse2/muse/arranger/pcanvas.cpp
+++ b/muse2/muse/arranger/pcanvas.cpp
@@ -1682,6 +1682,8 @@ void PartCanvas::drawWavePart(QPainter& p,
//
// combine multi channels into one waveform
//
+ //printf("PartCanvas::drawWavePart i:%d ex:%d\n", i, ex); // REMOVE Tim.
+
for (; i < ex; i++) {
SampleV sa[channels];
xScale = tempomap.deltaTick2frame(postick, postick + tickstep);
diff --git a/muse2/muse/arranger/trackinfo.cpp b/muse2/muse/arranger/trackinfo.cpp
deleted file mode 100644
index c1253358..00000000
--- a/muse2/muse/arranger/trackinfo.cpp
+++ /dev/null
@@ -1,1599 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: trackinfo.cpp,v 1.10.2.15 2009/11/14 03:37:48 terminator356 Exp $
-// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include <QMenu>
-#include <QPainter>
-#include <QScrollBar>
-#include <QTimer>
-#include <QMessageBox>
-
-#include <math.h>
-#include <string.h>
-
-#include "song.h"
-#include "globals.h"
-#include "config.h"
-#include "gconfig.h"
-#include "arranger.h"
-#include "midiport.h"
-#include "mididev.h"
-#include "utils.h"
-#include "tlist.h"
-#include "alayout.h"
-#include "audio.h"
-#include "mixer/amixer.h"
-#include "midi.h"
-#include "midictrl.h"
-#include "mixer/astrip.h"
-#include "icons.h"
-#include "app.h"
-#include "route.h"
-#include "popupmenu.h"
-
-//---------------------------------------------------------
-// midiTrackInfoHeartBeat
-//---------------------------------------------------------
-
-void Arranger::midiTrackInfoHeartBeat()
-{
- if(!showTrackinfoFlag || !selected)
- return;
- switch(selected->type())
- {
- case Track::MIDI:
- case Track::DRUM:
- {
- MidiTrack* track = (MidiTrack*)selected;
-
- int outChannel = track->outChannel();
- int outPort = track->outPort();
- ///int ichMask = track->inChannelMask();
- //int iptMask = track->inPortMask();
- ///unsigned int iptMask = track->inPortMask();
-
- MidiPort* mp = &midiPorts[outPort];
-
- // Set record echo.
- if(midiTrackInfo->recEchoButton->isChecked() != track->recEcho())
- {
- midiTrackInfo->recEchoButton->blockSignals(true);
- midiTrackInfo->recEchoButton->setChecked(track->recEcho());
- midiTrackInfo->recEchoButton->blockSignals(false);
- }
-
- // Check for detection of midi general activity on chosen channels...
- int mpt = 0;
- //int mch = 0;
- RouteList* rl = track->inRoutes();
-
- ciRoute r = rl->begin();
- //for( ; mpt < MIDI_PORTS; ++mpt)
- for( ; r != rl->end(); ++r)
- {
- //if(!r->isValid() || ((r->type != Route::ALSA_MIDI_ROUTE) && (r->type != Route::JACK_MIDI_ROUTE)))
- //if(!r->isValid() || (r->type != Route::MIDI_DEVICE_ROUTE))
- if(!r->isValid() || (r->type != Route::MIDI_PORT_ROUTE)) // p3.3.49
- continue;
-
- // NOTE: TODO: Code for channelless events like sysex, ** IF we end up using the 'special channel 17' method.
- //if(r->channel == -1)
- if(r->channel == -1 || r->channel == 0) // p3.3.50
- continue;
-
- // No port assigned to the device?
- //mpt = r->device->midiPort();
- mpt = r->midiPort; // p3.3.49
- if(mpt < 0 || mpt >= MIDI_PORTS)
- continue;
-
- //for(; mch < MIDI_CHANNELS; ++mch)
- //{
- //if(midiPorts[mpt].syncInfo().actDetect(mch) && (iptMask & (1 << mpt)) && (ichMask & (1 << mch)) )
- //if((iptMask & bitShiftLU[mpt]) && (midiPorts[mpt].syncInfo().actDetectBits() & ichMask) )
- //if(midiPorts[mpt].syncInfo().actDetectBits() & bitShiftLU[r->channel])
- if(midiPorts[mpt].syncInfo().actDetectBits() & r->channel) // p3.3.50 Use new channel mask.
- {
- //if(midiTrackInfo->iChanTextLabel->paletteBackgroundColor() != green)
- // midiTrackInfo->iChanTextLabel->setPaletteBackgroundColor(green);
- //if(midiTrackInfo->iChanDetectLabel->pixmap() != greendotIcon)
- if(!midiTrackInfo->_midiDetect)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting green icon\n");
-
- midiTrackInfo->_midiDetect = true;
- //midiTrackInfo->iChanDetectLabel->setPixmap(*greendotIcon);
- midiTrackInfo->iChanDetectLabel->setPixmap(*redLedIcon);
- }
- break;
- }
- //}
- }
- // No activity detected?
- //if(mch == MIDI_CHANNELS)
- //if(mpt == MIDI_PORTS)
- if(r == rl->end())
- {
- //if(midiTrackInfo->iChanTextLabel->paletteBackgroundColor() != darkGreen)
- // midiTrackInfo->iChanTextLabel->setPaletteBackgroundColor(darkGreen);
- //if(midiTrackInfo->iChanDetectLabel->pixmap() != darkgreendotIcon)
- if(midiTrackInfo->_midiDetect)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting darkgreen icon\n");
-
- midiTrackInfo->_midiDetect = false;
- //midiTrackInfo->iChanDetectLabel->setPixmap(*darkgreendotIcon);
- midiTrackInfo->iChanDetectLabel->setPixmap(*darkRedLedIcon);
- }
- }
-
- int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- {
- if(program != CTRL_VAL_UNKNOWN)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting program to unknown\n");
-
- program = CTRL_VAL_UNKNOWN;
- if(midiTrackInfo->iHBank->value() != 0)
- {
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iHBank->setValue(0);
- midiTrackInfo->iHBank->blockSignals(false);
- }
- if(midiTrackInfo->iLBank->value() != 0)
- {
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iLBank->setValue(0);
- midiTrackInfo->iLBank->blockSignals(false);
- }
- if(midiTrackInfo->iProgram->value() != 0)
- {
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iProgram->setValue(0);
- midiTrackInfo->iProgram->blockSignals(false);
- }
- }
-
- nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- {
- //const char* n = "<unknown>";
- const QString n(tr("<unknown>"));
- //if(strcmp(midiTrackInfo->iPatch->text().toLatin1().constData(), n) != 0)
- if(midiTrackInfo->iPatch->text() != n)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting patch <unknown>\n");
-
- midiTrackInfo->iPatch->setText(n);
- }
- }
- else
- {
- MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM);
- if(name.isEmpty())
- {
- const QString n("???");
- if(midiTrackInfo->iPatch->text() != n)
- midiTrackInfo->iPatch->setText(n);
- }
- else
- if(midiTrackInfo->iPatch->text() != name)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting patch name\n");
-
- midiTrackInfo->iPatch->setText(name);
- }
- }
- }
- else
- if(program != nprogram)
- {
- program = nprogram;
-
- //int hb, lb, pr;
- //if (program == CTRL_VAL_UNKNOWN) {
- // hb = lb = pr = 0;
- // iPatch->setText("---");
- // }
- //else
- //{
- MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM);
- if(midiTrackInfo->iPatch->text() != name)
- midiTrackInfo->iPatch->setText(name);
-
- int hb = ((program >> 16) & 0xff) + 1;
- if (hb == 0x100)
- hb = 0;
- int lb = ((program >> 8) & 0xff) + 1;
- if (lb == 0x100)
- lb = 0;
- int pr = (program & 0xff) + 1;
- if (pr == 0x100)
- pr = 0;
- //}
-
- //printf("Arranger::midiTrackInfoHeartBeat setting program\n");
-
- if(midiTrackInfo->iHBank->value() != hb)
- {
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iHBank->setValue(hb);
- midiTrackInfo->iHBank->blockSignals(false);
- }
- if(midiTrackInfo->iLBank->value() != lb)
- {
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iLBank->setValue(lb);
- midiTrackInfo->iLBank->blockSignals(false);
- }
- if(midiTrackInfo->iProgram->value() != pr)
- {
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iProgram->setValue(pr);
- midiTrackInfo->iProgram->blockSignals(false);
- }
-
- }
-
- MidiController* mc = mp->midiController(CTRL_VOLUME);
- int mn = mc->minVal();
- int v = mp->hwCtrlState(outChannel, CTRL_VOLUME);
- if(v == CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- if(volume != v)
- {
- volume = v;
- if(midiTrackInfo->iLautst->value() != v)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting volume\n");
-
- midiTrackInfo->iLautst->blockSignals(true);
- //midiTrackInfo->iLautst->setRange(mn - 1, mc->maxVal());
- midiTrackInfo->iLautst->setValue(v);
- midiTrackInfo->iLautst->blockSignals(false);
- }
- }
-
- mc = mp->midiController(CTRL_PANPOT);
- mn = mc->minVal();
- v = mp->hwCtrlState(outChannel, CTRL_PANPOT);
- if(v == CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- if(pan != v)
- {
- pan = v;
- if(midiTrackInfo->iPan->value() != v)
- {
- //printf("Arranger::midiTrackInfoHeartBeat setting pan\n");
-
- midiTrackInfo->iPan->blockSignals(true);
- //midiTrackInfo->iPan->setRange(mn - 1, mc->maxVal());
- midiTrackInfo->iPan->setValue(v);
- midiTrackInfo->iPan->blockSignals(false);
- }
- }
-
- // Does it include a midi controller value adjustment? Then handle it...
- //if(flags & SC_MIDI_CONTROLLER)
- // seek();
-
- /*
- if(midiTrackInfo->iTransp->value() != track->transposition)
- midiTrackInfo->iTransp->setValue(track->transposition);
- if(midiTrackInfo->iAnschl->value() != track->velocity)
- midiTrackInfo->iAnschl->setValue(track->velocity);
- if(midiTrackInfo->iVerz->value() != track->delay)
- midiTrackInfo->iVerz->setValue(track->delay);
- if(midiTrackInfo->iLen->value() != track->len)
- midiTrackInfo->iLen->setValue(track->len);
- if(midiTrackInfo->iKompr->value() != track->compression)
- midiTrackInfo->iKompr->setValue(track->compression);
- */
- }
- break;
-
- case Track::WAVE:
- case Track::AUDIO_OUTPUT:
- case Track::AUDIO_INPUT:
- case Track::AUDIO_GROUP:
- case Track::AUDIO_AUX:
- case Track::AUDIO_SOFTSYNTH:
- break;
- }
-}
-
-//---------------------------------------------------------
-// showTrackInfo
-//---------------------------------------------------------
-
-void Arranger::showTrackInfo(bool flag)
- {
- showTrackinfoFlag = flag;
- trackInfo->setShown(flag);
- infoScroll->setShown(flag);
- updateTrackInfo(-1);
- }
-
-//---------------------------------------------------------
-// genTrackInfo
-//---------------------------------------------------------
-
-void Arranger::genTrackInfo(QWidget* parent)
- {
- trackInfo = new WidgetStack(parent, "trackInfoStack");
-
- noTrackInfo = new QWidget(trackInfo);
- QPixmap *noInfoPix = new QPixmap(160, 1000); //muse_leftside_logo_xpm);
- const QPixmap *logo = new QPixmap(*museLeftSideLogo);
- noInfoPix->fill(noTrackInfo->palette().color(QPalette::Window) );
- // Orcan - check
- //copyBlt(noInfoPix, 10, 0, logo, 0,0, logo->width(), logo->height());
- QPainter p;
- p.begin(noInfoPix);
- p.drawImage(10, 0, logo->toImage(), 0,0, logo->width(), logo->height());
-
- //noTrackInfo->setPaletteBackgroundPixmap(*noInfoPix);
- QPalette palette;
- palette.setBrush(noTrackInfo->backgroundRole(), QBrush(*noInfoPix));
- noTrackInfo->setPalette(palette);
- noTrackInfo->setGeometry(0, 0, 65, 200);
- noTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding));
-
- midiTrackInfo = new MidiTrackInfo(trackInfo);
- trackInfo->addWidget(noTrackInfo, 0);
- trackInfo->addWidget(midiTrackInfo, 1);
- trackInfo->addWidget(0, 2);
-
- genMidiTrackInfo();
- }
-
-//---------------------------------------------------------
-// updateTrackInfo
-//---------------------------------------------------------
-
-void Arranger::updateTrackInfo(int flags)
- {
- if (!showTrackinfoFlag) {
- switchInfo(-1);
- return;
- }
- if (selected == 0) {
- switchInfo(0);
- return;
- }
- if (selected->isMidiTrack()) {
- switchInfo(1);
- updateMidiTrackInfo(flags);
- }
- else {
- switchInfo(2);
- }
- }
-
-//---------------------------------------------------------
-// switchInfo
-//---------------------------------------------------------
-
-void Arranger::switchInfo(int n)
- {
- if (n == 2) {
- AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2));
- if (w == 0 || selected != w->getTrack()) {
- if (w)
- delete w;
- w = new AudioStrip(trackInfo, (AudioTrack*)selected);
- connect(song, SIGNAL(songChanged(int)), w, SLOT(songChanged(int)));
- connect(muse, SIGNAL(configChanged()), w, SLOT(configChanged()));
- w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
- trackInfo->addWidget(w, 2);
- w->show();
- tgrid->activate();
- tgrid->update(); // muse-2 Qt4
- }
- }
- if (trackInfo->curIdx() == n)
- return;
- trackInfo->raiseWidget(n);
- tgrid->activate();
- tgrid->update(); // muse-2 Qt4
- }
-
-//---------------------------------------------------------
-// setTrackInfoLabelText
-//---------------------------------------------------------
-
-void Arranger::setTrackInfoLabelText()
-{
- MidiTrack* track = (MidiTrack*)selected;
- if(track)
- midiTrackInfo->trackNameLabel->setText(track->name());
- else
- midiTrackInfo->trackNameLabel->setText(QString());
-}
-
-//---------------------------------------------------------
-// setTrackInfoLabelFont
-//---------------------------------------------------------
-
-void Arranger::setTrackInfoLabelFont()
-{
- MidiTrack* track = (MidiTrack*)selected;
- if(!track)
- return;
-
- // Use the new font #6 I created just for these labels (so far).
- // Set the label's font.
- midiTrackInfo->trackNameLabel->setFont(config.fonts[6]);
- // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size.
- autoAdjustFontSize(midiTrackInfo->trackNameLabel, midiTrackInfo->trackNameLabel->text(), false, true, config.fonts[6].pointSize(), 5);
-}
-
-// Removed by Tim. p3.3.9
-
-/*
-//---------------------------------------------------------
-// iNameChanged
-//---------------------------------------------------------
-
-void Arranger::iNameChanged()
- {
- QString txt = midiTrackInfo->iName->text();
- if (txt == selected->name())
- return;
-
- TrackList* tl = song->tracks();
- for(iTrack i = tl->begin(); i != tl->end(); ++i)
- {
- if((*i)->name() == txt)
- {
- // Restore the text.
- midiTrackInfo->iName->blockSignals(true);
- midiTrackInfo->iName->setText(selected->name());
- midiTrackInfo->iName->blockSignals(false);
-
- QMessageBox::critical(this,
- tr("MusE: bad trackname"),
- tr("please choose a unique track name"),
- QMessageBox::Ok,
- QMessageBox::NoButton,
- QMessageBox::NoButton);
-
- midiTrackInfo->iName->setFocus();
- return;
- }
- }
-
- //Track* track = selected->clone();
- Track* track = selected->clone(false);
- selected->setName(txt);
- audio->msgChangeTrack(track, selected);
- }
-*/
-
-//---------------------------------------------------------
-// iOutputChannelChanged
-//---------------------------------------------------------
-
-void Arranger::iOutputChannelChanged(int channel)
- {
- --channel;
- MidiTrack* track = (MidiTrack*)selected;
- if (channel != track->outChannel()) {
- // Changed by T356.
- //track->setOutChannel(channel);
- audio->msgIdle(true);
- //audio->msgSetTrackOutChannel(track, channel);
- track->setOutChanAndUpdate(channel);
- audio->msgIdle(false);
-
- // may result in adding/removing mixer strip:
- //song->update(-1);
- song->update(SC_MIDI_CHANNEL);
- }
- }
-
-/*
-//---------------------------------------------------------
-// iKanalChanged
-//---------------------------------------------------------
-
-void Arranger::iInputChannelChanged(const QString& s)
- {
- MidiTrack* track = (MidiTrack*)selected;
- int val = string2bitmap(s);
- if (val != track->inChannelMask()) {
- track->setInChannelMask(val);
- list->redraw();
- }
- }
-*/
-
-//---------------------------------------------------------
-// iOutputPortChanged
-//---------------------------------------------------------
-
-void Arranger::iOutputPortChanged(int index)
- {
- MidiTrack* track = (MidiTrack*)selected;
- if (index == track->outPort())
- return;
- // Changed by T356.
- //track->setOutPort(index);
- audio->msgIdle(true);
- //audio->msgSetTrackOutPort(track, index);
- track->setOutPortAndUpdate(index);
- audio->msgIdle(false);
-
- list->redraw();
- }
-
-/*
-//---------------------------------------------------------
-// iInputPortChanged
-//---------------------------------------------------------
-
-void Arranger::iInputPortChanged(const QString& s)
- {
- // Changed by Tim. p3.3.8
- //int val = string2bitmap(s);
- unsigned int val = string2u32bitmap(s);
-
- MidiTrack* track = (MidiTrack*)selected;
- if (val == track->inPortMask())
- return;
- track->setInPortMask(val);
- list->redraw();
- }
-*/
-
-//---------------------------------------------------------
-// routingPopupMenuActivated
-//---------------------------------------------------------
-
-//void Arranger::routingPopupMenuActivated(int n)
-void Arranger::routingPopupMenuActivated(QAction* act)
-{
- if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack())
- return;
- muse->routingPopupMenuActivated(selected, act->data().toInt());
-}
-
-#if 0
-//---------------------------------------------------------
-// routingPopupViewActivated
-//---------------------------------------------------------
-
-void Arranger::routingPopupViewActivated(const QModelIndex& mdi)
-{
- if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack())
- return;
- muse->routingPopupMenuActivated(selected, mdi.data().toInt());
-}
-#endif
-
-//---------------------------------------------------------
-// inRoutesPressed
-//---------------------------------------------------------
-
-void Arranger::inRoutesPressed()
-{
- if(!selected)
- return;
- if(!selected->isMidiTrack())
- return;
-
- PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, false);
- //PopupView* pup = muse->prepareRoutingPopupView(selected, false);
-
- if(!pup) {
- int ret = QMessageBox::warning(this, tr("No inputs"),
- tr("There are no midi inputs.\n"
- "Do you want to open the midi configuration dialog?"),
- QMessageBox::Ok | QMessageBox::Cancel,
- QMessageBox::Ok);
- if (ret == QMessageBox::Ok) {
- printf("open config midi ports\n");
- muse->configMidiPorts();
- }
- return;
- }
-
- gRoutingPopupMenuMaster = midiTrackInfo;
- connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*)));
- //connect(pup, SIGNAL(activated(const QModelIndex&)), SLOT(routingPopupViewActivated(const QModelIndex&)));
- connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide()));
- //connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupViewAboutToHide()));
- pup->popup(QCursor::pos());
- //pup->setVisible(true);
- midiTrackInfo->iRButton->setDown(false);
- return;
-}
-
-//---------------------------------------------------------
-// outRoutesPressed
-//---------------------------------------------------------
-
-void Arranger::outRoutesPressed()
-{
- if(!selected)
- return;
- if(!selected->isMidiTrack())
- return;
-
- PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, true);
- if(!pup)
- return;
-
- gRoutingPopupMenuMaster = midiTrackInfo;
- connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*)));
- connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide()));
- pup->popup(QCursor::pos());
- midiTrackInfo->oRButton->setDown(false);
- return;
-}
-
-//---------------------------------------------------------
-// iProgHBankChanged
-//---------------------------------------------------------
-
-void Arranger::iProgHBankChanged()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int channel = track->outChannel();
- int port = track->outPort();
- int hbank = midiTrackInfo->iHBank->value();
- int lbank = midiTrackInfo->iLBank->value();
- int prog = midiTrackInfo->iProgram->value();
-
- if (hbank > 0 && hbank < 129)
- hbank -= 1;
- else
- hbank = 0xff;
- if (lbank > 0 && lbank < 129)
- lbank -= 1;
- else
- lbank = 0xff;
- if (prog > 0 && prog < 129)
- prog -= 1;
- else
- prog = 0xff;
-
- MidiPort* mp = &midiPorts[port];
- if(prog == 0xff && hbank == 0xff && lbank == 0xff)
- {
- program = CTRL_VAL_UNKNOWN;
- if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN);
- return;
- }
-
- int np = mp->hwCtrlState(channel, CTRL_PROGRAM);
- if(np == CTRL_VAL_UNKNOWN)
- {
- np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM);
- if(np != CTRL_VAL_UNKNOWN)
- {
- lbank = (np & 0xff00) >> 8;
- prog = np & 0xff;
- if(prog == 0xff)
- prog = 0;
- int ilbnk = lbank;
- int iprog = prog;
- if(ilbnk == 0xff)
- ilbnk = -1;
- ++ilbnk;
- ++iprog;
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iLBank->setValue(ilbnk);
- midiTrackInfo->iProgram->setValue(iprog);
- midiTrackInfo->iLBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
- }
- }
-
- if(prog == 0xff && (hbank != 0xff || lbank != 0xff))
- {
- prog = 0;
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iProgram->setValue(1);
- midiTrackInfo->iProgram->blockSignals(false);
- }
- program = (hbank << 16) + (lbank << 8) + prog;
- MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program);
- audio->msgPlayMidiEvent(&ev);
-
- MidiInstrument* instr = mp->instrument();
- midiTrackInfo->iPatch->setText(instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM));
-// updateTrackInfo();
- }
-
-//---------------------------------------------------------
-// iProgLBankChanged
-//---------------------------------------------------------
-
-void Arranger::iProgLBankChanged()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int channel = track->outChannel();
- int port = track->outPort();
- int hbank = midiTrackInfo->iHBank->value();
- int lbank = midiTrackInfo->iLBank->value();
- int prog = midiTrackInfo->iProgram->value();
-
- if (hbank > 0 && hbank < 129)
- hbank -= 1;
- else
- hbank = 0xff;
- if (lbank > 0 && lbank < 129)
- lbank -= 1;
- else
- lbank = 0xff;
- if (prog > 0 && prog < 129)
- prog -= 1;
- else
- prog = 0xff;
-
- MidiPort* mp = &midiPorts[port];
- if(prog == 0xff && hbank == 0xff && lbank == 0xff)
- {
- program = CTRL_VAL_UNKNOWN;
- if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN);
- return;
- }
-
- int np = mp->hwCtrlState(channel, CTRL_PROGRAM);
- if(np == CTRL_VAL_UNKNOWN)
- {
- np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM);
- if(np != CTRL_VAL_UNKNOWN)
- {
- hbank = (np & 0xff0000) >> 16;
- prog = np & 0xff;
- if(prog == 0xff)
- prog = 0;
- int ihbnk = hbank;
- int iprog = prog;
- if(ihbnk == 0xff)
- ihbnk = -1;
- ++ihbnk;
- ++iprog;
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iHBank->setValue(ihbnk);
- midiTrackInfo->iProgram->setValue(iprog);
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
- }
- }
-
- if(prog == 0xff && (hbank != 0xff || lbank != 0xff))
- {
- prog = 0;
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iProgram->setValue(1);
- midiTrackInfo->iProgram->blockSignals(false);
- }
- program = (hbank << 16) + (lbank << 8) + prog;
- MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program);
- audio->msgPlayMidiEvent(&ev);
-
- MidiInstrument* instr = mp->instrument();
- midiTrackInfo->iPatch->setText(instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM));
-// updateTrackInfo();
- }
-
-//---------------------------------------------------------
-// iProgramChanged
-//---------------------------------------------------------
-
-void Arranger::iProgramChanged()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int channel = track->outChannel();
- int port = track->outPort();
- int hbank = midiTrackInfo->iHBank->value();
- int lbank = midiTrackInfo->iLBank->value();
- int prog = midiTrackInfo->iProgram->value();
-
- if (hbank > 0 && hbank < 129)
- hbank -= 1;
- else
- hbank = 0xff;
- if (lbank > 0 && lbank < 129)
- lbank -= 1;
- else
- lbank = 0xff;
- if (prog > 0 && prog < 129)
- prog -= 1;
- else
- prog = 0xff;
-
- MidiPort *mp = &midiPorts[port];
- if(prog == 0xff)
- {
- program = CTRL_VAL_UNKNOWN;
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iHBank->setValue(0);
- midiTrackInfo->iLBank->setValue(0);
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
-
- if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN);
- return;
- }
- else
- {
- int np = mp->hwCtrlState(channel, CTRL_PROGRAM);
- if(np == CTRL_VAL_UNKNOWN)
- {
- np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM);
- if(np != CTRL_VAL_UNKNOWN)
- {
- hbank = (np & 0xff0000) >> 16;
- lbank = (np & 0xff00) >> 8;
- int ihbnk = hbank;
- int ilbnk = lbank;
- if(ihbnk == 0xff)
- ihbnk = -1;
- if(ilbnk == 0xff)
- ilbnk = -1;
- ++ihbnk;
- ++ilbnk;
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iHBank->setValue(ihbnk);
- midiTrackInfo->iLBank->setValue(ilbnk);
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
- }
- }
- program = (hbank << 16) + (lbank << 8) + prog;
- MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program);
- audio->msgPlayMidiEvent(&ev);
-
- MidiInstrument* instr = mp->instrument();
- midiTrackInfo->iPatch->setText(instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM));
- }
-
-// updateTrackInfo();
- }
-
-//---------------------------------------------------------
-// iLautstChanged
-//---------------------------------------------------------
-
-void Arranger::iLautstChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- int outPort = track->outPort();
- int chan = track->outChannel();
- MidiPort* mp = &midiPorts[outPort];
- MidiController* mctl = mp->midiController(CTRL_VOLUME);
- if((val < mctl->minVal()) || (val > mctl->maxVal()))
- {
- if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN);
- }
- else
- {
- val += mctl->bias();
-
- MidiPlayEvent ev(0, outPort, chan,
- ME_CONTROLLER, CTRL_VOLUME, val);
- audio->msgPlayMidiEvent(&ev);
- }
- song->update(SC_MIDI_CONTROLLER);
- }
-
-//---------------------------------------------------------
-// iTranspChanged
-//---------------------------------------------------------
-
-void Arranger::iTranspChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- track->transposition = val;
- }
-
-//---------------------------------------------------------
-// iAnschlChanged
-//---------------------------------------------------------
-
-void Arranger::iAnschlChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- track->velocity = val;
- }
-
-//---------------------------------------------------------
-// iVerzChanged
-//---------------------------------------------------------
-
-void Arranger::iVerzChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- track->delay = val;
- }
-
-//---------------------------------------------------------
-// iLenChanged
-//---------------------------------------------------------
-
-void Arranger::iLenChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- track->len = val;
- }
-
-//---------------------------------------------------------
-// iKomprChanged
-//---------------------------------------------------------
-
-void Arranger::iKomprChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- track->compression = val;
- }
-
-//---------------------------------------------------------
-// iPanChanged
-//---------------------------------------------------------
-
-void Arranger::iPanChanged(int val)
- {
- MidiTrack* track = (MidiTrack*)selected;
- int port = track->outPort();
- int chan = track->outChannel();
- MidiPort* mp = &midiPorts[port];
- MidiController* mctl = mp->midiController(CTRL_PANPOT);
- if((val < mctl->minVal()) || (val > mctl->maxVal()))
- {
- if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN);
- }
- else
- {
- val += mctl->bias();
-
- // Realtime Change:
- MidiPlayEvent ev(0, port, chan,
- ME_CONTROLLER, CTRL_PANPOT, val);
- audio->msgPlayMidiEvent(&ev);
- }
- song->update(SC_MIDI_CONTROLLER);
- }
-
-//---------------------------------------------------------
-// instrPopup
-//---------------------------------------------------------
-
-void Arranger::instrPopup()
- {
- MidiTrack* track = (MidiTrack*)selected;
- int channel = track->outChannel();
- int port = track->outPort();
- MidiInstrument* instr = midiPorts[port].instrument();
- QMenu* pup = new QMenu;
- ///instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM);
- instr->populatePatchPopup(pup, channel, song->mtype(), track->type() == Track::DRUM);
-
- ///if(pop->actions().count() == 0)
- /// return;
- if(pup->actions().count() == 0)
- {
- delete pup;
- return;
- }
-
- ///QAction *act = pop->exec(midiTrackInfo->iPatch->mapToGlobal(QPoint(10,5)));
- QAction *act = pup->exec(midiTrackInfo->iPatch->mapToGlobal(QPoint(10,5)));
- if (act) {
- int rv = act->data().toInt();
- MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, rv);
- audio->msgPlayMidiEvent(&ev);
- updateTrackInfo(-1);
- }
-
- delete pup;
- }
-
-//---------------------------------------------------------
-// recEchoToggled
-//---------------------------------------------------------
-
-void Arranger::recEchoToggled(bool v)
-{
- MidiTrack* track = (MidiTrack*)selected;
- track->setRecEcho(v);
-
- //song->update(SC_???);
-}
-
-//---------------------------------------------------------
-// iProgramDoubleClicked
-//---------------------------------------------------------
-
-void Arranger::iProgramDoubleClicked()
-{
- MidiTrack* track = (MidiTrack*)selected;
- int port = track->outPort();
- int chan = track->outChannel();
- MidiPort* mp = &midiPorts[port];
- MidiController* mctl = mp->midiController(CTRL_PROGRAM);
-
- if(!track || !mctl)
- return;
-
- int lastv = mp->lastValidHWCtrlState(chan, CTRL_PROGRAM);
- int curv = mp->hwCtrlState(chan, CTRL_PROGRAM);
-
- if(curv == CTRL_VAL_UNKNOWN)
- {
- // If no value has ever been set yet, use the current knob value
- // (or the controller's initial value?) to 'turn on' the controller.
- if(lastv == CTRL_VAL_UNKNOWN)
- {
- int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
- if(kiv == CTRL_VAL_UNKNOWN)
- kiv = 0;
- //else
- //{
- //if(kiv < mctrl->minVal())
- // kiv = mctrl->minVal();
- //if(kiv > mctrl->maxVal())
- // kiv = mctrl->maxVal();
- //kiv += mctrl->bias();
- //}
-
- //MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv);
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, kiv);
- audio->msgPlayMidiEvent(&ev);
- }
- else
- {
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, lastv);
- audio->msgPlayMidiEvent(&ev);
- }
- }
- else
- {
- if(mp->hwCtrlState(chan, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, chan, CTRL_PROGRAM, CTRL_VAL_UNKNOWN);
- }
-
- song->update(SC_MIDI_CONTROLLER);
-}
-
-//---------------------------------------------------------
-// iLautstDoubleClicked
-//---------------------------------------------------------
-
-void Arranger::iLautstDoubleClicked()
-{
- MidiTrack* track = (MidiTrack*)selected;
- int port = track->outPort();
- int chan = track->outChannel();
- MidiPort* mp = &midiPorts[port];
- MidiController* mctl = mp->midiController(CTRL_VOLUME);
-
- if(!track || !mctl)
- return;
-
- int lastv = mp->lastValidHWCtrlState(chan, CTRL_VOLUME);
- int curv = mp->hwCtrlState(chan, CTRL_VOLUME);
-
- if(curv == CTRL_VAL_UNKNOWN)
- {
- // If no value has ever been set yet, use the current knob value
- // (or the controller's initial value?) to 'turn on' the controller.
- if(lastv == CTRL_VAL_UNKNOWN)
- {
- int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
- if(kiv == CTRL_VAL_UNKNOWN)
- // Set volume to 78% of range, so that if range is 0 - 127, then value is 100.
- kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.7874);
- else
- {
- if(kiv < mctl->minVal())
- kiv = mctl->minVal();
- if(kiv > mctl->maxVal())
- kiv = mctl->maxVal();
- kiv += mctl->bias();
- }
-
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, kiv);
- audio->msgPlayMidiEvent(&ev);
- }
- else
- {
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, lastv);
- audio->msgPlayMidiEvent(&ev);
- }
- }
- else
- {
- if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN);
- }
-
- song->update(SC_MIDI_CONTROLLER);
-}
-
-//---------------------------------------------------------
-// iPanDoubleClicked
-//---------------------------------------------------------
-
-void Arranger::iPanDoubleClicked()
-{
- MidiTrack* track = (MidiTrack*)selected;
- int port = track->outPort();
- int chan = track->outChannel();
- MidiPort* mp = &midiPorts[port];
- MidiController* mctl = mp->midiController(CTRL_PANPOT);
-
- if(!track || !mctl)
- return;
-
- int lastv = mp->lastValidHWCtrlState(chan, CTRL_PANPOT);
- int curv = mp->hwCtrlState(chan, CTRL_PANPOT);
-
- if(curv == CTRL_VAL_UNKNOWN)
- {
- // If no value has ever been set yet, use the current knob value
- // (or the controller's initial value?) to 'turn on' the controller.
- if(lastv == CTRL_VAL_UNKNOWN)
- {
- int kiv = mctl->initVal();
- //int kiv = lrint(_knob->value());
- if(kiv == CTRL_VAL_UNKNOWN)
- // Set volume to 50% of range, so that if range is 0 - 127, then value is 64.
- kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.5);
- else
- {
- if(kiv < mctl->minVal())
- kiv = mctl->minVal();
- if(kiv > mctl->maxVal())
- kiv = mctl->maxVal();
- kiv += mctl->bias();
- }
-
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, kiv);
- audio->msgPlayMidiEvent(&ev);
- }
- else
- {
- MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, lastv);
- audio->msgPlayMidiEvent(&ev);
- }
- }
- else
- {
- if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN)
- audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN);
- }
-
- song->update(SC_MIDI_CONTROLLER);
-}
-
-//---------------------------------------------------------
-// genMidiTrackInfo
-//---------------------------------------------------------
-
-void Arranger::genMidiTrackInfo()
- {
- //midiTrackInfo->iChanDetectLabel->setPixmap(*darkgreendotIcon);
- midiTrackInfo->iChanDetectLabel->setPixmap(*darkRedLedIcon);
-
- QIcon recEchoIconSet;
- //recEchoIconSet.addPixmap(*recEchoIconOn, QIcon::Normal, QIcon::On);
- //recEchoIconSet.addPixmap(*recEchoIconOff, QIcon::Normal, QIcon::Off);
- recEchoIconSet.addPixmap(*midiConnectorRedBorderIcon, QIcon::Normal, QIcon::On);
- recEchoIconSet.addPixmap(*edit_midiIcon, QIcon::Normal, QIcon::Off);
- midiTrackInfo->recEchoButton->setIcon(recEchoIconSet);
- //midiTrackInfo->recEchoButton->setIcon(QIcon(*edit_midiIcon));
- //midiTrackInfo->recEchoButton->setIconSize(edit_midiIcon->size());
-
-
- // MusE-2: AlignCenter and WordBreak are set in the ui(3) file, but not supported by QLabel. Turn them on here.
- midiTrackInfo->trackNameLabel->setAlignment(Qt::AlignCenter);
- //Qt::TextWordWrap is not available for alignment in Qt4 - Orcan
- // MusE-2 Tested: TextWrapAnywhere actually works, but in fact it takes precedence
- // over word wrap, so I found it is not really desirable. Maybe with a user setting...
- //midiTrackInfo->trackNameLabel->setAlignment(Qt::AlignCenter | Qt::TextWordWrap | Qt::TextWrapAnywhere);
- //midiTrackInfo->trackNameLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum));
-
- if(selected)
- midiTrackInfo->trackNameLabel->setObjectName(selected->cname());
- QPalette pal;
- pal.setColor(midiTrackInfo->trackNameLabel->backgroundRole(), QColor(0, 160, 255)); // Med blue
- midiTrackInfo->trackNameLabel->setPalette(pal);
- midiTrackInfo->trackNameLabel->setWordWrap(true);
- midiTrackInfo->trackNameLabel->setAutoFillBackground(true);
- midiTrackInfo->trackNameLabel->setTextFormat(Qt::PlainText);
- midiTrackInfo->trackNameLabel->setLineWidth(2);
- midiTrackInfo->trackNameLabel->setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
- midiTrackInfo->trackNameLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum));
-
- // Added by Tim. p3.3.9
- setTrackInfoLabelText();
- setTrackInfoLabelFont();
-
- connect(midiTrackInfo->iPatch, SIGNAL(released()), SLOT(instrPopup()));
-
- ///pop = new QMenu(midiTrackInfo->iPatch);
- //pop->setCheckable(false); // not needed in Qt4
-
- // Removed by Tim. p3.3.9
- //connect(midiTrackInfo->iName, SIGNAL(returnPressed()), SLOT(iNameChanged()));
-
- connect(midiTrackInfo->iOutputChannel, SIGNAL(valueChanged(int)), SLOT(iOutputChannelChanged(int)));
- ///connect(midiTrackInfo->iInputChannel, SIGNAL(textChanged(const QString&)), SLOT(iInputChannelChanged(const QString&)));
- connect(midiTrackInfo->iHBank, SIGNAL(valueChanged(int)), SLOT(iProgHBankChanged()));
- connect(midiTrackInfo->iLBank, SIGNAL(valueChanged(int)), SLOT(iProgLBankChanged()));
- connect(midiTrackInfo->iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged()));
- connect(midiTrackInfo->iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked()));
- connect(midiTrackInfo->iLBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked()));
- connect(midiTrackInfo->iProgram, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked()));
- connect(midiTrackInfo->iLautst, SIGNAL(valueChanged(int)), SLOT(iLautstChanged(int)));
- connect(midiTrackInfo->iLautst, SIGNAL(doubleClicked()), SLOT(iLautstDoubleClicked()));
- connect(midiTrackInfo->iTransp, SIGNAL(valueChanged(int)), SLOT(iTranspChanged(int)));
- connect(midiTrackInfo->iAnschl, SIGNAL(valueChanged(int)), SLOT(iAnschlChanged(int)));
- connect(midiTrackInfo->iVerz, SIGNAL(valueChanged(int)), SLOT(iVerzChanged(int)));
- connect(midiTrackInfo->iLen, SIGNAL(valueChanged(int)), SLOT(iLenChanged(int)));
- connect(midiTrackInfo->iKompr, SIGNAL(valueChanged(int)), SLOT(iKomprChanged(int)));
- connect(midiTrackInfo->iPan, SIGNAL(valueChanged(int)), SLOT(iPanChanged(int)));
- connect(midiTrackInfo->iPan, SIGNAL(doubleClicked()), SLOT(iPanDoubleClicked()));
- connect(midiTrackInfo->iOutput, SIGNAL(activated(int)), SLOT(iOutputPortChanged(int)));
- ///connect(midiTrackInfo->iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&)));
- connect(midiTrackInfo->recordButton, SIGNAL(clicked()), SLOT(recordClicked()));
- connect(midiTrackInfo->progRecButton, SIGNAL(clicked()), SLOT(progRecClicked()));
- connect(midiTrackInfo->volRecButton, SIGNAL(clicked()), SLOT(volRecClicked()));
- connect(midiTrackInfo->panRecButton, SIGNAL(clicked()), SLOT(panRecClicked()));
- connect(midiTrackInfo->recEchoButton, SIGNAL(toggled(bool)), SLOT(recEchoToggled(bool)));
- connect(midiTrackInfo->iRButton, SIGNAL(pressed()), SLOT(inRoutesPressed()));
-
- // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values...
- midiTrackInfo->oRButton->setEnabled(false);
- midiTrackInfo->oRButton->setVisible(false);
- connect(midiTrackInfo->oRButton, SIGNAL(pressed()), SLOT(outRoutesPressed()));
-
- connect(heartBeatTimer, SIGNAL(timeout()), SLOT(midiTrackInfoHeartBeat()));
- }
-
-//---------------------------------------------------------
-// updateMidiTrackInfo
-//---------------------------------------------------------
-
-void Arranger::updateMidiTrackInfo(int flags)
-{
- MidiTrack* track = (MidiTrack*)selected;
-
- // Is it simply a midi controller value adjustment? Forget it.
- if(flags == SC_MIDI_CONTROLLER)
- return;
-
- // p3.3.47 Update the routing popup menu if anything relevant changes.
- //if(gRoutingPopupMenuMaster == midiTrackInfo && selected && (flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)))
- if(flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) // p3.3.50
- // Use this handy shared routine.
- //muse->updateRouteMenus(selected);
- muse->updateRouteMenus(selected, midiTrackInfo); // p3.3.50
-
- // Added by Tim. p3.3.9
- setTrackInfoLabelText();
- setTrackInfoLabelFont();
-
- //{
- int outChannel = track->outChannel();
- ///int inChannel = track->inChannelMask();
- int outPort = track->outPort();
- //int inPort = track->inPortMask();
- ///unsigned int inPort = track->inPortMask();
-
- //midiTrackInfo->iInput->clear();
- midiTrackInfo->iOutput->clear();
-
- for (int i = 0; i < MIDI_PORTS; ++i) {
- QString name;
- name.sprintf("%d:%s", i+1, midiPorts[i].portname().toLatin1().constData());
- midiTrackInfo->iOutput->insertItem(i, name);
- if (i == outPort)
- midiTrackInfo->iOutput->setCurrentIndex(i);
- }
- //midiTrackInfo->iInput->setText(bitmap2String(inPort));
- ///midiTrackInfo->iInput->setText(u32bitmap2String(inPort));
-
- //midiTrackInfo->iInputChannel->setText(bitmap2String(inChannel));
-
- // Removed by Tim. p3.3.9
- //if (midiTrackInfo->iName->text() != selected->name()) {
- // midiTrackInfo->iName->setText(selected->name());
- // midiTrackInfo->iName->home(false);
- // }
-
- midiTrackInfo->iOutputChannel->setValue(outChannel+1);
- ///midiTrackInfo->iInputChannel->setText(bitmap2String(inChannel));
-
- // Set record echo.
- if(midiTrackInfo->recEchoButton->isChecked() != track->recEcho())
- {
- midiTrackInfo->recEchoButton->blockSignals(true);
- midiTrackInfo->recEchoButton->setChecked(track->recEcho());
- midiTrackInfo->recEchoButton->blockSignals(false);
- }
-
- MidiPort* mp = &midiPorts[outPort];
- int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- {
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iHBank->setValue(0);
- midiTrackInfo->iLBank->setValue(0);
- midiTrackInfo->iProgram->setValue(0);
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
-
- program = CTRL_VAL_UNKNOWN;
- nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- //midiTrackInfo->iPatch->setText(QString("<unknown>"));
- midiTrackInfo->iPatch->setText(tr("<unknown>"));
- else
- {
- MidiInstrument* instr = mp->instrument();
- midiTrackInfo->iPatch->setText(instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM));
- }
- }
- else
- //if (program != nprogram)
- {
- program = nprogram;
-
- //int hb, lb, pr;
- //if (program == CTRL_VAL_UNKNOWN) {
- // hb = lb = pr = 0;
- // midiTrackInfo->iPatch->setText("---");
- // }
- //else
- //{
- MidiInstrument* instr = mp->instrument();
- midiTrackInfo->iPatch->setText(instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM));
-
- int hb = ((program >> 16) & 0xff) + 1;
- if (hb == 0x100)
- hb = 0;
- int lb = ((program >> 8) & 0xff) + 1;
- if (lb == 0x100)
- lb = 0;
- int pr = (program & 0xff) + 1;
- if (pr == 0x100)
- pr = 0;
- //}
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
-
- midiTrackInfo->iHBank->setValue(hb);
- midiTrackInfo->iLBank->setValue(lb);
- midiTrackInfo->iProgram->setValue(pr);
-
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
- }
-
- MidiController* mc = mp->midiController(CTRL_VOLUME);
- int mn = mc->minVal();
- int v = mp->hwCtrlState(outChannel, CTRL_VOLUME);
- volume = v;
- if(v == CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- midiTrackInfo->iLautst->blockSignals(true);
- midiTrackInfo->iLautst->setRange(mn - 1, mc->maxVal());
- midiTrackInfo->iLautst->setValue(v);
- midiTrackInfo->iLautst->blockSignals(false);
-
- mc = mp->midiController(CTRL_PANPOT);
- mn = mc->minVal();
- v = mp->hwCtrlState(outChannel, CTRL_PANPOT);
- pan = v;
- if(v == CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mn - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- midiTrackInfo->iPan->blockSignals(true);
- midiTrackInfo->iPan->setRange(mn - 1, mc->maxVal());
- midiTrackInfo->iPan->setValue(v);
- midiTrackInfo->iPan->blockSignals(false);
- //}
-
-
- // Does it include a midi controller value adjustment? Then handle it...
- //if(flags & SC_MIDI_CONTROLLER)
- // seek();
-
- // Is it simply a midi controller value adjustment? Forget it.
- //if(flags != SC_MIDI_CONTROLLER)
- //{
- midiTrackInfo->iTransp->setValue(track->transposition);
- midiTrackInfo->iAnschl->setValue(track->velocity);
- midiTrackInfo->iVerz->setValue(track->delay);
- midiTrackInfo->iLen->setValue(track->len);
- midiTrackInfo->iKompr->setValue(track->compression);
- //}
-}
-
-/*
-//---------------------------------------------------------
-// seek
-// change values akkording to seek position
-//---------------------------------------------------------
-
-void Arranger::seek()
- {
- if (!showTrackinfoFlag || !selected)
- return;
- switch(selected->type()) {
- case Track::MIDI:
- case Track::DRUM:
- {
- MidiTrack* track = (MidiTrack*)selected;
- int outPort = track->outPort();
- int outChannel = track->outChannel();
- MidiPort* mp = &midiPorts[outPort];
-
- // int nprogram = mp->getCtrl(outChannel, tick, CTRL_PROGRAM);
- int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- {
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
- midiTrackInfo->iHBank->setValue(0);
- midiTrackInfo->iLBank->setValue(0);
- midiTrackInfo->iProgram->setValue(0);
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
-
- program = CTRL_VAL_UNKNOWN;
- nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM);
- if(nprogram == CTRL_VAL_UNKNOWN)
- midiTrackInfo->iPatch->setText(QString("<unknown>"));
- else
- {
- MidiInstrument* instr = mp->instrument();
- const char* name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM);
- midiTrackInfo->iPatch->setText(QString(name));
- }
- }
- else
- if (program != nprogram) {
- program = nprogram;
-
- //int hb, lb, pr;
- //if (program == CTRL_VAL_UNKNOWN) {
- // hb = lb = pr = 0;
- // midiTrackInfo->iPatch->setText("---");
- // }
- //else
- //{
- MidiInstrument* instr = mp->instrument();
- const char* name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM);
- midiTrackInfo->iPatch->setText(QString(name));
-
- int hb = ((program >> 16) & 0xff) + 1;
- if (hb == 0x100)
- hb = 0;
- int lb = ((program >> 8) & 0xff) + 1;
- if (lb == 0x100)
- lb = 0;
- int pr = (program & 0xff) + 1;
- if (pr == 0x100)
- pr = 0;
- //}
- midiTrackInfo->iHBank->blockSignals(true);
- midiTrackInfo->iLBank->blockSignals(true);
- midiTrackInfo->iProgram->blockSignals(true);
-
- midiTrackInfo->iHBank->setValue(hb);
- midiTrackInfo->iLBank->setValue(lb);
- midiTrackInfo->iProgram->setValue(pr);
-
- midiTrackInfo->iHBank->blockSignals(false);
- midiTrackInfo->iLBank->blockSignals(false);
- midiTrackInfo->iProgram->blockSignals(false);
- }
-
- //int nvolume = midiPorts[outPort].getCtrl(outChannel, tick, CTRL_VOLUME);
- // int npan = midiPorts[outPort].getCtrl(outChannel, tick, CTRL_PANPOT);
- MidiController* mc = mp->midiController(CTRL_VOLUME);
- int v = mp->hwCtrlState(outChannel, CTRL_VOLUME);
- if(v != volume)
- {
- volume = v;
- if(v == CTRL_VAL_UNKNOWN)
- v = mc->minVal() - 1;
- else
- v -= mc->bias();
- midiTrackInfo->iLautst->blockSignals(true);
- midiTrackInfo->iLautst->setValue(v);
- midiTrackInfo->iLautst->blockSignals(false);
- }
- mc = mp->midiController(CTRL_PANPOT);
- v = mp->hwCtrlState(outChannel, CTRL_PANPOT);
- if(v != pan)
- {
- pan = v;
- if(v == CTRL_VAL_UNKNOWN)
- //{
- //v = mc->initVal();
- //if(v == CTRL_VAL_UNKNOWN)
- // v = 0;
- v = mc->minVal() - 1;
- //}
- else
- // Auto bias...
- v -= mc->bias();
- midiTrackInfo->iPan->blockSignals(true);
- midiTrackInfo->iPan->setValue(v);
- midiTrackInfo->iPan->blockSignals(false);
- }
-
- }
- break;
- case Track::WAVE:
- case Track::AUDIO_OUTPUT:
- case Track::AUDIO_INPUT:
- case Track::AUDIO_GROUP:
- case Track::AUDIO_AUX:
- case Track::AUDIO_SOFTSYNTH:
- break;
- }
- }
-*/