| 
 | 
Since TSE3 is a powerful and full-featured library it contains a large number of classes. These can be split into several categories of class.
These categories of class reside in a number of namespaces. This is described below.
Song class, it contains all the other objects. These include
      Track, Part and Phrase. 
      
      These are described here. They reside in the
      TSE3 namespace.
      
| Transport | Deals with the playback/redord operations | 
| MidiScheduler | Provides access to the computer's MIDI ports | 
| Metronome | Provides a configurable metronome facility | 
| MidiEcho | A software MIDI thru port | 
| MidiFilter | Configurable filter for MIDI commands | 
      They reside in the TSE3 namespace.
      
TSE3::Ins namespace.
      Songs which are more complex than the basic
      object member functions (such as merging two Phrases).
      
      They reside in the TSE3::Util namespace.
      
      They reside in the TSE3::App namespace.
      
TSE3::Cmd namespace.
      Each listener interface class resides in the namespace that it's Notifier class resides in.
MidiClock and MidiCommand. It is fine to create
    these on the stack, copy them etc. They 'behave like the ints
    do'.
    
    Others must be created on the heap (i.e. via new), like
    Part and Phrase. This is because you will pass
    them into another object which will assume responsibility and ownership
    of them. This 'owner' will take care of deleting the object when it is
    no longer needed. If you created this object on the stack then such a
    delete will cause Undefined Behaviour.
    
Value classes are documented as such to avoid confusion.
Transport class is used to perform playback of
    Song data. To use it you must repeatedly call it's 
    poll() method to allow it to perform MIDI input and output.
    
    Perhaps you might like to call sleep() or some such function
    inbetween calls to poll() so as not to load your system
    unnecessarily.
    
MidiEvent class that is used to store MIDI data
    has two entries, one for the MIDI event, and a second which is used to hold
    a MIDI note off command if the first is a note on.
    
    The two MIDI commands must be paired
    together in the one MidiEvent for the TSE3 playback system
    to work properly.
    
    This will only be an issue to you if you are creating MIDI data
    using the TSE3 library. See the PhraseEdit class for
    information on how to create MIDI data.
| 
 |