libcm is a C development framework with an emphasis on audio signal processing applications.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

cmScore.h 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #ifndef cmScore_h
  2. #define cmScore_h
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. enum
  7. {
  8. kOkScRC = cmOkRC,
  9. kCsvFailScRC,
  10. kSyntaxErrScRC,
  11. kInvalidIdxScRC,
  12. kTimeLineFailScRC
  13. };
  14. enum
  15. {
  16. kInvalidEvtScId = 0,
  17. kTimeSigEvtScId,
  18. kKeySigEvtScId,
  19. kTempoEvtScId,
  20. kTrackEvtScId,
  21. kTextEvtScId,
  22. kEOTrackEvtScId,
  23. kCopyEvtScId,
  24. kBlankEvtScId,
  25. kBarEvtScId,
  26. kPgmEvtScId,
  27. kCtlEvtScId,
  28. kNonEvtScId
  29. };
  30. enum
  31. {
  32. kEvenScFl = 0x01, // This note is marked for evenness measurement
  33. kDynScFl = 0x02, // This note is marked for dynamics measurement
  34. kTempoScFl = 0x03, // This note is marked for tempo measurement
  35. kSkipScFl = 0x04, // This isn't a real event (e.g. tied note) skip over it
  36. kInvalidScFl = 0x08 // This note has a calculated time
  37. };
  38. typedef struct
  39. {
  40. unsigned type; // Event type
  41. double secs; // Time location in seconds
  42. double durSecs; // Duration in seconds
  43. unsigned index; // index of this event
  44. cmMidiByte_t pitch; // MIDI pitch of this note
  45. unsigned flags; // Attribute flags for this event
  46. unsigned dynVal; // Dynamcis value pppp to ffff (1 to 11) for this note.
  47. unsigned barNumb; // bar number of this event
  48. unsigned barNoteIdx; // index of this note in this bar
  49. } cmScoreEvt_t;
  50. typedef struct
  51. {
  52. double secs; // Time of this location
  53. unsigned evtCnt; // Count of events in evtArray[].
  54. cmScoreEvt_t** evtArray; // Events which occur at this time.
  55. unsigned evtIdx; // Index into the master event array
  56. // (p->array[]) of the first event in this loc.
  57. unsigned barNumb; // Bar number this event is contained by.
  58. } cmScoreLoc_t;
  59. typedef void (*cmScCb_t)( void* arg, const void* data, unsigned byteCnt );
  60. typedef cmRC_t cmScRC_t;
  61. typedef cmHandle_t cmScH_t;
  62. typedef void (*cmScCb_t)( void* arg, const void* data, unsigned byteCnt );
  63. extern cmScH_t cmScNullHandle;
  64. const cmChar_t* cmScEvtTypeIdToLabel( unsigned id );
  65. const cmChar_t* cmScDynIdToLabel( unsigned id );
  66. // Initialize a score object from a CSV File generated from a score spreadsheet.
  67. cmScRC_t cmScoreInitialize( cmCtx_t* ctx, cmScH_t* hp, const cmChar_t* fn, cmScCb_t cbFunc, void* cbArg );
  68. cmScRC_t cmScoreFinalize( cmScH_t* hp );
  69. // Filename of last successfuly loaded score file.
  70. const cmChar_t* cmScoreFileName( cmScH_t h );
  71. bool cmScoreIsValid( cmScH_t h );
  72. // Access the score data.
  73. unsigned cmScoreEvtCount( cmScH_t h );
  74. cmScoreEvt_t* cmScoreEvt( cmScH_t h, unsigned idx );
  75. // Access the score location data
  76. unsigned cmScoreLocCount( cmScH_t h );
  77. cmScoreLoc_t* cmScoreLoc( cmScH_t h, unsigned idx );
  78. cmScRC_t cmScoreSeqNotify( cmScH_t h );
  79. typedef enum
  80. {
  81. kInvalidMsgScId,
  82. kBeginMsgScId,
  83. kEventMsgScId,
  84. kEndMsgScId
  85. } cmScMsgTypeId_t;
  86. typedef struct
  87. {
  88. cmScMsgTypeId_t typeId;
  89. cmScoreEvt_t evt; // only used when typeId == kEventMsgScId
  90. } cmScMsg_t;
  91. cmScRC_t cmScoreDecode( const void* msg, unsigned msgByteCnt, cmScMsg_t* );
  92. void cmScorePrint( cmScH_t h, cmRpt_t* rpt );
  93. cmScRC_t cmScoreSyncTimeLine( cmScH_t scH, cmTlH_t tlH, unsigned editDistWndCnt, cmReal_t maxNoteOffsetSecs );
  94. cmScRC_t cmScoreSyncTimeLineTest( cmCtx_t* ctx, const cmChar_t* timeLineJsFn, const cmChar_t* scoreCsvFn );
  95. void cmScoreTest( cmCtx_t* ctx, const cmChar_t* fn );
  96. void cmScoreFix( cmCtx_t* ctx );
  97. #ifdef __cplusplus
  98. }
  99. #endif
  100. #endif