summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse2/muse/ctrl/ctrlpanel.cpp19
-rw-r--r--muse2/muse/liste/editevent.cpp8
-rw-r--r--muse2/muse/midi.cpp29
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp2
-rw-r--r--muse2/muse/part.cpp8
-rw-r--r--muse2/muse/song.cpp22
-rw-r--r--muse2/muse/songfile.cpp2
-rw-r--r--muse2/muse/track.cpp10
-rw-r--r--muse2/muse/track.h1
-rw-r--r--muse2/muse/widgets/mtrackinfo.cpp18
10 files changed, 78 insertions, 41 deletions
diff --git a/muse2/muse/ctrl/ctrlpanel.cpp b/muse2/muse/ctrl/ctrlpanel.cpp
index 88787c47..5e07e5f3 100644
--- a/muse2/muse/ctrl/ctrlpanel.cpp
+++ b/muse2/muse/ctrl/ctrlpanel.cpp
@@ -171,7 +171,7 @@ void CtrlPanel::heartBeat()
int outport;
int chan;
int cdi = editor->curDrumInstrument();
- if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1) //FINDMICHJETZT was ist das? und ähnliche dinger
+ if(_track->type() == MusECore::Track::DRUM && ((_ctrl->num() & 0xff) == 0xff) && cdi != -1)
{
outport = MusEGlobal::drumMap[cdi].port;
chan = MusEGlobal::drumMap[cdi].channel;
@@ -539,6 +539,21 @@ void CtrlPanel::setHeight(int h)
}
#if 0
+/* WARNING: INVALID CODE! *\
+ * the code which has been disabled by the above #if 0 is partly *
+ * OBSOLETE! it lacks support for new-style drum tracks, especially *
+ * the drum-controller-handling for these! *
+ * *
+ * when you ever enable that code again, first check the changes *
+ * flo93 did somewhere between revision 1188 and 1188+something *
+ * (let's say, 1195; it's NOT the revision in which this comment *
+ * has been introduced) in experimental to the currently enabled *
+ * code below. then apply similar changes to the currently disabled *
+\* code here! */
+#error "INVALID CODE. please check the comment in ctrlpanel.cpp which starts with 'WARNING: INVALID CODE'"
+just to be sure: dear compiler, please refuse to compile.
+dear user: read the comment above!
+
struct CI {
QString s;
bool used;
@@ -562,7 +577,7 @@ void CtrlPanel::ctrlPopup()
int channel = track->outChannel();
MusECore::MidiPort* port = &MusEGlobal::midiPorts[track->outPort()];
int curDrumInstrument = editor->curDrumInstrument();
- bool isDrum = track->type() == MusECore::Track::DRUM; //FINDMICHJETZT ist das wichtig?
+ bool isDrum = track->type() == MusECore::Track::DRUM;
QMenu* pop = new QMenu;
//pop->clear();
diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp
index ce53069d..32a328a8 100644
--- a/muse2/muse/liste/editevent.cpp
+++ b/muse2/muse/liste/editevent.cpp
@@ -614,12 +614,12 @@ EditCtrlDialog::EditCtrlDialog(int tick, const MusECore::Event& event,
}
///pop = new QMenu(this);
- //pop->setCheckable(false);//not necessary in Qt4
+ //pop->setCheckable(false); //not necessary in Qt4
MusECore::MidiTrack* track = part->track();
int portn = track->outPort();
MusECore::MidiPort* port = &MusEGlobal::midiPorts[portn];
- bool isDrum = track->type() == MusECore::Track::DRUM; //FINDMICHJETZT was soll das?
+ bool isDrum = track->isDrumTrack();
MusECore::MidiCtrlValListList* cll = port->controller();
ctrlList->clear();
@@ -835,7 +835,7 @@ void EditCtrlDialog::updatePatch()
int port = track->outPort();
int channel = track->outChannel();
MusECore::MidiInstrument* instr = MusEGlobal::midiPorts[port].instrument();
- patchName->setText(instr->getPatchName(channel, val, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ patchName->setText(instr->getPatchName(channel, val, MusEGlobal::song->mtype(), track->isDrumTrack()));
int hb = ((val >> 16) & 0xff) + 1;
if (hb == 0x100)
@@ -874,7 +874,7 @@ void EditCtrlDialog::instrPopup()
///instr->populatePatchPopup(pop, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM);
//QMenu* pup = new QMenu(this);
MusEGui::PopupMenu* pup = new MusEGui::PopupMenu(this);
- populatePatchPopup(instr, pup, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); //FINDMICHJETZT was soll das?
+ populatePatchPopup(instr, pup, channel, MusEGlobal::song->mtype(), track->isDrumTrack());
///if(pop->actions().count() == 0)
/// return;
diff --git a/muse2/muse/midi.cpp b/muse2/muse/midi.cpp
index 28269b20..d5ed119d 100644
--- a/muse2/muse/midi.cpp
+++ b/muse2/muse/midi.cpp
@@ -372,7 +372,7 @@ void buildMidiEventList(EventList* del, const MPEventList* el, MidiTrack* track,
int ctl = ev.dataA();
e.setA(ctl);
- if(track->type() == Track::DRUM) //FINDMICHJETZT drum controller?
+ if(track->type() == Track::DRUM)
{
// Is it a drum controller event, according to the track port's instrument?
MidiController *mc = MusEGlobal::midiPorts[track->outPort()].drumController(ctl);
@@ -808,7 +808,7 @@ void Audio::collectEvents(MusECore::MidiTrack* track, unsigned int cts, unsigned
case Controller:
{
- if (track->type() == Track::DRUM) //FINDMICHJETZT was ist das? drumcontroller -_-
+ if (track->type() == Track::DRUM)
{
int ctl = ev.dataA();
// Is it a drum controller event, according to the track port's instrument?
@@ -1026,10 +1026,9 @@ void Audio::processMidi()
event.setB(velo);
}
}
- else
- if(event.type() == MusECore::ME_CONTROLLER)
+ else if(event.type() == MusECore::ME_CONTROLLER)
{
- if(track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(track->type() == Track::DRUM)
{
ctl = event.dataA();
// Regardless of what port the event came from, is it a drum controller event
@@ -1049,6 +1048,24 @@ void Audio::processMidi()
event.setChannel(channel);
}
}
+ else if (track->type() == Track::NEW_DRUM) //FINDMICHJETZT TEST
+ {
+ ctl = event.dataA();
+ if (tport->drumController(ctl)) // is it a drum controller?
+ {
+ int pitch = ctl & 0x7f; // pitch is now the incoming pitch
+ pitch = track->map_drum_in(pitch); // pitch is now the mapped (recorded) pitch
+ event.setA(ctl & ~0xff | pitch); // map the drum ctrl's value accordingly
+
+ if (MusEGlobal::config.newDrumRecordCondition & MusECore::DONT_REC_HIDDEN &&
+ track->drummap_hidden()[pitch] )
+ continue; // skip that event, proceed with the next
+
+ if (MusEGlobal::config.newDrumRecordCondition & MusECore::DONT_REC_MUTED &&
+ track->drummap()[pitch].mute )
+ continue; // skip that event, proceed with the next
+ }
+ }
}
// MusE uses a fixed clocks per quarternote of 24.
@@ -1092,7 +1109,7 @@ void Audio::processMidi()
// to the track port so buildMidiEventList will accept it. Even though
// the port may have no device "<none>".
//
- if (track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if (track->type() == Track::DRUM) //FINDMICHJETZT no changes. TEST
{
// Is it a drum controller event?
if(mc)
diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp
index 6957e9c1..9fd0b3ed 100644
--- a/muse2/muse/midiedit/scoreedit.cpp
+++ b/muse2/muse/midiedit/scoreedit.cpp
@@ -4595,6 +4595,8 @@ void ScoreCanvas::add_new_parts(const std::map< MusECore::Part*, std::set<MusECo
*
* CURRENT TODO
* o drum controllers
+ * update ctrlcanvas/panel
+ * test!
* o my record flag handling
* o option for disabling old-style / new-style drum tracks?
*
diff --git a/muse2/muse/part.cpp b/muse2/muse/part.cpp
index 3601ff57..6407dadc 100644
--- a/muse2/muse/part.cpp
+++ b/muse2/muse/part.cpp
@@ -403,7 +403,7 @@ void addPortCtrlEvents(Event& event, Part* part, bool doClones)
MidiPort* mp = &MusEGlobal::midiPorts[port];
// Is it a drum controller event, according to the track port's instrument?
- if(mt->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(mt->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -471,7 +471,7 @@ void addPortCtrlEvents(Part* part, bool doClones)
MidiPort* mp = &MusEGlobal::midiPorts[port];
// Is it a drum controller event, according to the track port's instrument?
- if(mt->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(mt->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -530,7 +530,7 @@ void removePortCtrlEvents(Event& event, Part* part, bool doClones)
MidiPort* mp = &MusEGlobal::midiPorts[port];
// Is it a drum controller event, according to the track port's instrument?
- if(mt->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(mt->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -599,7 +599,7 @@ void removePortCtrlEvents(Part* part, bool doClones)
MidiPort* mp = &MusEGlobal::midiPorts[port];
// Is it a drum controller event, according to the track port's instrument?
- if(mt->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(mt->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp
index 98ad007a..b48f134b 100644
--- a/muse2/muse/song.cpp
+++ b/muse2/muse/song.cpp
@@ -446,7 +446,7 @@ bool Song::addEvent(Event& event, Part* part)
MidiPort* mp = &MusEGlobal::midiPorts[track->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(track->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -519,7 +519,7 @@ void Song::changeEvent(Event& oldEvent, Event& newEvent, Part* part)
int cntrl = oldEvent.dataA();
MidiPort* mp = &MusEGlobal::midiPorts[track->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(track->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -546,7 +546,7 @@ void Song::changeEvent(Event& oldEvent, Event& newEvent, Part* part)
int val = newEvent.dataB();
MidiPort* mp = &MusEGlobal::midiPorts[track->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(track->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -580,7 +580,7 @@ void Song::deleteEvent(Event& event, Part* part)
MidiPort* mp = &MusEGlobal::midiPorts[track->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(track->type() == Track::DRUM) //FINDMICHJETZT was ist das?
+ if(track->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -621,7 +621,7 @@ void Song::remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int new
for(ciMidiTrack it = _midis.begin(); it != _midis.end(); ++it)
{
MidiTrack* mt = *it;
- if(mt->type() != Track::DRUM) //FINDMICHJETZT was ist das? drumcontroller?
+ if(mt->type() != Track::DRUM)
continue;
MidiPort* trackmp = &MusEGlobal::midiPorts[mt->outPort()];
@@ -630,7 +630,7 @@ void Song::remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int new
{
MidiPart* part = (MidiPart*)(ip->second);
const EventList* el = part->cevents();
- unsigned len = part->lenTick();
+ // unsigned len = part->lenTick(); // Commented out by flo, see below
for(ciEvent ie = el->begin(); ie != el->end(); ++ie)
{
const Event& ev = ie->second;
@@ -693,7 +693,7 @@ void Song::changeAllPortDrumCtrlEvents(bool add, bool drumonly)
for(ciMidiTrack it = _midis.begin(); it != _midis.end(); ++it)
{
MidiTrack* mt = *it;
- if(mt->type() != Track::DRUM) //FINDMICHJETZT was ist das? drumcontroller
+ if(mt->type() != Track::DRUM)
continue;
trackmp = &MusEGlobal::midiPorts[mt->outPort()];
@@ -703,13 +703,15 @@ void Song::changeAllPortDrumCtrlEvents(bool add, bool drumonly)
{
MidiPart* part = (MidiPart*)(ip->second);
const EventList* el = part->cevents();
- unsigned len = part->lenTick();
+ // unsigned len = part->lenTick(); // Commented out by flo, see below
for(ciEvent ie = el->begin(); ie != el->end(); ++ie)
{
const Event& ev = ie->second;
// Added by T356. Do not handle events which are past the end of the part.
- if(ev.tick() >= len)
- break;
+ // Commented out by flo: yes, DO handle them! these are "hidden events"
+ // which may be revealed later again!
+ // if(ev.tick() >= len)
+ // break;
if(ev.type() != Controller)
continue;
diff --git a/muse2/muse/songfile.cpp b/muse2/muse/songfile.cpp
index 3096312e..b5c3382d 100644
--- a/muse2/muse/songfile.cpp
+++ b/muse2/muse/songfile.cpp
@@ -725,7 +725,7 @@ void Part::read(Xml& xml, int, bool toTrack) // int newPartOffset
newPartOffset=this->tick();
int ctl = e.dataA();
- if(mt->type() == Track::DRUM) //FINDMICHJETZT commented out: was ist das?
+ if(mt->type() == Track::DRUM)
{
// Is it a drum controller event, according to the track port's instrument?
MidiController* mc = mp->drumController(ctl);
diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp
index 31504309..4140732d 100644
--- a/muse2/muse/track.cpp
+++ b/muse2/muse/track.cpp
@@ -78,7 +78,7 @@ void addPortCtrlEvents(MidiTrack* t)
MidiPort* mp = &MusEGlobal::midiPorts[t->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(t->type() == Track::DRUM) //FINDMICHJETZT was soll das? drumcontroller -_-
+ if(t->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -126,7 +126,7 @@ void removePortCtrlEvents(MidiTrack* t)
MidiPort* mp = &MusEGlobal::midiPorts[t->outPort()];
// Is it a drum controller event, according to the track port's instrument?
- if(t->type() == Track::DRUM) //FINDMICHJETZT was soll das? drumcontroller...
+ if(t->type() == Track::DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -504,7 +504,7 @@ void MidiTrack::init_drummap(bool write_ordering)
void MidiTrack::update_drum_in_map()
{
for (int i=0;i<127;i++)
- drum_in_map[_drummap[i].enote]=i;
+ drum_in_map[(int)_drummap[i].enote]=i;
}
//---------------------------------------------------------
@@ -667,7 +667,7 @@ void MidiTrack::addPortCtrlEvents()
MidiPort* mp = &MusEGlobal::midiPorts[_outPort];
// Is it a drum controller event, according to the track port's instrument?
- if(type() == DRUM) //FINDMICHJETZT commented out. was soll das?
+ if(type() == DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
@@ -708,7 +708,7 @@ void MidiTrack::removePortCtrlEvents()
MidiPort* mp = &MusEGlobal::midiPorts[_outPort];
// Is it a drum controller event, according to the track port's instrument?
- if(type() == DRUM) //FINDMICHJETZT commented out: was soll das?
+ if(type() == DRUM)
{
MidiController* mc = mp->drumController(cntrl);
if(mc)
diff --git a/muse2/muse/track.h b/muse2/muse/track.h
index 1826f081..bbda67e4 100644
--- a/muse2/muse/track.h
+++ b/muse2/muse/track.h
@@ -202,6 +202,7 @@ class Track {
int channels() const { return _channels; }
virtual void setChannels(int n);
bool isMidiTrack() const { return type() == MIDI || type() == DRUM || type() == NEW_DRUM; }
+ bool isDrumTrack() const { return type() == DRUM || type() == NEW_DRUM; }
virtual bool canRecord() const { return false; }
virtual AutomationType automationType() const = 0;
virtual void setAutomationType(AutomationType t) = 0;
diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp
index 33462d0c..d0c0e070 100644
--- a/muse2/muse/widgets/mtrackinfo.cpp
+++ b/muse2/muse/widgets/mtrackinfo.cpp
@@ -345,7 +345,7 @@ void MidiTrackInfo::heartBeat()
else
{
MusECore::MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, nprogram, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); //FINDMICHJETZT was soll das?
+ QString name = instr->getPatchName(outChannel, nprogram, MusEGlobal::song->mtype(), track->isDrumTrack());
if(name.isEmpty())
{
const QString n("???");
@@ -391,7 +391,7 @@ void MidiTrackInfo::heartBeat()
//else
//{
MusECore::MidiInstrument* instr = mp->instrument();
- QString name = instr->getPatchName(outChannel, program, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); //FINDMICHJETZT was soll das?
+ QString name = instr->getPatchName(outChannel, program, MusEGlobal::song->mtype(), track->isDrumTrack());
if(iPatch->text() != name)
iPatch->setText(name);
@@ -762,7 +762,7 @@ void MidiTrackInfo::iProgHBankChanged()
MusEGlobal::audio->msgPlayMidiEvent(&ev);
MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->isDrumTrack()));
// updateTrackInfo();
}
@@ -840,7 +840,7 @@ void MidiTrackInfo::iProgLBankChanged()
MusEGlobal::audio->msgPlayMidiEvent(&ev);
MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->isDrumTrack()));
// updateTrackInfo();
}
@@ -918,7 +918,7 @@ void MidiTrackInfo::iProgramChanged()
MusEGlobal::audio->msgPlayMidiEvent(&ev);
MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ iPatch->setText(instr->getPatchName(channel, program, MusEGlobal::song->mtype(), track->isDrumTrack()));
}
// updateTrackInfo();
@@ -1086,8 +1086,8 @@ void MidiTrackInfo::instrPopup()
//QMenu* pup = new QMenu;
PopupMenu* pup = new PopupMenu(true);
- //instr->populatePatchPopup(pop, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM);
- populatePatchPopup(instr, pup, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); //FINDMICHJETZT was soll das?
+ //instr->populatePatchPopup(pop, channel, MusEGlobal::song->mtype(), track->isDrumTrack());
+ populatePatchPopup(instr, pup, channel, MusEGlobal::song->mtype(), track->isDrumTrack());
//if(pop->actions().count() == 0)
// return;
@@ -1411,7 +1411,7 @@ void MidiTrackInfo::updateTrackInfo(int flags)
else
{
MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(outChannel, nprogram, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ iPatch->setText(instr->getPatchName(outChannel, nprogram, MusEGlobal::song->mtype(), track->isDrumTrack()));
}
}
else
@@ -1427,7 +1427,7 @@ void MidiTrackInfo::updateTrackInfo(int flags)
//else
//{
MusECore::MidiInstrument* instr = mp->instrument();
- iPatch->setText(instr->getPatchName(outChannel, program, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM)); //FINDMICHJETZT was soll das?
+ iPatch->setText(instr->getPatchName(outChannel, program, MusEGlobal::song->mtype(), track->isDrumTrack()));
int hb = ((program >> 16) & 0xff) + 1;
if (hb == 0x100)