From be0685400f7a9ab3e7e287872620b589a897961a Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Sun, 29 Oct 2006 18:17:21 +0000 Subject: updates --- muse/TODO | 20 ++++++++++++++++---- muse/muse/audiogroup.h | 1 - muse/muse/audioinput.h | 1 - muse/muse/audiooutput.h | 1 - muse/muse/audiotrack.cpp | 8 +++++++- muse/muse/midichannel.h | 1 - muse/muse/midiinport.h | 1 - muse/muse/midioutport.cpp | 1 + muse/muse/midioutport.h | 1 - muse/muse/midisynti.h | 1 - muse/muse/miditrack.cpp | 3 +-- muse/muse/miditrack.h | 1 - muse/muse/mixer/astrip.cpp | 8 ++++---- muse/muse/song.cpp | 7 ++----- muse/muse/synth.cpp | 8 +++++--- muse/muse/synth.h | 2 -- muse/muse/track.h | 1 - muse/muse/wavetrack.h | 1 - muse/synti/libsynti/mess.h | 7 ++++--- 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(); - 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; } -- cgit v1.2.3