|
@@ -163,6 +163,8 @@ static int check_specanal_param_validity_and_consistency2(dataptr dz);
|
|
|
static int get_tempered_hf(float *averages, float *averages2, float *averages3, dataptr dz);
|
|
static int get_tempered_hf(float *averages, float *averages2, float *averages3, dataptr dz);
|
|
|
static int smooth_and_output_varying_hf(dataptr dz);
|
|
static int smooth_and_output_varying_hf(dataptr dz);
|
|
|
static int rerange_outofrange_pitch(int strandindex,int eventindex,dataptr dz);
|
|
static int rerange_outofrange_pitch(int strandindex,int eventindex,dataptr dz);
|
|
|
|
|
+//RWD 2025 trap oversize channel count for .ana format
|
|
|
|
|
+static int checkchans4format(int chans, const char* fname);
|
|
|
|
|
|
|
|
/**************************************** MAIN *********************************************/
|
|
/**************************************** MAIN *********************************************/
|
|
|
|
|
|
|
@@ -1137,6 +1139,11 @@ int check_specanal_param_validity_and_consistency(dataptr dz)
|
|
|
dz->is_mapping = 0;
|
|
dz->is_mapping = 0;
|
|
|
(dz->iparam[SA_WINOVLP])--;
|
|
(dz->iparam[SA_WINOVLP])--;
|
|
|
dz->iparam[SA_CHANS] = dz->iparam[SA_CHANS] + (dz->iparam[SA_CHANS]%4); // Force number of chans to be divisible by 4 (FFT happens twice for cepstrum)
|
|
dz->iparam[SA_CHANS] = dz->iparam[SA_CHANS] + (dz->iparam[SA_CHANS]%4); // Force number of chans to be divisible by 4 (FFT happens twice for cepstrum)
|
|
|
|
|
+ //RWD 2025
|
|
|
|
|
+ if(checkchans4format(dz->iparam[SA_CHANS],dz->outfilename) == 0) {
|
|
|
|
|
+ sprintf(errstr,"Requested analysis channel count %d > 8192: too large for .ana format\n",dz->iparam[SA_CHANS]);
|
|
|
|
|
+ return DATA_ERROR;
|
|
|
|
|
+ }
|
|
|
dz->wanted = dz->iparam[SA_CHANS] + 2;
|
|
dz->wanted = dz->iparam[SA_CHANS] + 2;
|
|
|
if(dz->mode == SA_FORMANTS) {
|
|
if(dz->mode == SA_FORMANTS) {
|
|
|
if((exit_status = sa_initialise_specenv(dz)) < 0)
|
|
if((exit_status = sa_initialise_specenv(dz)) < 0)
|
|
@@ -1320,7 +1327,7 @@ int usage2(char *str)
|
|
|
"INF A Mono soundfile.\n"
|
|
"INF A Mono soundfile.\n"
|
|
|
"TXTOFIL(S) (Generic) name for text output file(s).\n"
|
|
"TXTOFIL(S) (Generic) name for text output file(s).\n"
|
|
|
"ANALOFIL Analysis output file.\n"
|
|
"ANALOFIL Analysis output file.\n"
|
|
|
- "CHS Number of analysis points : a multiple of 4 (4 - 16380).\n"
|
|
|
|
|
|
|
+ "CHS Number of analysis points : a multiple of 4 (4 - 32768).\n" //RWD 2025 was 16380
|
|
|
"OVLP analysis window overlap (1-4), for PVOC analysis.\n"
|
|
"OVLP analysis window overlap (1-4), for PVOC analysis.\n"
|
|
|
"FBANDS Number of formant peaks to find.\n"
|
|
"FBANDS Number of formant peaks to find.\n"
|
|
|
"-n Normalise output display.\n"
|
|
"-n Normalise output display.\n"
|
|
@@ -4163,3 +4170,17 @@ int rerange_outofrange_pitch(int strandindex,int eventindex,dataptr dz)
|
|
|
dz->parray[strandindex][pitchindex] = newpitch;
|
|
dz->parray[strandindex][pitchindex] = newpitch;
|
|
|
return FINISHED;
|
|
return FINISHED;
|
|
|
}
|
|
}
|
|
|
|
|
+//RWD 2025 zero error checking - will already have been done!
|
|
|
|
|
+static int checkchans4format(int chans, const char* fname)
|
|
|
|
|
+{
|
|
|
|
|
+ char *lastdot;
|
|
|
|
|
+
|
|
|
|
|
+ lastdot = strrchr(fname,'.');
|
|
|
|
|
+ if(chans > 8192){
|
|
|
|
|
+ if((_stricmp(lastdot,".wav")==0)
|
|
|
|
|
+ || (_stricmp(lastdot,".ana")==0))
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return 1;
|
|
|
|
|
+}
|