diff --git a/VERSION b/VERSION index aa7ac64..a527f2e 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -September 11 2023 +September 13 2023 diff --git a/doc/midistats.1 b/doc/midistats.1 index 88a6c2f..2896301 100644 --- a/doc/midistats.1 +++ b/doc/midistats.1 @@ -43,6 +43,7 @@ the maximum pitch value the minimum note length in pulses the maximum note length in pulses the number of gaps in the channel +the entropy of the pitch class histogram for that channel .PP After processing all the individual tracks, the following information applies to the entire midi file. diff --git a/doc/readme.txt b/doc/readme.txt index 6464ed6..fcc3868 100644 --- a/doc/readme.txt +++ b/doc/readme.txt @@ -6,7 +6,7 @@ abc2abc version 2.20 February 07 2023 yaps version 1.92 January 06 2023 abcmatch version 1.82 June 14 2022 midicopy version 1.38 May 06 2022 -midistats version 0.74 September 11 2023 +midistats version 0.75 September 13 2023 24th January 2002 Copyright James Allwright diff --git a/midistats.c b/midistats.c index b199ad9..1340441 100644 --- a/midistats.c +++ b/midistats.c @@ -18,7 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#define VERSION "0.74 September 11 2023 midistats" +#define VERSION "0.75 September 13 2023 midistats" #include /* Microsoft Visual C++ Version 6.0 or higher */ @@ -149,6 +149,7 @@ struct trkstat { int quietTime[17]; int rhythmpatterns[17]; int numberOfGaps[17]; + float pitchEntropy[17]; } trkdata; /* The trkstat references the individual channels in the midi file. @@ -172,6 +173,7 @@ int channel2nnotes[17]; /*maps channel to note count */ int chnactivity[17]; /* [SS] 2018-02-02 */ int progactivity[128]; /* [SS] 2018-02-02 */ int pitchclass_activity[12]; /* [SS] 2018-02-02 */ +int chanpitchhistogram[204]; /* [SS] 2023-09-13 */ /* [SS] 2017-11-01 */ @@ -541,8 +543,10 @@ float histogram_entropy (int *histogram, int size) float e,p; total = 0; entropy = 0.0; + //printf("\nhistogram_entropy of:"); for (i=0;i 0) trkdata.quietTime[chan] += (trkdata.npulses[0] - trkdata.lastNoteOff[chan]); + for (chan=0;chan<16;chan++) { /* 2023-09-13 */ + if (chan == 9 || channel_used_in_track[chan+1] == 0) continue; + trkdata.pitchEntropy[chan+1] = histogram_entropy(chanpitchhistogram +chan*12,11); + } output_track_summary(); } @@ -645,7 +658,9 @@ int chan, pitch, vol; int barnum; int unit; int dithermargin; /* [SS] 2023-08-22 */ + int cpitch; /* [SS] 2023-09-13 */ + cpitch = pitch % 12; channel_used_in_track[chan+1]++; /* [SS] 2023-09-06 */ dithermargin = unitDivision/2 - 1; if (vol == 0) { @@ -686,6 +701,7 @@ int chan, pitch, vol; unit = ((Mf_currtime+dithermargin) % divisionsPerBar)/unitDivision; //printf("unit = %d pattern = %d \n",unit,barChn[chan].rhythmPattern); barChn[chan].rhythmPattern = barChn[chan].rhythmPattern |= (1UL << unit); + chanpitchhistogram[chan*12+cpitch]++; /* [SS] 2023-09-13 */ }