jdkmidi class library documentation

Copyright © 2004 J.D. Koftinoff Software, Ltd.

Released under the GNU General Public License (GPL)




Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

jdkmidi::MIDIManager Class Reference

#include <manager.h>

Inheritance diagram for jdkmidi::MIDIManager:

jdkmidi::MIDITick List of all members.

Public Member Functions

 MIDIManager (MIDIDriver *drv, MIDISequencerGUIEventNotifier *n=0, MIDISequencer *seq_=0)
virtual ~MIDIManager ()
void Reset ()
void SetSeq (MIDISequencer *seq)
MIDISequencerGetSeq ()
const MIDISequencerGetSeq () const
MIDIDriverGetDriver ()
void SetTimeOffset (unsigned long off)
unsigned long GetTimeOffset ()
void SetSeqOffset (unsigned long seqoff)
unsigned long GetSeqOffset ()
void SeqPlay ()
void SeqStop ()
void SetRepeatPlay (bool flag, unsigned long start_measure, unsigned long end_measure)
bool IsSeqPlay () const
bool IsSeqStop () const
bool IsSeqRepeat () const
virtual void TimeTick (unsigned long sys_time)

Protected Member Functions

virtual void TimeTickPlayMode (unsigned long sys_time_)
virtual void TimeTickStopMode (unsigned long sys_time_)

Protected Attributes

MIDIDriverdriver
MIDISequencersequencer
unsigned long sys_time_offset
unsigned long seq_time_offset
volatile bool play_mode
volatile bool stop_mode
MIDISequencerGUIEventNotifiernotifier
volatile bool repeat_play_mode
long repeat_start_measure
long repeat_end_measure

Constructor & Destructor Documentation

jdkmidi::MIDIManager::MIDIManager MIDIDriver drv,
MIDISequencerGUIEventNotifier n = 0,
MIDISequencer seq_ = 0
 

Definition at line 31 of file jdkmidi_manager.cpp.

References driver, and jdkmidi::MIDIDriver::SetTickProc().

00036     :
00037     driver(drv),
00038     sequencer(seq_),
00039     sys_time_offset(0),
00040     seq_time_offset(0),
00041     play_mode(false),
00042     stop_mode(true),
00043     notifier( n ),
00044     repeat_play_mode(false),
00045     repeat_start_measure(0),
00046     repeat_end_measure(0)
00047   {
00048     driver->SetTickProc( this );
00049   } 
  

jdkmidi::MIDIManager::~MIDIManager  )  [virtual]
 

Definition at line 51 of file jdkmidi_manager.cpp.

00052   {
00053   } 


Member Function Documentation

MIDIDriver* jdkmidi::MIDIManager::GetDriver  )  [inline]
 

Definition at line 54 of file manager.h.

References driver.

00055         {
00056           return driver;
00057         }

const MIDISequencer * jdkmidi::MIDIManager::GetSeq  )  const
 

Definition at line 88 of file jdkmidi_manager.cpp.

References sequencer.

00089   {
00090     return sequencer;
00091   } 

MIDISequencer * jdkmidi::MIDIManager::GetSeq  ) 
 

Definition at line 83 of file jdkmidi_manager.cpp.

References sequencer.

00084   {
00085     return sequencer;
00086   } 

unsigned long jdkmidi::MIDIManager::GetSeqOffset  ) 
 

Definition at line 111 of file jdkmidi_manager.cpp.

References seq_time_offset.

00112   {
00113     return seq_time_offset;
00114   } 

unsigned long jdkmidi::MIDIManager::GetTimeOffset  ) 
 

Definition at line 100 of file jdkmidi_manager.cpp.

References sys_time_offset.

00101   {
00102     return sys_time_offset;
00103   } 

bool jdkmidi::MIDIManager::IsSeqPlay  )  const
 

Definition at line 168 of file jdkmidi_manager.cpp.

References play_mode.

00169   {
00170     return play_mode;
00171   } 

bool jdkmidi::MIDIManager::IsSeqRepeat  )  const
 

Definition at line 178 of file jdkmidi_manager.cpp.

References play_mode, and repeat_play_mode.

00179   {
00180     return repeat_play_mode && play_mode;
00181   }

bool jdkmidi::MIDIManager::IsSeqStop  )  const
 

Definition at line 173 of file jdkmidi_manager.cpp.

References stop_mode.

00174   {
00175     return stop_mode;
00176   } 

void jdkmidi::MIDIManager::Reset  ) 
 

Definition at line 56 of file jdkmidi_manager.cpp.

References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), play_mode, seq_time_offset, SeqStop(), sequencer, stop_mode, and sys_time_offset.

00057   {
00058     SeqStop();
00059     sys_time_offset = 0;
00060     seq_time_offset = 0;
00061     play_mode = false;
00062     stop_mode = true;
00063     
00064     if( notifier )
00065     {
00066       notifier->Notify( sequencer, MIDISequencerGUIEvent( MIDISequencerGUIEvent::GROUP_ALL ) );
00067     }
00068   } 

void jdkmidi::MIDIManager::SeqPlay  ) 
 

Definition at line 117 of file jdkmidi_manager.cpp.

References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), play_mode, sequencer, and stop_mode.

00118   {
00119     stop_mode = false;
00120     play_mode = true;
00121     
00122     if( notifier )
00123     {
00124       notifier->Notify(  sequencer,
00125                          MIDISequencerGUIEvent(
00126                            MIDISequencerGUIEvent::GROUP_TRANSPORT,
00127                            0,
00128                            MIDISequencerGUIEvent::GROUP_TRANSPORT_MODE
00129                            ) );
00130     }
00131     
00132   } 

void jdkmidi::MIDIManager::SeqStop  ) 
 

Definition at line 150 of file jdkmidi_manager.cpp.

References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), play_mode, sequencer, and stop_mode.

00151   {
00152     play_mode = false;
00153     stop_mode = true;
00154     
00155     if( notifier )
00156     {
00157       notifier->Notify( sequencer,
00158                         MIDISequencerGUIEvent(
00159                           MIDISequencerGUIEvent::GROUP_TRANSPORT,
00160                           0,
00161                           MIDISequencerGUIEvent::GROUP_TRANSPORT_MODE
00162                           ) );
00163     }
00164     
00165   } 

void jdkmidi::MIDIManager::SetRepeatPlay bool  flag,
unsigned long  start_measure,
unsigned long  end_measure
 

Definition at line 135 of file jdkmidi_manager.cpp.

References repeat_end_measure, repeat_play_mode, and repeat_start_measure.

00140   {
00141     // shut off repeat play while we muck with values
00142     repeat_play_mode = false;
00143     repeat_start_measure = start_measure;
00144     repeat_end_measure = end_measure;
00145     
00146     // set repeat mode flag to how we want it.
00147     repeat_play_mode = flag;
00148   } 

void jdkmidi::MIDIManager::SetSeq MIDISequencer seq  ) 
 

Definition at line 72 of file jdkmidi_manager.cpp.

References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), and sequencer.

00073   {
00074     if( notifier )
00075     {
00076       notifier->Notify( sequencer, MIDISequencerGUIEvent( MIDISequencerGUIEvent::GROUP_ALL ) );
00077     }
00078     
00079     sequencer = seq;
00080   } 

void jdkmidi::MIDIManager::SetSeqOffset unsigned long  seqoff  ) 
 

Definition at line 106 of file jdkmidi_manager.cpp.

References seq_time_offset.

00107   {
00108     seq_time_offset = seqoff;
00109   } 

void jdkmidi::MIDIManager::SetTimeOffset unsigned long  off  ) 
 

Definition at line 95 of file jdkmidi_manager.cpp.

References sys_time_offset.

00096   {
00097     sys_time_offset = off;
00098   } 

void jdkmidi::MIDIManager::TimeTick unsigned long  sys_time  )  [virtual]
 

Implements jdkmidi::MIDITick.

Definition at line 183 of file jdkmidi_manager.cpp.

References play_mode, stop_mode, TimeTickPlayMode(), and TimeTickStopMode().

00184   {
00185     if( play_mode )
00186     {
00187       TimeTickPlayMode(sys_time_);
00188     }
00189     else if( stop_mode )
00190     {
00191       TimeTickStopMode(sys_time_);
00192     }
00193     
00194     
00195   } 

void jdkmidi::MIDIManager::TimeTickPlayMode unsigned long  sys_time_  )  [protected, virtual]
 

Definition at line 197 of file jdkmidi_manager.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIDriver::CanOutputMessage(), driver, jdkmidi::MIDISequencer::GetCurrentMeasure(), jdkmidi::MIDISequencer::GetCurrentTimeInMs(), jdkmidi::MIDISequencer::GetNextEvent(), jdkmidi::MIDISequencer::GetNextEventTimeMs(), jdkmidi::MIDISequencer::GoToMeasure(), notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), jdkmidi::MIDIDriver::OutputMessage(), play_mode, repeat_end_measure, repeat_play_mode, repeat_start_measure, seq_time_offset, sequencer, stop_mode, and sys_time_offset.

00198   {
00199     double sys_time = (double)sys_time_ - (double)sys_time_offset;
00200     float next_event_time = 0.0;
00201     int ev_track;
00202     MIDITimedBigMessage ev;
00203     
00204     // if we are in repeat mode, repeat if we hit end of the repeat region
00205     if( repeat_play_mode
00206         && sequencer->GetCurrentMeasure()>=repeat_end_measure
00207       )
00208     {
00209       // yes we hit the end of our repeat block
00210       // shut off all notes on
00211       driver->AllNotesOff();
00212       
00213       // now move the sequencer to our start position
00214       
00215       sequencer->GoToMeasure( repeat_start_measure );
00216       
00217       // our current raw system time is now the new system time offset
00218       
00219       sys_time_offset = sys_time_;
00220       
00221       sys_time = 0;
00222       
00223       // the sequencer time offset now must be reset to the
00224       // time in milliseconds of the sequence start point
00225       
00226       seq_time_offset = (unsigned long)sequencer->GetCurrentTimeInMs();
00227     }
00228     
00229     // find all events that exist before or at this time,
00230     // but only if we have space in the output queue to do so!
00231     
00232     // also limit ourselves to 100 midi events max.
00233     
00234     int output_count=100;
00235     
00236     while(
00237       sequencer->GetNextEventTimeMs( &next_event_time )
00238       && (next_event_time-seq_time_offset)<=sys_time
00239       && driver->CanOutputMessage()
00240       && (--output_count)>0
00241       )
00242     {
00243       // found an event! get it!
00244       
00245       if( sequencer->GetNextEvent( &ev_track, &ev ) )
00246       {
00247         // ok, tell the driver the send this message now
00248         
00249         driver->OutputMessage( ev );
00250       }
00251     }
00252     
00253     
00254     
00255     
00256     // auto stop at end of sequence
00257     
00258     if( !sequencer->GetNextEventTimeMs( &next_event_time ) )
00259     {
00260       // no events left
00261       stop_mode = true;
00262       play_mode = false;
00263       
00264       if( notifier )
00265       {
00266         notifier->Notify( sequencer,
00267                           MIDISequencerGUIEvent(
00268                             MIDISequencerGUIEvent::GROUP_TRANSPORT,
00269                             0,
00270                             MIDISequencerGUIEvent::GROUP_TRANSPORT_MODE
00271                             ) );
00272         
00273         notifier->Notify( sequencer,
00274                           MIDISequencerGUIEvent(
00275                             MIDISequencerGUIEvent::GROUP_TRANSPORT,
00276                             0,
00277                             MIDISequencerGUIEvent::GROUP_TRANSPORT_ENDOFSONG
00278                             ) );
00279         
00280       }
00281     }
00282     
00283   } 

void jdkmidi::MIDIManager::TimeTickStopMode unsigned long  sys_time_  )  [protected, virtual]
 

Definition at line 285 of file jdkmidi_manager.cpp.

00286   {
00287   } 


Member Data Documentation

MIDIDriver* jdkmidi::MIDIManager::driver [protected]
 

Definition at line 92 of file manager.h.

MIDISequencerGUIEventNotifier* jdkmidi::MIDIManager::notifier [protected]
 

Definition at line 102 of file manager.h.

volatile bool jdkmidi::MIDIManager::play_mode [protected]
 

Definition at line 99 of file manager.h.

long jdkmidi::MIDIManager::repeat_end_measure [protected]
 

Definition at line 106 of file manager.h.

volatile bool jdkmidi::MIDIManager::repeat_play_mode [protected]
 

Definition at line 104 of file manager.h.

long jdkmidi::MIDIManager::repeat_start_measure [protected]
 

Definition at line 105 of file manager.h.

unsigned long jdkmidi::MIDIManager::seq_time_offset [protected]
 

Definition at line 97 of file manager.h.

MIDISequencer* jdkmidi::MIDIManager::sequencer [protected]
 

Definition at line 94 of file manager.h.

volatile bool jdkmidi::MIDIManager::stop_mode [protected]
 

Definition at line 100 of file manager.h.

unsigned long jdkmidi::MIDIManager::sys_time_offset [protected]
 

Definition at line 96 of file manager.h.


The documentation for this class was generated from the following files: