2016-02-04 16:33:42 +00:00
|
|
|
#ifndef cmXScore_h
|
|
|
|
#define cmXScore_h
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
2016-02-07 04:36:53 +00:00
|
|
|
kOkXsRC = cmOkRC,
|
2016-02-04 16:33:42 +00:00
|
|
|
kXmlFailXsRC,
|
|
|
|
kLHeapFailXsRC,
|
2016-02-09 02:46:07 +00:00
|
|
|
kSyntaxErrorXsRC,
|
2016-02-12 00:23:42 +00:00
|
|
|
kCsvFailXsRC,
|
|
|
|
kUnterminatedTieXsRC,
|
2016-02-19 00:10:05 +00:00
|
|
|
kUnterminatedSlurXsRC,
|
|
|
|
kUnterminatedOctaveShiftXsrRC,
|
2016-02-26 00:10:54 +00:00
|
|
|
kMidiFailXsRC,
|
|
|
|
kFileFailXsRC
|
2016-02-07 04:36:53 +00:00
|
|
|
};
|
2016-02-04 16:33:42 +00:00
|
|
|
|
|
|
|
typedef cmRC_t cmXsRC_t;
|
|
|
|
typedef cmHandle_t cmXsH_t;
|
|
|
|
|
|
|
|
extern cmXsH_t cmXsNullHandle;
|
|
|
|
|
|
|
|
// Prepare the MusicXML file:
|
|
|
|
//
|
|
|
|
// 1) Convert XML to UTF-8:
|
2016-03-30 23:18:44 +00:00
|
|
|
// a. Change: encoding = 'UTF-16' to encoding='UTF-8'
|
2016-02-04 16:33:42 +00:00
|
|
|
// b. Emacs C-x <RET> f utf-8 <RET>
|
2016-03-30 23:18:44 +00:00
|
|
|
// c. Change: <?xml ... encoding = 'UTF-16' to encoding='UTF-8' ...?>
|
2016-02-04 16:33:42 +00:00
|
|
|
//
|
|
|
|
// 2) Replace "DoletSibelius Unknown Symbol Index" with "DoletSibelius unknownSymIdx"
|
2016-02-07 04:36:53 +00:00
|
|
|
//
|
2016-03-17 23:30:21 +00:00
|
|
|
// Steps 1) and 2) can be automated by in emacs by:
|
2016-03-16 22:34:38 +00:00
|
|
|
//
|
|
|
|
// M-x load-file ~/src/emacs/rpoc_music_xml.el
|
|
|
|
//
|
2016-02-11 00:03:17 +00:00
|
|
|
// 3) How to assigned dynamic markings (they are not attached to notes). (from MIDI file?)
|
|
|
|
// 4) Tempo syntax is inconsistent (only a problem in full part2 score)
|
|
|
|
// 5) Heel is being parsed but not used.
|
|
|
|
// 6) Sostenuto pedal events are not being parsed because they are not pedal events.
|
2016-02-09 02:46:07 +00:00
|
|
|
// 7) What is a 'pedal-change' event vs. a 'pedal-stop' event.
|
2016-02-12 00:23:42 +00:00
|
|
|
// 8) Verify the colors. (done)
|
|
|
|
// 9) Remove blank bars at end (done in xml - do in score)
|
2016-02-11 00:03:17 +00:00
|
|
|
//10) Need to assign section targets (always default to next section)
|
2016-02-12 00:23:42 +00:00
|
|
|
//11) Mark tied notes for skip. (done)
|
|
|
|
//12) Determine note off locations based on ties and slurs - defer 'pedal' to player
|
2016-02-18 00:00:15 +00:00
|
|
|
//13) Check that the measures are given in sorted order.
|
2016-02-19 00:10:05 +00:00
|
|
|
//14) Current implementation assumes meter changes only occur at measure boundaries.
|
|
|
|
//15) Score Fixes: Add meter to bar 1, fix time errors (shown in voice report)
|
2016-02-09 02:46:07 +00:00
|
|
|
|
2016-02-19 00:10:05 +00:00
|
|
|
cmXsRC_t cmXScoreInitialize( cmCtx_t* ctx, cmXsH_t* hp, const cmChar_t* xmlFn, const cmChar_t* midiFn );
|
2016-02-04 16:33:42 +00:00
|
|
|
cmXsRC_t cmXScoreFinalize( cmXsH_t* hp );
|
|
|
|
|
2016-03-30 23:18:44 +00:00
|
|
|
bool cmXScoreIsValid( cmXsH_t h );
|
2016-02-04 16:33:42 +00:00
|
|
|
|
2016-02-09 02:46:07 +00:00
|
|
|
cmXsRC_t cmXScoreWriteCsv( cmXsH_t h, const cmChar_t* csvFn );
|
|
|
|
|
2016-02-18 00:00:15 +00:00
|
|
|
cmXsRC_t cmXScoreWriteMidi( cmXsH_t h, const cmChar_t* fn );
|
|
|
|
|
2016-03-30 23:18:44 +00:00
|
|
|
void cmXScoreReport( cmXsH_t h, cmRpt_t* rpt, bool sortFl );
|
2016-02-04 16:33:42 +00:00
|
|
|
|
2016-03-30 23:18:44 +00:00
|
|
|
cmXsRC_t cmXScoreTest( cmCtx_t* ctx, const cmChar_t* xmlFn, const cmChar_t* midiFn, const cmChar_t* outFn, const cmChar_t* dynFn );
|
2016-02-04 16:33:42 +00:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|