special.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. /*
  2. * Copyright (c) 1983-2013 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. #include <stdio.h>
  22. #include <structures.h>
  23. #include <tkglobals.h>
  24. #include <globcon.h>
  25. #include <localcon.h>
  26. #include <special.h>
  27. #include <processno.h>
  28. #include <modeno.h>
  29. #include <stdio.h>
  30. #include <sfsys.h>
  31. static int establish_special_data_type(int process,int mode, aplptr ap);
  32. static int setup_special_data(int process,int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap);
  33. static int setup_special_data_names(int process,int mode,aplptr ap);
  34. /****************************** DEAL_WITH_SPECIAL_DATA *********************************/
  35. int deal_with_special_data(int process,int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap)
  36. {
  37. int exit_status;
  38. if((exit_status = establish_special_data_type(process,mode,ap))<0)
  39. return(exit_status);
  40. if(ap->special_data) {
  41. if((exit_status = setup_special_data(process,mode,srate,duration,nyquist,wlength,channels,ap))<0)
  42. return(exit_status);
  43. }
  44. return(FINISHED);
  45. }
  46. /****************************** ESTABLISH_SPECIAL_DATA_TYPE *********************************/
  47. int establish_special_data_type(int process,int mode,aplptr ap)
  48. {
  49. ap->special_data = 0;
  50. switch(process) {
  51. /*************************** SPEC ****************************/
  52. /*************************** SPEC ****************************/
  53. /*************************** SPEC ****************************/
  54. case(CHORD): ap->special_data = SEMIT_TRANSPOS_SET; break;
  55. case(FREEZE): ap->special_data = FREEZE_DATA; break;
  56. case(FREEZE2): ap->special_data = FREEZE2_DATA; break;
  57. case(GREQ):
  58. switch(mode) {
  59. case(GR_ONEBAND): ap->special_data = FILTER_FRQS; break;
  60. case(GR_MULTIBAND): ap->special_data = FILTER_BWS_AND_FRQS; break;
  61. default:
  62. sprintf(errstr,"Unknown mode in establish_special_data_type()\n");
  63. return(PROGRAM_ERROR);
  64. }
  65. break;
  66. case(P_INVERT): ap->special_data = INTERVAL_MAPPING; break;
  67. case(P_QUANTISE): ap->special_data = PITCHQUANTISE_SET; break;
  68. //TW NEW CASES
  69. case(P_SYNTH): ap->special_data = PITCH_SPECTRUM; break;
  70. case(P_VOWELS):
  71. case(VFILT): ap->special_data = PITCH_VOWELS; break;
  72. case(P_GEN): ap->special_data = PITCH_CREATE; break;
  73. case(P_INSERT): ap->special_data = ZERO_INSERTTIMES; break;
  74. case(P_SINSERT): ap->special_data = ZERO_INSERTTIMES; break;
  75. case(MIX_ON_GRID): ap->special_data = GRIDDED_MIX; break;
  76. case(AUTOMIX): ap->special_data = AUTO_MIX; break;
  77. case(PITCH):
  78. if(!sloom) {
  79. switch(mode) {
  80. case(PICH_TO_BIN): ap->special_data = OUT_PFILE; break;
  81. case(PICH_TO_BRK): ap->special_data = OUT_PBRKFILE; break;
  82. default:
  83. sprintf(errstr,"Unknown mode in establish_special_data_type()\n");
  84. return(PROGRAM_ERROR);
  85. }
  86. }
  87. break;
  88. case(SHUFFLE): ap->special_data = SHUFFLE_DATA; break;
  89. case(SPLIT): ap->special_data = SPECSPLI_DATA; break;
  90. case(TRACK):
  91. if(!sloom) {
  92. switch(mode) {
  93. case(TRK_TO_BIN): ap->special_data = OUT_PFILE; break;
  94. case(TRK_TO_BRK): ap->special_data = OUT_PBRKFILE; break;
  95. default:
  96. sprintf(errstr,"Unknown mode in establish_special_data_type()\n");
  97. return(PROGRAM_ERROR);
  98. }
  99. }
  100. break;
  101. case(TRNSF):
  102. case(TRNSP):
  103. switch(mode) {
  104. case(TRNS_RATIO): ap->special_data = TRANSPOS_RATIO_OR_CONSTANT; break;
  105. case(TRNS_OCT): ap->special_data = TRANSPOS_OCTAVE_OR_CONSTANT; break;
  106. case(TRNS_SEMIT): ap->special_data = TRANSPOS_SEMIT_OR_CONSTANT; break;
  107. case(TRNS_BIN): break;
  108. default:
  109. sprintf(errstr,"Unknown mode in establish_special_data_type()\n");
  110. return(PROGRAM_ERROR);
  111. }
  112. break;
  113. case(TUNE):
  114. switch(mode) {
  115. case(TUNE_FRQ): ap->special_data = FRQ_OR_FRQSET; break;
  116. case(TUNE_MIDI): ap->special_data = PITCH_OR_PITCHSET; break;
  117. default:
  118. sprintf(errstr,"Unknown mode in establish_special_data_type()\n");
  119. return(PROGRAM_ERROR);
  120. }
  121. break;
  122. case(WEAVE): ap->special_data = WEAVE_DATA; break;
  123. case(MULTRANS): ap->special_data = SEMIT_TRANSPOS_SET; break;
  124. /*************************** GROUCHO ****************************/
  125. /*************************** GROUCHO ****************************/
  126. /*************************** GROUCHO ****************************/
  127. case(DISTORT_ENV):
  128. if(mode==DISTORTE_USERDEF)
  129. ap->special_data = DISTORT_ENVELOPE;
  130. break;
  131. case(ENVSYN):
  132. if(mode==ENVSYN_USERDEF)
  133. ap->special_data = ENVSYN_ENVELOPE;
  134. break;
  135. case(DISTORT_HRM):
  136. ap->special_data = HARMONIC_DISTORT;
  137. break;
  138. case(DISTORT_SHUF):
  139. ap->special_data = SHUFFLE_DATA;
  140. break;
  141. //TW NEW CASE
  142. case(DISTORT_PULSED):
  143. ap->special_data = PULSE_ENVELOPE;
  144. break;
  145. case(ZIGZAG):
  146. if(mode==ZIGZAG_USER)
  147. ap->special_data = ZIGDATA;
  148. break;
  149. case(SIMPLE_TEX):
  150. case(GROUPS):
  151. case(ORNATE):
  152. case(PREORNATE):
  153. case(POSTORNATE):
  154. case(MOTIFS):
  155. case(MOTIFSIN):
  156. case(DECORATED):
  157. case(PREDECOR):
  158. case(POSTDECOR):
  159. case(TIMED):
  160. case(TGROUPS):
  161. case(TMOTIFS):
  162. case(TMOTIFSIN):
  163. ap->special_data = TEX_NOTEDATA;
  164. break;
  165. case(GRAIN_REORDER):
  166. ap->special_data = GRAIN_REORDER_STRING;
  167. break;
  168. case(GRAIN_REPITCH):
  169. ap->special_data = GRAIN_PITCH_RATIOS;
  170. break;
  171. case(GRAIN_RERHYTHM):
  172. ap->special_data = GRAIN_TIME_RATIOS;
  173. break;
  174. case(GRAIN_REMOTIF):
  175. ap->special_data = GRAIN_TWO_RATIOS;
  176. break;
  177. case(GRAIN_POSITION):
  178. ap->special_data = GRAIN_TIMINGS;
  179. break;
  180. case(GREV):
  181. if(mode==GREV_PUT)
  182. ap->special_data = GRAIN_TIMINGS;
  183. break;
  184. case(ENV_CREATE):
  185. if(mode==ENV_ENVFILE_OUT
  186. || mode==ENV_BRKFILE_OUT)
  187. ap->special_data = ENV_CREATEFILE;
  188. break;
  189. case(ENV_WARPING):
  190. case(ENV_REPLOTTING):
  191. case(ENV_RESHAPING):
  192. if(mode==ENV_TRIGGERING)
  193. ap->special_data = ENV_TRIGGER_RAMP;
  194. break;
  195. case(MIXINBETWEEN):
  196. if(mode==INBI_RATIO)
  197. ap->special_data = INBTWN_RATIOS;
  198. break;
  199. case(MIXSHUFL):
  200. if(mode==MSH_DUPL_AND_RENAME)
  201. ap->special_data=SNDFILENAME;
  202. break;
  203. case(FLTBANKU):
  204. case(FLTITER):
  205. ap->special_data = FILTERBANK;
  206. break;
  207. case(FLTBANKV):
  208. ap->special_data = TIMEVARYING_FILTERBANK;
  209. break;
  210. case(FLTBANKV2):
  211. ap->special_data = TIMEVARY2_FILTERBANK;
  212. break;
  213. case(INSERTSIL_MANY):
  214. case(EDIT_EXCISEMANY):
  215. ap->special_data = EXCISE_TIMES;
  216. break;
  217. case(INFO_MUSUNITS):
  218. if(mode==MU_NOTE_TO_FRQ
  219. || mode==MU_NOTE_TO_MIDI)
  220. ap->special_data = NOTE_REPRESENTATION;
  221. else if(mode==MU_INTVL_TO_TSTRETCH
  222. || mode==MU_INTVL_TO_FRQRATIO)
  223. ap->special_data = INTERVAL_REPRESENTATION;
  224. break;
  225. case(HOUSE_DEL):
  226. ap->special_data = SNDFILENAME;
  227. break;
  228. case(HOUSE_EXTRACT):
  229. if(mode==HOUSE_BYHAND)
  230. ap->special_data = BY_HAND;
  231. break;
  232. case(ACC_STREAM):
  233. ap->special_data = ATTACK_STREAM;
  234. break;
  235. case(DEL_PERM):
  236. ap->special_data = DELPERM;
  237. break;
  238. case(DEL_PERM2):
  239. ap->special_data = DELPERM2;
  240. break;
  241. case(TWIXT):
  242. ap->special_data = SWITCH_TIMES;
  243. break;
  244. case(SPHINX):
  245. ap->special_data = MANY_SWITCH_TIMES;
  246. break;
  247. //TW NEW CASES
  248. case(MANY_ZCUTS):
  249. case(EDIT_CUTMANY):
  250. ap->special_data = MANYCUTS;
  251. break;
  252. case(STACK):
  253. ap->special_data = STACKDATA;
  254. break;
  255. case(SEQUENCER):
  256. ap->special_data = SEQUENCER_VALUES;
  257. break;
  258. case(SEQUENCER2):
  259. ap->special_data = SEQUENCER2_VALUES;
  260. break;
  261. case(CLICK):
  262. ap->special_data = CLICKTRACK;
  263. break;
  264. case(SYLLABS):
  265. ap->special_data = SYLLTIMES;
  266. break;
  267. case(JOIN_SEQ):
  268. ap->special_data = JOINSEQ;
  269. break;
  270. case(JOIN_SEQDYN):
  271. ap->special_data = JOINSEQDYN;
  272. break;
  273. case(BATCH_EXPAND):
  274. ap->special_data = BATCH;
  275. break;
  276. case(MOD_LOUDNESS):
  277. if(mode == LOUD_PROPOR || mode == LOUD_DB_PROPOR)
  278. ap->special_data = LOUDNESS;
  279. break;
  280. case(MULTI_SYN):
  281. ap->special_data = CHORD_SYN;
  282. break;
  283. }
  284. return(FINISHED);
  285. }
  286. /************************ SETUP_SPECIAL_DATA *********************/
  287. int setup_special_data(int process,int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap)
  288. {
  289. int exit_status;
  290. if((exit_status = setup_special_data_ranges(mode,srate,duration,nyquist,wlength,channels,ap))<0)
  291. return(exit_status);
  292. if((exit_status = setup_special_data_names(process,mode,ap))<0)
  293. return(exit_status);
  294. return(FINISHED);
  295. }
  296. /************************ SETUP_SPECIAL_DATA_RANGES *********************/
  297. int setup_special_data_ranges(int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap)
  298. {
  299. int exit_status;
  300. switch(ap->special_data) {
  301. /************************ SPEC *********************/
  302. /************************ SPEC *********************/
  303. /************************ SPEC *********************/
  304. case(TRANSPOS_RATIO_OR_CONSTANT):
  305. ap->special_range = TRUE;
  306. ap->min_special = MIN_TRANSPOS;
  307. ap->max_special = MAX_TRANSPOS;
  308. ap->default_special = DEFAULT_TRANSPOS;
  309. break;
  310. case(TRANSPOS_OCTAVE_OR_CONSTANT):
  311. ap->special_range = TRUE;
  312. ap->min_special = LOG2(MIN_TRANSPOS);
  313. ap->max_special = LOG2(MAX_TRANSPOS);
  314. ap->default_special = LOG2(DEFAULT_TRANSPOS);
  315. break;
  316. case(TRANSPOS_SEMIT_OR_CONSTANT):
  317. ap->special_range = TRUE;
  318. ap->min_special = 12.0 * LOG2(MIN_TRANSPOS);
  319. ap->max_special = 12.0 * LOG2(MAX_TRANSPOS);
  320. ap->default_special = 12.0 * LOG2(DEFAULT_TRANSPOS);
  321. break;
  322. case(SEMIT_TRANSPOS_SET):
  323. ap->data_in_file_only = TRUE;
  324. ap->special_range = TRUE;
  325. ap->min_special = 12.0 * LOG2(MIN_TRANSPOS);
  326. ap->max_special = 12.0 * LOG2(MAX_TRANSPOS);
  327. ap->default_special = 12.0 * LOG2(DEFAULT_TRANSPOS);
  328. break;
  329. case(FRQ_OR_FRQSET):
  330. ap->special_range = TRUE;
  331. ap->min_special = MINPITCH; /* NEW */
  332. ap->max_special = nyquist;
  333. ap->default_special = CONCERT_A;
  334. break;
  335. case(PITCH_OR_PITCHSET):
  336. ap->special_range = TRUE;
  337. ap->min_special = MIDIBOT;
  338. if((exit_status = hztomidi(&(ap->max_special),nyquist))<0)
  339. return(exit_status);
  340. ap->default_special = CONCERT_A_MIDI;
  341. break;
  342. case(FILTER_FRQS): /* actually 1 bwdth and many frqs */
  343. ap->data_in_file_only = TRUE;
  344. ap->special_range = TRUE;
  345. ap->min_special = OCTAVES_PER_SEMITONE;
  346. ap->max_special = LOG2(nyquist - SPEC_MINFRQ);
  347. ap->other_special_range = TRUE;
  348. ap->min_special2 = SPEC_MINFRQ;
  349. ap->max_special2 = (nyquist * 2.0)/3.0;
  350. break;
  351. case(FILTER_BWS_AND_FRQS): /* actually frq followed by bwd, in pairs */
  352. ap->data_in_file_only = TRUE;
  353. ap->special_range = TRUE;
  354. ap->min_special = SPEC_MINFRQ;
  355. ap->max_special = (nyquist * 2.0)/3.0;
  356. ap->other_special_range = TRUE;
  357. ap->min_special2 = OCTAVES_PER_SEMITONE;
  358. ap->max_special2 = LOG2(nyquist - SPEC_MINFRQ);
  359. break;
  360. case(PITCHQUANTISE_SET):
  361. ap->data_in_file_only = TRUE;
  362. ap->special_range = TRUE;
  363. ap->min_special = MIDIMIN;
  364. ap->max_special = MIDIMAX;
  365. break;
  366. case(INTERVAL_MAPPING):
  367. ap->data_in_file_only = TRUE;
  368. ap->special_range = TRUE;
  369. ap->min_special = -MAXINTRANGE;
  370. ap->max_special = MAXINTRANGE;
  371. break;
  372. case(SPECSPLI_DATA):
  373. ap->data_in_file_only = TRUE;
  374. break;
  375. case(FREEZE_DATA):
  376. case(FREEZE2_DATA):
  377. ap->data_in_file_only = TRUE;
  378. break;
  379. case(WEAVE_DATA):
  380. ap->data_in_file_only = TRUE;
  381. ap->min_special = (double)(-(wlength-2));
  382. ap->max_special = (double)(wlength-1);
  383. break;
  384. case(OUT_PFILE):
  385. case(OUT_PBRKFILE):
  386. if(!sloom)
  387. ap->data_in_file_only = TRUE;
  388. break;
  389. //TW NEW CASES
  390. case(PITCH_SPECTRUM):
  391. ap->data_in_file_only = TRUE;
  392. ap->special_range = TRUE;
  393. ap->min_special = 0.0;
  394. ap->max_special = 1.0;
  395. break;
  396. case(PITCH_VOWELS):
  397. ap->data_in_file_only = VOWEL_STRING;
  398. break;
  399. case(PITCH_CREATE):
  400. ap->data_in_file_only = TRUE;
  401. break;
  402. case(ZERO_INSERTTIMES):
  403. ap->data_in_file_only = TRUE;
  404. ap->special_range = TRUE;
  405. ap->min_special = 0.0;
  406. ap->max_special = duration;
  407. if(mode==1)
  408. ap->max_special *= 48000.0; /* Times maximum samplerate : kludgy */
  409. break;
  410. /************************ SPEC & GROUCHO ***********************/
  411. case(SHUFFLE_DATA):
  412. ap->data_in_file_only = SHUFFLE_STRING;
  413. break;
  414. /************************ GROUCHO ***********************/
  415. /************************ GROUCHO ***********************/
  416. /************************ GROUCHO ***********************/
  417. case(DISTORT_ENVELOPE):
  418. case(ENVSYN_ENVELOPE):
  419. ap->data_in_file_only = TRUE;
  420. ap->special_range = TRUE;
  421. ap->min_special = 0.0;
  422. ap->max_special = 1.0;
  423. break;
  424. //TW NEW CASE
  425. case(PULSE_ENVELOPE):
  426. if(mode == 0) {
  427. ap->data_in_file_only = TRUE;
  428. ap->special_range = TRUE;
  429. ap->min_special = 0.0;
  430. ap->max_special = 1.0;
  431. } else {
  432. ap->data_in_file_only = FALSE;
  433. ap->special_range = TRUE;
  434. ap->min_special = 0.0;
  435. ap->max_special = 1.0;
  436. ap->default_special = 0.0;
  437. }
  438. break;
  439. case(HARMONIC_DISTORT):
  440. ap->data_in_file_only = TRUE;
  441. ap->special_range = TRUE;
  442. ap->min_special = MIN_HARMONIC;
  443. ap->max_special = MAX_HARMONIC;
  444. ap->other_special_range = TRUE;
  445. ap->min_special2 = MIN_HARM_AMP;
  446. ap->max_special2 = MAX_HARM_AMP;
  447. break;
  448. case(ZIGDATA):
  449. ap->data_in_file_only = TRUE;
  450. ap->special_range = TRUE;
  451. ap->min_special = ZIG_SPLICELEN * MS_TO_SECS * 3;
  452. ap->max_special = duration;
  453. break;
  454. case(TEX_NOTEDATA):
  455. ap->data_in_file_only = TRUE;
  456. break;
  457. case(GRAIN_REORDER_STRING):
  458. ap->data_in_file_only = REORDER_STRING;
  459. break;
  460. case(GRAIN_PITCH_RATIOS):
  461. ap->data_in_file_only = TRUE;
  462. ap->special_range = TRUE;
  463. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  464. ap->min_special = -ap->max_special;
  465. break;
  466. case(GRAIN_TIME_RATIOS):
  467. ap->data_in_file_only = TRUE;
  468. ap->special_range = TRUE;
  469. ap->min_special = GR_MIN_TSTRETCH;
  470. ap->max_special = GR_MAX_TSTRETCH;
  471. break;
  472. case(GRAIN_TWO_RATIOS):
  473. ap->data_in_file_only = TRUE;
  474. ap->special_range = TRUE;
  475. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  476. ap->min_special = -(ap->max_special);
  477. ap->other_special_range = TRUE;
  478. ap->min_special2 = GR_MIN_TSTRETCH;
  479. ap->max_special2 = GR_MAX_TSTRETCH;
  480. break;
  481. //TW NEW CASE
  482. case(SEQUENCER_VALUES):
  483. ap->data_in_file_only = TRUE;
  484. ap->special_range = TRUE;
  485. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  486. ap->min_special = -(ap->max_special);
  487. ap->other_special_range = TRUE;
  488. ap->min_special2 = 0.0;
  489. ap->max_special2 = 7200.0; /* arbitrary : 2 hours */
  490. break;
  491. case(SEQUENCER2_VALUES):
  492. ap->data_in_file_only = TRUE;
  493. ap->special_range = TRUE;
  494. ap->max_special = MIDIMAX;
  495. ap->min_special = MIDIMIN;
  496. ap->other_special_range = TRUE;
  497. ap->min_special2 = 0.0;
  498. ap->max_special2 = 7200.0; /* arbitrary : 2 hours */
  499. break;
  500. case(GRAIN_TIMINGS):
  501. ap->data_in_file_only = TRUE;
  502. ap->special_range = TRUE;
  503. ap->min_special = GRAIN_SPLICELEN * MS_TO_SECS;
  504. ap->max_special = MAX_FIRSTGRAIN_TIME;
  505. break;
  506. case(ENV_CREATEFILE):
  507. ap->data_in_file_only = TRUE;
  508. ap->special_range = TRUE;
  509. ap->min_special = 0.0;
  510. ap->max_special = BIG_TIME;
  511. ap->other_special_range = TRUE;
  512. ap->min_special2 = 0.0;
  513. ap->max_special2 = 1.0;
  514. break;
  515. case(ENV_TRIGGER_RAMP):
  516. ap->data_in_file_only = TRUE;
  517. ap->special_range = TRUE;
  518. ap->min_special = 0.0;
  519. ap->max_special = duration;
  520. ap->other_special_range = TRUE;
  521. ap->min_special2 = 0.0;
  522. ap->max_special2 = 1.0;
  523. break;
  524. case(SNDFILENAME):
  525. ap->data_in_file_only = SNDFILENAME_STRING;
  526. break;
  527. case(FILTERBANK):
  528. case(TIMEVARYING_FILTERBANK):
  529. ap->data_in_file_only = TRUE;
  530. ap->special_range = TRUE;
  531. switch(mode) {
  532. case(FLT_HZ):
  533. ap->min_special = FLT_MINFRQ;
  534. ap->max_special = FLT_MAXFRQ;
  535. break;
  536. case(FLT_MIDI):
  537. ap->min_special = unchecked_hztomidi(FLT_MINFRQ);
  538. ap->max_special = MIDIMAX;
  539. break;
  540. }
  541. ap->other_special_range = TRUE;
  542. ap->min_special2 = FLT_MINGAIN;
  543. ap->max_special2 = FLT_MAXGAIN;
  544. break;
  545. case(TIMEVARY2_FILTERBANK):
  546. ap->data_in_file_only = TRUE;
  547. ap->special_range = FALSE;
  548. break;
  549. case(EXCISE_TIMES):
  550. ap->data_in_file_only = TRUE;
  551. ap->special_range = TRUE;
  552. switch(mode) {
  553. case(EDIT_SAMPS):
  554. ap->min_special = 0.0;
  555. ap->max_special = (int)((duration * (double)srate) + 1.0) * MAX_SNDFILE_OUTCHANS;
  556. break; /* ROUND UP, times OVERKILL as this func doesn't know chancnt!! */
  557. case(EDIT_STSAMPS):
  558. ap->min_special = 0.0;
  559. ap->max_special = (int)((duration * (double)srate) + 1.0); /* ROUND UP */
  560. break;
  561. case(EDIT_SECS):
  562. ap->min_special = 0.0;
  563. ap->max_special = duration;
  564. break;
  565. }
  566. break;
  567. case(NOTE_REPRESENTATION):
  568. ap->data_in_file_only = NOTE_STRING;
  569. break;
  570. case(INTERVAL_REPRESENTATION):
  571. ap->data_in_file_only = INTERVAL_STRING;
  572. break;
  573. case(ATTACK_STREAM):
  574. ap->data_in_file_only = TRUE;
  575. ap->special_range = TRUE;
  576. ap->min_special = 0.0;
  577. ap->max_special = MAX_SYN_DUR; /* 2 hours */
  578. break;
  579. case(BY_HAND):
  580. ap->data_in_file_only = TRUE;
  581. ap->special_range = TRUE;
  582. ap->min_special = 0.0;
  583. ap->max_special = (int)round(duration * (double)(srate * channels));
  584. ap->other_special_range = TRUE;
  585. ap->min_special2 = MINSAMP;
  586. ap->max_special2 = MAXSAMP;
  587. break;
  588. case(DELPERM):
  589. case(DELPERM2):
  590. ap->data_in_file_only = TRUE;
  591. ap->special_range = TRUE;
  592. ap->min_special = -MIDIMAX/2;
  593. ap->max_special = MIDIMAX/2;
  594. ap->other_special_range = TRUE;
  595. ap->min_special2 = 0.05;
  596. ap->max_special2 = .95;
  597. break;
  598. case(SWITCH_TIMES):
  599. ap->data_in_file_only = TRUE;
  600. ap->special_range = TRUE;
  601. ap->min_special = 0.0;
  602. ap->max_special = duration;
  603. break;
  604. case(MANY_SWITCH_TIMES):
  605. //TW NEW CASE
  606. case(MANYCUTS):
  607. ap->data_in_file_only = TRUE;
  608. break;
  609. //TW NEW CASES
  610. case(GRIDDED_MIX):
  611. case(AUTO_MIX):
  612. ap->data_in_file_only = TRUE;
  613. break;
  614. case(STACKDATA):
  615. ap->special_range = TRUE;
  616. ap->min_special = -60.0;
  617. ap->max_special = 60.0;
  618. ap->default_special = 12.0;
  619. break;
  620. case(CLICKTRACK):
  621. case(SYLLTIMES):
  622. case(JOINSEQ):
  623. case(JOINSEQDYN):
  624. case(BATCH):
  625. case(INBTWN_RATIOS):
  626. case(LOUDNESS):
  627. ap->data_in_file_only = TRUE;
  628. break;
  629. case(CHORD_SYN):
  630. ap->data_in_file_only = TRUE;
  631. ap->special_range = TRUE;
  632. switch(mode) {
  633. case(0):
  634. hztomidi(&ap->min_special,1.0/MAX_SYN_DUR);
  635. ap->max_special = 127;
  636. break;
  637. case(1):
  638. ap->min_special = 1.0/MAX_SYN_DUR;
  639. ap->max_special = miditohz(127.0);
  640. break;
  641. break;
  642. }
  643. break;
  644. default:
  645. sprintf(errstr,"Unknown special_data type: setup_special_data_ranges()\n");
  646. return(PROGRAM_ERROR);
  647. }
  648. return(FINISHED);
  649. }
  650. /************************ SETUP_SPECIAL_NAMES *********************/
  651. int setup_special_data_names(int process,int mode,aplptr ap)
  652. {
  653. switch(ap->special_data) {
  654. /************************ SPEC *********************/
  655. case(TRANSPOS_RATIO_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_RATIO"; break;
  656. case(TRANSPOS_OCTAVE_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_IN_OCTAVES"; break;
  657. case(TRANSPOS_SEMIT_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_IN_SEMITONES"; break;
  658. case(SEMIT_TRANSPOS_SET): ap->special_data_name = "TRANSPOSITION_IN_SEMITONES"; break;
  659. case(FRQ_OR_FRQSET): ap->special_data_name = "FREQUENCY_SET"; break;
  660. case(PITCH_OR_PITCHSET): ap->special_data_name = "PITCH_SET"; break;
  661. case(FILTER_FRQS): ap->special_data_name = "BANDWIDTH_&_FILTER_FRQS"; break;
  662. case(FILTER_BWS_AND_FRQS): ap->special_data_name = "FILTER_FRQS_&_BANDWIDTHS"; break;
  663. case(PITCHQUANTISE_SET): ap->special_data_name = "QUANTISING_PITCHES"; break;
  664. case(INTERVAL_MAPPING): ap->special_data_name = "INTERVALS_FOR_MAPPING"; break;
  665. case(SPECSPLI_DATA): ap->special_data_name = "SPLITTING_DATA"; break;
  666. case(FREEZE_DATA): ap->special_data_name = "FREEZE_DATA"; break;
  667. case(FREEZE2_DATA): ap->special_data_name = "HOLD_DATA"; break;
  668. case(WEAVE_DATA): ap->special_data_name = "WEAVE_DATA"; break;
  669. //TW NEW CASES
  670. case(PITCH_SPECTRUM): ap->special_data_name = "PARTIAL_LEVELS"; break;
  671. case(PITCH_VOWELS): ap->special_data_name = "VOWELS"; break;
  672. case(PITCH_CREATE): ap->special_data_name = "PITCH_DATA"; break;
  673. case(ZERO_INSERTTIMES): ap->special_data_name = "INSERTION_TIMEPAIRS"; break;
  674. /************************ SPEC & GROUCHO ***********************/
  675. case(SHUFFLE_DATA): ap->special_data_name = "SHUFFLE_DATA"; break;
  676. /************************ GROUCHO ***********************/
  677. case(DISTORT_ENVELOPE): ap->special_data_name = "USER_DISTORT_ENVELOPE"; break;
  678. case(ENVSYN_ENVELOPE): ap->special_data_name = "USER_ENVELOPE"; break;
  679. //TW NEW CASE
  680. case(PULSE_ENVELOPE): ap->special_data_name = "IMPULSE_ENVELOPE"; break;
  681. case(HARMONIC_DISTORT): ap->special_data_name = "HARMONIC-NO:AMPLITUDE_PAIRS"; break;
  682. case(ZIGDATA): ap->special_data_name = "ZIGZAG_TIMES"; break;
  683. case(TEX_NOTEDATA): ap->special_data_name = "NOTE_DATA"; break;
  684. case(GRAIN_REORDER_STRING): ap->special_data_name = "CODE_FOR_REORDERING"; break;
  685. case(GRAIN_PITCH_RATIOS): ap->special_data_name = "SEMITONE_SHIFT_EACH_GRAIN"; break;
  686. case(GRAIN_TIME_RATIOS): ap->special_data_name = "DURATION_MULTIPLIER_EACH_GRAIN"; break;
  687. case(GRAIN_TWO_RATIOS): ap->special_data_name = "PSHIFT&DUR-MULTIPLY_EACH_GRAIN"; break;
  688. //TW NEW CASE
  689. case(SEQUENCER_VALUES): ap->special_data_name = "TIME,_SEMITONE_SHIFT_&_LEVEL"; break;
  690. case(SEQUENCER2_VALUES): ap->special_data_name = "SOUND-NO,_TIME,_MIDIPITCH,_LEVEL,_DUR"; break;
  691. case(GRAIN_TIMINGS): ap->special_data_name = "GRAIN_TIMINGS"; break;
  692. case(ENV_CREATEFILE): ap->special_data_name = "TIMES_&_(e)LEVELS_FOR_ENVELOPE"; break;
  693. case(ENV_TRIGGER_RAMP): ap->special_data_name = "TIMES_&_LEVELS_OF_RAMP"; break;
  694. case(SNDFILENAME):
  695. switch(process) {
  696. case(MIXSHUFL): ap->special_data_name = "NEW_FILENAME"; break;
  697. case(HOUSE_DEL): ap->special_data_name = "GENERIC_FILENAME"; break;
  698. }
  699. break;
  700. case(FILTERBANK):
  701. switch(mode) {
  702. case(FLT_HZ): ap->special_data_name = "FRQ_AND_AMP_OF_FILTERS"; break;
  703. case(FLT_MIDI): ap->special_data_name = "PITCH(MIDI)_&_AMP_OF_FILTERS"; break;
  704. }
  705. break;
  706. case(TIMEVARYING_FILTERBANK):
  707. case(TIMEVARY2_FILTERBANK):
  708. switch(mode) {
  709. case(FLT_HZ): ap->special_data_name = "TIMELIST_OF_FRQS&AMPS_OF_FILTS"; break;
  710. case(FLT_MIDI): ap->special_data_name = "TIMELIST_OF_PICHS&AMPS_OF_FILTS";break;
  711. }
  712. break;
  713. case(EXCISE_TIMES): ap->special_data_name = "START_&_END_TIMES_FOR_EXCISIONS";break;
  714. case(NOTE_REPRESENTATION): ap->special_data_name = "NOTE_NAME"; break;
  715. case(INTERVAL_REPRESENTATION): ap->special_data_name = "INTERVAL_NAME"; break;
  716. case(ATTACK_STREAM): ap->special_data_name = "TIMES_OF_EVENTS"; break;
  717. case(BY_HAND): ap->special_data_name = "SAMPLE_NO_AND_SAMPLE_VALUE"; break;
  718. case(DELPERM): ap->special_data_name = "DELAY_PERMUTATION"; break;
  719. case(DELPERM2): ap->special_data_name = "TRANSPOS_+_DELAY_PERMUTATION"; break;
  720. case(SWITCH_TIMES): ap->special_data_name = "SWITCHING_TIMES"; break;
  721. case(MANY_SWITCH_TIMES): ap->special_data_name = "SWITCHING_TIMES"; break;
  722. // TW NEW CASES
  723. case(MANYCUTS): ap->special_data_name = "SEGMENT_START_AND_END_TIMES"; break;
  724. case(GRIDDED_MIX): ap->special_data_name = "MIX_GRID"; break;
  725. case(AUTO_MIX): ap->special_data_name = "MIX_BALANCE_FUNCTION"; break;
  726. case(STACKDATA): ap->special_data_name = "TRANSPOSITION_DATA"; break;
  727. case(CLICKTRACK): ap->special_data_name = "CLICKTRACK_DATA"; break;
  728. case(SYLLTIMES): ap->special_data_name = "SYLLABLE_TIMES"; break;
  729. case(JOINSEQ): ap->special_data_name = "FILE_SEQUENCE"; break;
  730. case(JOINSEQDYN): ap->special_data_name = "FILE_SEQUENCE_WITH_LOUDNESSES"; break;
  731. case(BATCH): ap->special_data_name = "NEW_PARAMETER_VALUES"; break;
  732. case(INBTWN_RATIOS): ap->special_data_name = "MIX_RATIOS"; break;
  733. case(LOUDNESS): ap->special_data_name = "LOUDNESS_ENVELOPE"; break;
  734. case(CHORD_SYN):
  735. switch(mode) {
  736. case(0): ap->special_data_name = "MIDI_PITCHES_OF_CHORD_NOTES"; break;
  737. case(1): ap->special_data_name = "FRQUENCIES_OF_CHORD_NOTES"; break;
  738. }
  739. break;
  740. default:
  741. sprintf(errstr,"Unknown special_data type: setup_special_data_names()\n");
  742. return(PROGRAM_ERROR);
  743. }
  744. return(FINISHED);
  745. }