cdparams.c 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  1. /*
  2. * Copyright (c) 1983-2020 Trevor Wishart and Composers Desktop Project Ltd
  3. * http://www.trevorwishart.co.uk
  4. * http://www.composersdesktop.com
  5. *
  6. This file is part of the CDP System.
  7. The CDP System is free software; you can redistribute it
  8. and/or modify it under the terms of the GNU Lesser General Public
  9. License as published by the Free Software Foundation; either
  10. version 2.1 of the License, or (at your option) any later version.
  11. The CDP System is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU Lesser General Public License for more details.
  15. You should have received a copy of the GNU Lesser General Public
  16. License along with the CDP System; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18. 02111-1307 USA
  19. *
  20. */
  21. /*
  22. * UPDATE MAR 23 : 2008
  23. *
  24. */
  25. /* EXPECTS TO RECEIVE FROM TK
  26. * --------------------------
  27. * 1) process_no
  28. * 2) mode_no
  29. * 3) filetype %d
  30. * 4) infilesize %ld
  31. * 5) insams %ld
  32. * 6) srate %ld
  33. * 7) channels %d
  34. * 8) wanted %ld
  35. * 9) wlength %ld
  36. * 10) linecnt %d
  37. * 11) arate %f
  38. * 12) frametime %f
  39. * 13) nyquist %lf
  40. * 14) duration %lf
  41. *
  42. *
  43. * DELIVERS TO TK
  44. * --------------
  45. * DURATION FLAG (can duration for creation of brkpntfiles be used AS IS)
  46. * N PARAMETER SPECIFICATIONS (various)
  47. *
  48. * All on separate lines!!
  49. */
  50. #include <stdio.h>
  51. #include <stdlib.h>
  52. #include <structures.h>
  53. #include <tkglobals.h>
  54. #include <logic.h>
  55. #include <formants.h>
  56. #include <cdparams.h>
  57. #include <globcon.h>
  58. #include <processno.h>
  59. #include <modeno.h>
  60. #include <filetype.h>
  61. #include <string.h> /* RWD */
  62. #define PROCESS_NOT_SET (-100)
  63. static int establish_application(aplptr *ap);
  64. static void initialise_application_vals(aplptr ap);
  65. static int set_legal_application_structure(aplptr ap, int process,int mode);
  66. static int print_dialog_box_info(int process,int mode,int total_params,int bare_flags,aplptr ap);
  67. static int print_info_on_formants(aplptr ap);
  68. static int names_check(int bare_flags,aplptr ap);
  69. static int print_special_data_info(aplptr ap);
  70. static int print_param_info(int total_params,aplptr ap);
  71. static int print_flag_info(int bare_flags,aplptr ap);
  72. static int init_param_default_array(int total_params,aplptr ap);
  73. static void superfree_application(aplptr ap);
  74. static int can_specify_brkpntfile_len(int process,int mode);
  75. static int do_the_parameter_display(int display_type,char *pname,char *pname2,char *pname3,char ptype,
  76. double ranglo,double ranghi,double dflt,double r2lo,double r2hi,double dflt2);
  77. static int get_subrange(double *lolo, double *hihi,int n,aplptr ap);
  78. char errstr[1000];
  79. char paramstr[6000];
  80. int sloom = 1;
  81. int sloombatch = 0;
  82. const char* cdp_version = "8.0.0";
  83. /******************************* MAIN/CDPARAMS *******************************/
  84. int main(int argc, char *argv[])
  85. {
  86. int exit_status;
  87. int process, mode, channels;
  88. double duration, nyquist;
  89. float frametime, arate;
  90. int wlength, infilesize, wanted, srate, insams;
  91. int filetype, linecnt, user_paramcnt, total_params, bare_flags, infilecnt;
  92. aplptr ap;
  93. if(argc==2 && (strcmp(argv[1],"--version") == 0)) {
  94. fprintf(stdout,"%s\n",cdp_version);
  95. fflush(stdout);
  96. return 0;
  97. }
  98. if((exit_status = parse_indata(argc,argv,&process,&mode,&infilecnt,&filetype,&infilesize,&insams,
  99. &srate,&channels,&wanted,&wlength,&linecnt,&arate,&frametime,&nyquist,&duration))<0) {
  100. fprintf(stdout,"ERROR: %s",errstr);
  101. fflush(stdout);
  102. return(FAILED);
  103. }
  104. if(mode>0)
  105. mode--; /* !!!!! INTERNAL REPRESENTATION OF MODENO COUNTS FROM ZERO */
  106. if((exit_status = establish_application(&ap))<0)
  107. return(exit_status);
  108. ap->accepts_conflicting_srates = does_process_accept_conflicting_srates(process);
  109. /* KLUDGE */
  110. fprintf(stderr,"\n");
  111. /* KLUDGE */
  112. if((exit_status = set_legal_application_structure(ap,process,mode))<0) {
  113. superfree_application(ap);
  114. fprintf(stdout,"ERROR: %s\n",errstr);
  115. fflush(stdout);
  116. return(FAILED);
  117. }
  118. total_params = ap->max_param_cnt + ap->option_cnt + ap->variant_param_cnt;
  119. user_paramcnt = ap->param_cnt + ap->option_cnt + ap->variant_param_cnt;
  120. bare_flags = ap->vflag_cnt - ap->variant_param_cnt;
  121. if((exit_status = deal_with_special_data(process,mode,srate,duration,nyquist,wlength,channels,ap))<0) {
  122. superfree_application(ap);
  123. fprintf(stdout,"ERROR: %s\n",errstr);
  124. fflush(stdout);
  125. return(exit_status);
  126. }
  127. if((exit_status = deal_with_formants(process,mode,channels,ap))<0) {
  128. superfree_application(ap);
  129. fprintf(stdout,"ERROR: %s\n",errstr);
  130. fflush(stdout);
  131. return(exit_status);
  132. }
  133. if(total_params > 0) {
  134. if((exit_status = get_param_names(process,mode,total_params,ap))<0) {
  135. superfree_application(ap);
  136. fprintf(stdout,"ERROR: %s\n",errstr);
  137. fflush(stdout);
  138. return(FAILED);
  139. }
  140. if((exit_status = get_param_ranges(process,mode,total_params,nyquist,frametime,arate,srate,wlength,
  141. insams,channels,wanted,filetype,linecnt,duration,ap))<0) {
  142. superfree_application(ap);
  143. fprintf(stdout,"ERROR: %s\n",errstr);
  144. fflush(stdout);
  145. return(FAILED);
  146. }
  147. if((exit_status = init_param_default_array(total_params,ap))<0) {
  148. superfree_application(ap);
  149. fprintf(stdout,"ERROR: %s\n",errstr);
  150. fflush(stdout);
  151. return(FAILED);
  152. }
  153. if((exit_status = initialise_param_values(process,mode,channels,nyquist,frametime,insams,srate,
  154. wanted,linecnt,duration,ap->default_val,filetype,ap))<0) {
  155. superfree_application(ap);
  156. fprintf(stdout,"ERROR: %s\n",errstr);
  157. fflush(stdout);
  158. return(FAILED);
  159. }
  160. if((exit_status = establish_display(process,mode,total_params,frametime,duration,ap))<0) {
  161. superfree_application(ap);
  162. fprintf(stdout,"ERROR: %s\n",errstr);
  163. fflush(stdout);
  164. return(FAILED);
  165. }
  166. }
  167. if(bare_flags > 0) {
  168. if((exit_status = setup_flagnames(process,mode,bare_flags,ap))<0) {
  169. superfree_application(ap);
  170. fprintf(stdout,"ERROR: %s\n",errstr);
  171. fflush(stdout);
  172. return(FAILED);
  173. }
  174. }
  175. if((exit_status = print_dialog_box_info(process,mode,user_paramcnt,bare_flags,ap))<0) {
  176. superfree_application(ap);
  177. fprintf(stdout,"ERROR: %s",errstr);
  178. fflush(stdout);
  179. return(FAILED);
  180. }
  181. fflush(stdout);
  182. return(SUCCEEDED);
  183. }
  184. /******************************* ESTABLISH_APPLICATION *******************************/
  185. int establish_application(aplptr *ap)
  186. {
  187. if((*ap = (aplptr)malloc(sizeof(struct applic)))==NULL) {
  188. sprintf(errstr,"INSUFFICIENT MEMORY to establish_application\n");
  189. return(MEMORY_ERROR);
  190. }
  191. initialise_application_vals(*ap);
  192. return(FINISHED);
  193. }
  194. /************************* INITIALISE_APPLICATION_VALS *************************/
  195. void initialise_application_vals(aplptr ap)
  196. {
  197. ap->max_param_cnt = (char)0;
  198. ap->special_data = (char)0;
  199. ap->formant_flag = (char)0;
  200. ap->formant_qksrch = (char)0;
  201. ap->min_fbands = MINFBANDVAL;
  202. ap->max_freqwise_fbands = MINFBANDVAL;
  203. ap->max_pichwise_fbands = MINFBANDVAL;
  204. ap->no_pichwise_formants = FALSE;
  205. ap->special_range = FALSE;
  206. ap->other_special_range = FALSE;
  207. ap->data_in_file_only = FALSE;
  208. ap->input_process_type = PROCESS_NOT_SET;
  209. ap->accepts_conflicting_srates = FALSE;
  210. ap->param_name = NULL;
  211. ap->flagname = NULL;
  212. ap->special_data_name = (char*)0;
  213. ap->special_data_name2 = (char*)0;
  214. ap->param_cnt = (char)0;
  215. ap->option_cnt = (char)0;
  216. ap->vflag_cnt = (char)0;
  217. ap->variant_param_cnt = (char)0;
  218. ap->total_input_param_cnt = (char)0;
  219. ap->lo = NULL;
  220. ap->hi = NULL;
  221. ap->default_val = NULL;
  222. ap->lolo = NULL;
  223. ap->hihi = NULL;
  224. ap->display_type = NULL;
  225. ap->has_subrange = NULL;
  226. ap->param_list = NULL;
  227. ap->option_list = NULL;
  228. ap->variant_list = NULL;
  229. }
  230. /************************** SET_LEGAL_APPLICATION_STRUCTURE *****************************/
  231. int set_legal_application_structure(aplptr ap,int process,int mode)
  232. {
  233. int exit_status;
  234. if((exit_status = set_legal_param_structure(process,mode,ap))<0)
  235. return(exit_status);
  236. if((exit_status = set_legal_option_and_variant_structure(process,mode,ap))<0)
  237. return(exit_status);
  238. return(FINISHED);
  239. }
  240. /******************************* SUPERFREE_APPLICATION *******************************/
  241. void superfree_application(aplptr ap)
  242. {
  243. if(ap->param_name !=NULL) free(ap->param_name);
  244. if(ap->flagname !=NULL) free(ap->flagname);
  245. if(ap->param_list !=NULL) free(ap->param_list);
  246. if(ap->option_list !=NULL) free(ap->option_list);
  247. if(ap->variant_list !=NULL) free(ap->variant_list);
  248. if(ap->lo !=NULL) free(ap->lo);
  249. if(ap->hi !=NULL) free(ap->hi);
  250. if(ap->default_val !=NULL) free(ap->default_val);
  251. if(ap->lolo !=NULL) free(ap->lolo);
  252. if(ap->hihi !=NULL) free(ap->hihi);
  253. if(ap->display_type !=NULL) free(ap->display_type);
  254. if(ap->has_subrange !=NULL) free(ap->has_subrange);
  255. free(ap);
  256. }
  257. /******************************* PRINT_DIALOG_BOX_INFO (Feb 1999) *******************************/
  258. int print_dialog_box_info(int process,int mode,int user_paramcnt,int bare_flags,aplptr ap)
  259. {
  260. int exit_status;
  261. if((exit_status = names_check(bare_flags,ap))<0)
  262. return(exit_status);
  263. if((exit_status = can_specify_brkpntfile_len(process,mode))<0)
  264. return(exit_status);
  265. fprintf(stdout,"%d\n",exit_status); /* TELLS WHETHER BRKPNTFILE DATA CAN HAVE SPECIFIC LENGTH */
  266. if((exit_status = print_info_on_formants(ap))<0)
  267. return(exit_status);
  268. if((exit_status = print_special_data_info(ap))<0)
  269. return(exit_status);
  270. if((exit_status = print_param_info(user_paramcnt,ap))<0)
  271. return(exit_status);
  272. if((exit_status = print_flag_info(bare_flags,ap))<0)
  273. return(exit_status);
  274. fprintf(stdout,"ENDPARAMS\n");
  275. return(FINISHED);
  276. }
  277. /******************************* NAMES_CHECK *******************************/
  278. int names_check(int bare_flags,aplptr ap)
  279. {
  280. int array_checked = FALSE;
  281. int n, m;
  282. int checkcnt = 0;
  283. for(n=0;n<ap->max_param_cnt;n++) {
  284. if(ap->param_list[n]!='0') {
  285. if(!array_checked) {
  286. if(ap->param_name==NULL) {
  287. sprintf(errstr,"Parameter names array not initialised: names_check()\n");
  288. return(PROGRAM_ERROR);
  289. } else
  290. array_checked = TRUE;
  291. }
  292. if(ap->param_name[n]==NULL) {
  293. sprintf(errstr,"Parameter name %d not initialised: names_check()\n",checkcnt+1);
  294. return(PROGRAM_ERROR);
  295. }
  296. checkcnt++;
  297. }
  298. }
  299. for(n=ap->max_param_cnt,m=0;m<ap->option_cnt;n++,m++) {
  300. if(!array_checked) {
  301. if(ap->param_name==NULL) {
  302. sprintf(errstr,"Option-Parameter names array not initialised: names_check()\n");
  303. return(PROGRAM_ERROR);
  304. } else
  305. array_checked = TRUE;
  306. }
  307. if(ap->param_name[n]==NULL) {
  308. sprintf(errstr,"Option-Parameter names %d not initialised: names_check()\n",ap->param_cnt+m+1);
  309. return(PROGRAM_ERROR);
  310. }
  311. }
  312. for(n=ap->max_param_cnt+ap->option_cnt,m=0;m<ap->variant_param_cnt;n++,m++) {
  313. if(!array_checked) {
  314. if(ap->param_name==NULL) {
  315. sprintf(errstr,"Variant-Parameter names array not initialised: names_check()\n");
  316. return(PROGRAM_ERROR);
  317. } else
  318. array_checked = TRUE;
  319. }
  320. if(ap->param_name[n]==NULL) {
  321. sprintf(errstr,"Variant-Parameter names %d not initialised: names_check()\n",ap->param_cnt+ap->option_cnt+m+1);
  322. return(PROGRAM_ERROR);
  323. }
  324. }
  325. array_checked = FALSE;
  326. for(n=ap->max_param_cnt+ap->option_cnt+ap->variant_param_cnt,m=0;m<bare_flags;n++,m++) {
  327. if(!array_checked) {
  328. if(ap->flagname==NULL) {
  329. sprintf(errstr,"Flag names array not initialised: names_check()\n");
  330. return(PROGRAM_ERROR);
  331. } else
  332. array_checked = TRUE;
  333. }
  334. if(ap->flagname[m]==NULL) {
  335. sprintf(errstr,"Flag name %d not initialised: names_check()\n",m+1);
  336. return(PROGRAM_ERROR);
  337. }
  338. }
  339. return(FINISHED);
  340. }
  341. /**************************** PRINT_INFO_ON_FORMANTS *************************/
  342. int print_info_on_formants(aplptr ap)
  343. {
  344. int exit_status;
  345. if(ap->formant_flag) {
  346. if(ap->no_pichwise_formants) {
  347. if((exit_status = do_the_parameter_display
  348. (LINEAR,"FRQWISE_FMNT_BANDS","","",'i',ap->min_fbands,ap->max_freqwise_fbands,FBAND_DEFAULT,
  349. ap->min_fbands,ap->max_freqwise_fbands,0.0))<0)
  350. return(exit_status);
  351. } else {
  352. if((exit_status = do_the_parameter_display
  353. (SWITCHED,"FORMANT_BANDS","PITCHWISE","FRQWISE",'i',ap->min_fbands,ap->max_pichwise_fbands,FBAND_DEFAULT,
  354. ap->min_fbands,ap->max_freqwise_fbands,FBAND_DEFAULT))<0)
  355. return(exit_status);
  356. }
  357. }
  358. if(ap->formant_qksrch) {
  359. if((exit_status = do_the_parameter_display(CHECKBUTTON,"FORMANT_QUICKSEARCH","","",'i',0.0,0.0,0.0,0.0,0.0,0.0))<0)
  360. return(exit_status);
  361. }
  362. return(FINISHED);
  363. }
  364. /******************************* PRINT_SPECIAL_DATA_INFO *******************************/
  365. int print_special_data_info(aplptr ap)
  366. {
  367. int exit_status;
  368. int rangecnt = 0;
  369. if(ap->special_data) {
  370. rangecnt = 0;
  371. if(ap->special_range)
  372. rangecnt++;
  373. if(ap->other_special_range)
  374. rangecnt++;
  375. switch(ap->data_in_file_only) {
  376. case(TRUE):
  377. switch(rangecnt) {
  378. case(0):
  379. if((exit_status = do_the_parameter_display(FILENAME,ap->special_data_name,"","",(char)0,
  380. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  381. return(exit_status);
  382. break;
  383. case(1):
  384. if((exit_status = do_the_parameter_display(FILENAME,ap->special_data_name,"","",(char)1,
  385. ap->min_special,ap->max_special,0.0,0.0,0.0,0.0))<0)
  386. return(exit_status);
  387. break;
  388. case(2):
  389. if((exit_status = do_the_parameter_display(FILENAME,ap->special_data_name,"","",(char)2,
  390. ap->min_special,ap->max_special,0.0,ap->min_special2,ap->max_special2,0.0))<0)
  391. return(exit_status);
  392. break;
  393. }
  394. break;
  395. case(FALSE):
  396. if((exit_status = do_the_parameter_display(FILE_OR_VAL,ap->special_data_name,"","",'D',
  397. ap->min_special,ap->max_special,ap->default_special,0.0,0.0,0.0))<0)
  398. return(exit_status);
  399. break;
  400. case(VOWEL_STRING):
  401. if((exit_status = do_the_parameter_display(FILE_OR_VOWELS,ap->special_data_name,"","",(char)0,
  402. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  403. return(exit_status);
  404. break;
  405. case(SNDFILENAME_STRING): /* this is a generic outfilename, not an existing file */
  406. if((exit_status = do_the_parameter_display(GENERIC_FILENAME,ap->special_data_name,"","",(char)0,
  407. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  408. return(exit_status);
  409. break;
  410. case(SHUFFLE_STRING):
  411. if((exit_status = do_the_parameter_display(STRING_A,ap->special_data_name,"","",(char)0,
  412. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  413. return(exit_status);
  414. break;
  415. case(REORDER_STRING):
  416. if((exit_status = do_the_parameter_display(STRING_B,ap->special_data_name,"","",(char)0,
  417. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  418. return(exit_status);
  419. break;
  420. case(NOTE_STRING):
  421. if((exit_status = do_the_parameter_display(STRING_C,ap->special_data_name,"","",(char)0,
  422. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  423. return(exit_status);
  424. break;
  425. case(INTERVAL_STRING):
  426. if((exit_status = do_the_parameter_display(STRING_D,ap->special_data_name,"","",(char)0,
  427. 0.0,0.0,0.0,0.0,0.0,0.0))<0)
  428. return(exit_status);
  429. break;
  430. }
  431. }
  432. return(FINISHED);
  433. }
  434. /******************************* PRINT_PARAM_INFO *******************************/
  435. int print_param_info(int user_paramcnt,aplptr ap)
  436. {
  437. int exit_status;
  438. int checkcnt = 0, n, m;
  439. double lolo, hihi;
  440. if(user_paramcnt<=0)
  441. return(FINISHED);
  442. if(ap->max_param_cnt > 0) {
  443. for(n=0;n<ap->max_param_cnt;n++) {
  444. if(ap->param_list[n]!='0') {
  445. get_subrange(&lolo,&hihi,n,ap);
  446. if((exit_status = do_the_parameter_display(ap->display_type[n],ap->param_name[n],"","",
  447. ap->param_list[n],ap->lo[n],ap->hi[n],ap->default_val[n],lolo,hihi,0.0))<0)
  448. return(exit_status);
  449. checkcnt++;
  450. }
  451. }
  452. if(checkcnt!=ap->param_cnt) {
  453. sprintf(errstr,"parameter accounting problem: print_param_info()\n");
  454. return(PROGRAM_ERROR);
  455. }
  456. }
  457. if(ap->option_cnt > 0) {
  458. for(n=ap->max_param_cnt,m=0;m<ap->option_cnt;n++,m++) {
  459. //TW JULY 2006
  460. if(ap->option_list[m]!='0') {
  461. get_subrange(&lolo,&hihi,n,ap);
  462. if((exit_status = do_the_parameter_display(ap->display_type[n],ap->param_name[n],"","",
  463. ap->option_list[m],ap->lo[n],ap->hi[n],ap->default_val[n],lolo,hihi,0.0))<0)
  464. return(exit_status);
  465. }
  466. }
  467. }
  468. if(ap->variant_param_cnt > 0) {
  469. for(n=ap->max_param_cnt+ap->option_cnt,m=0;m<ap->variant_param_cnt;n++,m++) {
  470. get_subrange(&lolo,&hihi,n,ap);
  471. if((exit_status = do_the_parameter_display(ap->display_type[n],ap->param_name[n],"","",
  472. ap->variant_list[m],ap->lo[n],ap->hi[n],ap->default_val[n],lolo,hihi,0.0))<0)
  473. return(exit_status);
  474. }
  475. }
  476. return(FINISHED);
  477. }
  478. /******************************* PRINT_FLAG_INFO *******************************/
  479. int print_flag_info(int bare_flags,aplptr ap)
  480. {
  481. int n, m;
  482. if(bare_flags>0) {
  483. for(n=ap->max_param_cnt+ap->option_cnt+ap->variant_param_cnt,m=0;m<bare_flags;n++,m++) {
  484. do_the_parameter_display(CHECKBUTTON,ap->flagname[m],"","",0,0,0,0,0,0,0);
  485. }
  486. }
  487. return(FINISHED);
  488. }
  489. /******************************* PARSE_INDATA *******************************/
  490. int parse_indata(int argc,char *argv[],int *process,int *mode,int *infilecnt,
  491. int *filetype,int *infilesize,int *insams,int *srate,
  492. int *channels,int *wanted,int *wlength,int *linecnt,float *arate,float *frametime,double *nyquist,double *duration)
  493. {
  494. if(argc!=16) {
  495. sprintf(errstr,"Wrong number of params to cdparams()\n");
  496. return(DATA_ERROR);
  497. }
  498. if(sscanf(argv[1],"%d",process)!=1) {
  499. sprintf(errstr,"Cannot read process number: cdparams()\n");
  500. return(DATA_ERROR);
  501. }
  502. if(sscanf(argv[2],"%d",mode)!=1) {
  503. sprintf(errstr,"Cannot read mode number: cdparams()\n");
  504. return(DATA_ERROR);
  505. }
  506. if(sscanf(argv[3],"%d",infilecnt)!=1) {
  507. sprintf(errstr,"Cannot read infilexnt: cdparams()\n");
  508. return(DATA_ERROR);
  509. }
  510. if(sscanf(argv[4],"%d",filetype)!=1) {
  511. sprintf(errstr,"Cannot read file type: cdparams()\n");
  512. return(DATA_ERROR);
  513. }
  514. if(sscanf(argv[5],"%d",infilesize)!=1) {
  515. sprintf(errstr,"Cannot read infilesize: cdparams()\n");
  516. return(DATA_ERROR);
  517. }
  518. if(sscanf(argv[6],"%d",insams)!=1) {
  519. sprintf(errstr,"Cannot read number of samples in infile: cdparams()\n");
  520. return(DATA_ERROR);
  521. }
  522. if(sscanf(argv[7],"%d",srate)!=1) {
  523. sprintf(errstr,"Cannot read srate: cdparams()\n");
  524. return(DATA_ERROR);
  525. }
  526. if(sscanf(argv[8],"%d",channels)!=1) {
  527. sprintf(errstr,"Cannot read channel count: cdparams()\n");
  528. return(DATA_ERROR);
  529. }
  530. if(sscanf(argv[9],"%d",wanted)!=1) {
  531. sprintf(errstr,"Cannot read wanted: cdparams()\n");
  532. return(DATA_ERROR);
  533. }
  534. if(sscanf(argv[10],"%d",wlength)!=1) {
  535. sprintf(errstr,"Cannot read wlength: cdparams()\n");
  536. return(DATA_ERROR);
  537. }
  538. if(sscanf(argv[11],"%d",linecnt)!=1) {
  539. sprintf(errstr,"Cannot read arate: cdparams()\n");
  540. return(DATA_ERROR);
  541. }
  542. if(sscanf(argv[12],"%f",arate)!=1) {
  543. sprintf(errstr,"Cannot read arate: cdparams()\n");
  544. return(DATA_ERROR);
  545. }
  546. if(sscanf(argv[13],"%f",frametime)!=1) {
  547. sprintf(errstr,"Cannot read nyquist: cdparams()\n");
  548. return(DATA_ERROR);
  549. }
  550. if(sscanf(argv[14],"%lf",nyquist)!=1) {
  551. sprintf(errstr,"Cannot read nyquist: cdparams()\n");
  552. return(DATA_ERROR);
  553. }
  554. if(sscanf(argv[15],"%lf",duration)!=1) {
  555. sprintf(errstr,"Cannot read duration: cdparams()\n");
  556. return(DATA_ERROR);
  557. }
  558. return FINISHED;
  559. }
  560. /******************************* INIT_PARAM_DEFAULT_ARRAY *******************************/
  561. int init_param_default_array(int total_params,aplptr ap)
  562. {
  563. if((ap->default_val = (double *)malloc((total_params) * sizeof(double)))==NULL) {
  564. sprintf(errstr,"INSUFFICIENT MEMORY for param_default_array\n");
  565. return(MEMORY_ERROR);
  566. }
  567. return(FINISHED);
  568. }
  569. /****************************** DO_THE_PARAMETER_DISPLAY *********************************/
  570. int do_the_parameter_display
  571. (int display_type,char *pname,char *pname2,char *pname3,char ptype,double ranglo,double ranghi,double dflt,double r2lo,double r2hi,double dflt2)
  572. {
  573. char quoted_pname[200], quoted_pname2[200], quoted_pname3[200];
  574. // switch(display_type) {
  575. // case(LINEAR): case(LOG): case(PLOG): case(POWTWO):
  576. // case(SWITCHED): case(NUMERIC): case(FILE_OR_VAL):
  577. // if(ranghi - ranglo <= FLTERR) {
  578. // fprintf(stdout,"ERROR: Effectively zero range encountered for parameter %s\n",pname);
  579. // fflush(stdout);
  580. // return(FAILED);
  581. // }
  582. // break;
  583. // }
  584. quoted_pname[0] = '\0';
  585. quoted_pname2[0] = '\0';
  586. quoted_pname3[0] = '\0';
  587. if(strlen(pname)>0) { /* If name exists, enclose it in double quotes */
  588. strcat(quoted_pname,"\"");
  589. strcat(quoted_pname,pname);
  590. strcat(quoted_pname,"\"");
  591. }
  592. if(strlen(pname2)>0) { /* If 2nd name exists, enclose it in double quotes */
  593. strcat(quoted_pname2,"\"");
  594. strcat(quoted_pname2,pname2);
  595. strcat(quoted_pname2,"\"");
  596. }
  597. if(strlen(pname3)>0) { /* If 3rd name exists, enclose it in double quotes */
  598. strcat(quoted_pname3,"\"");
  599. strcat(quoted_pname3,pname3);
  600. strcat(quoted_pname3,"\"");
  601. }
  602. switch(display_type) {
  603. case(LINEAR):
  604. fprintf(stdout,"LINEAR %s %c %lf %lf %lf %lf %lf\n",
  605. quoted_pname, /* param name */
  606. ptype, /* data type */
  607. ranglo, /* bottom of range */
  608. ranghi, /* top of range */
  609. dflt, /* default value */
  610. r2lo, /* bottom of subrange */
  611. r2hi); /* top of subrange */
  612. break;
  613. case(LOG):
  614. fprintf(stdout,"LOG %s %c %lf %lf %lf %lf %lf\n",
  615. quoted_pname, /* param name */
  616. ptype, /* data type */
  617. ranglo, /* bottom of range */
  618. ranghi, /* top of range */
  619. dflt, /* default value */
  620. r2lo, /* bottom of subrange */
  621. r2hi); /* top of subrange */
  622. break;
  623. case(POWTWO):
  624. fprintf(stdout,"POWTWO %s %c %lf %lf %lf %lf %lf\n",
  625. quoted_pname, /* param name */
  626. ptype, /* data type */
  627. ranglo, /* bottom of range */
  628. ranghi, /* top of range */
  629. dflt, /* default value */
  630. r2lo, /* bottom of subrange */
  631. r2hi); /* top of subrange */
  632. break;
  633. case(PLOG):
  634. fprintf(stdout,"PLOG %s %c %lf %lf %lf %lf %lf\n",
  635. quoted_pname, /* param name */
  636. ptype, /* data type */
  637. ranglo, /* bottom of range */
  638. ranghi, /* top of range */
  639. dflt, /* default value */
  640. r2lo, /* bottom of subrange */
  641. r2hi); /* top of subrange */
  642. break;
  643. case(SWITCHED):
  644. fprintf(stdout,"SWITCHED %s %s %s %c %lf %lf %lf %lf %lf %lf\n",
  645. quoted_pname, /* param name */
  646. quoted_pname2, /* switchname 1 */
  647. quoted_pname3, /* switchname 2 */
  648. ptype, /* data type */
  649. ranglo, /* bottom of range */
  650. ranghi, /* top of range */
  651. dflt, /* default value */
  652. r2lo, /* bottom of 2nd range */
  653. r2hi, /* top of 2nd range */
  654. dflt2); /* default in 2nd range */
  655. break;
  656. case(FILENAME):
  657. if(ptype > (char)2) /* Deals with ptype derived from ap->param_list (etc) e.g. MIXINBETWEEN */
  658. ptype = (char)1; /* As ptype there refers to data type(int or float) */
  659. /* While ptype here refers to number of range DISPLAYS */
  660. fprintf(stdout,"FILENAME %s %d %lf %lf %lf %lf\n",
  661. quoted_pname, /* param name */
  662. ptype, /* ranges to display */
  663. ranglo, /* bottom of range */
  664. ranghi, /* top of range */
  665. r2lo, /* bottom of 2nd range */
  666. r2hi); /* top of 2nd range */
  667. break;
  668. case(FILE_OR_VAL):
  669. fprintf(stdout,"FILE_OR_VAL %s %c %lf %lf %lf\n",
  670. quoted_pname, /* param name */
  671. ptype, /* data type */
  672. ranglo, /* bottom of range */
  673. ranghi, /* top of range */
  674. dflt); /* default val */
  675. break;
  676. case(FILE_OR_VOWELS): fprintf(stdout,"VOWELS %s\n",quoted_pname); break;
  677. case(CHECKBUTTON): fprintf(stdout,"CHECKBUTTON %s\n",quoted_pname); break;
  678. case(GENERIC_FILENAME): fprintf(stdout,"GENERICNAME %s\n",quoted_pname); break;
  679. case(STRING_A): fprintf(stdout,"STRING_A %s\n",quoted_pname); break;
  680. case(STRING_B): fprintf(stdout,"STRING_B %s\n",quoted_pname); break;
  681. case(STRING_C): fprintf(stdout,"STRING_C %s\n",quoted_pname); break;
  682. case(STRING_D): fprintf(stdout,"STRING_D %s\n",quoted_pname); break;
  683. case(NUMERIC):
  684. fprintf(stdout,"NUMERIC %s %c %lf %lf %lf\n",
  685. quoted_pname, /* param name */
  686. ptype, /* data type */
  687. ranglo, /* bottom of range */
  688. ranghi, /* top of range */
  689. dflt); /* default value */
  690. break;
  691. case(LOGNUMERIC):
  692. fprintf(stdout,"LOGNUMERIC %s %c %lf %lf %lf\n",
  693. quoted_pname, /* param name */
  694. ptype, /* data type */
  695. ranglo, /* bottom of range */
  696. ranghi, /* top of range */
  697. dflt); /* default value */
  698. break;
  699. case(TIMETYPE):
  700. fprintf(stdout,"TIMETYPE %s %lf\n",
  701. quoted_pname, /* param name */
  702. dflt); /* default value */
  703. break;
  704. case(SRATE):
  705. fprintf(stdout,"SRATE_GADGET %s %lf\n",
  706. quoted_pname, /* param name */
  707. dflt); /* default value */
  708. break;
  709. case(MIDI):
  710. fprintf(stdout,"MIDI_GADGET %s %lf\n",
  711. quoted_pname, /* param name */
  712. dflt); /* default value */
  713. break;
  714. case(OCTAVES):
  715. fprintf(stdout,"OCT_GADGET %s %lf\n",
  716. quoted_pname, /* param name */
  717. dflt); /* default value */
  718. break;
  719. case(CHORDSORT):
  720. fprintf(stdout,"CHORD_GADGET %s %lf\n",
  721. quoted_pname, /* param name */
  722. dflt); /* default value */
  723. break;
  724. case(TWOFAC):
  725. fprintf(stdout,"TWOFAC %s %lf\n",
  726. quoted_pname, /* param name */
  727. dflt); /* default value */
  728. break;
  729. case(WAVETYPE):
  730. fprintf(stdout,"WAVETYPE %s %lf\n",
  731. quoted_pname, /* param name */
  732. dflt); /* default value */
  733. break;
  734. default:
  735. sprintf(errstr,"Unknown parameter type: do_the_parameter_display()\n");
  736. return(PROGRAM_ERROR);
  737. }
  738. return(FINISHED);
  739. }
  740. /******************************* GET_SUBRANGE *******************************/
  741. int get_subrange(double *lolo, double *hihi,int n,aplptr ap)
  742. {
  743. if(ap->has_subrange[n]) {
  744. *lolo = ap->lolo[n];
  745. *hihi = ap->hihi[n];
  746. } else {
  747. *lolo = ap->lo[n];
  748. *hihi = ap->hi[n];
  749. }
  750. return(FINISHED);
  751. }
  752. /****************************** CAN_SPECIFY_BRKPNTFILE_LEN *********************************/
  753. int can_specify_brkpntfile_len(int process,int mode)
  754. {
  755. switch(process) {
  756. case(GAIN): case(LIMIT): case(BARE): case(CLEAN): case(STRETCH): case(ALT):
  757. case(OCT): case(SHIFTP): case(TUNE): case(PICK): case(MULTRANS): case(CHORD):
  758. case(FILT): case(GREQ): case(SPLIT): case(ARPE): case(PLUCK): case(S_TRACE):
  759. case(BLTR): case(ACCU): case(EXAG): case(FOCUS): case(FOLD): case(FREEZE):
  760. case(STEP): case(AVRG): case(BLUR): case(SUPR): case(CHORUS): case(NOISE):
  761. case(SCAT): case(SPREAD): case(SHIFT): case(GLIS): case(WAVER): case(INVERT):
  762. case(FMNTSEE): case(FORMSEE): case(LEVEL): case(MAKE): case(PITCH): case(TRACK):
  763. case(TRNSP): case(TRNSF): case(DIFF): case(REPITCHB): case(OCTVU): case(PEAK):
  764. case(REPORT): case(PRINT): case(P_WRITE): case(P_APPROX): case(P_CUT): case(REPITCH):
  765. case(FORMANTS): case(VOCODE): case(LEAF): case(MEAN): case(CROSS): case(P_EXAG):
  766. case(P_INVERT): case(P_SEE): case(P_HEAR): case(P_SMOOTH): case(P_FIX): case(TSTRETCH):
  767. case(P_QUANTISE): case(P_RANDOMISE): case(P_TRANSPOSE): case(P_VIBRATO):
  768. case(DISTORT): case(DISTORT_ENV): case(DISTORT_OMT): case(GRAIN_GET):
  769. case(ENV_DOVETAILING): case(ENV_SWELL): case(ENV_ATTACK): case(ENV_ENVTOBRK):
  770. case(ENV_ENVTODBBRK): case(ENV_WARPING): case(ENV_RESHAPING): case(ENV_REPLOTTING):
  771. case(ENV_DBBRKTOENV): case(ENV_DBBRKTOBRK): case(ENV_BRKTODBBRK): case(ENV_BRKTOENV):
  772. case(ENV_EXTRACT): case(ENV_TREMOL): case(ENV_PLUCK): case(MIXDUMMY):
  773. case(MIXSYNC): case(MIXSYNCATT): case(MIXTWARP): case(MIXSWARP):
  774. case(MIXGAIN): case(MIXSHUFL): case(MIXMAX): case(EQ):
  775. case(LPHP): case(FSTATVAR): case(FLTBANKN): case(FLTBANKC):
  776. case(FLTBANKU): case(FLTBANKV): case(FLTITER): case(FLTSWEEP):
  777. case(ALLPASS): case(BRASSAGE): case(PVOC_ANAL): case(PVOC_SYNTH):
  778. case(PVOC_EXTRACT): case(MOD_SPACE): case(FREEZE2): case(FLTBANKV2):
  779. case(ACC_STREAM): case(DISTORT_OVERLOAD): case(SCALED_PAN): case(TIME_GRID):
  780. case(MIX_PAN): case(SHUDDER): case(DOUBLETS): case(ENVSYN):
  781. case(GREV):
  782. return(TRUE);
  783. case(MOD_LOUDNESS):
  784. switch(mode) {
  785. case(LOUD_PROPOR): case(LOUD_DB_PROPOR):
  786. return(FALSE);
  787. default:
  788. return(TRUE);
  789. }
  790. break;
  791. case(CONVOLVE):
  792. switch(mode) {
  793. case(CONV_NORMAL): return(FALSE);
  794. case(CONV_TVAR): return(TRUE);
  795. }
  796. break;
  797. case(MOD_RADICAL):
  798. switch(mode) {
  799. case(MOD_REVERSE): return(TRUE);
  800. case(MOD_SHRED): return(TRUE);
  801. case(MOD_SCRUB): return(FALSE);
  802. case(MOD_LOBIT): return(TRUE);
  803. case(MOD_LOBIT2): return(TRUE);
  804. case(MOD_RINGMOD): return(TRUE);
  805. case(MOD_CROSSMOD): return(FALSE);
  806. }
  807. break;
  808. case(MOD_PITCH):
  809. switch(mode) {
  810. case(MOD_VIBRATO): return(TRUE);
  811. default: return(FALSE);
  812. }
  813. break;
  814. case(CHANNEL): case(FREQUENCY): case(P_INFO): case(P_ZEROS):
  815. case(CUT): case(GRAB): case(MAGNIFY): case(DRUNK): case(SHUFFLE):
  816. case(WEAVE): case(GLIDE): case(BRIDGE): case(MORPH): case(WARP):
  817. case(FORM): case(SUM): case(MAX): case(WINDOWCNT): case(DISTORT_RPTFL):
  818. case(DISTORT_AVG): case(DISTORT_MLT): case(DISTORT_DIV): case(DISTORT_HRM): case(DISTORT_FRC):
  819. case(DISTORT_REV): case(DISTORT_SHUF): case(DISTORT_RPT): case(DISTORT_INTP): case(DISTORT_DEL):
  820. case(DISTORT_RPL): case(DISTORT_TEL): case(DISTORT_FLT): case(DISTORT_INT): case(DISTORT_CYCLECNT):
  821. case(ZIGZAG): case(LOOP): case(SCRAMBLE): case(ITERATE): case(DRUNKWALK):
  822. case(DISTORT_PCH): case(SIMPLE_TEX): case(TIMED): case(GROUPS): case(TGROUPS):
  823. case(DECORATED): case(PREDECOR): case(POSTDECOR): case(ORNATE): case(PREORNATE):
  824. case(POSTORNATE): case(MOTIFS): case(TMOTIFS): case(MOTIFSIN): case(TMOTIFSIN):
  825. case(MIX): case(MIXCROSS): case(MIXINTERL): case(MIXINBETWEEN): case(ITERATE_EXTEND):
  826. case(MIXTEST): case(MIXFORMAT): case(WORDCNT): case(GRAIN_COUNT): case(GRAIN_REORDER):
  827. case(GRAIN_ALIGN): case(ENV_CREATE): case(GRAIN_OMIT): case(GRAIN_REMOTIF):
  828. case(ENV_CURTAILING): case(GRAIN_POSITION): case(GRAIN_REPITCH): case(GRAIN_DUPLICATE):
  829. case(GRAIN_RERHYTHM): case(GRAIN_TIMEWARP): case(GRAIN_REVERSE): case(BATCH_EXPAND):
  830. case(MOD_REVECHO): case(SAUSAGE): case(HOUSE_COPY): case(HOUSE_DISK):
  831. case(HOUSE_EXTRACT): case(HOUSE_BAKUP): case(HOUSE_DEL): case(MAKE_VFILT):
  832. case(HOUSE_CHANS): case(HOUSE_BUNDLE): case(HOUSE_SORT): case(HOUSE_SPEC):
  833. case(EDIT_CUT): case(EDIT_CUTEND): case(EDIT_ZCUT): case(EDIT_EXCISE):
  834. case(EDIT_EXCISEMANY): case(EDIT_INSERT): case(EDIT_INSERTSIL): case(EDIT_JOIN):
  835. case(INFO_PROPS): case(INFO_SFLEN): case(INFO_TIMELIST): case(INFO_TIMESUM):
  836. case(INFO_TIMEDIFF): case(INFO_SAMPTOTIME): case(INFO_TIMETOSAMP): case(INFO_MAXSAMP):
  837. case(INFO_LOUDCHAN): case(INFO_FINDHOLE): case(INFO_DIFF): case(INFO_CDIFF):
  838. case(INFO_PRNTSND): case(INFO_MUSUNITS): case(INSERTSIL_MANY): case(INFO_MAXSAMP2):
  839. case(SYNTH_WAVE): case(SYNTH_NOISE): case(SYNTH_SIL): case(RANDCUTS):
  840. case(RANDCHUNKS): case(SIN_TAB): case(HF_PERM1): case(HF_PERM2):
  841. case(DEL_PERM): case(DEL_PERM2): case(SYNTH_SPEC): case(TWIXT):
  842. case(SPHINX): case(INFO_LOUDLIST): case(NOISE_SUPRESS): case(JOIN_SEQ):
  843. case(P_SYNTH): case(P_INSERT): case(P_PTOSIL): case(P_NTOSIL):
  844. case(P_SINSERT): case(ANALENV): case(MAKE2): case(P_VOWELS):
  845. case(HOUSE_DUMP): case(HOUSE_RECOVER): case(HOUSE_GATE): case(MIX_ON_GRID):
  846. case(P_GEN): case(P_INTERP): case(AUTOMIX): case(EDIT_CUTMANY):
  847. case(STACK): case(VFILT): case(ENV_PROPOR): case(DISTORT_PULSED):
  848. case(SEQUENCER): case(BAKTOBAK): case(ADDTOMIX): case(EDIT_INSERT2):
  849. case(MIX_AT_STEP): case(FIND_PANPOS): case(CLICK): case(SYLLABS):
  850. case(MIX_MODEL): case(CYCINBETWEEN): case(JOIN_SEQDYN): case(TOPNTAIL_CLICKS):
  851. case(P_BINTOBRK): case(SEQUENCER2): case(RRRR_EXTEND): case(HOUSE_GATE2):
  852. case(GRAIN_ASSESS): case(MULTI_SYN): case(DISTORT_RPT2): case(ZCROSS_RATIO):
  853. case(SSSS_EXTEND): case(MANY_ZCUTS):
  854. return(FALSE);
  855. case(ENV_IMPOSE):
  856. case(ENV_REPLACE):
  857. switch(mode) {
  858. case(ENV_BRKFILE_IN):
  859. case(ENV_DB_BRKFILE_IN):
  860. return(FALSE);
  861. case(ENV_ENVFILE_IN):
  862. case(ENV_SNDFILE_IN):
  863. return(TRUE);
  864. }
  865. break;
  866. case(MIXTWO):
  867. case(MIXMANY):
  868. return(FALSE);
  869. break;
  870. case(MIXBALANCE):
  871. return(TRUE);
  872. break;
  873. default:
  874. sprintf(errstr,"Unknown case in specify_brkpntfile_len()\n");
  875. return(PROGRAM_ERROR);
  876. }
  877. return(FALSE);
  878. }