summaryrefslogtreecommitdiff
path: root/muse2/muse
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2012-12-12 08:28:29 +0000
committerTim E. Real <termtech@rogers.com>2012-12-12 08:28:29 +0000
commit079a13764229873cc395c808a0333674b790edbf (patch)
tree5f3cebb50d315c0b0cddd305df44b0052e7ccd98 /muse2/muse
parentbfa869ee23aa5da09f18d930766f1d6321854c1b (diff)
Add stdint.h to vestige header.
Some WIP trying to fix odd patch name bug (shows @u@ etc).
Diffstat (limited to 'muse2/muse')
-rw-r--r--muse2/muse/instruments/minstrument.cpp4
-rw-r--r--muse2/muse/instruments/minstrument.h2
-rw-r--r--muse2/muse/synth.h9
-rw-r--r--muse2/muse/vst_native.cpp16
-rw-r--r--muse2/muse/widgets/mtrackinfo.cpp60
-rw-r--r--muse2/muse/widgets/mtrackinfo.h1
6 files changed, 77 insertions, 15 deletions
diff --git a/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp
index e2477e60..b7a2c7bf 100644
--- a/muse2/muse/instruments/minstrument.cpp
+++ b/muse2/muse/instruments/minstrument.cpp
@@ -1093,7 +1093,7 @@ void MidiInstrument::populatePatchPopup(MusEGui::PopupMenu* menu, int /*chan*/,
// getPatchName
//---------------------------------------------------------
-QString MidiInstrument::getPatchName(int /*channel*/, int prog, bool drum)
+const char* MidiInstrument::getPatchName(int /*channel*/, int prog, bool drum) const
{
int pr = prog & 0xff;
if(prog == CTRL_VAL_UNKNOWN || pr == 0xff)
@@ -1115,7 +1115,7 @@ QString MidiInstrument::getPatchName(int /*channel*/, int prog, bool drum)
&& (hbank == mp->hbank || !hb || mp->hbank == -1)
&& (lbank == mp->lbank || !lb || mp->lbank == -1))
- return mp->name;
+ return mp->name.toLatin1().constData();
}
}
return "<unknown>";
diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h
index 7ff6f7d8..665c2437 100644
--- a/muse2/muse/instruments/minstrument.h
+++ b/muse2/muse/instruments/minstrument.h
@@ -238,7 +238,7 @@ class MidiInstrument {
virtual void writeToGui(const MidiPlayEvent&) {}
virtual void reset(int);
- virtual QString getPatchName(int,int,bool);
+ virtual const char* getPatchName(int,int,bool) const;
virtual void populatePatchPopup(MusEGui::PopupMenu*, int, bool);
void read(Xml&);
void write(int level, Xml&);
diff --git a/muse2/muse/synth.h b/muse2/muse/synth.h
index c41d5535..62c461c4 100644
--- a/muse2/muse/synth.h
+++ b/muse2/muse/synth.h
@@ -270,8 +270,13 @@ class SynthI : public AudioTrack, public MidiDevice,
Synth* synth() const { return synthesizer; }
virtual bool isSynti() const { return true; }
- virtual QString getPatchName(int ch, int prog, bool dr) {
- return _sif->getPatchName(ch, prog, dr);
+ virtual const char* getPatchName(int ch, int prog, bool dr) const {
+ // REMOVE Tim.
+ const char* s = _sif->getPatchName(ch, prog, dr);
+ //fprintf(stderr, "SynthI::getPatchName patch name:%s\n", s); // REMOVE Tim.
+ return s;
+
+ ///return _sif->getPatchName(ch, prog, dr);
}
virtual void populatePatchPopup(MusEGui::PopupMenu* m, int i, bool d) {
diff --git a/muse2/muse/vst_native.cpp b/muse2/muse/vst_native.cpp
index 419c996f..6de5f8f4 100644
--- a/muse2/muse/vst_native.cpp
+++ b/muse2/muse/vst_native.cpp
@@ -956,7 +956,9 @@ VstIntPtr VstNativeSynthIF::hostCallback(VstInt32 opcode, VstInt32 index, VstInt
// Can't use song pos - it is only updated every (slow) GUI heartbeat !
//Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::song->cpos() : pos->frame, MusEGlobal::extSyncFlag.value() ? true : false);
- // TODO
+
+ //unsigned int tick_pos = MusEGlobal::audio->tickPos();
+
int p_bar, p_beat, p_tick;
p.mbt(&p_bar, &p_beat, &p_tick);
@@ -981,7 +983,6 @@ VstIntPtr VstNativeSynthIF::hostCallback(VstInt32 opcode, VstInt32 index, VstInt
_timeInfo.timeSigDenominator = n;
#endif
- // TODO
////pos->ticks_per_beat = 24;
//pos->ticks_per_beat = MusEGlobal::config.division;
@@ -1413,6 +1414,8 @@ void VstNativeSynthIF::queryPrograms()
}
//#endif
+ //fprintf(stderr, " VstNativeSynthIF::queryPrograms(): patch name:%s\n", buf); // REMOVE Tim.
+
int bankH = (prog >> 14) & 0x7f;
int bankL = (prog >> 7) & 0x7f;
int patch = prog & 0x7f;
@@ -1527,13 +1530,18 @@ const char* VstNativeSynthIF::getPatchName(int /*chan*/, int prog, bool /*drum*/
if (hbank == 0xff)
hbank = 0;
unsigned long p = (hbank << 16) | (lbank << 8) | program;
- int vp = (hbank << 14) | (lbank << 7) | program;
- if((int)vp < _plugin->numPrograms)
+ unsigned long vp = (hbank << 14) | (lbank << 7) | program;
+ //if((int)vp < _plugin->numPrograms)
+ if(vp < programs.size())
{
for(std::vector<VST_Program>::const_iterator i = programs.begin(); i != programs.end(); ++i)
{
+ //fprintf(stderr, " VstNativeSynthIF::patch name:%s\n", i->name.toLatin1().constData()); // REMOVE Tim.
if(i->program == p)
+ {
+ //fprintf(stderr, " found patch name:%s\n", i->name.toLatin1().constData()); // REMOVE Tim.
return i->name.toLatin1().constData();
+ }
}
}
return "?";
diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp
index 80b9a76a..203a81e7 100644
--- a/muse2/muse/widgets/mtrackinfo.cpp
+++ b/muse2/muse/widgets/mtrackinfo.cpp
@@ -90,6 +90,7 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
setupUi(this);
_midiDetect = false;
heartBeatCounter = 0;
+ _blockHeartbeatCount = 0;
selected = sel_track;
@@ -278,7 +279,13 @@ MidiTrackInfo::MidiTrackInfo(QWidget* parent, MusECore::Track* sel_track) : QWid
void MidiTrackInfo::heartBeat()
{
///if(!showTrackinfoFlag || !selected)
- if(!isVisible() || !isEnabled() || !selected)
+ if(_blockHeartbeatCount < 0) // error
+ {
+ fprintf(stderr, "ERROR: MidiTrackInfo::heartBeat: _blockHeartbeatCount is < 0, resetting to 0\n");
+ _blockHeartbeatCount = 0;
+ }
+
+ if(_blockHeartbeatCount > 0 || !isVisible() || !isEnabled() || !selected)
return;
switch(selected->type())
{
@@ -407,14 +414,17 @@ void MidiTrackInfo::heartBeat()
else
{
MusECore::MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, nprogram, track->isDrumTrack());
+ const QString name = instr->getPatchName(outChannel, nprogram, track->isDrumTrack());
+ //const char* name = instr->getPatchName(outChannel, nprogram, track->isDrumTrack());
if(name.isEmpty())
+ //if(name == NULL)
{
const QString n("???");
if(iPatch->text() != n)
iPatch->setText(n);
}
else if(iPatch->text() != name)
+ //else if(strcmp(iPatch->text().constData(), QChar name))
iPatch->setText(name);
}
}
@@ -448,8 +458,12 @@ void MidiTrackInfo::heartBeat()
//else
//{
MusECore::MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, program, track->isDrumTrack());
+ //const QString name = instr->getPatchName(outChannel, program, track->isDrumTrack());
+ const char* chr_name = instr->getPatchName(outChannel, program, track->isDrumTrack());
+ const QString name(chr_name);
+ //fprintf(stderr, "patch name qstring:%s charstr:%s\n", name.toLatin1().constData(), chr_name); // REMOVE Tim.
if(iPatch->text() != name)
+ //if(!strcmp(iPatch->text().toLatin1().constData(), name))
iPatch->setText(name);
int hb = ((program >> 16) & 0xff) + 1;
@@ -674,6 +688,7 @@ void MidiTrackInfo::iOutputChannelChanged(int channel)
return;
MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
if (channel != track->outChannel()) {
+ ++_blockHeartbeatCount;
// Changed by T356.
//track->setOutChannel(channel);
MusEGlobal::audio->msgIdle(true);
@@ -687,6 +702,7 @@ void MidiTrackInfo::iOutputChannelChanged(int channel)
MusEGlobal::audio->msgUpdateSoloStates(); // p4.0.14
//MusEGlobal::song->update(SC_MIDI_TRACK_PROP | SC_ROUTE); //
MusEGlobal::song->update(SC_MIDI_TRACK_PROP); //
+ --_blockHeartbeatCount;
}
}
@@ -704,6 +720,7 @@ void MidiTrackInfo::iOutputPortChanged(int index)
MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
if (port_num == track->outPort())
return;
+ ++_blockHeartbeatCount;
// Changed by T356.
//track->setOutPort(port_num);
MusEGlobal::audio->msgIdle(true);
@@ -715,6 +732,7 @@ void MidiTrackInfo::iOutputPortChanged(int index)
MusEGlobal::audio->msgUpdateSoloStates(); // p4.0.14
//MusEGlobal::song->update(SC_MIDI_TRACK_PROP | SC_ROUTE); //
MusEGlobal::song->update(SC_MIDI_TRACK_PROP); //
+ --_blockHeartbeatCount;
}
//---------------------------------------------------------
@@ -785,11 +803,14 @@ void MidiTrackInfo::iProgHBankChanged()
if(prog == 0xff && hbank == 0xff && lbank == 0xff)
{
program = MusECore::CTRL_VAL_UNKNOWN;
+ ++_blockHeartbeatCount;
if(mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM) != MusECore::CTRL_VAL_UNKNOWN)
MusEGlobal::audio->msgSetHwCtrlState(mp, channel, MusECore::CTRL_PROGRAM, MusECore::CTRL_VAL_UNKNOWN);
+ --_blockHeartbeatCount;
return;
}
+ ++_blockHeartbeatCount;
int np = mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM);
if(np == MusECore::CTRL_VAL_UNKNOWN)
{
@@ -829,6 +850,8 @@ void MidiTrackInfo::iProgHBankChanged()
MusECore::MidiInstrument* instr = mp->instrument();
iPatch->setText(instr->getPatchName(channel, program, track->isDrumTrack()));
// updateTrackInfo();
+
+ --_blockHeartbeatCount;
}
//---------------------------------------------------------
@@ -863,11 +886,14 @@ void MidiTrackInfo::iProgLBankChanged()
if(prog == 0xff && hbank == 0xff && lbank == 0xff)
{
program = MusECore::CTRL_VAL_UNKNOWN;
+ ++_blockHeartbeatCount;
if(mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM) != MusECore::CTRL_VAL_UNKNOWN)
MusEGlobal::audio->msgSetHwCtrlState(mp, channel, MusECore::CTRL_PROGRAM, MusECore::CTRL_VAL_UNKNOWN);
+ --_blockHeartbeatCount;
return;
}
+ ++_blockHeartbeatCount;
int np = mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM);
if(np == MusECore::CTRL_VAL_UNKNOWN)
{
@@ -907,6 +933,8 @@ void MidiTrackInfo::iProgLBankChanged()
MusECore::MidiInstrument* instr = mp->instrument();
iPatch->setText(instr->getPatchName(channel, program, track->isDrumTrack()));
// updateTrackInfo();
+
+ --_blockHeartbeatCount;
}
//---------------------------------------------------------
@@ -940,6 +968,7 @@ void MidiTrackInfo::iProgramChanged()
MusECore::MidiPort *mp = &MusEGlobal::midiPorts[port];
if(prog == 0xff)
{
+ ++_blockHeartbeatCount;
program = MusECore::CTRL_VAL_UNKNOWN;
iHBank->blockSignals(true);
iLBank->blockSignals(true);
@@ -950,10 +979,12 @@ void MidiTrackInfo::iProgramChanged()
if(mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM) != MusECore::CTRL_VAL_UNKNOWN)
MusEGlobal::audio->msgSetHwCtrlState(mp, channel, MusECore::CTRL_PROGRAM, MusECore::CTRL_VAL_UNKNOWN);
- return;
+ --_blockHeartbeatCount;
+ return;
}
else
{
+ ++_blockHeartbeatCount;
int np = mp->hwCtrlState(channel, MusECore::CTRL_PROGRAM);
if(np == MusECore::CTRL_VAL_UNKNOWN)
{
@@ -984,6 +1015,8 @@ void MidiTrackInfo::iProgramChanged()
MusECore::MidiInstrument* instr = mp->instrument();
iPatch->setText(instr->getPatchName(channel, program, track->isDrumTrack()));
+
+ --_blockHeartbeatCount;
}
// updateTrackInfo();
@@ -1129,9 +1162,11 @@ void MidiTrackInfo::instrPopupActivated(QAction* act)
MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
int channel = track->outChannel();
int port = track->outPort();
+ ++_blockHeartbeatCount;
MusECore::MidiPlayEvent ev(0, port, channel, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, rv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
updateTrackInfo(-1);
+ --_blockHeartbeatCount;
}
}
}
@@ -1167,9 +1202,11 @@ void MidiTrackInfo::instrPopup()
int rv = act->data().toInt();
if(rv != -1)
{
+ ++_blockHeartbeatCount;
MusECore::MidiPlayEvent ev(0, port, channel, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, rv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
updateTrackInfo(-1);
+ --_blockHeartbeatCount;
}
}
@@ -1227,10 +1264,12 @@ void MidiTrackInfo::iProgHBankDoubleCLicked()
// kiv = mctrl->maxVal();
//kiv += mctrl->bias();
//}
-
+
+ ++_blockHeartbeatCount;
//MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, num, kiv);
MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, kiv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
+ --_blockHeartbeatCount;
}
else
{
@@ -1241,8 +1280,10 @@ void MidiTrackInfo::iProgHBankDoubleCLicked()
// else
// lastv |= 0xff0000;
+ ++_blockHeartbeatCount;
MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, lastv);
MusEGlobal::audio->msgPlayMidiEvent(&ev);
+ --_blockHeartbeatCount;
}
}
else
@@ -1263,7 +1304,11 @@ void MidiTrackInfo::iProgHBankDoubleCLicked()
// curv |= 0xff0000;
if(mp->hwCtrlState(chan, MusECore::CTRL_PROGRAM) != MusECore::CTRL_VAL_UNKNOWN)
+ {
+ ++_blockHeartbeatCount;
MusEGlobal::audio->msgSetHwCtrlState(mp, chan, MusECore::CTRL_PROGRAM, MusECore::CTRL_VAL_UNKNOWN);
+ --_blockHeartbeatCount;
+ }
// MusECore::MidiPlayEvent ev(0, port, chan, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, curv);
// MusEGlobal::audio->msgPlayMidiEvent(&ev);
}
@@ -1557,6 +1602,8 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
if(!selected)
return;
MusECore::MidiTrack* track = (MusECore::MidiTrack*)selected;
+
+ ++_blockHeartbeatCount;
setLabelText();
setLabelFont();
@@ -1651,7 +1698,7 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
program = MusECore::CTRL_VAL_UNKNOWN;
nprogram = mp->lastValidHWCtrlState(outChannel, MusECore::CTRL_PROGRAM);
- if(nprogram == MusECore::CTRL_VAL_UNKNOWN)
+ if(nprogram == MusECore::CTRL_VAL_UNKNOWN)
//iPatch->setText(QString("<unknown>"));
iPatch->setText(tr("<unknown>"));
else
@@ -1737,6 +1784,7 @@ void MidiTrackInfo::updateTrackInfo(MusECore::SongChangedFlags_t flags)
iPan->blockSignals(false);
//}
+ --_blockHeartbeatCount;
}
//---------------------------------------------------------
diff --git a/muse2/muse/widgets/mtrackinfo.h b/muse2/muse/widgets/mtrackinfo.h
index d6b3f32a..bb14423d 100644
--- a/muse2/muse/widgets/mtrackinfo.h
+++ b/muse2/muse/widgets/mtrackinfo.h
@@ -43,6 +43,7 @@ class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase
bool _midiDetect;
int program, pan, volume;
int heartBeatCounter;
+ int _blockHeartbeatCount;
protected:
virtual void resizeEvent(QResizeEvent*);