Compare commits

..

2 Commits

Author SHA1 Message Date
Seymour Shlien
538896e1b9 2021.05.21 2021-05-23 10:03:30 -04:00
Seymour Shlien
dcfa5cc7ad 2021.05.19 2021-05-19 09:46:57 -04:00
5 changed files with 81 additions and 39 deletions

View File

@@ -1,2 +1,2 @@
2021 May 10 2021
2021 May 23 2021

View File

@@ -14204,3 +14204,39 @@ argument is not a power of 2. Fix: changed the return
to -1. The program does not crash but the midi file
is not created correctly.
May 19 2020
abc2midi: the following file causes abc2midi to hang.
X:1
T: Hangs abc2midi
L:1/4
K:C
2c/2fac'/c'/c'/c'/c'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
James Allwright intoduced a fix in readlen() in parseabc.c
May 22 2021
abc2midi: treble-8 not applied in K: or V: commands after October 19 2020
update. For example,
X:1
T: transposition
L:1/2
M:C
K:none clef=treble-8
V:1
cz
V:2
zc
The note c should be played with midi pitch 60 instead of 72.
James Allwright made minor fixes to parseabc.c and store.c, in order
to get these options working again.

View File

@@ -1,7 +1,7 @@
abcMIDI : abc <-> MIDI conversion utilities
midi2abc version 3.47 November 01 2020
abc2midi version 4.54 May 10 2021
abc2midi version 4.56 May 21 2021
abc2abc version 2.13 May 08 2021
yaps version 1.86 December 10 2020
abcmatch version 1.78 March 27 2021

View File

@@ -543,37 +543,37 @@ void readsig (char **sig, timesig_details_t *timesig)
}
}
void
readlen (a, b, p)
int *a, *b;
char **p;
void readlen (int *a, int *b, char **p)
/* read length part of a note and advance character pointer */
{
int t;
*a = readnump (p);
if (*a == 0)
{
*a = 1;
};
if (*a == 0) {
*a = 1;
}
*b = 1;
if (**p == '/')
{
*p = *p + 1;
*b = readnump (p);
if (*b == 0)
{
*b = 2;
while (**p == '/')
{
*b = *b * 2;
*p = *p + 1;
};
};
};
if (**p == '/') {
*p = *p + 1;
*b = readnump (p);
if (*b == 0) {
*b = 2;
/* [JA] 2021-05-19 prevent infinite loop */
/* limit the number of '/'s we support */
while ((**p == '/') && (*b < 1024)) {
*b = *b * 2;
*p = *p + 1;
}
if (*b >= 1024) {
event_warning ("Exceeded maximum note denominator");
}
}
}
*b = check_power_of_two(*b);
}
/* [JA] 2020-12-10 */
static void read_L_unitlen(int *num, int *denom, char **place)
{
@@ -1261,7 +1261,17 @@ static void process_microtones (int *parsed, char word[],
modmicrotone[j].denom = b;
/* printf("%c microtone = %d/%d\n",modmap[j],modmicrotone[j].num,modmicrotone[j].denom); */
}
} /* finished ^ = _ */
} /* finished ^ = _ */
static void set_voice_from_master(int voice_num)
{
voice_context_t *current_voice;
current_voice = &voicecode[voice_num - 1];
copy_timesig(&current_voice->timesig, &master_timesig);
copy_clef(&current_voice->clef, &master_clef);
current_voice->unitlen = master_unitlen;
}
int
parsekey (str)
@@ -1345,7 +1355,7 @@ parsekey (str)
while (*s != '\0')
{
parsed = parseclef (&s, word, &gotclef, clefstr, &newclef, &cgotoctave, &coctave);
if (gotclef) {
if (parsed) { /* [JA] 2021-05-21 changed (gotclef) to (parsed) */
/* make clef an attribute of current voice */
if (inhead) {
copy_clef (&master_clef, &newclef);
@@ -1550,16 +1560,6 @@ parsekey (str)
return (gotkey);
}
static void set_voice_from_master(int voice_num)
{
voice_context_t *current_voice;
current_voice = &voicecode[voice_num - 1];
copy_timesig(&current_voice->timesig, &master_timesig);
copy_clef(&current_voice->clef, &master_clef);
current_voice->unitlen = master_unitlen;
}
void
parsevoice (s)
char *s;
@@ -2306,10 +2306,12 @@ parsefield (key, field)
* if L: fields was missing in the header.
*/
resolve_unitlen();
}
foundkey = parsekey (place); /* [JA] 2021.05.21 parsekey called before set_voice_from_master(1) */
if (inhead) {
/* set voice parameters using values from header */
set_voice_from_master(1);
}
foundkey = parsekey (place);
if (inhead || inbody) {
if (foundkey)
{

View File

@@ -186,7 +186,7 @@ int main()
*/
#define VERSION "4.54 May 10 2021 abc2midi"
#define VERSION "4.56 May 21 2021 abc2midi"
/* enables reading V: indication in header */
#define XTEN1 1
@@ -4300,7 +4300,11 @@ int xoctave, n, m;
event_fatal_error("Internal error - no voice allocated");
};
if (gracenotes && ignore_gracenotes) return; /* [SS] 2010-01-08 */
octave = xoctave + v->octaveshift;
if (v->octaveshift == 0) { /* [JA] 2021-05-21 */
octave = xoctave + clef->octave_offset;
} else {
octave = xoctave + v->octaveshift;
}
num = n;
denom = m;
if (v->inchord) v->chordcount = v->chordcount + 1;