libcm/app/cmXScore.h

78 lines
2.5 KiB
C

#ifndef cmXScore_h
#define cmXScore_h
#ifdef __cplusplus
extern "C" {
#endif
enum
{
kOkXsRC = cmOkRC,
kXmlFailXsRC,
kLHeapFailXsRC,
kSyntaxErrorXsRC,
kCsvFailXsRC,
kUnterminatedTieXsRC,
kUnterminatedSlurXsRC,
kUnterminatedOctaveShiftXsrRC,
kPedalStateErrorXsRc,
kMidiFailXsRC,
kFileFailXsRC,
kSvgFailXsRC
};
typedef cmRC_t cmXsRC_t;
typedef cmHandle_t cmXsH_t;
extern cmXsH_t cmXsNullHandle;
// Prepare the MusicXML file:
//
// 1) Convert XML to UTF-8:
// a. Change: encoding = 'UTF-16' to encoding='UTF-8'
// b. Emacs C-x <RET> f utf-8 <RET>
// c. Change: <?xml ... encoding = 'UTF-16' to encoding='UTF-8' ...?>
//
// 2) Replace "DoletSibelius Unknown Symbol Index" with "DoletSibelius unknownSymIdx"
//
// Steps 1) and 2) can be automated by in emacs by:
//
// M-x load-file ~/src/emacs/proc_music_xml.el
//
// 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.
// 7) What is a 'pedal-change' event vs. a 'pedal-stop' event.
// 8) Verify the colors. (done)
// 9) Remove blank bars at end (done in xml - do in score)
//10) Need to assign section targets (always default to next section)
//11) Mark tied notes for skip. (done)
//12) Determine note off locations based on ties and slurs - defer 'pedal' to player
//13) Check that the measures are given in sorted order.
//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)
//16) The order of notes is now correct (4/6/16) after applying
// the grace note ordering changed specified in 'score_print_mk_edit.txt',
// via cmXScoreReorder() however the ticks are now incorrect - fix them.
cmXsRC_t cmXScoreInitialize( cmCtx_t* ctx, cmXsH_t* hp, const cmChar_t* xmlFn );
cmXsRC_t cmXScoreFinalize( cmXsH_t* hp );
bool cmXScoreIsValid( cmXsH_t h );
cmXsRC_t cmXScoreWriteCsv( cmXsH_t h, const cmChar_t* csvFn );
void cmXScoreReport( cmXsH_t h, cmRpt_t* rpt, bool sortFl );
// Generate the CSV file suitable for use by cmScore.
cmXsRC_t cmXScoreTest( cmCtx_t* ctx, const cmChar_t* xmlFn, const cmChar_t* reorderFn, const cmChar_t* csvOutFn, const cmChar_t* midiOutFn );
#ifdef __cplusplus
}
#endif
#endif