124 lines
3.8 KiB
C
124 lines
3.8 KiB
C
|
/* atsa-nogui.c
|
||
|
* atsa: ATS analysis implementation
|
||
|
* Oscar Pablo Di Liscia / Pete Moss / Juan Pampin
|
||
|
*/
|
||
|
|
||
|
#include "atsa.h"
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
|
||
|
void usage()
|
||
|
{
|
||
|
fprintf(stderr, "atsa soundfile atsfile [flags]\n");
|
||
|
fprintf(stderr, "Flags:\n");
|
||
|
fprintf(stderr,
|
||
|
"\t -b start (%f seconds)\n\
|
||
|
\t -e duration (%f seconds or end)\n\
|
||
|
\t -l lowest frequency (%f Hertz)\n\
|
||
|
\t -H highest frequency (%f Hertz)\n\
|
||
|
\t -d frequency deviation (%f of partial freq.)\n\
|
||
|
\t -c window cycles (%d cycles)\n\
|
||
|
\t -w window type (type: %d)\n\
|
||
|
\t\t(Options: 0=BLACKMAN, 1=BLACKMAN HARRIS, 2=HANNING, 3=VON HANN)\n\
|
||
|
\t -h hop size (%f of window size)\n\
|
||
|
\t -m lowest magnitude (%f)\n\
|
||
|
\t -t track length (%d frames)\n\
|
||
|
\t -s min. segment length (%d frames)\n\
|
||
|
\t -g min. gap length (%d frames)\n\
|
||
|
\t -T SMR threshold (%f dB SPL)\n\
|
||
|
\t -S min. segment SMR (%f dB SPL)\n\
|
||
|
\t -P last peak contribution (%f of last peak's parameters)\n\
|
||
|
\t -M SMR contribution (%f)\n\
|
||
|
\t -F File Type (type: %d)\n\
|
||
|
\t\t(Options: 1=amp.and freq. only, 2=amp.,freq. and phase, 3=amp.,freq. and residual, 4=amp.,freq.,phase, and residual)\n\
|
||
|
\n",
|
||
|
ATSA_START,
|
||
|
ATSA_DUR,
|
||
|
ATSA_LFREQ,
|
||
|
ATSA_HFREQ,
|
||
|
ATSA_FREQDEV,
|
||
|
ATSA_WCYCLES,
|
||
|
ATSA_WTYPE,
|
||
|
ATSA_HSIZE,
|
||
|
ATSA_LMAG,
|
||
|
ATSA_TRKLEN,
|
||
|
ATSA_MSEGLEN,
|
||
|
ATSA_MGAPLEN,
|
||
|
ATSA_SMRTHRES,
|
||
|
ATSA_MSEGSMR,
|
||
|
ATSA_LPKCONT,
|
||
|
ATSA_SMRCONT,
|
||
|
ATSA_TYPE);
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
int i, val;
|
||
|
ANARGS *anargs;
|
||
|
char *soundfile, *ats_outfile;
|
||
|
|
||
|
if( argc < 3) usage();
|
||
|
if( argv[1][0] == '-' || argv[2][0] == '-') usage();
|
||
|
|
||
|
anargs=(ANARGS*)malloc(sizeof(ANARGS));
|
||
|
|
||
|
/* default values for analysis args */
|
||
|
anargs->start = ATSA_START;
|
||
|
anargs->duration = ATSA_DUR;
|
||
|
anargs->lowest_freq = ATSA_LFREQ;
|
||
|
anargs->highest_freq = ATSA_HFREQ;
|
||
|
anargs->freq_dev = ATSA_FREQDEV;
|
||
|
anargs->win_cycles = ATSA_WCYCLES;
|
||
|
anargs->win_type = ATSA_WTYPE;
|
||
|
anargs->hop_size = ATSA_HSIZE;
|
||
|
anargs->lowest_mag = ATSA_LMAG;
|
||
|
anargs->track_len = ATSA_TRKLEN;
|
||
|
anargs->min_seg_len = ATSA_MSEGLEN;
|
||
|
anargs->min_gap_len = ATSA_MGAPLEN;
|
||
|
anargs->SMR_thres = ATSA_SMRTHRES;
|
||
|
anargs->min_seg_SMR = ATSA_MSEGSMR;
|
||
|
anargs->last_peak_cont = ATSA_LPKCONT;
|
||
|
anargs->SMR_cont = ATSA_SMRCONT ;
|
||
|
anargs->type = ATSA_TYPE;
|
||
|
|
||
|
soundfile = argv[1];
|
||
|
ats_outfile = argv[2];
|
||
|
|
||
|
for( i=3; i<argc; ++i){
|
||
|
switch(argv[i][0])
|
||
|
{ case '-' :
|
||
|
{ switch(argv[i][1])
|
||
|
{
|
||
|
case 'b' : sscanf(argv[i]+2, "%f\n", &(anargs->start)); break;
|
||
|
case 'e' : sscanf(argv[i]+2, "%f\n", &(anargs->duration)); break;
|
||
|
case 'l' : sscanf(argv[i]+2, "%f\n", &(anargs->lowest_freq)); break;
|
||
|
case 'H' : sscanf(argv[i]+2, "%f\n", &(anargs->highest_freq)); break;
|
||
|
case 'd' : sscanf(argv[i]+2, "%f\n", &(anargs->freq_dev)); break;
|
||
|
case 'c' : sscanf(argv[i]+2, "%d\n", &(anargs->win_cycles)); break;
|
||
|
case 'w' : sscanf(argv[i]+2, "%d\n", &(anargs->win_type)); break;
|
||
|
case 'h' : sscanf(argv[i]+2, "%f\n", &(anargs->hop_size)); break;
|
||
|
case 'm' : sscanf(argv[i]+2, "%f\n", &(anargs->lowest_mag)); break;
|
||
|
case 't' : sscanf(argv[i]+2, "%d\n", &(anargs->track_len)); break;
|
||
|
case 's' : sscanf(argv[i]+2, "%d\n", &(anargs->min_seg_len)); break;
|
||
|
case 'g' : sscanf(argv[i]+2, "%d\n", &(anargs->min_gap_len)); break;
|
||
|
case 'T' : sscanf(argv[i]+2, "%fL\n", &(anargs->SMR_thres)); break;
|
||
|
case 'S' : sscanf(argv[i]+2, "%f\n", &(anargs->min_seg_SMR)); break;
|
||
|
case 'P' : sscanf(argv[i]+2, "%f\n", &(anargs->last_peak_cont)); break;
|
||
|
case 'M' : sscanf(argv[i]+2, "%f\n", &(anargs->SMR_cont)); break;
|
||
|
case 'F' : sscanf(argv[i]+2, "%d\n", &(anargs->type)); break;
|
||
|
default : usage();
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
default : usage();
|
||
|
}
|
||
|
}
|
||
|
val = main_anal(soundfile, ats_outfile, anargs, "residual.wav");
|
||
|
free(anargs);
|
||
|
return(val);
|
||
|
}
|