2021.01.24

This commit is contained in:
Seymour Shlien
2021-01-25 11:36:07 -05:00
parent 783d5e970c
commit 388fc83b86
5 changed files with 47 additions and 5 deletions

View File

@@ -1,2 +1,2 @@
2021 January 21 2021
2021 January 24 2021

View File

@@ -14072,3 +14072,18 @@ point directly to the VOICE features but before. (The insertion shifts
everything to the right.) It is necessary to adjust this position by
looking ahead.
January 24 2021
Abc2midi: in some abc files the grace note sequence occurs after the
host note just before a barline. The grace sequence does not steal time
from a note eventually causing a synchronization problem between
the voices. Fix: the grace sequence is removed from the internal
representation using a new function cleargracenotes() in store.c if
a bar line is encountered during the search for the host note.
Hooks to new instructions !accent! !mordent!, !sfz!, !wedge! were
added to the function event_handle_instruction() in store.c.

View File

@@ -1,7 +1,7 @@
abcMIDI : abc <-> MIDI conversion utilities
midi2abc version 3.47 November 01 2020
abc2midi version 4.46 January 21 2021
abc2midi version 4.47 January 24 2021
abc2abc version 2.12 October 19 2020
yaps version 1.86 December 10 2020
abcmatch version 1.77 December 10 2020

View File

@@ -518,7 +518,7 @@ int pass;
{
char msg[80];
if (barno >= 0 || barno < 1024) barloc[barno] = tracklen;
if (barno >= 0 && barno < 1024 && pass == 1) barloc[barno] = tracklen;
if (barchecking) {
/* only generate these errors once */
if (noteson && (partrepno == 0)) {

31
store.c
View File

@@ -186,7 +186,7 @@ int main()
*/
#define VERSION "4.46 January 21 2021 abc2midi"
#define VERSION "4.47 January 24 2021 abc2midi"
/* enables reading V: indication in header */
#define XTEN1 1
@@ -4707,6 +4707,22 @@ if (nofnop == 0) {
done = 1;
};
if (strcmp(s,"accent") == 0) { /* [SS] 2021-01-24 */
done = 1;
};
if (strcmp(s,"mordent") == 0) { /* [SS] 2021-01-24 */
done = 1;
};
if (strcmp(s,"sfz") == 0) { /* [SS] 2021-01-24 */
done = 1;
};
if (strcmp(s,"wedge") == 0) { /* [SS] 2021-01-24 */
done = 1;
};
if (done == 0 && quiet == -1) { /* [SS] 2013-11-02 */
sprintf(buff, "instruction !%s! ignored", s);
event_warning(buff);
@@ -5084,6 +5100,10 @@ if (gfact_method) applygrace_orig(place);
else applygrace_new(place);
}
static void cleargracenotes(int start,int end) {
removefeatures(start,end);
} /* [SS] 2021-01-24 */
static void applygrace_orig(place)
int place;
@@ -5129,6 +5149,10 @@ int place;
nextinchord = 0;
hostnotestart = -1;
while ((hostnotestart == -1) && (j < notes)) {
if (feature[j] == SINGLE_BAR || feature[j] == DOUBLE_BAR) {
cleargracenotes(start,end); /* [SS] 2021.01.24 */
return;
}
if ((feature[j] == NOTE) || (feature[j] == REST)) {
hostnotestart = j;
};
@@ -5192,7 +5216,6 @@ int place;
};
}
static void applygrace_new(place)
int place;
/* assign lengths to grace notes before generating MIDI */
@@ -5238,6 +5261,10 @@ int place;
nextinchord = 0;
hostnotestart = -1;
while ((hostnotestart == -1) && (j < notes)) {
if (feature[j] == SINGLE_BAR || feature[j] == DOUBLE_BAR) {
cleargracenotes(start,end);
return;
} /* [SS] 2021-01-24 */
if ((feature[j] == NOTE) || (feature[j] == REST)) {
hostnotestart = j;
};