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

#include <sequencer.h>

Inheritance diagram for jdkmidi::MIDISequencerTrackState:

jdkmidi::MIDISequencerTrackNotifier jdkmidi::MIDIProcessor List of all members.

Public Member Functions

 MIDISequencerTrackState (MIDISequencer *seq_, int trk, MIDISequencerGUIEventNotifier *n)
virtual ~MIDISequencerTrackState ()
virtual void GoToZero ()
virtual void Reset ()
virtual bool Process (MIDITimedBigMessage *msg)

Public Attributes

float tempobpm
int pg
int volume
int timesig_numerator
int timesig_denominator
int bender_value
char track_name [256]
bool got_good_track_name
bool notes_are_on
MIDIMatrix note_matrix

Constructor & Destructor Documentation

jdkmidi::MIDISequencerTrackState::MIDISequencerTrackState MIDISequencer seq_,
int  trk,
MIDISequencerGUIEventNotifier n
 

Definition at line 307 of file jdkmidi_sequencer.cpp.

References track_name.

00312     :
00313     MIDISequencerTrackNotifier( seq_, trk, n ),
00314     tempobpm( 120.0 ),
00315     volume(100),
00316     timesig_numerator(4),
00317     timesig_denominator(4),
00318     bender_value(0),
00319     got_good_track_name(false),
00320     notes_are_on(false),
00321     note_matrix()
00322   {
00323     *track_name = 0;
00324   } 
  

jdkmidi::MIDISequencerTrackState::~MIDISequencerTrackState  )  [virtual]
 

Definition at line 327 of file jdkmidi_sequencer.cpp.

00328   {
00329   } 


Member Function Documentation

void jdkmidi::MIDISequencerTrackState::GoToZero  )  [virtual]
 

Definition at line 331 of file jdkmidi_sequencer.cpp.

References bender_value, jdkmidi::MIDIMatrix::Clear(), note_matrix, tempobpm, timesig_denominator, and timesig_numerator.

00332   {
00333     tempobpm = 120.0;
00334     timesig_numerator=4;
00335     timesig_denominator=4;
00336     bender_value=0;
00337     note_matrix.Clear();
00338   } 

bool jdkmidi::MIDISequencerTrackState::Process MIDITimedBigMessage msg  )  [virtual]
 

Implements jdkmidi::MIDIProcessor.

Definition at line 354 of file jdkmidi_sequencer.cpp.

References bender_value, jdkmidi::C_MAIN_VOLUME, jdkmidi::FixQuotes(), jdkmidi::MIDIMessage::GetBenderValue(), jdkmidi::MIDISystemExclusive::GetBuf(), jdkmidi::MIDIMessage::GetController(), jdkmidi::MIDIMessage::GetControllerValue(), jdkmidi::MIDISystemExclusive::GetLength(), jdkmidi::MIDIMessage::GetMetaType(), jdkmidi::MIDIMessage::GetPGValue(), jdkmidi::MIDIBigMessage::GetSysEx(), jdkmidi::MIDIMessage::GetTempo32(), jdkmidi::MIDITimedBigMessage::GetTime(), jdkmidi::MIDIMessage::GetTimeSigDenominator(), jdkmidi::MIDIMessage::GetTimeSigNumerator(), jdkmidi::MIDIMatrix::GetTotalCount(), jdkmidi::MIDIMessage::GetType(), got_good_track_name, jdkmidi::MIDIMessage::IsChannelMsg(), jdkmidi::MIDIMessage::IsControlChange(), jdkmidi::MIDIMessage::IsMetaEvent(), jdkmidi::MIDIMessage::IsNoOp(), jdkmidi::MIDIMessage::IsProgramChange(), jdkmidi::MIDIMessage::IsTempo(), jdkmidi::META_GENERIC_TEXT, jdkmidi::META_INSTRUMENT_NAME, jdkmidi::META_TIMESIG, jdkmidi::META_TRACK_NAME, note_matrix, notes_are_on, jdkmidi::MIDISequencerTrackNotifier::Notify(), jdkmidi::MIDISequencerTrackNotifier::NotifyConductor(), pg, jdkmidi::PITCH_BEND, jdkmidi::MIDIMatrix::Process(), tempobpm, timesig_denominator, timesig_numerator, track_name, and volume.

00355   {
00356     // is the event a NoOp?
00357     
00358     if( msg->IsNoOp() )
00359     {
00360       // yes, ignore event.
00361       
00362       return false;
00363     }
00364     
00365     // is it a normal MIDI channel message?
00366     if( msg->IsChannelMsg() )
00367     {
00368       
00369       if( msg->GetType()==PITCH_BEND ) // is it a bender event?
00370       {
00371         // yes
00372         // remember the bender wheel value
00373         
00374         bender_value = msg->GetBenderValue();
00375       }
00376       else if( msg->IsControlChange() ) // is it a control change event?
00377       {
00378         // yes
00379         
00380         // is it a volume change event?
00381         
00382         if( msg->GetController()==C_MAIN_VOLUME )
00383         {
00384           // yes, store the current volume level
00385           volume = msg->GetControllerValue();
00386           
00387           Notify(
00388             MIDISequencerGUIEvent::GROUP_TRACK_VOLUME
00389             );
00390         }
00391       }
00392       else if( msg->IsProgramChange() ) // is it a program change event?
00393       {
00394         // yes
00395         
00396         // update the current program change value
00397         pg = msg->GetPGValue();
00398         
00399         Notify(
00400           MIDISequencerGUIEvent::GROUP_TRACK_PG
00401           );
00402       }
00403       
00404     }
00405     else
00406     {
00407       // event is not a channel message. is it a meta-event?
00408       if( msg->IsMetaEvent() )
00409       {
00410         // yes, is it a tempo event
00411         if( msg->IsTempo() )
00412         {
00413           // yes get the current tempo
00414           
00415           tempobpm = ((float)msg->GetTempo32())*(1.0f/32.0f);
00416           if(tempobpm<1 )
00417           {
00418             tempobpm=120.0;
00419           }
00420           
00421           NotifyConductor(
00422             MIDISequencerGUIEvent::GROUP_CONDUCTOR_TEMPO
00423             );
00424         }
00425         else // is it a time signature event?
00426           if( msg->GetMetaType()==META_TIMESIG )
00427           {
00428             // yes, extract the current numerator and denominator
00429             
00430             timesig_numerator = msg->GetTimeSigNumerator();
00431             timesig_denominator = msg->GetTimeSigDenominator();
00432             
00433             NotifyConductor(
00434               MIDISequencerGUIEvent::GROUP_CONDUCTOR_TIMESIG
00435               );
00436             
00437           }
00438           else // is it a track name event?
00439             if( ( msg->GetMetaType()==META_TRACK_NAME
00440                   || msg->GetMetaType()==META_INSTRUMENT_NAME
00441                   || (!got_good_track_name && msg->GetMetaType()==META_GENERIC_TEXT && msg->GetTime()==0)
00442                   )
00443                 &&
00444                 msg->GetSysEx() )
00445             {
00446               got_good_track_name = true;
00447               
00448               // yes, copy the track name
00449               int len = msg->GetSysEx()->GetLength();
00450               
00451               if( len>(int)sizeof(track_name)-1 )
00452                 len=(int)sizeof(track_name)-1;
00453               
00454               memcpy(track_name, msg->GetSysEx()->GetBuf(), len );
00455               
00456               track_name[len]='\0';
00457               
00458               FixQuotes( track_name );
00459               
00460               Notify(
00461                 MIDISequencerGUIEvent::GROUP_TRACK_NAME
00462                 );
00463               
00464             }
00465         
00466       }
00467       
00468     }
00469     
00470     // pass the message to our note matrix to keep track of all notes on
00471     // on this track
00472     
00473     if( note_matrix.Process( *msg ) )
00474     {
00475       // did the "any notes on" status change?
00476       
00477       if(    (  notes_are_on && note_matrix.GetTotalCount()==0)
00478              || (!notes_are_on && note_matrix.GetTotalCount()>0 ) )
00479       {
00480         // yes, toggle our notes_are_on flag
00481         notes_are_on = !notes_are_on;
00482         
00483         // and notify the gui about the activity on this track
00484         Notify(
00485           MIDISequencerGUIEvent::GROUP_TRACK_NOTE
00486           );
00487       }
00488     }
00489     
00490     
00491     return true;
00492   } 

void jdkmidi::MIDISequencerTrackState::Reset  )  [virtual]
 

Definition at line 340 of file jdkmidi_sequencer.cpp.

References bender_value, jdkmidi::MIDIMatrix::Clear(), got_good_track_name, note_matrix, notes_are_on, tempobpm, timesig_denominator, timesig_numerator, track_name, and volume.

00341   {
00342     tempobpm = 120.0;
00343     volume=100;
00344     notes_are_on=false;
00345     timesig_numerator=4;
00346     timesig_denominator=4;
00347     bender_value=0;
00348     *track_name=0;
00349     note_matrix.Clear();
00350     got_good_track_name=false;
00351   } 


Member Data Documentation

int jdkmidi::MIDISequencerTrackState::bender_value
 

Definition at line 236 of file sequencer.h.

bool jdkmidi::MIDISequencerTrackState::got_good_track_name
 

Definition at line 238 of file sequencer.h.

MIDIMatrix jdkmidi::MIDISequencerTrackState::note_matrix
 

Definition at line 241 of file sequencer.h.

bool jdkmidi::MIDISequencerTrackState::notes_are_on
 

Definition at line 240 of file sequencer.h.

int jdkmidi::MIDISequencerTrackState::pg
 

Definition at line 232 of file sequencer.h.

float jdkmidi::MIDISequencerTrackState::tempobpm
 

Definition at line 231 of file sequencer.h.

int jdkmidi::MIDISequencerTrackState::timesig_denominator
 

Definition at line 235 of file sequencer.h.

int jdkmidi::MIDISequencerTrackState::timesig_numerator
 

Definition at line 234 of file sequencer.h.

char jdkmidi::MIDISequencerTrackState::track_name[256]
 

Definition at line 237 of file sequencer.h.

int jdkmidi::MIDISequencerTrackState::volume
 

Definition at line 233 of file sequencer.h.


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