#include <manager.h>
Inheritance diagram for jdkmidi::MIDIManager:

Public Member Functions | |
| MIDIManager (MIDIDriver *drv, MIDISequencerGUIEventNotifier *n=0, MIDISequencer *seq_=0) | |
| virtual | ~MIDIManager () |
| void | Reset () |
| void | SetSeq (MIDISequencer *seq) |
| MIDISequencer * | GetSeq () |
| const MIDISequencer * | GetSeq () const |
| MIDIDriver * | GetDriver () |
| 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 | |
| MIDIDriver * | driver |
| MIDISequencer * | sequencer |
| unsigned long | sys_time_offset |
| unsigned long | seq_time_offset |
| volatile bool | play_mode |
| volatile bool | stop_mode |
| MIDISequencerGUIEventNotifier * | notifier |
| volatile bool | repeat_play_mode |
| long | repeat_start_measure |
| long | repeat_end_measure |
|
||||||||||||||||
|
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 } |
|
|
Definition at line 51 of file jdkmidi_manager.cpp.
00052 {
00053 }
|
|
|
Definition at line 54 of file manager.h. References driver.
00055 {
00056 return driver;
00057 }
|
|
|
Definition at line 88 of file jdkmidi_manager.cpp. References sequencer.
00089 {
00090 return sequencer;
00091 }
|
|
|
Definition at line 83 of file jdkmidi_manager.cpp. References sequencer.
00084 {
00085 return sequencer;
00086 }
|
|
|
Definition at line 111 of file jdkmidi_manager.cpp. References seq_time_offset.
00112 {
00113 return seq_time_offset;
00114 }
|
|
|
Definition at line 100 of file jdkmidi_manager.cpp. References sys_time_offset.
00101 {
00102 return sys_time_offset;
00103 }
|
|
|
Definition at line 168 of file jdkmidi_manager.cpp. References play_mode.
00169 {
00170 return play_mode;
00171 }
|
|
|
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 }
|
|
|
Definition at line 173 of file jdkmidi_manager.cpp. References stop_mode.
00174 {
00175 return stop_mode;
00176 }
|
|
|
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 }
|
|
|
Definition at line 117 of file jdkmidi_manager.cpp. References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), play_mode, sequencer, and stop_mode.
|
|
|
Definition at line 150 of file jdkmidi_manager.cpp. References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), play_mode, sequencer, and stop_mode.
|
|
||||||||||||||||
|
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 }
|
|
|
Definition at line 72 of file jdkmidi_manager.cpp. References notifier, jdkmidi::MIDISequencerGUIEventNotifier::Notify(), and sequencer.
|
|
|
Definition at line 106 of file jdkmidi_manager.cpp. References seq_time_offset.
00107 {
00108 seq_time_offset = seqoff;
00109 }
|
|
|
Definition at line 95 of file jdkmidi_manager.cpp. References sys_time_offset.
00096 {
00097 sys_time_offset = off;
00098 }
|
|
|
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 }
|
|
|
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 }
|
|
|
Definition at line 285 of file jdkmidi_manager.cpp.
00286 {
00287 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|