diff options
| -rw-r--r-- | muse/TODO | 20 | ||||
| -rw-r--r-- | muse/muse/audiogroup.h | 1 | ||||
| -rw-r--r-- | muse/muse/audioinput.h | 1 | ||||
| -rw-r--r-- | muse/muse/audiooutput.h | 1 | ||||
| -rw-r--r-- | muse/muse/audiotrack.cpp | 8 | ||||
| -rw-r--r-- | muse/muse/midichannel.h | 1 | ||||
| -rw-r--r-- | muse/muse/midiinport.h | 1 | ||||
| -rw-r--r-- | muse/muse/midioutport.cpp | 1 | ||||
| -rw-r--r-- | muse/muse/midioutport.h | 1 | ||||
| -rw-r--r-- | muse/muse/midisynti.h | 1 | ||||
| -rw-r--r-- | muse/muse/miditrack.cpp | 3 | ||||
| -rw-r--r-- | muse/muse/miditrack.h | 1 | ||||
| -rw-r--r-- | muse/muse/mixer/astrip.cpp | 8 | ||||
| -rw-r--r-- | muse/muse/song.cpp | 7 | ||||
| -rw-r--r-- | muse/muse/synth.cpp | 8 | ||||
| -rw-r--r-- | muse/muse/synth.h | 2 | ||||
| -rw-r--r-- | muse/muse/track.h | 1 | ||||
| -rw-r--r-- | muse/muse/wavetrack.h | 1 | ||||
| -rw-r--r-- | muse/synti/libsynti/mess.h | 7 | 
19 files changed, 40 insertions, 34 deletions
| @@ -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; } | 
