summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse/TODO20
-rw-r--r--muse/muse/audiogroup.h1
-rw-r--r--muse/muse/audioinput.h1
-rw-r--r--muse/muse/audiooutput.h1
-rw-r--r--muse/muse/audiotrack.cpp8
-rw-r--r--muse/muse/midichannel.h1
-rw-r--r--muse/muse/midiinport.h1
-rw-r--r--muse/muse/midioutport.cpp1
-rw-r--r--muse/muse/midioutport.h1
-rw-r--r--muse/muse/midisynti.h1
-rw-r--r--muse/muse/miditrack.cpp3
-rw-r--r--muse/muse/miditrack.h1
-rw-r--r--muse/muse/mixer/astrip.cpp8
-rw-r--r--muse/muse/song.cpp7
-rw-r--r--muse/muse/synth.cpp8
-rw-r--r--muse/muse/synth.h2
-rw-r--r--muse/muse/track.h1
-rw-r--r--muse/muse/wavetrack.h1
-rw-r--r--muse/synti/libsynti/mess.h7
19 files changed, 40 insertions, 34 deletions
diff --git a/muse/TODO b/muse/TODO
index 0fe4b9cb..38c737d1 100644
--- a/muse/TODO
+++ b/muse/TODO
@@ -1,8 +1,22 @@
-----------------------------TODO-------------------------------------------
- * - done
-(24.10.2006)
+(29.10.2006)
----------------------------------------------------------------------------
+ - Handle software synthesizer like an MidiOutPort. This eliminates
+ the extra routing from MidiOutPort to the synti and removes the
+ extra MidiOutPort. Synthesizer then have channels and MidiTrack's
+ can directly routed to synthesizer channels.
+ - change default: show MidiChannel in mixer, dont show MidiTrack
+ - Add "monitor" button to midi channel strip in mixer.
+ - add midi fifo for MESS synthesizer and repeat sending an event
+ in case the synthesizer is busy
+ - replace posix semaphores with simple "busy" flag in
+ zynaddsubfx
+ - change default: do not default to "automation read" when
+ creating new strips
+ - change default: when creating midi input strips, route input
+ to all available midi sources
+
BUGS
- updating the gui during midi recording is too slow;
a new, faster implementation is needed
@@ -18,8 +32,6 @@ BUGS
limitations; looping should be implemented internally to work
around this
- - midi import does not work as expected
-
FEATURES
- wave editor is completely broken
diff --git a/muse/muse/audiogroup.h b/muse/muse/audiogroup.h
index 89b7fc93..6436ebd1 100644
--- a/muse/muse/audiogroup.h
+++ b/muse/muse/audiogroup.h
@@ -32,7 +32,6 @@ class AudioGroup : public AudioTrack {
public:
AudioGroup() : AudioTrack(AUDIO_GROUP) {}
- virtual AudioGroup* newTrack() const { return new AudioGroup(); }
virtual void read(QDomNode);
virtual void write(Xml&) const;
virtual bool hasAuxSend() const { return true; }
diff --git a/muse/muse/audioinput.h b/muse/muse/audioinput.h
index 682d1fee..71998e13 100644
--- a/muse/muse/audioinput.h
+++ b/muse/muse/audioinput.h
@@ -35,7 +35,6 @@ class AudioInput : public AudioTrack {
public:
AudioInput();
virtual ~AudioInput();
- virtual AudioInput* newTrack() const { return new AudioInput(); }
virtual void read(QDomNode);
virtual void write(Xml&) const;
diff --git a/muse/muse/audiooutput.h b/muse/muse/audiooutput.h
index ff385efe..cb7980f3 100644
--- a/muse/muse/audiooutput.h
+++ b/muse/muse/audiooutput.h
@@ -33,7 +33,6 @@ class AudioOutput : public AudioTrack {
public:
AudioOutput();
virtual ~AudioOutput();
- virtual AudioOutput* newTrack() const { return new AudioOutput(); }
virtual void read(QDomNode);
virtual void write(Xml&) const;
diff --git a/muse/muse/audiotrack.cpp b/muse/muse/audiotrack.cpp
index b6cb821d..e486b4b5 100644
--- a/muse/muse/audiotrack.cpp
+++ b/muse/muse/audiotrack.cpp
@@ -574,8 +574,12 @@ void AudioTrack::collectInputData()
for (iRoute ir = rl->begin(); ir != rl->end(); ++ir) {
float** ptr;
int ch;
- if (ir->type == Route::TRACK) {
+ if (ir->type == Route::TRACK /*|| ir->type == Route::SYNTIPORT*/) {
AudioTrack* track = (AudioTrack*)ir->track;
+//printf("collectInputData <%s><%s> channel %d off %d\n",
+// track->name().toLatin1().data(),
+// name().toLatin1().data(),
+// track->channels(), track->off());
if (track->off() || song->bounceTrack == track)
continue;
ptr = track->buffer;
@@ -585,6 +589,8 @@ void AudioTrack::collectInputData()
ch = ir->plugin->channel();
ptr = ir->plugin->buffer();
}
+ else
+ printf("AudioTrack::collectInputRoutes(): bad route type\n");
if (copyFlag) {
copy(ch, ptr);
copyFlag = false;
diff --git a/muse/muse/midichannel.h b/muse/muse/midichannel.h
index f0718da8..b4688375 100644
--- a/muse/muse/midichannel.h
+++ b/muse/muse/midichannel.h
@@ -51,7 +51,6 @@ class MidiChannel : public MidiTrackBase {
virtual void write(Xml&) const;
virtual void read(QDomNode);
- virtual Track* newTrack() const { return 0; }
virtual bool isMute() const;
virtual Part* newPart(Part*, bool) { return 0; }
diff --git a/muse/muse/midiinport.h b/muse/muse/midiinport.h
index 9f2d5134..5d0d8464 100644
--- a/muse/muse/midiinport.h
+++ b/muse/muse/midiinport.h
@@ -44,7 +44,6 @@ class MidiInPort : public MidiTrackBase {
virtual void setName(const QString& s);
virtual void write(Xml&) const;
virtual void read(QDomNode);
- virtual Track* newTrack() const { return new MidiInPort(); }
virtual bool isMute() const { return _mute; }
virtual Part* newPart(Part*, bool) { return 0; }
diff --git a/muse/muse/midioutport.cpp b/muse/muse/midioutport.cpp
index d2d0e943..471eed3d 100644
--- a/muse/muse/midioutport.cpp
+++ b/muse/muse/midioutport.cpp
@@ -390,6 +390,7 @@ void MidiOutPort::routeEvent(const MidiEvent& event)
queueAlsaEvent(event);
break;
case Route::SYNTIPORT:
+ case Route::TRACK:
((SynthI*)(r->track))->playEvents()->insert(event);
break;
case Route::JACKMIDIPORT:
diff --git a/muse/muse/midioutport.h b/muse/muse/midioutport.h
index 44460d8d..bb9552df 100644
--- a/muse/muse/midioutport.h
+++ b/muse/muse/midioutport.h
@@ -61,7 +61,6 @@ class MidiOutPort : public MidiTrackBase {
virtual void setName(const QString& s);
virtual void write(Xml&) const;
virtual void read(QDomNode);
- virtual Track* newTrack() const { return new MidiOutPort(); }
virtual bool isMute() const { return _mute; }
virtual Part* newPart(Part*, bool) { return 0; }
diff --git a/muse/muse/midisynti.h b/muse/muse/midisynti.h
index 92041c41..95eac83c 100644
--- a/muse/muse/midisynti.h
+++ b/muse/muse/midisynti.h
@@ -41,7 +41,6 @@ class MidiSynti : public MidiTrackBase {
virtual void write(Xml&) const;
virtual bool isMute() const;
- virtual MidiSynti* newTrack() const { return new MidiSynti(); }
virtual Part* newPart(Part*, bool) { return 0; }
bool initInstance(MidiPlugin*);
diff --git a/muse/muse/miditrack.cpp b/muse/muse/miditrack.cpp
index a249114c..6f621dc8 100644
--- a/muse/muse/miditrack.cpp
+++ b/muse/muse/miditrack.cpp
@@ -605,7 +605,7 @@ void MidiTrack::getEvents(unsigned from, unsigned to, int, MPEventList* dst)
event.setB(velo);
}
}
- unsigned time = eventTime + segmentSize*(segmentCount-1);
+ unsigned time = 0; // eventTime + segmentSize*(segmentCount-1);
event.setTime(time);
dst->add(event);
}
@@ -613,4 +613,3 @@ void MidiTrack::getEvents(unsigned from, unsigned to, int, MPEventList* dst)
}
}
-
diff --git a/muse/muse/miditrack.h b/muse/muse/miditrack.h
index 87f52886..6f15831c 100644
--- a/muse/muse/miditrack.h
+++ b/muse/muse/miditrack.h
@@ -75,7 +75,6 @@ class MidiTrack : public MidiTrackBase {
virtual void read(QDomNode);
virtual void write(Xml&) const;
- virtual MidiTrack* newTrack() const { return new MidiTrack(); }
virtual Part* newPart(Part*p=0, bool clone=false);
virtual bool isMute() const;
diff --git a/muse/muse/mixer/astrip.cpp b/muse/muse/mixer/astrip.cpp
index 263467b6..c6c2ec52 100644
--- a/muse/muse/mixer/astrip.cpp
+++ b/muse/muse/mixer/astrip.cpp
@@ -653,7 +653,7 @@ static void addSyntiPorts(AudioTrack* t, QMenu* lb, RouteList* r)
continue;
QAction* it = lb->addAction(track->name());
it->setCheckable(true);
- Route route(track, -1, Route::SYNTIPORT);
+ Route route(track, -1, Route::TRACK);
it->setData(QVariant::fromValue(route));
for (iRoute ir = r->begin(); ir != r->end(); ++ir) {
@@ -795,9 +795,9 @@ void AudioStrip::oRoutePressed()
Route srcRoute(t);
Route dstRoute = n->data().value<Route>();
- if (track->type() == Track::AUDIO_SOFTSYNTH)
- srcRoute.type = Route::SYNTIPORT;
- else if (track->type() == Track::AUDIO_OUTPUT)
+// if (track->type() == Track::AUDIO_SOFTSYNTH)
+// srcRoute.type = Route::SYNTIPORT;
+ if (track->type() == Track::AUDIO_OUTPUT)
srcRoute.channel = dstRoute.channel;
if (n->isChecked())
audio->msgAddRoute(srcRoute, dstRoute);
diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp
index 429019f0..66fa6aea 100644
--- a/muse/muse/song.cpp
+++ b/muse/muse/song.cpp
@@ -1459,7 +1459,6 @@ Track* Song::addTrack(QAction* action)
}
if (sii == sl->end()) {
si->setName(instanceName);
-printf("set instance name <%s>\n", instanceName.toLatin1().data());
break;
}
}
@@ -1702,8 +1701,6 @@ void Song::insertTrack2(Track* track)
// connect routes
//
Route src(track);
- if (track->type() == Track::AUDIO_SOFTSYNTH)
- src.type = Route::SYNTIPORT;
if (track->type() == Track::AUDIO_OUTPUT || track->type() == Track::MIDI_OUT) {
foreach(Route r, *(track->inRoutes())) {
if (r.type != Route::AUXPLUGIN) {
@@ -1812,8 +1809,8 @@ void Song::removeTrack2(Track* track)
// remove routes
//
Route src(track, -1, Route::TRACK);
- if (track->type() == Track::AUDIO_SOFTSYNTH)
- src.type = Route::SYNTIPORT;
+// if (track->type() == Track::AUDIO_SOFTSYNTH)
+// src.type = Route::SYNTIPORT;
foreach (const Route r, *(track->inRoutes())) {
if (r.type != Route::TRACK && r.type != Route::SYNTIPORT)
continue;
diff --git a/muse/muse/synth.cpp b/muse/muse/synth.cpp
index 1adf3c7b..4e941ced 100644
--- a/muse/muse/synth.cpp
+++ b/muse/muse/synth.cpp
@@ -541,8 +541,11 @@ iMPEvent MessSynthIF::getData(MPEventList* el, iMPEvent i, unsigned pos, int por
}
}
else {
- printf("MessSynthIF::getData - ports < channels: TBW!"
- "(when does this occur? does it ever occur? mono/stereo?)");
+ // this happens if the synth has stereo and we switch the
+ // channel to mono
+
+ printf("MessSynthIF::getData - ports %d < channels %d\n",
+ ports, channels());
}
return i;
}
@@ -577,4 +580,3 @@ void SynthI::collectInputData()
_playEvents.clear();
}
-
diff --git a/muse/muse/synth.h b/muse/muse/synth.h
index f538842d..c4c469de 100644
--- a/muse/muse/synth.h
+++ b/muse/muse/synth.h
@@ -130,13 +130,11 @@ class SynthI : public AudioTrack, public MidiInstrument
virtual QString open() { return QString("OK");}
virtual void close() {}
- virtual Track* newTrack() const { return 0; }
virtual void collectInputData();
public:
SynthI();
virtual ~SynthI();
-// SynthI* clone() const { return 0; }
SynthIF* sif() const { return _sif; }
bool initInstance(Synth* s);
diff --git a/muse/muse/track.h b/muse/muse/track.h
index f3f28d18..f07a3282 100644
--- a/muse/muse/track.h
+++ b/muse/muse/track.h
@@ -246,7 +246,6 @@ class Track : public QObject {
void addPart(Part* p);
virtual void write(Xml&) const = 0;
- virtual Track* newTrack() const = 0;
void setRecordFlag(bool);
virtual Part* newPart(Part*p=0, bool clone = false) = 0;
diff --git a/muse/muse/wavetrack.h b/muse/muse/wavetrack.h
index f77c210d..519a0692 100644
--- a/muse/muse/wavetrack.h
+++ b/muse/muse/wavetrack.h
@@ -53,7 +53,6 @@ class WaveTrack : public AudioTrack {
~WaveTrack();
void clone(WaveTrack*);
- virtual WaveTrack* newTrack() const { return new WaveTrack(); }
virtual Part* newPart(Part*p=0, bool clone=false);
virtual void read(QDomNode);
diff --git a/muse/synti/libsynti/mess.h b/muse/synti/libsynti/mess.h
index ef5b25c1..72eabffc 100644
--- a/muse/synti/libsynti/mess.h
+++ b/muse/synti/libsynti/mess.h
@@ -48,9 +48,10 @@ class Mess {
virtual void process(float** data, int offset, int len) = 0;
- // return true on error (if synti is busy)
- // the synti has to (re-)implement processEvent() or provide
- // some of the next three functions:
+ // The synti has to (re-)implement processEvent() or provide
+ // the playNote()/setControll()/sysex() functions.
+ // The even routines return true if synti is busy and the
+ // event must be send again.
virtual bool processEvent(const MidiEvent&);
virtual bool setController(int, int, int) { return false; }