mirror of
https://github.com/sshlien/abcmidi.git
synced 2026-04-17 07:13:41 +00:00
2025.01.07
This commit is contained in:
31
doc/CHANGES
31
doc/CHANGES
@@ -15526,3 +15526,34 @@ is called before event_note. It is hard to determine what is
|
|||||||
going on. Many people have worked on this code.
|
going on. Many people have worked on this code.
|
||||||
|
|
||||||
|
|
||||||
|
January 07 2025
|
||||||
|
|
||||||
|
abc2midi: works correctly with microtone shortcuts but does not
|
||||||
|
handle the fraction expression of microtones. eg.
|
||||||
|
|
||||||
|
X:1
|
||||||
|
T: equaltempered 53
|
||||||
|
M: 4/4
|
||||||
|
L: 1/4
|
||||||
|
%%MIDI temperamentequal 53
|
||||||
|
K: none
|
||||||
|
C ^12/53C ^24/53C ^36/53C |^48/53C _48/53D _36/53D _24/53D |_12/53D =D ^12/53D ^24/53D| ^36/53D ^48/53D _48/53E _36/53E |
|
||||||
|
_24/53E _12/53E =E ^12/53E | ^24/53E ^36/53E F ^12/53F| ^24/53F ^36/53F ^48/53F _48/53G| _36/53G _24/53G _12/53G =G |
|
||||||
|
^12/53G ^24/53G ^36/53G ^48/53G| _48/53A _36/53A _24/53A _12/53A | A ^12/53A ^24/53A ^36/53A| ^48/53A _48/53B _36/53B _24/53B|
|
||||||
|
_12/53B =B ^12/53B ^24/53B _12/53c|
|
||||||
|
|
||||||
|
Fix: there were numerous minor fixes to ensure that the variable
|
||||||
|
setmicrotone.denom is initialized to 1 rather than 0 (to avoid division
|
||||||
|
by 0). New code was inserted in pitchof_b() in store.c.
|
||||||
|
if (microtone) {
|
||||||
|
/* [SS] 2025-01-03 2025-01-06*/
|
||||||
|
if (setmicrotone.denom == 1)
|
||||||
|
/* microtone shortcut (eg _1B,) */
|
||||||
|
microtoneshift = setmicrotone.num * microstep_size/100.0;
|
||||||
|
else
|
||||||
|
/* microtone fraction (eg _12/53B,) */
|
||||||
|
microtoneshift = (float) setmicrotone.num /(float) setmicrotone.denom;
|
||||||
|
In addition event_key was not receiving negative fractional microtones.
|
||||||
|
The problem was traced to a missing check in process_microtones()
|
||||||
|
in parseabc.c
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
abcMIDI : abc <-> MIDI conversion utilities
|
abcMIDI : abc <-> MIDI conversion utilities
|
||||||
|
|
||||||
midi2abc version 3.59 February 08 2023
|
midi2abc version 3.59 February 08 2023
|
||||||
abc2midi version 4.96 December 16 2024
|
abc2midi version 4.98 January 07 2025
|
||||||
abc2abc version 2.22 April 30 2024
|
abc2abc version 2.22 April 30 2024
|
||||||
yaps version 1.94 April 30 2024
|
yaps version 1.94 April 30 2024
|
||||||
abcmatch version 1.83 February 19 2024
|
abcmatch version 1.83 February 19 2024
|
||||||
|
|||||||
@@ -674,7 +674,7 @@ ismicrotone (p, dir)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
setmicrotone.num = 0;
|
setmicrotone.num = 0;
|
||||||
setmicrotone.denom = 0;
|
setmicrotone.denom = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1347,6 +1347,7 @@ static void process_microtones (int *parsed, char word[],
|
|||||||
if (j > 7) {
|
if (j > 7) {
|
||||||
j = (int) c - 'a';
|
j = (int) c - 'a';
|
||||||
}
|
}
|
||||||
|
if (word[0] == '_') a = -a; /* [SS] 2025-01-07 */
|
||||||
if (j > 7 || j < 0) {
|
if (j > 7 || j < 0) {
|
||||||
event_error ("Not a valid microtone");
|
event_error ("Not a valid microtone");
|
||||||
return;
|
return;
|
||||||
|
|||||||
44
store.c
44
store.c
@@ -186,7 +186,7 @@ int main()
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VERSION "4.97 January 03 2025 abc2midi"
|
#define VERSION "4.98 January 07 2025 abc2midi"
|
||||||
|
|
||||||
/* enables reading V: indication in header */
|
/* enables reading V: indication in header */
|
||||||
#define XTEN1 1
|
#define XTEN1 1
|
||||||
@@ -3746,9 +3746,7 @@ int *pitchbend;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if(a != 0) {
|
if(a != 0) {
|
||||||
/* [SS] 2025-01-03 */
|
event_microtone(1,a,b); /* [SS] 2025-01-03 */
|
||||||
//printf("calling event_microtone from pitchof_b\n");
|
|
||||||
event_microtone(1,a,b);
|
|
||||||
}
|
}
|
||||||
} else { /* some accidentals save the state if propagate_accs != 0 */
|
} else { /* some accidentals save the state if propagate_accs != 0 */
|
||||||
if (propagate_accs) {
|
if (propagate_accs) {
|
||||||
@@ -3782,28 +3780,23 @@ int *pitchbend;
|
|||||||
/* [HL] 2020-06-27 Adjust for A=440.0 with zero pitchbend */
|
/* [HL] 2020-06-27 Adjust for A=440.0 with zero pitchbend */
|
||||||
pitchvalue += 9.0 - (3.0*fifth_size-octave_size)/100.0;
|
pitchvalue += 9.0 - (3.0*fifth_size-octave_size)/100.0;
|
||||||
|
|
||||||
/* [HL] 2015-05-15 */
|
/* [HL] 2015-05-15 2025-01-06*/
|
||||||
if (microtone) {
|
if (microtone) {
|
||||||
if (setmicrotone.denom == 100) /* microtone in cents */
|
/* [SS] 2025-01-03 2025-01-06*/
|
||||||
pitchvalue+= setmicrotone.num / 100.0; /* [HL] 2020-07-28 */
|
if (setmicrotone.denom == 1)
|
||||||
else if (setmicrotone.denom == 0) { /* [HL] 2020-06-20 / 2020-06-27 */
|
/* microtone shortcut (eg _1B,) */
|
||||||
/* microstep_size is accidental_size for temperamentlinear,
|
|
||||||
* or
|
|
||||||
* microstep_size is the octave fraction for temperamentequal
|
|
||||||
* */
|
|
||||||
/* [SS] 2025-01-03 */
|
|
||||||
microtoneshift = setmicrotone.num * microstep_size/100.0;
|
microtoneshift = setmicrotone.num * microstep_size/100.0;
|
||||||
|
else
|
||||||
|
/* microtone fraction (eg _12/53B,) */
|
||||||
|
microtoneshift = (float) setmicrotone.num /(float) setmicrotone.denom;
|
||||||
|
/* printf("microtoneshift = %f for setmicrotone %d %d\n",microtoneshift, setmicrotone.num,setmicrotone.denom); */
|
||||||
pitchvalue += microtoneshift;
|
pitchvalue += microtoneshift;
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* microtone relative to sharp step in the current temperament */
|
|
||||||
pitchvalue += (((float)setmicrotone.num) / ((float)setmicrotone.denom)) * accidental_size; /* [HL] 2020-07-28 */
|
|
||||||
|
|
||||||
/* needed? */
|
|
||||||
microtone = 0;
|
microtone = 0;
|
||||||
setmicrotone.num = setmicrotone.denom = 0;
|
setmicrotone.num = 0;
|
||||||
|
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||||
active_pitchbend = 8192;
|
active_pitchbend = 8192;
|
||||||
}
|
|
||||||
|
|
||||||
pitch = (int) (pitchvalue + 0.5);
|
pitch = (int) (pitchvalue + 0.5);
|
||||||
bend = (int) (0.5 + 8192.0 + 4096.0 * (pitchvalue - (float) pitch));
|
bend = (int) (0.5 + 8192.0 + 4096.0 * (pitchvalue - (float) pitch));
|
||||||
@@ -3822,13 +3815,14 @@ int *pitchbend;
|
|||||||
if (!microtone) *pitchbend = bend; /* don't override microtone */
|
if (!microtone) *pitchbend = bend; /* don't override microtone */
|
||||||
/* if (comma53) [SDG] 2020-06-03 ambiguous statement
|
/* if (comma53) [SDG] 2020-06-03 ambiguous statement
|
||||||
* should the following lines be included in if statement? */
|
* should the following lines be included in if statement? */
|
||||||
#ifdef MAKAM
|
/*#ifdef MAKAM
|
||||||
if (comma53) fprintf(fc53,"%c%d ",note,octave+4);
|
if (comma53) fprintf(fc53,"%c%d ",note,octave+4);
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
if (comma53) convert_to_comma53 (acc, &pitch, pitchbend);
|
if (comma53) convert_to_comma53 (acc, &pitch, pitchbend);
|
||||||
microtone = 0; /* [SS] 2014-01-25 */
|
microtone = 0; /* [SS] 2014-01-25 */
|
||||||
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
||||||
setmicrotone.denom = 0;
|
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||||
return pitch;
|
return pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4342,10 +4336,6 @@ int xoctave, n, m;
|
|||||||
if (v->drumchannel) pitch = barepitch(note,accidental,mult,octave);
|
if (v->drumchannel) pitch = barepitch(note,accidental,mult,octave);
|
||||||
/* [SS] 2015-08-18 */
|
/* [SS] 2015-08-18 */
|
||||||
pitch = pitchof_b(note, accidental, mult, octave, propagate_accidentals,&active_pitchbend);
|
pitch = pitchof_b(note, accidental, mult, octave, propagate_accidentals,&active_pitchbend);
|
||||||
/*#ifndef MAKAM
|
|
||||||
pitch_noacc = pitchof_b(note, 0, 0, octave, 0,&dummy);
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
if (decorators[FERMATA] && !ignore_fermata) {
|
if (decorators[FERMATA] && !ignore_fermata) {
|
||||||
if(fermata_fixed) addfract(&num,&denom,1,1);
|
if(fermata_fixed) addfract(&num,&denom,1,1);
|
||||||
else num = num*2;
|
else num = num*2;
|
||||||
@@ -4455,7 +4445,7 @@ setmicrotone.denom = b;
|
|||||||
if (a == 0) {bend = 8192; /* [SS] 2014-01-19 */
|
if (a == 0) {bend = 8192; /* [SS] 2014-01-19 */
|
||||||
microtone = 0; /* [SS] 2014-01-20 */
|
microtone = 0; /* [SS] 2014-01-20 */
|
||||||
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
||||||
setmicrotone.denom = 0;
|
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -4464,6 +4454,8 @@ else {
|
|||||||
}
|
}
|
||||||
active_pitchbend = bend;
|
active_pitchbend = bend;
|
||||||
microtone=1;
|
microtone=1;
|
||||||
|
if (b == 0) setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user