#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. |