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::AdvancedSequencer Class Reference

#include <advancedsequencer.h>

List of all members.

Public Member Functions

 AdvancedSequencer ()
virtual ~AdvancedSequencer ()
bool OpenMIDI (int in_port, int out_port, int timer_resolution=5)
void CloseMIDI ()
void SetMIDIThruEnable (bool f)
bool GetMIDIThruEnable () const
void SetMIDIThruChannel (int chan)
int GetMIDIThruChannel () const
void SetMIDIThruTranspose (int val)
int GetMIDIThruTranspose () const
bool Load (const char *fname)
void Reset ()
void GoToMeasure (int measure, int beat=0)
void GoToTime (MIDIClockTime t)
void Play (int clock_offset=0)
void RepeatPlay (bool enable, int start_measure, int end_measure)
void Pause ()
void Stop ()
bool IsPlay ()
void UnmuteAllTracks ()
void SoloTrack (int trk)
void UnSoloTrack ()
void SetTrackMute (int trk, bool f)
void SetTempoScale (double scale)
double GetTempoWithoutScale () const
double GetTempoWithScale () const
int GetMeasure () const
int GetBeat () const
int GetTimeSigNumerator () const
int GetTimeSigDenominator () const
int GetTrackNoteCount (int trk) const
const char * GetTrackName (int trk) const
int GetTrackVolume (int trk) const
void SetTrackVelocityScale (int trk, int scale)
int GetTrackVelocityScale (int trk) const
void SetTrackRechannelize (int trk, int chan)
int GetTrackRechannelize (int trk) const
void SetTrackTranspose (int trk, int trans)
int GetTrackTranspose (int trk) const
void ExtractMarkers (std::vector< std::string > *list)
int GetCurrentMarker () const
int FindFirstChannelOnTrack (int trk)
void ExtractWarpPositions ()
bool IsChainMode () const

Public Attributes

MIDIMultiProcessor thru_processor
MIDIProcessorTransposer thru_transposer
MIDIProcessorRechannelizer thru_rechannelizer
MIDIDriverDump driver
MIDIMultiTrack tracks
MIDISequencerGUIEventNotifierText notifier
MIDISequencer seq
MIDIClockTime marker_times [1024]
int num_markers
MIDIManager mgr
long repeat_start_measure
long repeat_end_measure
bool repeat_play_mode
int num_warp_positions
MIDISequencerStatewarp_positions [MAX_WARP_POSITIONS]
bool file_loaded
bool chain_mode


Constructor & Destructor Documentation

jdkmidi::AdvancedSequencer::AdvancedSequencer  ) 
 

Definition at line 28 of file jdkmidi_advancedsequencer.cpp.

00029     :
00030     thru_processor(2),
00031     thru_transposer(),
00032     thru_rechannelizer(),
00033     driver(256,stdout),
00034     tracks(17),
00035     notifier( stdout ),
00036     seq( &tracks, &notifier ),
00037     mgr( &driver, &notifier, &seq ),
00038     repeat_start_measure(0),
00039     repeat_end_measure(0),
00040     repeat_play_mode(false),
00041     num_warp_positions(0),
00042     file_loaded(false),
00043     chain_mode(false)
00044   {
00045   }
  

jdkmidi::AdvancedSequencer::~AdvancedSequencer  )  [virtual]
 

Definition at line 47 of file jdkmidi_advancedsequencer.cpp.

References CloseMIDI(), num_warp_positions, Stop(), and warp_positions.

00048   {
00049     Stop();
00050     CloseMIDI();
00051     
00052     for( int i=0; i<num_warp_positions; ++i )
00053     {
00054       delete warp_positions[i];
00055     }
00056   }


Member Function Documentation

void jdkmidi::AdvancedSequencer::CloseMIDI  ) 
 

Definition at line 89 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), driver, and Stop().

00090   {
00091     Stop();
00092 #if 0
00093     driver.StopTimer();
00094     driver.AllNotesOff();
00095     Sleep(100);
00096     driver.CloseMIDIInPort();
00097     driver.CloseMIDIOutPort();
00098 #endif
00099   }

void jdkmidi::AdvancedSequencer::ExtractMarkers std::vector< std::string > *  list  ) 
 

Definition at line 642 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::FixQuotes(), jdkmidi::MIDISystemExclusive::GetBuf(), jdkmidi::MIDIMultiTrack::GetClksPerBeat(), jdkmidi::MIDITrack::GetEventAddress(), jdkmidi::MIDISystemExclusive::GetLength(), jdkmidi::MIDIMessage::GetMetaType(), jdkmidi::MIDITrack::GetNumEvents(), jdkmidi::MIDIBigMessage::GetSysEx(), jdkmidi::MIDITimedBigMessage::GetTime(), jdkmidi::MIDIMessage::GetTimeSigDenominator(), jdkmidi::MIDIMessage::GetTimeSigNumerator(), jdkmidi::MIDIMultiTrack::GetTrack(), jdkmidi::MIDIMessage::IsMetaEvent(), jdkmidi::MIDIMessage::IsTextEvent(), jdkmidi::MIDIMessage::IsTimeSig(), marker_times, jdkmidi::META_CUE_TEXT, jdkmidi::META_GENERIC_TEXT, jdkmidi::META_MARKER_TEXT, jdkmidi::MIDIClockTime, num_markers, and tracks.

00643   {
00644     if( !file_loaded )
00645     {
00646       list->clear();
00647       num_markers=0;
00648       return;
00649     }
00650     
00651     MIDITrack *t = tracks.GetTrack(0);
00652     
00653     list->clear();
00654     int cnt=0;
00655     
00656     int measure=0;
00657     int beat=0;
00658     
00659     int timesig_numerator=4;
00660     int timesig_denominator=4;
00661     
00662     MIDIClockTime last_beat_time=0;
00663     MIDIClockTime last_event_time=0;
00664     int clks_per_beat=tracks.GetClksPerBeat();
00665     
00666     for( int i=0; i<t->GetNumEvents(); ++i )
00667     {
00668       MIDITimedBigMessage *m = t->GetEventAddress(i);
00669       
00670       if( m )
00671       {
00672         // how many beats have gone by since the last event?
00673         
00674         long beats_gone_by = (m->GetTime()-last_beat_time)/clks_per_beat;
00675         
00676         if( beats_gone_by>0 )
00677         {
00678           // calculate what our new measure/beat is
00679           beat += beats_gone_by;
00680           // carry over beat overflow to measure
00681           measure += beat/timesig_numerator;
00682           beat = beat%timesig_numerator;
00683           last_beat_time += (clks_per_beat * beats_gone_by);
00684         }
00685         
00686         
00687         if( m->IsMetaEvent() && m->IsTimeSig() )
00688         {
00689           timesig_numerator = m->GetTimeSigNumerator();
00690           timesig_denominator = m->GetTimeSigDenominator();
00691           clks_per_beat=tracks.GetClksPerBeat() * 4 / timesig_denominator;
00692         }
00693         
00694         if( m->IsTextEvent() && m->GetSysEx() )
00695         {
00696           if( (m->GetMetaType() == META_GENERIC_TEXT )
00697               || m->GetMetaType() == META_MARKER_TEXT
00698               || m->GetMetaType() == META_CUE_TEXT )
00699           {
00700             char buf[256];
00701             char line[256];
00702             
00703             memcpy( buf, m->GetSysEx()->GetBuf(), m->GetSysEx()->GetLength() );
00704             buf[ m->GetSysEx()->GetLength() ] = '\0';
00705             FixQuotes( buf );
00706             
00707             sprintf( line, "%03d:%d        %s", measure+1, beat+1, buf );
00708             list->push_back( std::string(line) );
00709             marker_times[ cnt++ ] = m->GetTime();
00710           }
00711         }
00712         
00713         last_event_time = m->GetTime();
00714       }
00715     }
00716     num_markers = cnt;
00717   }

void jdkmidi::AdvancedSequencer::ExtractWarpPositions  ) 
 

Definition at line 789 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetState(), jdkmidi::MIDISequencer::GoToMeasure(), MAX_WARP_POSITIONS, MEASURES_PER_WARP, num_warp_positions, seq, Stop(), and warp_positions.

00790   {
00791     if( !file_loaded )
00792     {
00793       for( int i=0; i<num_warp_positions; ++i )
00794       {
00795         delete warp_positions[i];
00796       }
00797       num_warp_positions=0;
00798       return;
00799     }
00800     
00801     Stop();
00802     
00803     // delete all our current warp positions
00804     
00805     for( int i=0; i<num_warp_positions; ++i )
00806     {
00807       delete warp_positions[i];
00808     }
00809     num_warp_positions=0;
00810     
00811     
00812     
00813     while(num_warp_positions<MAX_WARP_POSITIONS)
00814     {
00815       if( !seq.GoToMeasure( num_warp_positions*MEASURES_PER_WARP, 0 ) )
00816       {
00817         break;
00818       }
00819       
00820       // save current sequencer state at this position
00821       warp_positions[num_warp_positions++] =
00822         new MIDISequencerState(
00823           *seq.GetState()
00824           );
00825     }
00826     
00827     seq.GoToMeasure( 0,0 );
00828   }

int jdkmidi::AdvancedSequencer::FindFirstChannelOnTrack int  trk  ) 
 

Definition at line 752 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDIMessage::GetChannel(), jdkmidi::MIDITrack::GetEventAddress(), jdkmidi::MIDITrack::GetNumEvents(), jdkmidi::MIDIMultiTrack::GetTrack(), jdkmidi::MIDIMessage::IsChannelMsg(), and tracks.

00753   {
00754     if( !file_loaded )
00755     {
00756       return -1;
00757     }
00758     
00759     int first_channel = -1;
00760     
00761     MIDITrack *t = tracks.GetTrack(trk);
00762     
00763     if( t )
00764     {
00765       // go through all events
00766       // until we find a channel message
00767       // and then return the channel number plus 1
00768       
00769       for( int i=0; i<t->GetNumEvents(); ++i )
00770       {
00771         MIDITimedBigMessage *m = t->GetEventAddress(i);
00772         
00773         if( m )
00774         {
00775           if( m->IsChannelMsg() )
00776           {
00777             first_channel = m->GetChannel() + 1;
00778             break;
00779           }
00780         }
00781       }
00782       
00783     }
00784     
00785     return first_channel;
00786   }

int jdkmidi::AdvancedSequencer::GetBeat  )  const
 

Definition at line 463 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetCurrentBeat(), and seq.

00464   {
00465     if( !file_loaded )
00466     {
00467       return 0;
00468     }
00469     
00470     return seq.GetCurrentBeat();
00471   }

int jdkmidi::AdvancedSequencer::GetCurrentMarker  )  const
 

Definition at line 720 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetCurrentMIDIClockTime(), marker_times, jdkmidi::MIDIClockTime, num_markers, and seq.

00721   {
00722     if( !file_loaded )
00723     {
00724       return -1;
00725     }
00726     
00727     // find marker with largest time that
00728     // is before cur_time
00729     
00730     MIDIClockTime cur_time = seq.GetCurrentMIDIClockTime();
00731     
00732     cur_time+=20;
00733     
00734     int last=-1;
00735     
00736     for( int i=0; i<num_markers; ++i )
00737     {
00738       if( marker_times[i] > cur_time )
00739       {
00740         break;
00741       }
00742       else
00743       {
00744         last=i;
00745       }
00746     }
00747     return last;
00748   }

int jdkmidi::AdvancedSequencer::GetMeasure  )  const
 

Definition at line 452 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetCurrentMeasure(), and seq.

00453   {
00454     if( !file_loaded )
00455     {
00456       return 0;
00457     }
00458     
00459     return seq.GetCurrentMeasure();
00460   }

int jdkmidi::AdvancedSequencer::GetMIDIThruChannel  )  const
 

Definition at line 120 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIProcessorRechannelizer::GetRechanMap(), and thru_rechannelizer.

00121   {
00122     return thru_rechannelizer.GetRechanMap( 0 );
00123   }

bool jdkmidi::AdvancedSequencer::GetMIDIThruEnable  )  const
 

Definition at line 107 of file jdkmidi_advancedsequencer.cpp.

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

00108   {
00109     return driver.GetThruEnable();
00110   }

int jdkmidi::AdvancedSequencer::GetMIDIThruTranspose  )  const
 

Definition at line 134 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIProcessorTransposer::GetTransposeChannel(), and thru_transposer.

00135   {
00136     return thru_transposer.GetTransposeChannel( 0 );
00137   }

double jdkmidi::AdvancedSequencer::GetTempoWithoutScale  )  const
 

Definition at line 439 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDISequencer::GetCurrentTempo(), and seq.

00440   {
00441     return seq.GetCurrentTempo();
00442   }

double jdkmidi::AdvancedSequencer::GetTempoWithScale  )  const
 

Definition at line 445 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDISequencer::GetCurrentTempo(), jdkmidi::MIDISequencer::GetCurrentTempoScale(), and seq.

00446   {
00447     return seq.GetCurrentTempo() * seq.GetCurrentTempoScale();
00448   }

int jdkmidi::AdvancedSequencer::GetTimeSigDenominator  )  const
 

Definition at line 485 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackState(), seq, and jdkmidi::MIDISequencerTrackState::timesig_denominator.

00486   {
00487     if( !file_loaded )
00488     {
00489       return 4;
00490     }
00491     
00492     return seq.GetTrackState(0)->timesig_denominator;
00493   }

int jdkmidi::AdvancedSequencer::GetTimeSigNumerator  )  const
 

Definition at line 475 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackState(), seq, and jdkmidi::MIDISequencerTrackState::timesig_numerator.

00476   {
00477     if( !file_loaded )
00478     {
00479       return 4;
00480     }
00481     return seq.GetTrackState(0)->timesig_numerator;
00482   }

const char * jdkmidi::AdvancedSequencer::GetTrackName int  trk  )  const
 

Definition at line 515 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackState(), seq, and jdkmidi::MIDISequencerTrackState::track_name.

00516   {
00517     if( !file_loaded )
00518     {
00519       return "";
00520     }
00521     
00522     return seq.GetTrackState(trk)->track_name;
00523   }

int jdkmidi::AdvancedSequencer::GetTrackNoteCount int  trk  )  const
 

Definition at line 497 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDIMatrix::GetTotalCount(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDIManager::IsSeqStop(), mgr, jdkmidi::MIDISequencerTrackState::note_matrix, and seq.

00498   {
00499     if( !file_loaded )
00500     {
00501       return 0;
00502     }
00503     
00504     if( mgr.IsSeqStop() )
00505     {
00506       return 0;
00507     }
00508     else
00509     {
00510       return seq.GetTrackState(trk)->note_matrix.GetTotalCount();
00511     }
00512   }

int jdkmidi::AdvancedSequencer::GetTrackRechannelize int  trk  )  const
 

Definition at line 575 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), jdkmidi::MIDISequencerTrackProcessor::rechannel, and seq.

00576   {
00577     if( !file_loaded )
00578     {
00579       return -1;
00580     }
00581     
00582     
00583     return seq.GetTrackProcessor(trk)->rechannel;
00584   }

int jdkmidi::AdvancedSequencer::GetTrackTranspose int  trk  )  const
 

Definition at line 629 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), seq, and jdkmidi::MIDISequencerTrackProcessor::transpose.

00630   {
00631     if( !file_loaded )
00632     {
00633       return 0;
00634     }
00635     
00636     return seq.GetTrackProcessor(trk)->transpose;
00637   }

int jdkmidi::AdvancedSequencer::GetTrackVelocityScale int  trk  )  const
 

Definition at line 549 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), seq, and jdkmidi::MIDISequencerTrackProcessor::velocity_scale.

00550   {
00551     if( !file_loaded )
00552     {
00553       return 100;
00554     }
00555     
00556     return seq.GetTrackProcessor(trk)->velocity_scale;
00557   }

int jdkmidi::AdvancedSequencer::GetTrackVolume int  trk  )  const
 

Definition at line 526 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackState(), seq, and jdkmidi::MIDISequencerTrackState::volume.

00527   {
00528     if( !file_loaded )
00529     {
00530       return 100;
00531     }
00532     
00533     return seq.GetTrackState(trk)->volume;
00534   }

void jdkmidi::AdvancedSequencer::GoToMeasure int  measure,
int  beat = 0
 

Definition at line 215 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIMatrix::Clear(), file_loaded, jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencer::GoToMeasure(), jdkmidi::MIDIManager::IsSeqPlay(), MEASURES_PER_WARP, mgr, jdkmidi::MIDISequencerTrackState::note_matrix, num_warp_positions, Play(), seq, jdkmidi::MIDISequencer::SetState(), Stop(), and warp_positions.

00216   {
00217     if( !file_loaded )
00218     {
00219       return;
00220     }
00221     // figure out which warp item we use
00222     // try warp to the last warp point BEFORE the
00223     // requested measure
00224     
00225     int warp_to_item = (measure-1) / MEASURES_PER_WARP;
00226     
00227     
00228     if( warp_to_item >= num_warp_positions )
00229       warp_to_item = num_warp_positions-1;
00230     
00231     if( warp_to_item<0 )
00232       warp_to_item=0;
00233     
00234     
00235     if( mgr.IsSeqPlay() )
00236     {
00237       Stop();
00238       
00239       if( warp_positions[warp_to_item] )
00240       {
00241         seq.SetState( warp_positions[warp_to_item] );
00242       }
00243       seq.GoToMeasure( measure, beat );
00244       Play();
00245     }
00246     else
00247     {
00248       if( warp_positions[warp_to_item] )
00249       {
00250         seq.SetState( warp_positions[warp_to_item] );
00251       }
00252       
00253       seq.GoToMeasure( measure, beat );
00254       for( int i=0; i<seq.GetNumTracks(); ++i )
00255       {
00256         seq.GetTrackState(i)->note_matrix.Clear();
00257       }
00258     }
00259   }

void jdkmidi::AdvancedSequencer::GoToTime MIDIClockTime  t  ) 
 

Definition at line 199 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDISequencer::GoToTime(), jdkmidi::MIDIManager::IsSeqPlay(), mgr, jdkmidi::MIDIClockTime, Play(), seq, and Stop().

00200   {
00201     if( mgr.IsSeqPlay() )
00202     {
00203       Stop();
00204       seq.GoToTime( t+1 );
00205       Play();
00206     }
00207     else
00208     {
00209       seq.GoToTime( t+1 );
00210     }
00211     
00212   }

bool jdkmidi::AdvancedSequencer::IsChainMode  )  const [inline]
 

Definition at line 93 of file advancedsequencer.h.

References chain_mode.

00093 { return chain_mode; }

bool jdkmidi::AdvancedSequencer::IsPlay  )  [inline]
 

Definition at line 53 of file advancedsequencer.h.

References jdkmidi::MIDIManager::IsSeqPlay(), and mgr.

00054         {
00055           return mgr.IsSeqPlay();
00056         }

bool jdkmidi::AdvancedSequencer::Load const char *  fname  ) 
 

Definition at line 141 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), chain_mode, jdkmidi::MIDIMultiTrack::Clear(), driver, ExtractWarpPositions(), file_loaded, GoToMeasure(), jdkmidi::MIDIFileRead::Parse(), Reset(), jdkmidi::MIDISequencer::ResetAllTracks(), seq, Stop(), and tracks.

00142   {
00143     char realname[1024];
00144     
00145     strcpy( realname, fname );
00146     int orignamelen = strlen(fname);
00147     
00148     chain_mode =false;
00149     if( orignamelen>0 )
00150     {
00151       if( realname[orignamelen-1]=='+' )
00152       {
00153         realname[orignamelen-1]=0;
00154         chain_mode = true;
00155       }
00156     }
00157     
00158     MIDIFileReadStreamFile mfreader_stream( realname );
00159     MIDIFileReadMultiTrack track_loader( &tracks );
00160     MIDIFileRead reader( &mfreader_stream, &track_loader );
00161     
00162     Stop();
00163     driver.AllNotesOff();
00164     
00165     tracks.Clear();
00166     seq.ResetAllTracks();
00167     
00168     if( reader.Parse() )
00169     {
00170       file_loaded=true;
00171       
00172       Reset();
00173       
00174       GoToMeasure( 0 );
00175       ExtractWarpPositions();
00176       
00177     }
00178     else
00179     {
00180       file_loaded=false;
00181     }
00182     return file_loaded;
00183   }

bool jdkmidi::AdvancedSequencer::OpenMIDI int  in_port,
int  out_port,
int  timer_resolution = 5
 

Definition at line 60 of file jdkmidi_advancedsequencer.cpp.

References CloseMIDI(), and driver.

00061   {
00062 #if 0
00063     CloseMIDI();
00064     
00065     if( !driver.StartTimer( timer_resolution ) )
00066     {
00067       return false;
00068     }
00069     
00070     if( in_port!=-1 )
00071     {
00072       driver.OpenMIDIInPort( in_port );
00073     }
00074     
00075     if( driver.OpenMIDIOutPort( out_port ) )
00076     {
00077       return true;
00078     }
00079     else
00080     {
00081       return false;
00082     }
00083 #else
00084     return true;
00085 #endif
00086   }

void jdkmidi::AdvancedSequencer::Pause  ) 
 

Definition at line 323 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, and Stop().

00324   {
00325     if( !file_loaded )
00326     {
00327       return;
00328     }
00329     Stop();
00330   }

void jdkmidi::AdvancedSequencer::Play int  clock_offset = 0  ) 
 

Definition at line 262 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIMatrix::Clear(), file_loaded, jdkmidi::MIDISequencer::GetCurrentMIDIClockTime(), jdkmidi::MIDISequencer::GetCurrentTimeInMs(), jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencer::GoToMeasure(), jdkmidi::MIDISequencer::GoToTime(), mgr, jdkmidi::MIDIClockTime, jdkmidi::MIDISequencerTrackState::note_matrix, repeat_play_mode, repeat_start_measure, seq, jdkmidi::MIDIManager::SeqPlay(), jdkmidi::MIDIManager::SetSeqOffset(), jdkmidi::MIDIManager::SetTimeOffset(), and Stop().

00263   {
00264     if( !file_loaded )
00265     {
00266       return;
00267     }
00268     
00269     Stop();
00270     
00271     for( int i=0; i<seq.GetNumTracks(); ++i )
00272     {
00273       seq.GetTrackState(i)->note_matrix.Clear();
00274     }
00275     
00276     
00277     if( repeat_play_mode )
00278     {
00279       seq.GoToMeasure( repeat_start_measure );
00280     }
00281     
00282     MIDIClockTime cur_time = seq.GetCurrentMIDIClockTime();
00283     
00284     if( (long)cur_time>-clock_offset )
00285       cur_time+=clock_offset;
00286     
00287     seq.GoToTime( cur_time );
00288     
00289     mgr.SetSeqOffset( (unsigned long)seq.GetCurrentTimeInMs() );
00290     mgr.SetTimeOffset( 0 );
00291     
00292     mgr.SeqPlay();
00293   }

void jdkmidi::AdvancedSequencer::RepeatPlay bool  enable,
int  start_measure,
int  end_measure
 

Definition at line 297 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, mgr, repeat_end_measure, repeat_play_mode, repeat_start_measure, and jdkmidi::MIDIManager::SetRepeatPlay().

00298   {
00299     if( !file_loaded )
00300     {
00301       return;
00302     }
00303     
00304     if( start_measure < end_measure && start_measure>=0 )
00305     {
00306       repeat_play_mode = enable;
00307       repeat_start_measure = start_measure;
00308       repeat_end_measure = end_measure;
00309     }
00310     else
00311     {
00312       repeat_play_mode = false;
00313     }
00314     
00315     mgr.SetRepeatPlay(
00316       repeat_play_mode,
00317       repeat_start_measure,
00318       repeat_end_measure
00319       );
00320   }

void jdkmidi::AdvancedSequencer::Reset  ) 
 

Definition at line 186 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), driver, GoToMeasure(), jdkmidi::MIDISequencer::ResetAllTracks(), seq, SetTempoScale(), Stop(), UnmuteAllTracks(), and UnSoloTrack().

00187   {
00188     Stop();
00189     driver.AllNotesOff();
00190     UnmuteAllTracks();
00191     UnSoloTrack();
00192     SetTempoScale( 1.00 );
00193     
00194     seq.ResetAllTracks();
00195     GoToMeasure( 0 );
00196     
00197   }

void jdkmidi::AdvancedSequencer::SetMIDIThruChannel int  chan  ) 
 

Definition at line 112 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), driver, jdkmidi::MIDIProcessorRechannelizer::SetAllRechan(), and thru_rechannelizer.

00113   {
00114     thru_rechannelizer.SetAllRechan( chan );
00115     driver.AllNotesOff();
00116     
00117   }

void jdkmidi::AdvancedSequencer::SetMIDIThruEnable bool  f  ) 
 

Definition at line 102 of file jdkmidi_advancedsequencer.cpp.

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

00103   {
00104     driver.SetThruEnable( f );
00105   }

void jdkmidi::AdvancedSequencer::SetMIDIThruTranspose int  val  ) 
 

Definition at line 127 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), driver, jdkmidi::MIDIProcessorTransposer::SetAllTranspose(), and thru_transposer.

00128   {
00129     thru_transposer.SetAllTranspose( val );
00130     driver.AllNotesOff();
00131   }

void jdkmidi::AdvancedSequencer::SetTempoScale double  scale  ) 
 

Definition at line 429 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, seq, and jdkmidi::MIDISequencer::SetCurrentTempoScale().

00430   {
00431     if( !file_loaded )
00432     {
00433       return;
00434     }
00435     seq.SetCurrentTempoScale( scale );
00436   }

void jdkmidi::AdvancedSequencer::SetTrackMute int  trk,
bool  f
 

Definition at line 417 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), driver, file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), jdkmidi::MIDISequencerTrackProcessor::mute, and seq.

00418   {
00419     if( !file_loaded )
00420     {
00421       return;
00422     }
00423     seq.GetTrackProcessor(trk)->mute = f;
00424     driver.AllNotesOff();
00425   }

void jdkmidi::AdvancedSequencer::SetTrackRechannelize int  trk,
int  chan
 

Definition at line 561 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencerTrackState::note_matrix, jdkmidi::MIDISequencerTrackProcessor::rechannel, and seq.

00562   {
00563     if( !file_loaded )
00564     {
00565       return;
00566     }
00567     
00568     seq.GetTrackProcessor(trk)->rechannel = chan;
00569     driver.AllNotesOff();
00570     seq.GetTrackState(trk)->note_matrix.Clear();
00571     
00572   }

void jdkmidi::AdvancedSequencer::SetTrackTranspose int  trk,
int  trans
 

Definition at line 588 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDIMultiTrack::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackProcessor(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDIManager::IsSeqPlay(), mgr, jdkmidi::MIDISequencerTrackState::note_matrix, seq, jdkmidi::MIDIManager::SeqPlay(), jdkmidi::MIDIManager::SeqStop(), tracks, and jdkmidi::MIDISequencerTrackProcessor::transpose.

00589   {
00590     if( !file_loaded )
00591     {
00592       return;
00593     }
00594     
00595     bool was_playing=mgr.IsSeqPlay();
00596     
00597     if( mgr.IsSeqPlay() )
00598     {
00599       was_playing=true;
00600       mgr.SeqStop();
00601     }
00602     
00603     if( trk==-1 )
00604     {
00605       for( trk=0; trk<tracks.GetNumTracks(); ++trk )
00606       {
00607         seq.GetTrackProcessor(trk)->transpose = trans;
00608       }
00609     }
00610     else
00611     {
00612       seq.GetTrackProcessor(trk)->transpose = trans;
00613     }
00614     
00615     if( was_playing )
00616     {
00617 #if 0
00618       driver.ResetMIDIOut();
00619       driver.AllNotesOff();
00620 #endif
00621       seq.GetTrackState(trk)->note_matrix.Clear();
00622       
00623       mgr.SeqPlay();
00624     }
00625     
00626   }

void jdkmidi::AdvancedSequencer::SetTrackVelocityScale int  trk,
int  scale
 

Definition at line 538 of file jdkmidi_advancedsequencer.cpp.

References file_loaded, jdkmidi::MIDISequencer::GetTrackProcessor(), seq, and jdkmidi::MIDISequencerTrackProcessor::velocity_scale.

00539   {
00540     if( !file_loaded )
00541     {
00542       return;
00543     }
00544     
00545     seq.GetTrackProcessor(trk)->velocity_scale = scale;
00546   }

void jdkmidi::AdvancedSequencer::SoloTrack int  trk  ) 
 

Definition at line 372 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencerTrackState::note_matrix, seq, and jdkmidi::MIDISequencer::SetSoloMode().

00373   {
00374     if( !file_loaded )
00375     {
00376       return;
00377     }
00378     if( trk==-1 )
00379     {
00380       seq.SetSoloMode(false);
00381       driver.AllNotesOff();
00382       
00383       for( int i=0; i<seq.GetNumTracks(); ++i )
00384       {
00385         seq.GetTrackState(i)->note_matrix.Clear();
00386       }
00387     }
00388     else
00389     {
00390       seq.SetSoloMode(true,trk);
00391       driver.AllNotesOff();
00392       
00393       for( int i=0; i<seq.GetNumTracks(); ++i )
00394       {
00395         seq.GetTrackState(i)->note_matrix.Clear();
00396       }
00397       
00398     }
00399   }

void jdkmidi::AdvancedSequencer::Stop  ) 
 

Definition at line 333 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDIManager::IsSeqStop(), mgr, jdkmidi::MIDISequencerTrackState::note_matrix, seq, and jdkmidi::MIDIManager::SeqStop().

00334   {
00335     if( !file_loaded )
00336     {
00337       return;
00338     }
00339     if( !mgr.IsSeqStop() )
00340     {
00341       mgr.SeqStop();
00342 
00343       driver.AllNotesOff();
00344       for( int i=0; i<seq.GetNumTracks(); ++i )
00345       {
00346         seq.GetTrackState(i)->note_matrix.Clear();
00347       }
00348       
00349     }
00350   }

void jdkmidi::AdvancedSequencer::UnmuteAllTracks  ) 
 

Definition at line 354 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackProcessor(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencerTrackProcessor::mute, jdkmidi::MIDISequencerTrackState::note_matrix, and seq.

00355   {
00356     if( !file_loaded )
00357     {
00358       return;
00359     }
00360     for( int i=0; i<seq.GetNumTracks(); ++i )
00361     {
00362       if( seq.GetTrackProcessor(i)->mute )
00363       {
00364         seq.GetTrackState(i)->note_matrix.Clear();
00365         seq.GetTrackProcessor(i)->mute = false;
00366       }
00367     }
00368     
00369     driver.AllNotesOff();
00370   }

void jdkmidi::AdvancedSequencer::UnSoloTrack  ) 
 

Definition at line 402 of file jdkmidi_advancedsequencer.cpp.

References jdkmidi::MIDIDriver::AllNotesOff(), jdkmidi::MIDIMatrix::Clear(), driver, file_loaded, jdkmidi::MIDISequencer::GetNumTracks(), jdkmidi::MIDISequencer::GetTrackState(), jdkmidi::MIDISequencerTrackState::note_matrix, seq, and jdkmidi::MIDISequencer::SetSoloMode().

00403   {
00404     if( !file_loaded )
00405     {
00406       return;
00407     }
00408     seq.SetSoloMode( false );
00409     driver.AllNotesOff();
00410     for( int i=0; i<seq.GetNumTracks(); ++i )
00411     {
00412       seq.GetTrackState(i)->note_matrix.Clear();
00413     }
00414   }


Member Data Documentation

bool jdkmidi::AdvancedSequencer::chain_mode
 

Definition at line 121 of file advancedsequencer.h.

MIDIDriverDump jdkmidi::AdvancedSequencer::driver
 

Definition at line 99 of file advancedsequencer.h.

bool jdkmidi::AdvancedSequencer::file_loaded
 

Definition at line 120 of file advancedsequencer.h.

MIDIClockTime jdkmidi::AdvancedSequencer::marker_times[1024]
 

Definition at line 108 of file advancedsequencer.h.

MIDIManager jdkmidi::AdvancedSequencer::mgr
 

Definition at line 111 of file advancedsequencer.h.

MIDISequencerGUIEventNotifierText jdkmidi::AdvancedSequencer::notifier
 

Definition at line 104 of file advancedsequencer.h.

int jdkmidi::AdvancedSequencer::num_markers
 

Definition at line 109 of file advancedsequencer.h.

int jdkmidi::AdvancedSequencer::num_warp_positions
 

Definition at line 117 of file advancedsequencer.h.

long jdkmidi::AdvancedSequencer::repeat_end_measure
 

Definition at line 114 of file advancedsequencer.h.

bool jdkmidi::AdvancedSequencer::repeat_play_mode
 

Definition at line 115 of file advancedsequencer.h.

long jdkmidi::AdvancedSequencer::repeat_start_measure
 

Definition at line 113 of file advancedsequencer.h.

MIDISequencer jdkmidi::AdvancedSequencer::seq
 

Definition at line 106 of file advancedsequencer.h.

MIDIMultiProcessor jdkmidi::AdvancedSequencer::thru_processor
 

Definition at line 95 of file advancedsequencer.h.

MIDIProcessorRechannelizer jdkmidi::AdvancedSequencer::thru_rechannelizer
 

Definition at line 97 of file advancedsequencer.h.

MIDIProcessorTransposer jdkmidi::AdvancedSequencer::thru_transposer
 

Definition at line 96 of file advancedsequencer.h.

MIDIMultiTrack jdkmidi::AdvancedSequencer::tracks
 

Definition at line 101 of file advancedsequencer.h.

MIDISequencerState* jdkmidi::AdvancedSequencer::warp_positions[MAX_WARP_POSITIONS]
 

Definition at line 118 of file advancedsequencer.h.


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