Compare commits

..

6 Commits

Author SHA1 Message Date
Seymour Shlien
e564bf9954 2022.05.05 2022-05-05 07:54:35 -04:00
Seymour Shlien
df48d39dc7 2022.04.28 2022-04-28 13:34:10 -04:00
Seymour Shlien
181f2022f3 2022.04.27 2022-04-28 09:51:13 -04:00
Seymour Shlien
85e4e1ba50 2022.04.06 2022-04-06 10:13:21 -04:00
Seymour Shlien
47a0cecc5d 2022.03.20 2022-03-21 08:39:17 -04:00
Seymour Shlien
35876618bb 2022.03.08 2022-03-08 15:01:33 -05:00
8 changed files with 162 additions and 55 deletions

View File

@@ -1,2 +1,2 @@
2022 February 22 2022
2022 May 05 2022

View File

@@ -14661,4 +14661,82 @@ if (strstr(line,"%%begintext") != NULL) {
which returns the pointer to %%begintext in the line.
March 20 2022
abc2midi bug: I could not demonstrate this bug on my own system.
When abc2midi is compiled on a Debian linux system using the -O2 compilation
flag (by default), it produces a faulty midi file for abc files containing
gchords. Here is a sample file.
%abc-2.2
X:1
T:Test
M:C
L:1/4
Q:1/4=135
V:S clef=treble
V:s clef=treble
K:C
%%score (s S)
%
[V:s] "C" x2 "a" x2 |
[V:S] C C A A |
The problem occurs with the bass accompaniment generated by "a". The
bass accompaniment creates a long string of A,, notes.
This problem disappears when abc2midi is compiled without the
-O2 optimizer.
Analysis: the bug was traced to the code gchord_configure in genmidi.c.
The limit of the loops
for (j=0; j<chordlen[chordnum]; j++)
contain bad data when chordnum is set to -1 (for bass accompaniment).
Fix: exit from gchord_configure function when chordnum is less than
zero.
The problem was identified to me by Jakob Englhauser. Jakob verified
that this fix works.
April 06 2022 midi2abc: removal of spaces in text strings for control
messages.
April 27 2022 abc2midi: Recanting change from February 18 2022.
The swap was incorrect.
Fix: swapped p2 and p1 in
*transpose = p2 - p1;
in parsesound() in parseabc.c
abc2midi now transposes this file correctly.
X:1
T: transposition
M: 4/4
L: 1/4
K:Cm
V:1 shift=cF
cdef|gabc'|
V:2 sound=cF
cdef|gabc'|
V:3 score=cF
cdef|gabc'|
V:4 instrument=cF
cdef|gabc'|
Note that the command instrument=cF is not part of the abc standard
and abc2svg does not recognize it.
April 28 2022
midi2abc: minor change for -stats function
May 05 2022
midicopy: introduced new options -nopressure and -nocntrl

View File

@@ -1,11 +1,11 @@
abcMIDI : abc <-> MIDI conversion utilities
midi2abc version 3.50 February 12 2022
abc2midi version 4.69 February 22 2022
midi2abc version 3.54 April 28 2022
abc2midi version 4.72 April 27 2022
abc2abc version 2.16 February 22 2022
yaps version 1.88 February 22 2022
abcmatch version 1.80 November 25 2021
midicopy version 1.37 October 10 2020
midicopy version 1.38 May 06 2022
24th January 2002

View File

@@ -358,7 +358,9 @@ void configure_gchord()
{
int j;
int inchord, note;
gchordnotes_size = 0;
if (chordnum < 0) return; /* [SS] 2022-03-20 */
inchord = 0;
if (inversion != -1) {

View File

@@ -45,7 +45,7 @@
* based on public domain 'midifilelib' package.
*/
#define VERSION "3.49 June 27 2021 midi2abc"
#define VERSION "3.54 April 28 2022 midi2abc"
#include <limits.h>
/* Microsoft Visual C++ Version 6.0 or higher */
@@ -165,6 +165,7 @@ int header_keysig= -50; /* header key signature */
int active_keysig = -50; /* last key signature declared */
int xchannel; /* channel number to be extracted. -1 means all */
int timeunits = 1; /*tells prtime to display time in beats [SS] 2018-10-25 */
double bend2cents = 40.96; /* [SS] 2022-02-12 */
/* structure for storing music notes */
@@ -731,6 +732,7 @@ void stats_pressure(chan,press)
int chan, press;
{
trkdata.pressure[0]++;
trkdata.pressure[chan+1]++; /* [SS] 2022.04.28 */
}
void txt_parameter(chan,control,value)
@@ -809,7 +811,7 @@ char *mess;
int n;
char *p = mess;
char *buff;
char buffer2[BUFFSIZE];
char buffer2[BUFFSIZE+4]; /* [SS] 2022-02-12 */
if ((type < 1)||(type > unrecognized))
type = unrecognized;
@@ -1148,6 +1150,8 @@ void stats_header (int format, int ntrks, int ldivision)
for (i=0;i<17;i++) {
trkdata.npulses[i] = 0;
trkdata.pitchbend[i] = 0;
trkdata.cntlparam[i] = 0; /* [SS] 2022-03-04 */
trkdata.pressure[i] = 0; /* [SS] 2022-03-04 */
progcolor[i] = 0;
channel2prog[i] = -1;
channel2nnotes[i] = 0;
@@ -1307,7 +1311,8 @@ for (i=0;i<17;i++) {
printf("trkinfo ");
printf("%d %d ",i,trkdata.program[i]); /* channel number and program*/
printf("%d %d ",trkdata.notecount[i],trkdata.chordcount[i]);
printf("%d %d",trkdata.notemeanpitch[i], trkdata.notelength[i]);
printf("%d %d ",trkdata.notemeanpitch[i], trkdata.notelength[i]);
printf("%d %d ",trkdata.cntlparam[i],trkdata.pressure[i]); /* [SS] 2022-03-04 */
printf("\n");
channel2nnotes[i] += trkdata.notecount[i] + trkdata.chordcount[i];
@@ -1337,7 +1342,7 @@ void stats_trackend()
{
trkdata.npulses[tracknum] = Mf_currtime;
if (trkdata.npulses[0] < Mf_currtime) trkdata.npulses[0] = Mf_currtime;
output_track_summary();
output_track_summary();
}
@@ -1408,13 +1413,21 @@ void stats_noteoff(int chan,int pitch,int vol)
if(Mf_currtime > last_tick[chan+1]) last_tick[chan+1] = Mf_currtime;
}
void mftxt_pressure(chan,pitch,press)
void mftxt_polypressure(chan,pitch,press)
int chan, pitch, press;
{
char *key;
if (prtime(timeunits)) return;
key = pitch2key(pitch);
printf("Pressure %2d %3s %3d\n",chan+1,key,press);
printf("Polyphonic Key Pressure %2d %3s %3d\n",chan+1,key,press);
}
void mftxt_chanpressure(chan,pitch,press)
int chan, pitch, press;
{
char *key;
if (prtime(timeunits)) return;
key = pitch2key(pitch);
printf("Pressure %2d %3s %3d\n",chan+1,key,press); /* [SS] 2022.04.28 */
}
@@ -1423,6 +1436,7 @@ int chan, lsb, msb;
{
float bend;
int pitchbend;
double cents;
/*
if (onlychan >=0 && chan != onlychan) return;
*/
@@ -1430,8 +1444,8 @@ int chan, lsb, msb;
/* [SS] 2014-01-05 2015-08-04*/
pitchbend = (msb*128 + lsb);
bend = (float) (pitchbend - 8192);
bend = bend/40.96;
printf("Pitchbend %2d %d bend = %6.3f (cents)\n",chan+1,pitchbend,bend);
cents = bend/bend2cents; /* [SS] 2022-02-12 */
printf("Pitchbend %2d %d cents = %6.3f (cents)\n",chan+1,pitchbend,cents);
}
void stats_pitchbend(chan,lsb,msb)
@@ -1517,30 +1531,31 @@ if (trkdata.program[chan+1] != 0) {
void mftxt_parameter(chan,control,value)
int chan, control, value;
{
/* removal of spaces [SS] 2022-04-06 in ctype array */
static char *ctype[] = {
"Bank Select", "Modulation Wheel", /*1*/
"Breath controller", "unknown", /*3*/
"Foot Pedal", "Portamento Time", /*5*/
"Data Entry", "Volume", /*7*/
"BankSelect", "ModulationWheel", /*1*/
"BreathController", "unknown", /*3*/
"FootPedal", "PortamentoTime", /*5*/
"DataEntry", "Volume", /*7*/
"Balance", "unknown", /*9*/
"Pan position", "Expression", /*11*/
"Effect Control 1", "Effect Control 2", /*13*/
"PanPosition", "Expression", /*11*/
"EffectControl1", "EffectControl2", /*13*/
"unknown", "unknown", /*15*/
"Slider 1", "Slider 2", /*17*/
"Slider 3", "Slider 4", /*19*/
"Slider1", "Slider2", /*17*/
"Slider3", "Slider4", /*19*/
"unknown", "unknown", /*21*/
"unknown", "unknown", /*23*/
"unknown", "unknown", /*25*/
"unknown", "unknown", /*27*/
"unknown", "unknown", /*29*/
"unknown", "unknown", /*31*/
"Bank Select (fine)", "Modulation Wheel (fine)", /*33*/
"Breath controller (fine)", "unknown", /*35*/
"Foot Pedal (fine)", "Portamento Time (fine)", /*37*/
"Data Entry (fine)", "Volume (fine)", /*39*/
"Balance (fine)", "unknown", /*41*/
"Pan position (fine)", "Expression (fine)", /*43*/
"Effect Control 1 (fine)", "Effect Control 2 (fine)", /*45*/
"BankSelect(fine)", "ModulationWheel(fine)", /*33*/
"BreathController(fine)", "unknown", /*35*/
"FootPedal(fine)", "PortamentoTime(fine)", /*37*/
"DataEntry(fine)", "Volume(fine)", /*39*/
"Balance(fine)", "unknown", /*41*/
"PanPosition(fine)", "Expression(fine)", /*43*/
"EffectControl1(fine)", "EffectControl2(fine)", /*45*/
"unknown", "unknown", /*47*/
"unknown", "unknown", /*49*/
"unknown", "unknown", /*51*/
@@ -1550,25 +1565,25 @@ int chan, control, value;
"unknown", "unknown", /*59*/
"unknown", "unknown", /*61*/
"unknown", "unknown", /*63*/
"Hold Pedal", "Portamento", /*65*/
"Susteno Pedal", "Soft Pedal", /*67*/
"Legato Pedal", "Hold 2 Pedal", /*69*/
"Sound Variation", "Sound Timbre", /*71*/
"Sound Release Time", "Sound Attack Time", /*73*/
"Sound Brightness", "Sound Control 6", /*75*/
"Sound Control 7", "Sound Control 8", /*77*/
"Sound Control 9", "Sound Control 10", /*79*/
"GP Button 1", "GP Button 2", /*81*/
"GP Button 3", "GP Button 4", /*83*/
"HoldPedal", "Portamento", /*65*/
"SustenoPedal", "SoftPedal", /*67*/
"LegatoPedal", "Hold2Pedal", /*69*/
"SoundVariation", "SoundTimbre", /*71*/
"SoundReleaseTime", "SoundAttackTime", /*73*/
"SoundBrightness", "SoundControl6", /*75*/
"SoundControl7", "Sound Control8", /*77*/
"SoundControl9", "Sound Control10", /*79*/
"GPButton1", "GPButton2", /*81*/
"GPButton3", "GPButton4", /*83*/
"unknown", "unknown", /*85*/
"unknown", "unknown", /*87*/
"unknown", "unknown", /*89*/
"unknown", "Effects Level", /*91*/
"Tremolo Level", "Chorus Level", /*93*/
"Celeste Level", "Phaser Level", /*95*/
"Data button increment", "Data button decrement", /*97*/
"NRP (fine)", "NRP (coarse)", /*99*/
"Registered parameter (fine)", "Registered parameter (coarse)", /*101*/
"unknown", "EffectsLevel", /*91*/
"TremoloLevel", "ChorusLevel", /*93*/
"CelesteLevel", "PhaserLevel", /*95*/
"DataButtonIncrement", "DataButtonDecrement", /*97*/
"NRP(fine)", "NRP(coarse)", /*99*/
"RegisteredParameter(fine)", "RegisteredParameter(coarse)", /*101*/
"unknown", "unknown", /*103*/
"unknown", "unknown", /*105*/
"unknown", "unknown", /*107*/
@@ -1578,14 +1593,15 @@ int chan, control, value;
"unknown", "unknown", /*115*/
"unknown", "unknown", /*117*/
"unknown", "unknown", /*119*/
"All Sound Off", "All Controllers Off", /*121*/
"Local Keyboard (on/off)","All Notes Off", /*123*/
"Omni Mode Off", "Omni Mode On", /*125*/
"Mono Operation", "Poly Operation"};
"AllSoundOff", "AllControllersOff", /*121*/
"LocalKeyboard(on/off)","AllNotesOff", /*123*/
"OmniModeOff", "OmniModeOn", /*125*/
"MonoOperation", "PolyOperation"};
/* if (onlychan >=0 && chan != onlychan) return; */
if (prtime(timeunits)) return;
if (control == 6) bend2cents = 8192.0/(100.0*value); /*[SS] 2022-02-12 */
printf("CntlParm %2d %s = %d\n",chan+1, ctype[control],value);
}
@@ -1776,11 +1792,11 @@ void initfunc_for_mftext()
Mf_trackend = txt_trackend;
Mf_noteon = mftxt_noteon;
Mf_noteoff = mftxt_noteoff;
Mf_pressure =mftxt_pressure;
Mf_pressure =mftxt_polypressure;
Mf_parameter = mftxt_parameter;
Mf_pitchbend = mftxt_pitchbend;
Mf_program = mftxt_program;
Mf_chanpressure = mftxt_pressure;
Mf_chanpressure = mftxt_chanpressure;
Mf_sysex = no_op2;
Mf_metamisc = no_op3;
Mf_seqnum = no_op1;

View File

@@ -52,7 +52,7 @@
#define VERSION "1.37 October 10 2020 midicopy"
#define VERSION "1.38 May 05 2022 midicopy"
#include "midicopy.h"
#define NULLFUNC 0
#define NULL 0
@@ -112,6 +112,8 @@ int chosen_drum = 0; /* [SS] 2013-10-01 */
int drumvelocity = 0; /* [SS] 2013-10-01 */
int attenuation = 70; /* [SS] 2017-11-27 */
int nobends = 0; /* [SS] 2017-12-15 */
int nopressure = 0; /* [SS] 2022-05-05 */
int nocntrl = 0; /* [SS] 2022-05-05 */
int zerochannels = 0; /* [SS] 2020-10-09 */
long Mf_numbyteswritten = 0L;
@@ -1060,9 +1062,10 @@ chanmessage (int status, int c1, int c2)
copy_noteon (chan, c1, c2);
break;
case 0xa0:
copy_pressure (chan, c1, c2);
if (nopressure == 0) copy_pressure (chan, c1, c2);
break;
case 0xb0:
if (nocntrl == 0)
copy_parameter (chan, c1, c2);
break;
case 0xe0:
@@ -1073,7 +1076,7 @@ chanmessage (int status, int c1, int c2)
copy_program (chan, c1);
break;
case 0xd0:
copy_chanpressure (chan, c1);
if (nopressure == 0) copy_chanpressure (chan, c1);
break;
}
}
@@ -1851,6 +1854,8 @@ main (int argc, char *argv[])
printf ("-focusonchannels n1,n2,...\n"); /* [SS] 2017-11-27 */
printf ("-attenuation n\n"); /* [SS] 2017-11-27 */
printf ("-nobends\n"); /* [SS] 2017-11-27 */
printf ("-nopressure\n"); /* [SS] 2022-05-05 */
printf ("-nocntrl\n"); /* [SS] 2022-05-05 */
printf ("-indrums n1,n2,... (drums to include)\n"); /* [SS] 2019-12-22 */
printf ("-xdrums n1,n2,... (drums to exclude)\n"); /* [SS] 2019-12-22 */
printf ("-onlydrums (only channel 10)\n"); /* [SS] 2019-12-22 */
@@ -2091,6 +2096,12 @@ main (int argc, char *argv[])
arg = getarg("-nobends",argc,argv);
if (arg >=0) nobends=1;
/* [SS] 2022-05-05 */
arg = getarg("-nopressure",argc,argv);
if (arg >=0) nopressure=1;
arg = getarg("-nocntrl",argc,argv);
if (arg >=0) nocntrl = 1;
repflag = getarg ("-replace", argc, argv);
if (repflag >= 0)

View File

@@ -1056,7 +1056,7 @@ parsesound (s, word, gottranspose, transpose)
*transpose = 0;
} else {
/* printf("midi note = %d\n",p2); */
*transpose = p1 - p2; /* [SS] 2022.02.18 */
*transpose = p2 - p1; /* [SS] 2022.02.18 2022.04.27 */
/* printf("transpose = %d\n",*transpose); */
*gottranspose = 1;
}

View File

@@ -186,7 +186,7 @@ int main()
*/
#define VERSION "4.70 February 22 2022 abc2midi"
#define VERSION "4.72 April 27 2022 abc2midi"
/* enables reading V: indication in header */
#define XTEN1 1
@@ -1860,7 +1860,7 @@ nmidicmd++;
/* [SS] 2015-06-01 For converting the %%MIDIx command to a
%%MIDI command
*/
void event_midi();
void event_midi(char* s); /* [SS] 2022-03-19 */
void process_midix(s)