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

#include <filereadmultitrack.h>

Inheritance diagram for jdkmidi::MIDIFileReadMultiTrack:

jdkmidi::MIDIFileEvents jdkmidi::MIDIFile List of all members.

Public Member Functions

 MIDIFileReadMultiTrack (MIDIMultiTrack *mlttrk)
virtual ~MIDIFileReadMultiTrack ()
virtual void mf_sysex (MIDIClockTime time, const MIDISystemExclusive &ex)
virtual void mf_arbitrary (MIDIClockTime time, int len, unsigned char *data)
virtual void mf_metamisc (MIDIClockTime time, int, int, unsigned char *)
virtual void mf_seqnum (MIDIClockTime time, int)
virtual void mf_smpte (MIDIClockTime time, int, int, int, int, int)
virtual void mf_timesig (MIDIClockTime time, int, int, int, int)
virtual void mf_tempo (MIDIClockTime time, unsigned long tempo)
virtual void mf_keysig (MIDIClockTime time, int, int)
virtual void mf_sqspecific (MIDIClockTime time, int, unsigned char *)
virtual void mf_text (MIDIClockTime time, int, int, unsigned char *)
virtual void mf_eot (MIDIClockTime time)
virtual void mf_error (char *)
virtual void mf_starttrack (int trk)
virtual void mf_endtrack (int trk)
virtual void mf_header (int, int, int)
virtual void ChanMessage (const MIDITimedMessage &msg)

Protected Member Functions

void AddEventToMultiTrack (const MIDITimedMessage &msg, MIDISystemExclusive *sysex, int dest_track)

Protected Attributes

MIDIMultiTrackmultitrack
int cur_track
int the_format
int num_tracks
int division

Constructor & Destructor Documentation

jdkmidi::MIDIFileReadMultiTrack::MIDIFileReadMultiTrack MIDIMultiTrack mlttrk  ) 
 

Definition at line 43 of file jdkmidi_filereadmultitrack.cpp.

00044     : multitrack( mlttrk ), cur_track(-1)
00045   {
00046     
00047   }

jdkmidi::MIDIFileReadMultiTrack::~MIDIFileReadMultiTrack  )  [virtual]
 

Definition at line 49 of file jdkmidi_filereadmultitrack.cpp.

00050   {
00051     
00052   }


Member Function Documentation

void jdkmidi::MIDIFileReadMultiTrack::AddEventToMultiTrack const MIDITimedMessage msg,
MIDISystemExclusive sysex,
int  dest_track
[protected]
 

Definition at line 71 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIMultiTrack::GetNumTracks(), jdkmidi::MIDIMultiTrack::GetTrack(), multitrack, and jdkmidi::MIDITrack::PutEvent().

00076   {
00077     if( dest_track!=-1 && dest_track<multitrack->GetNumTracks() )
00078     {
00079       MIDITrack *t = multitrack->GetTrack( dest_track );
00080       
00081       if( t )
00082       {
00083         t->PutEvent( msg, sysex );
00084       }   
00085     } 
00086   } 

void jdkmidi::MIDIFileReadMultiTrack::ChanMessage const MIDITimedMessage msg  )  [virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 104 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::MIDIMessage::GetChannel(), and the_format.

00105   {
00106     if( the_format == 0 || cur_track==0 )
00107     {
00108       // split format 0 files into separate tracks, one for each channel,
00109       // keep track 0 for tempo and meta-events
00110       
00111       AddEventToMultiTrack( msg, 0, msg.GetChannel()+1 );
00112     }
00113     else
00114     {
00115       AddEventToMultiTrack( msg, 0, cur_track );
00116     } 
00117   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_arbitrary MIDIClockTime  time,
int  len,
unsigned char *  data
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 136 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIClockTime.

00137   {
00138     // ignore arbitrary byte strings
00139   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_endtrack int  trk  )  [virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 66 of file jdkmidi_filereadmultitrack.cpp.

References cur_track.

00067   {
00068     cur_track = -1;
00069   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_eot MIDIClockTime  time  )  [virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 249 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::META_END_OF_TRACK, jdkmidi::META_EVENT, jdkmidi::MIDIClockTime, jdkmidi::MIDIMessage::SetMetaType(), jdkmidi::MIDIMessage::SetStatus(), and jdkmidi::MIDITimedMessage::SetTime().

00250   {
00251     MIDITimedMessage msg;
00252     
00253     msg.SetStatus( META_EVENT );
00254     msg.SetMetaType( META_END_OF_TRACK );
00255     msg.SetTime( time );
00256     
00257     AddEventToMultiTrack( msg, 0, cur_track );  
00258   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_error char *   )  [virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 54 of file jdkmidi_filereadmultitrack.cpp.

00055   {
00056   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_header int  ,
int  ,
int 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 89 of file jdkmidi_filereadmultitrack.cpp.

References division, multitrack, num_tracks, jdkmidi::MIDIMultiTrack::SetClksPerBeat(), and the_format.

00094   {
00095     the_format = the_format_;
00096     num_tracks = ntrks_;
00097     division = division_;
00098     
00099     multitrack->SetClksPerBeat( division );
00100     
00101   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_keysig MIDIClockTime  time,
int  ,
int 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 213 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::MIDIClockTime, jdkmidi::MIDIMessage::SetKeySig(), and jdkmidi::MIDITimedMessage::SetTime().

00214   {
00215     MIDITimedMessage msg;
00216     
00217     msg.SetKeySig( (unsigned char)c, (unsigned char)v );
00218     msg.SetTime( time );
00219     
00220     AddEventToMultiTrack( msg, 0, cur_track );    
00221   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_metamisc MIDIClockTime  time,
int  ,
int  ,
unsigned char * 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 142 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIClockTime.

00143   {
00144     // ignore miscellaneous meta events
00145   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_seqnum MIDIClockTime  time,
int 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 148 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIClockTime.

00149   {
00150     // ignore sequence number events
00151   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_smpte MIDIClockTime  time,
int  ,
int  ,
int  ,
int  ,
int 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 154 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIClockTime.

00155   {
00156     // ignore smpte events
00157   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_sqspecific MIDIClockTime  time,
int  ,
unsigned char * 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 224 of file jdkmidi_filereadmultitrack.cpp.

References jdkmidi::MIDIClockTime.

00225   {
00226     // ignore any sequencer specific messages
00227   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_starttrack int  trk  )  [virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 60 of file jdkmidi_filereadmultitrack.cpp.

References cur_track.

00061   {
00062     cur_track = trk;
00063   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_sysex MIDIClockTime  time,
const MIDISystemExclusive ex
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 122 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::MIDIClockTime, jdkmidi::MIDIMessage::SetSysEx(), and jdkmidi::MIDITimedMessage::SetTime().

00123   {
00124     MIDITimedMessage msg;
00125     
00126     msg.SetSysEx();
00127     msg.SetTime(time);
00128     
00129     MIDISystemExclusive *sysex = new MIDISystemExclusive( ex );
00130     
00131     AddEventToMultiTrack( msg, sysex, cur_track );
00132   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_tempo MIDIClockTime  time,
unsigned long  tempo
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 186 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::MIDIClockTime, jdkmidi::MIDIMessage::SetTempo32(), and jdkmidi::MIDITimedMessage::SetTime().

00187   {
00188     unsigned long tempo_bpm_times_32;
00189     
00190     if( tempo==0 )
00191       tempo=1;
00192     
00193     // tempo is in microseconds per beat
00194     
00195     // calculate beats per second by
00196     
00197     float beats_per_second = 1e6   // 1 million microseconds per second
00198       / (double)tempo;
00199     
00200     float beats_per_minute = beats_per_second * 60;
00201     
00202     tempo_bpm_times_32 = (unsigned long) (beats_per_minute * 32.0);
00203     
00204     MIDITimedMessage msg;
00205     
00206     msg.SetTempo32( tempo_bpm_times_32 );
00207     msg.SetTime( time );
00208     
00209     AddEventToMultiTrack( msg, 0, cur_track );
00210   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_text MIDIClockTime  time,
int  ,
int  ,
unsigned char * 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 230 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::META_EVENT, jdkmidi::MIDIClockTime, jdkmidi::MIDISystemExclusive::PutSysByte(), jdkmidi::MIDIMessage::SetMetaType(), jdkmidi::MIDIMessage::SetStatus(), jdkmidi::MIDITimedMessage::SetTime(), and uchar.

00231   {
00232     MIDITimedMessage msg;
00233     
00234     msg.SetStatus( META_EVENT );
00235     msg.SetMetaType( (uchar)type ); // remember - MF_*_TEXT* id codes match META_*_TEXT codes
00236     msg.SetTime( time );
00237     
00238     MIDISystemExclusive *sysex = new MIDISystemExclusive(len);
00239     
00240     for( int i=0; i<len; ++i )
00241     {
00242       sysex->PutSysByte( s[i] );
00243     }
00244     
00245     AddEventToMultiTrack( msg, sysex, cur_track );    
00246   } 

void jdkmidi::MIDIFileReadMultiTrack::mf_timesig MIDIClockTime  time,
int  ,
int  ,
int  ,
int 
[virtual]
 

Reimplemented from jdkmidi::MIDIFileEvents.

Definition at line 160 of file jdkmidi_filereadmultitrack.cpp.

References AddEventToMultiTrack(), cur_track, jdkmidi::MIDIClockTime, jdkmidi::MIDISystemExclusive::PutByte(), jdkmidi::MIDITimedMessage::SetTime(), and jdkmidi::MIDIMessage::SetTimeSig().

00167   {
00168     MIDITimedMessage msg;
00169     
00170     int denom= 1<<denom_power;
00171     
00172     msg.SetTimeSig( (unsigned char)num, (unsigned char)denom );
00173     msg.SetTime( time );
00174     
00175     MIDISystemExclusive *sysex = new MIDISystemExclusive( 4 );
00176     
00177     sysex->PutByte( (unsigned char)num );
00178     sysex->PutByte( (unsigned char)denom_power );
00179     sysex->PutByte( (unsigned char)clks_per_metro );
00180     sysex->PutByte( (unsigned char)notated_32nd_per_quarter );
00181     
00182     AddEventToMultiTrack( msg, sysex, cur_track );
00183   } 


Member Data Documentation

int jdkmidi::MIDIFileReadMultiTrack::cur_track [protected]
 

Definition at line 96 of file filereadmultitrack.h.

int jdkmidi::MIDIFileReadMultiTrack::division [protected]
 

Definition at line 100 of file filereadmultitrack.h.

MIDIMultiTrack* jdkmidi::MIDIFileReadMultiTrack::multitrack [protected]
 

Definition at line 95 of file filereadmultitrack.h.

int jdkmidi::MIDIFileReadMultiTrack::num_tracks [protected]
 

Definition at line 99 of file filereadmultitrack.h.

int jdkmidi::MIDIFileReadMultiTrack::the_format [protected]
 

Definition at line 98 of file filereadmultitrack.h.


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