From 821240720dd5a5d796f284b5dcfada91f7922bad Mon Sep 17 00:00:00 2001 From: Seymour Shlien Date: Sun, 12 Mar 2023 13:45:41 -0400 Subject: [PATCH] 2023.03.12 --- midistats.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 83 insertions(+), 6 deletions(-) diff --git a/midistats.c b/midistats.c index 69a6914..2e6a663 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.62 March 08 2023 midistats" +#define VERSION "0.65 March 12 2023 midistats" #include /* Microsoft Visual C++ Version 6.0 or higher */ @@ -75,6 +75,7 @@ int debug; int pulseanalysis; int percanalysis; int percpattern; +int pdfpercpattern; int corestats; int chordthreshold; /* number of maximum number of pulses separating note */ int beatsPerBar = 4; /* 4/4 time */ @@ -100,6 +101,7 @@ int stats = 0; /* flag - gather and print statistics */ int pulseanalysis = 0; int percanalysis = 0; int percpattern = 0; +int pdfpercpattern = 0; int corestats = 0; @@ -111,6 +113,8 @@ int notechan[2048],notechanvol[2048]; /*for linking on and off midi int last_tick[17]; /* for getting last pulse number in MIDI file */ int last_on_tick[17]; /* for detecting chords [SS] 2019-08-02 */ +int histogram[256]; +unsigned char drumpat[8000]; @@ -953,7 +957,6 @@ for (i = 0; i < lastEvent; i++) { } void drumpattern (int perc) { -unsigned char drumpat[1000]; int i; int channel; int pitch; @@ -963,7 +966,7 @@ int quarter; int remainder; int part; quarter = division/4; -for (i = 0; i<1000; i++) drumpat[i] = 0; +for (i = 0; i<8000; i++) drumpat[i] = 0; for (i = 0; i = 8000) {printf("index too large in drumpattern\n"); + break; + } drumpat[index] = drumpat[index] |= 1 << part; } for (i=0;i= 8000) {printf("index too large in drumpattern\n"); + break; + } + remainder = onset % division; + part = remainder/quarter; + if (pitch == perc1) drumpat[index] = drumpat[index] |= 1 << part; + else drumpat[index] = drumpat[index] |= 16 * (1 << part); + } +} + +void drumPatternHistogram () { +int i; +for (i=0;i<256;i++) { + histogram[i] = 0; +} +for (i=0;i 0) {printf("%d %d ",i,histogram[i]); + } + } + printf("\n"); +} + + +void output_drumpat () { +int i; +for (i=0;i debug parameter\n"); printf(" The input filename is assumed to be any string not\n"); @@ -1202,10 +1269,19 @@ if (percanalysis) { } printf("\n"); } -if (percanalysis) drumpattern(40); +if (percanalysis) { + drumpattern(40); + output_drumpat(); + } if (percpattern) { drumanalysis(); percsummary(); + output_drumpat(); + } +if (pdfpercpattern) { + drumanalysis(); + percsummary(); + drumPatternHistogram(); } if (corestats) corestatsOutput(); } @@ -1221,6 +1297,7 @@ int argc; arg = process_command_line_arguments(argc,argv); if(stats == 1) midistats(argc,argv); - if(pulseanalysis || corestats || percanalysis || percpattern) loadEvents(); + if(pulseanalysis || corestats || percanalysis ||\ + percpattern || pdfpercpattern) loadEvents(); return 0; }