Hi,


I'd like to write a generic-purpose (but mainly for ZynAddSubFX) OSC plugin* 
for LMMS and could need some help. It should communicate only via two 
functions:

        virtual void runSynth(float* outl, float* outr, unsigned long 
sample_count) = 0;
        virtual void sendOsc(const char* port, const char* args, ...) = 0;

runSynth() does the calculation for sample_count audio samples. Playing notes, 
changing knob values etc. all goes via OSC messages using sendOsc().

Now, I wondered which of the following functions of "class Instrument" I 
should implement in my Instrument subclass:

        virtual void play( sampleFrame * _working_buffer );
        virtual void playNote( NotePlayHandle * /* _note_to_play */,
                                        sampleFrame * /* _working_buf */ );
        virtual bool handleMidiEvent( const MidiEvent&, const MidiTime&, 
f_cnt_t 
offset = 0 );

I think handling it like the current ZynAddSubFX plugin, which receives MIDI 
events to handle noteOn and noteOff, is the easiest way since the plugin 
doesn't need to keep track of which notes are currently played and which 
aren't. However, a plugin using playNote() instead of handleMidiEvent() might 
support more features (e.g. per-note-pitch-envelopes)...

What are the advantages/disadvantages of the two approaches? Which should I 
choose?



Many thanks on advance,
Johannes



* Just if you wonder why I don't wait for LV2: I really need the plugin now, 
and I can not wait for a few months. It's currently the only solution for me.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
LMMS-devel mailing list
LMMS-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lmms-devel

Reply via email to