#include <filewritemultitrack.h>
Public Member Functions | |
MIDIFileWriteMultiTrack (const MIDIMultiTrack *mlt_, MIDIFileWriteStream *strm_) | |
virtual | ~MIDIFileWriteMultiTrack () |
bool | Write (int num_tracks, int division) |
Private Member Functions | |
virtual bool | PreWrite () |
virtual bool | PostWrite () |
Private Attributes | |
const MIDIMultiTrack * | multitrack |
MIDIFileWrite | writer |
|
Definition at line 31 of file jdkmidi_filewritemultitrack.cpp.
00035 : 00036 multitrack( mlt_ ), 00037 writer( strm_ ) 00038 { 00039 } |
|
Definition at line 41 of file jdkmidi_filewritemultitrack.cpp.
00042 { 00043 } |
|
Definition at line 113 of file jdkmidi_filewritemultitrack.cpp.
00114 { 00115 return true; 00116 } |
|
Definition at line 108 of file jdkmidi_filewritemultitrack.cpp.
00109 { 00110 return true; 00111 } |
|
Definition at line 45 of file jdkmidi_filewritemultitrack.cpp. References jdkmidi::MIDIFileWrite::ErrorOccurred(), jdkmidi::MIDITrack::GetEventAddress(), jdkmidi::MIDITrack::GetNumEvents(), jdkmidi::MIDITimedBigMessage::GetTime(), jdkmidi::MIDIMultiTrack::GetTrack(), jdkmidi::MIDIMessage::IsDataEnd(), jdkmidi::MIDIMessage::IsNoOp(), jdkmidi::MIDIClockTime, multitrack, PostWrite(), PreWrite(), jdkmidi::MIDIFileWrite::RewriteTrackLength(), jdkmidi::MIDIFileWrite::WriteEndOfTrack(), jdkmidi::MIDIFileWrite::WriteEvent(), jdkmidi::MIDIFileWrite::WriteFileHeader(), writer, and jdkmidi::MIDIFileWrite::WriteTrackHeader().
00046 { 00047 bool f=true; 00048 if( !PreWrite() ) 00049 { 00050 return false; 00051 } 00052 00053 // first, write the header. 00054 00055 writer.WriteFileHeader( (num_tracks>0), num_tracks, division ); 00056 00057 // now write each track 00058 00059 for( int i=0; i<num_tracks; ++i ) 00060 { 00061 if( writer.ErrorOccurred() ) 00062 { 00063 f=false; 00064 break; 00065 } 00066 00067 const MIDITrack *t = multitrack->GetTrack(i); 00068 00069 MIDIClockTime last_event_time=0; 00070 00071 writer.WriteTrackHeader(0); // will be rewritten later 00072 00073 if( t ) 00074 { 00075 for( int event_num=0; event_num<t->GetNumEvents(); ++event_num ) 00076 { 00077 const MIDITimedBigMessage *ev = t->GetEventAddress( event_num ); 00078 if( ev && !ev->IsNoOp() ) 00079 { 00080 last_event_time = ev->GetTime(); 00081 00082 if( !ev->IsDataEnd() ) 00083 { 00084 writer.WriteEvent( *ev ); 00085 00086 if( writer.ErrorOccurred() ) 00087 { 00088 f=false; 00089 break; 00090 } 00091 } 00092 } 00093 } 00094 } 00095 writer.WriteEndOfTrack(0); 00096 writer.RewriteTrackLength(); 00097 } 00098 00099 if( !PostWrite() ) 00100 { 00101 return false; 00102 } 00103 00104 return f; 00105 } |
|
Definition at line 50 of file filewritemultitrack.h. |
|
Definition at line 51 of file filewritemultitrack.h. |