mirror of
https://github.com/sshlien/abcmidi.git
synced 2025-12-06 15:05:07 +00:00
Compare commits
6 Commits
2025.01.04
...
2025.01.30
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e42463f39f | ||
|
|
a67babdb21 | ||
|
|
abf7e15301 | ||
|
|
7c7ef4c2c6 | ||
|
|
c85053c4db | ||
|
|
8d5df56596 |
62
doc/CHANGES
62
doc/CHANGES
@@ -15526,3 +15526,65 @@ is called before event_note. It is hard to determine what is
|
||||
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
|
||||
|
||||
|
||||
January 12 2025
|
||||
|
||||
abc2midi ignores non-microtone accidentals. In the following example,
|
||||
|
||||
X:1
|
||||
T: Non microtone accidentals
|
||||
L:1/8
|
||||
Q:1/4=60
|
||||
M:8/8
|
||||
%%MIDI temperamentequal 36
|
||||
K:C
|
||||
EF^FG^Gc^cd|
|
||||
|
||||
The accidentals in front of F, G, and c were
|
||||
ignored.
|
||||
|
||||
Fix: in pitchof_b, for TEMPERLN or TEMPEREQ respect accidentals
|
||||
occurring outside of microtones.
|
||||
|
||||
|
||||
January 20 2025
|
||||
January 22 2025
|
||||
|
||||
midi2abc
|
||||
|
||||
Added new options -midinotes and -midinotes-brief for listing the
|
||||
notes (including pitchbends) present in the midi file. This is
|
||||
useful for checking the accuracy of abc2midi or the abc notation
|
||||
representation.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH MIDI2ABC 1 "1 January 2017"
|
||||
.TH MIDI2ABC 1 "20 January 2025"
|
||||
.SH NAME
|
||||
\fBmidi2abc\fP \- program to convert MIDI format files to abc notation
|
||||
.SH SYNOPSIS
|
||||
@@ -9,7 +9,8 @@ midi2abc \-f \fIinfile\fP [\-xa] [\-ga]
|
||||
[\-k \fIkey\fP] [\-c \fIchannel\fP] [\-obpl] [\-bpl \fibars\fP] [\-bps \fPbars\fP]
|
||||
[\-o \fIfilename\fP] [\-s] [\-sr \fiunits\fP] [\-sum] [\-nb] [\-nt]
|
||||
[\-splitvoices] [\-midigram] [\-mftext] [-mftextpulses] [\-nogr] [\-title \fistring\fP]
|
||||
[\-origin \fistring\fP]
|
||||
[\-origin \fistring\fP][\-midinotes][\-midinotes-brief]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -172,6 +173,19 @@ the given string.
|
||||
.B -origin \fistring\fP
|
||||
Adds an O: field with the given string.
|
||||
.TP
|
||||
.B -midinotes
|
||||
Like -mftext, this option outputs the notes present in the
|
||||
midi file; however, the output is more consise (note-on and
|
||||
noteoff are combined) in order to make it easier to compare
|
||||
one or more midi files using dif, diffuse, or winmerge.
|
||||
The time as beat number, track number, channel number, pitch,
|
||||
and pitch bend are presented.
|
||||
|
||||
.TP
|
||||
.B -midinotes-brief
|
||||
Similar to -midinotes except only the pitch and pitch bend
|
||||
values are presented.
|
||||
|
||||
|
||||
|
||||
.SS FEATURES
|
||||
|
||||
@@ -277,13 +277,9 @@ of numbers ranging from 0 to 7 indicating the presence of note onsets
|
||||
for the selected percussion instrument for the sequence of beats
|
||||
in the midi file. Here is a truncated sample of the output.
|
||||
.br
|
||||
|
||||
0 0 0 0 0 0 0 0 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 4 4 0
|
||||
1 0 0 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 0 0
|
||||
1 0 5 0 1 0 5 0 1 etc.
|
||||
|
||||
11 71 c1 1 11 51 f1 c1 1 11 51 e1 1 11 d1 c1 31 1 1 1 21 b1 d1 d1 51
|
||||
.br
|
||||
One can see a repeating 4 beat pattern.
|
||||
51 51 51 51 41 71 c1 11 1 11 41 11 1 11 41 11 1 11 41 11 31 51 41 11
|
||||
|
||||
.PP
|
||||
-ppat
|
||||
@@ -294,14 +290,12 @@ If it is unsuccessful, it returns a message of its failue. Otherwise,
|
||||
encodes the position of these drum onsets in a 8 bit byte for each
|
||||
quarter note beat in the midi file. The lower (right) 4 bits encode the
|
||||
bass drum and the higher (left) 4 bits encode the snare drum in the
|
||||
same manner as described above for -ppatfor.
|
||||
same manner as described above for -ppatfor. The integers are printed
|
||||
in hexadecimal.
|
||||
.br
|
||||
0 0 0 0 0 0 0 0 0 0 33 145 33 145 33 145 33 145 33 145 33 145 33 145
|
||||
02 88 20 02 a0 08 80 02 82 08 80 02 82 08 80 02 82 08 80 02 82 08
|
||||
.br
|
||||
33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145
|
||||
.br
|
||||
33 145 33 145 33 145 33 145 33 145 33 and etc.
|
||||
|
||||
80 02 82 08 80 02 82 08 80 02 82 08 20 a0 0a 08 80 02 82 08 80 02
|
||||
|
||||
.PP
|
||||
-ppathist
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
abcMIDI : abc <-> MIDI conversion utilities
|
||||
|
||||
midi2abc version 3.59 February 08 2023
|
||||
abc2midi version 4.96 December 16 2024
|
||||
midi2abc version 3.61 January 22 2025
|
||||
abc2midi version 4.99 January 12 2025
|
||||
abc2abc version 2.22 April 30 2024
|
||||
yaps version 1.94 April 30 2024
|
||||
abcmatch version 1.83 February 19 2024
|
||||
midicopy version 1.40 August 11 2024
|
||||
midistats version 0.96 July 26 2024
|
||||
midistats version 0.98 January 30 2025
|
||||
|
||||
24th January 2002
|
||||
Copyright James Allwright
|
||||
|
||||
80
midi2abc.c
80
midi2abc.c
@@ -45,7 +45,7 @@
|
||||
* based on public domain 'midifilelib' package.
|
||||
*/
|
||||
|
||||
#define VERSION "3.59 February 08 2023 midi2abc"
|
||||
#define VERSION "3.61 January 22 2025 midi2abc"
|
||||
|
||||
#include <limits.h>
|
||||
/* Microsoft Visual C++ Version 6.0 or higher */
|
||||
@@ -229,6 +229,7 @@ struct dlistx {
|
||||
|
||||
int notechan[2048],notechanvol[2048]; /*for linking on and off midi
|
||||
channel commands */
|
||||
int chanbend[17]; /* pitchbend for each channel */
|
||||
int last_tick[17]; /* for getting last pulse number in MIDI file */
|
||||
int last_on_tick[17]; /* for detecting chords [SS] 2019-08-02 */
|
||||
|
||||
@@ -668,6 +669,9 @@ int chan, control, value;
|
||||
void txt_pitchbend(chan,lsb,msb)
|
||||
int chan, msb, lsb;
|
||||
{
|
||||
int pitchbend;
|
||||
pitchbend = (msb*128 + lsb);
|
||||
chanbend[chan+1] = pitchbend;
|
||||
}
|
||||
|
||||
void txt_program(chan,program)
|
||||
@@ -942,6 +946,28 @@ if (start_time >= 0)
|
||||
}
|
||||
|
||||
|
||||
void print_txt_noteoff_and_bends(chan, pitch, vol)
|
||||
int chan, pitch, vol;
|
||||
/* substitutes pitchbend for volume */
|
||||
{
|
||||
int start_time,initvol;
|
||||
|
||||
start_time = close_note(chan, pitch, &initvol);
|
||||
if (start_time >= 0)
|
||||
/*
|
||||
printf("%8.4f %8.4f %d %d %d %d\n",
|
||||
(double) start_time/(double) division,
|
||||
(double) Mf_currtime/(double) division,
|
||||
trackno+1, chan+1, pitch,initvol);
|
||||
*/
|
||||
/* printf("%6.2f %6.2f %d %d %d %d\n",
|
||||
(double) start_time/(double) division, (double) Mf_currtime/(double) division, trackno+1, chan +1, pitch,chanbend[chan+1]);
|
||||
*/
|
||||
if (midiprint == 3) printf("%6.2f %d %d %d %d\n",
|
||||
(double) start_time/(double) division, trackno+1, chan +1, pitch,chanbend[chan+1]);
|
||||
else printf("%d %d\n", pitch,chanbend[chan+1]);
|
||||
if(Mf_currtime > last_tick[chan+1]) last_tick[chan+1] = Mf_currtime;
|
||||
}
|
||||
|
||||
/* In order to associate a channel note off message with its
|
||||
* corresponding note on message, we maintain the information
|
||||
@@ -958,6 +984,11 @@ void init_notechan()
|
||||
for (i = 0; i < 2048; i++) notechan[i] = -1;
|
||||
}
|
||||
|
||||
void init_chanbend()
|
||||
{
|
||||
int i;
|
||||
for (i= 0; i < 17; i++) chanbend[i] = 8192;
|
||||
}
|
||||
|
||||
/* The next two functions update notechan when a channel note on
|
||||
or note off is encountered. The second function close_note,
|
||||
@@ -1379,7 +1410,7 @@ void initfunc_for_midinotes()
|
||||
Mf_noteoff = print_txt_noteoff;
|
||||
Mf_pressure = no_op3;
|
||||
Mf_parameter = no_op3;
|
||||
Mf_pitchbend = no_op3;
|
||||
Mf_pitchbend = txt_pitchbend;
|
||||
Mf_program = print_txt_program;
|
||||
Mf_chanpressure = no_op3;
|
||||
Mf_sysex = no_op2;
|
||||
@@ -1395,6 +1426,13 @@ void initfunc_for_midinotes()
|
||||
Mf_arbitrary = no_op2;
|
||||
}
|
||||
|
||||
void initfunc_for_midipitch()
|
||||
{
|
||||
initfunc_for_midinotes();
|
||||
Mf_noteoff = print_txt_noteoff_and_bends;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void initfunc_for_mftext()
|
||||
{
|
||||
@@ -3197,6 +3235,16 @@ int argc;
|
||||
{
|
||||
midiprint = 1;
|
||||
}
|
||||
arg = getarg("-midinotes",argc,argv);
|
||||
if (arg != -1)
|
||||
{
|
||||
midiprint = 3;
|
||||
}
|
||||
arg = getarg("-midinotes-brief",argc,argv);
|
||||
if (arg != -1)
|
||||
{
|
||||
midiprint = 4;
|
||||
}
|
||||
|
||||
|
||||
usesplits = 0;
|
||||
@@ -3433,7 +3481,9 @@ int argc;
|
||||
printf(" -splitvoices splits voices to avoid nonhomophonic chords\n");
|
||||
printf(" -title <string> Pastes title following\n");
|
||||
printf(" -origin <string> Adds O: field containing string\n");
|
||||
printf(" -midigram Prints midigram instead of abc file\n");
|
||||
printf(" -midigram Prints midigram \n");
|
||||
printf(" -midinotes Prints pitches with bends\n");
|
||||
printf(" -midinotes-brief Prints only pitches and bends\n");
|
||||
printf(" -mftext mftext output in beats\n");
|
||||
printf(" -mftextpulses mftext output in midi pulses\n");
|
||||
printf(" -mftext mftext output in seconds\n");
|
||||
@@ -3463,6 +3513,7 @@ int j;
|
||||
int ten,ninety;
|
||||
int argc;
|
||||
|
||||
printf("calling midi2abc\n");
|
||||
|
||||
/* initialization */
|
||||
trackno = 0;
|
||||
@@ -3657,8 +3708,8 @@ int argc;
|
||||
{
|
||||
int i;
|
||||
int verylasttick;
|
||||
initfunc_for_midinotes();
|
||||
init_notechan();
|
||||
init_chanbend();
|
||||
for (i=0;i<17;i++) {last_tick[i]=0;}
|
||||
/*F = efopen(argv[argc -1],"rb");*/
|
||||
Mf_getc = filegetc;
|
||||
@@ -3694,8 +3745,23 @@ int argc;
|
||||
int arg;
|
||||
|
||||
arg = process_command_line_arguments(argc,argv);
|
||||
if(midiprint ==1) { midigram(argc,argv);
|
||||
} else if(midiprint ==2) { mftext(argc,argv);
|
||||
} else midi2abc(argc,argv);
|
||||
switch (midiprint) {
|
||||
case 1: initfunc_for_midinotes();
|
||||
midigram(argc,argv);
|
||||
break;
|
||||
case 2: mftext(argc,argv);
|
||||
break;
|
||||
case 3: initfunc_for_midinotes();
|
||||
initfunc_for_midipitch();
|
||||
midigram(argc,argv);
|
||||
break;
|
||||
case 4: initfunc_for_midinotes();
|
||||
initfunc_for_midipitch();
|
||||
midigram(argc,argv);
|
||||
break;
|
||||
default:
|
||||
midi2abc(argc,argv);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
14
midistats.c
14
midistats.c
@@ -17,7 +17,7 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define VERSION "0.96 October 10 2024 midistats"
|
||||
#define VERSION "0.98 January 30 2025 midistats"
|
||||
|
||||
/* midistrats.c is a descendent of midi2abc.c which was becoming to
|
||||
large. The object of the program is to extract statistical characterisitic
|
||||
@@ -1513,9 +1513,9 @@ for (i=1;i<256;i++) {
|
||||
}
|
||||
|
||||
|
||||
void output_drumpat () {
|
||||
void output_drumpat (char * c) {
|
||||
int i;
|
||||
for (i=0;i<=lastBeat;i++) printf("%d ",drumpat[i]);
|
||||
for (i=0;i<=lastBeat;i++) printf(c,drumpat[i]);
|
||||
/*for (i=0;i<lastBeat;i++) output_perc_pattern(drumpat[i]);*/
|
||||
printf("\n");
|
||||
}
|
||||
@@ -1654,11 +1654,11 @@ for (i=0;i<4;i++) {
|
||||
snaremax = drumhistogram[snareindex];
|
||||
}
|
||||
}
|
||||
if (bassmax && snaremax) {
|
||||
if (bassmax || snaremax) {
|
||||
printf("bass %d %d\n",bassindex,bassmax);
|
||||
printf("snare %d %d\n",snareindex,snaremax);
|
||||
} else {
|
||||
printf("missing bass or snare\n");
|
||||
printf("missing bass and snare\n");
|
||||
return;
|
||||
}
|
||||
dualDrumPattern(bassindex,snareindex);
|
||||
@@ -1944,11 +1944,11 @@ if (percanalysis) {
|
||||
if (percpattern) {
|
||||
drumanalysis();
|
||||
percsummary();
|
||||
output_drumpat();
|
||||
output_drumpat("%02x ");
|
||||
}
|
||||
if (percpatternfor) {
|
||||
drumpattern(percnum);
|
||||
output_drumpat();
|
||||
output_drumpat("%d ");
|
||||
}
|
||||
if (percpatternhist) {
|
||||
drumanalysis();
|
||||
|
||||
@@ -674,7 +674,7 @@ ismicrotone (p, dir)
|
||||
return 1;
|
||||
}
|
||||
setmicrotone.num = 0;
|
||||
setmicrotone.denom = 0;
|
||||
setmicrotone.denom = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1347,6 +1347,7 @@ static void process_microtones (int *parsed, char word[],
|
||||
if (j > 7) {
|
||||
j = (int) c - 'a';
|
||||
}
|
||||
if (word[0] == '_') a = -a; /* [SS] 2025-01-07 */
|
||||
if (j > 7 || j < 0) {
|
||||
event_error ("Not a valid microtone");
|
||||
return;
|
||||
|
||||
57
store.c
57
store.c
@@ -186,7 +186,7 @@ int main()
|
||||
|
||||
*/
|
||||
|
||||
#define VERSION "4.97 January 03 2025 abc2midi"
|
||||
#define VERSION "4.99 January 12 2025 abc2midi"
|
||||
|
||||
/* enables reading V: indication in header */
|
||||
#define XTEN1 1
|
||||
@@ -3723,7 +3723,9 @@ int *pitchbend;
|
||||
fifth_size,
|
||||
(3*fifth_size-octave_size),
|
||||
(5*fifth_size-2*octave_size) };
|
||||
/* in units cents [SS] 2020-07-17 */
|
||||
/* contains the pitches of c,d,etc in cent units after accounting
|
||||
for fifth_size and octave_size
|
||||
*/
|
||||
|
||||
static const char *anoctave = "cdefgab";
|
||||
acc = accidental;
|
||||
@@ -3731,7 +3733,6 @@ int *pitchbend;
|
||||
noteno = (int)note - 'a';
|
||||
|
||||
|
||||
|
||||
/* [SS] 2015-08-18 */
|
||||
if (acc == ' ' && !microtone) { /* no accidentals, apply current state */
|
||||
acc = v->workmap[noteno][octave+4];
|
||||
@@ -3746,9 +3747,7 @@ int *pitchbend;
|
||||
*/
|
||||
|
||||
if(a != 0) {
|
||||
/* [SS] 2025-01-03 */
|
||||
//printf("calling event_microtone from pitchof_b\n");
|
||||
event_microtone(1,a,b);
|
||||
event_microtone(1,a,b); /* [SS] 2025-01-03 */
|
||||
}
|
||||
} else { /* some accidentals save the state if propagate_accs != 0 */
|
||||
if (propagate_accs) {
|
||||
@@ -3776,34 +3775,33 @@ int *pitchbend;
|
||||
if ((temperament==TEMPERLN) || (temperament==TEMPEREQ)) {
|
||||
|
||||
pitchvalue = tscale[p]/100.0; /* cents to semitones */
|
||||
/* respect accidentals when they do not occur in a microtone */
|
||||
if (acc == '^' && !microtone) pitchvalue = pitchvalue + (float) mul; /* [SS] 2025-01-12 */
|
||||
if (acc == '_' && !microtone) pitchvalue = pitchvalue - (float) mul;
|
||||
/* printf("note = %c accidental = %c mul = %d p = %d pitchvalue = %f\n",note,accidental,mul,p,pitchvalue); */
|
||||
|
||||
pitchvalue = pitchvalue + octave*octave_size/100.0 + middle_c;
|
||||
|
||||
/* [HL] 2020-06-27 Adjust for A=440.0 with zero pitchbend */
|
||||
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 (setmicrotone.denom == 100) /* microtone in cents */
|
||||
pitchvalue+= setmicrotone.num / 100.0; /* [HL] 2020-07-28 */
|
||||
else if (setmicrotone.denom == 0) { /* [HL] 2020-06-20 / 2020-06-27 */
|
||||
/* 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;
|
||||
pitchvalue += microtoneshift;
|
||||
/* [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;
|
||||
/* printf("microtoneshift = %f for setmicrotone %d %d\n",microtoneshift, setmicrotone.num,setmicrotone.denom); */
|
||||
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;
|
||||
setmicrotone.num = setmicrotone.denom = 0;
|
||||
setmicrotone.num = 0;
|
||||
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||
active_pitchbend = 8192;
|
||||
}
|
||||
|
||||
pitch = (int) (pitchvalue + 0.5);
|
||||
bend = (int) (0.5 + 8192.0 + 4096.0 * (pitchvalue - (float) pitch));
|
||||
@@ -3822,13 +3820,14 @@ int *pitchbend;
|
||||
if (!microtone) *pitchbend = bend; /* don't override microtone */
|
||||
/* if (comma53) [SDG] 2020-06-03 ambiguous statement
|
||||
* should the following lines be included in if statement? */
|
||||
#ifdef MAKAM
|
||||
/*#ifdef MAKAM
|
||||
if (comma53) fprintf(fc53,"%c%d ",note,octave+4);
|
||||
#endif
|
||||
*/
|
||||
if (comma53) convert_to_comma53 (acc, &pitch, pitchbend);
|
||||
microtone = 0; /* [SS] 2014-01-25 */
|
||||
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
||||
setmicrotone.denom = 0;
|
||||
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||
return pitch;
|
||||
}
|
||||
|
||||
@@ -4342,10 +4341,6 @@ int xoctave, n, m;
|
||||
if (v->drumchannel) pitch = barepitch(note,accidental,mult,octave);
|
||||
/* [SS] 2015-08-18 */
|
||||
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(fermata_fixed) addfract(&num,&denom,1,1);
|
||||
else num = num*2;
|
||||
@@ -4455,7 +4450,7 @@ setmicrotone.denom = b;
|
||||
if (a == 0) {bend = 8192; /* [SS] 2014-01-19 */
|
||||
microtone = 0; /* [SS] 2014-01-20 */
|
||||
setmicrotone.num = 0; /* [SS] 2014-01-25 */
|
||||
setmicrotone.denom = 0;
|
||||
setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||
return;
|
||||
}
|
||||
else {
|
||||
@@ -4464,6 +4459,8 @@ else {
|
||||
}
|
||||
active_pitchbend = bend;
|
||||
microtone=1;
|
||||
if (b == 0) setmicrotone.denom = 1; /* [SS] 2025-01-06 */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user