Mercurial > hg > forks > bilotrip-mj12
comparison src/midifile.c @ 40:2170556dc71f
Some cleanups.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 05 Aug 2013 23:31:35 +0300 |
parents | 1db62040204e |
children | d85542c96791 |
comparison
equal
deleted
inserted
replaced
39:54e0fc833615 | 40:2170556dc71f |
---|---|
91 #define IsMessageValid(_x) ((_x)>=msgNoteOff && (_x)<=msgMetaEvent) | 91 #define IsMessageValid(_x) ((_x)>=msgNoteOff && (_x)<=msgMetaEvent) |
92 | 92 |
93 | 93 |
94 static void midiErrorV(_MIDI_FILE *pMF, const char *fmt, va_list ap) | 94 static void midiErrorV(_MIDI_FILE *pMF, const char *fmt, va_list ap) |
95 { | 95 { |
96 (void) pMF; | |
96 printf("MIDI: "); | 97 printf("MIDI: "); |
97 vprintf(fmt, ap); | 98 vprintf(fmt, ap); |
98 } | 99 } |
99 | 100 |
100 | 101 |
596 } | 597 } |
597 | 598 |
598 BOOL midiFileFlushTrack(MIDI_FILE *_pMF, int iTrack, BOOL bFlushToEnd, | 599 BOOL midiFileFlushTrack(MIDI_FILE *_pMF, int iTrack, BOOL bFlushToEnd, |
599 Uint32 dwEndTimePos) | 600 Uint32 dwEndTimePos) |
600 { | 601 { |
601 size_t sz, i; | 602 size_t sz, index; |
602 Uint8 *ptr; | 603 Uint8 *ptr; |
603 MIDI_END_POINT *pEndPoints; | 604 MIDI_END_POINT *pEndPoints; |
604 int num, mx_pts; | 605 int num, mx_pts; |
605 BOOL bNoChanges = TRUE; | 606 //BOOL bNoChanges = TRUE; |
606 | 607 |
607 _VAR_CAST; | 608 _VAR_CAST; |
608 if (!IsFilePtrValid(pMF)) | 609 if (!IsFilePtrValid(pMF)) |
609 return FALSE; | 610 return FALSE; |
610 if (!_midiValidateTrack(pMF, iTrack)) | 611 if (!_midiValidateTrack(pMF, iTrack)) |
614 /* | 615 /* |
615 ** Flush all | 616 ** Flush all |
616 */ | 617 */ |
617 pEndPoints = (MIDI_END_POINT *) malloc(sz * sizeof(MIDI_END_POINT)); | 618 pEndPoints = (MIDI_END_POINT *) malloc(sz * sizeof(MIDI_END_POINT)); |
618 mx_pts = 0; | 619 mx_pts = 0; |
619 for (i = 0; i < sz; ++i) | 620 for (index = 0; index < sz; index++) |
620 if (pMF->Track[iTrack].LastNote[i].valid) | 621 { |
621 { | 622 if (pMF->Track[iTrack].LastNote[index].valid) |
622 pEndPoints[mx_pts].iIdx = i; | 623 { |
623 pEndPoints[mx_pts].iEndPos = | 624 pEndPoints[mx_pts].iIdx = index; |
624 pMF->Track[iTrack].LastNote[i].end_pos; | 625 pEndPoints[mx_pts].iEndPos = pMF->Track[iTrack].LastNote[index].end_pos; |
625 mx_pts++; | 626 mx_pts++; |
626 } | 627 } |
628 } | |
627 | 629 |
628 if (bFlushToEnd) | 630 if (bFlushToEnd) |
629 { | 631 { |
630 if (mx_pts) | 632 if (mx_pts) |
631 dwEndTimePos = pEndPoints[mx_pts - 1].iEndPos; | 633 dwEndTimePos = pEndPoints[mx_pts - 1].iEndPos; |
636 if (mx_pts) | 638 if (mx_pts) |
637 { | 639 { |
638 /* Sort, smallest first, and add the note off msgs */ | 640 /* Sort, smallest first, and add the note off msgs */ |
639 qsort(pEndPoints, mx_pts, sizeof(MIDI_END_POINT), qs_cmp_pEndPoints); | 641 qsort(pEndPoints, mx_pts, sizeof(MIDI_END_POINT), qs_cmp_pEndPoints); |
640 | 642 |
641 i = 0; | 643 int n = 0; |
642 while ((dwEndTimePos >= (Uint32) pEndPoints[i].iEndPos || bFlushToEnd) | 644 while ((dwEndTimePos >= (Uint32) pEndPoints[n].iEndPos || bFlushToEnd) && n < mx_pts) |
643 && i < mx_pts) | |
644 { | 645 { |
645 ptr = _midiGetPtr(pMF, iTrack, DT_DEF); | 646 ptr = _midiGetPtr(pMF, iTrack, DT_DEF); |
646 if (!ptr) | 647 if (ptr == NULL) |
647 return FALSE; | 648 return FALSE; |
648 | 649 |
649 num = pEndPoints[i].iIdx; /* get 'LastNote' index */ | 650 num = pEndPoints[n].iIdx; /* get 'LastNote' index */ |
650 | 651 |
651 ptr = | 652 ptr = _midiWriteVarLen(ptr, |
652 _midiWriteVarLen(ptr, | 653 pMF->Track[iTrack].LastNote[num].end_pos - |
653 pMF->Track[iTrack].LastNote[num].end_pos - | 654 pMF->Track[iTrack].pos); |
654 pMF->Track[iTrack].pos); | 655 |
655 /* msgNoteOn msgNoteOff */ | 656 /* msgNoteOn msgNoteOff */ |
656 *ptr++ = | 657 *ptr++ = (Uint8) (msgNoteOff | pMF->Track[iTrack].LastNote[num].chn); |
657 (Uint8) (msgNoteOff | pMF->Track[iTrack].LastNote[num].chn); | |
658 *ptr++ = pMF->Track[iTrack].LastNote[num].note; | 658 *ptr++ = pMF->Track[iTrack].LastNote[num].note; |
659 *ptr++ = 0; | 659 *ptr++ = 0; |
660 | 660 |
661 pMF->Track[iTrack].LastNote[num].valid = FALSE; | 661 pMF->Track[iTrack].LastNote[num].valid = FALSE; |
662 pMF->Track[iTrack].pos = pMF->Track[iTrack].LastNote[num].end_pos; | 662 pMF->Track[iTrack].pos = pMF->Track[iTrack].LastNote[num].end_pos; |
663 | |
664 pMF->Track[iTrack].ptr = ptr; | 663 pMF->Track[iTrack].ptr = ptr; |
665 | 664 |
666 ++i; | 665 //bNoChanges = FALSE; |
667 bNoChanges = FALSE; | 666 n++; |
668 } | 667 } |
669 } | 668 } |
670 | 669 |
671 midiFree(pEndPoints); | 670 midiFree(pEndPoints); |
672 | 671 |
1045 int iVol, BOOL bAutoInc, BOOL bOverrideLength) | 1044 int iVol, BOOL bAutoInc, BOOL bOverrideLength) |
1046 { | 1045 { |
1047 MIDI_FILE_TRACK *pTrk; | 1046 MIDI_FILE_TRACK *pTrk; |
1048 Uint8 *ptr; | 1047 Uint8 *ptr; |
1049 BOOL bSuccess = FALSE; | 1048 BOOL bSuccess = FALSE; |
1050 int i, chn; | 1049 int chn; |
1050 size_t i; | |
1051 | 1051 |
1052 _VAR_CAST; | 1052 _VAR_CAST; |
1053 if (!IsFilePtrValid(pMF)) | 1053 if (!IsFilePtrValid(pMF)) |
1054 return FALSE; | 1054 return FALSE; |
1055 if (!IsTrackValid(iTrack)) | 1055 if (!IsTrackValid(iTrack)) |