special.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  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) ap->special_data = DISTORT_ENVELOPE; break;
  129. case(ENVSYN):
  130. if(mode==ENVSYN_USERDEF) ap->special_data = ENVSYN_ENVELOPE; break;
  131. case(DISTORT_HRM): ap->special_data = HARMONIC_DISTORT; break;
  132. case(DISTORT_SHUF): ap->special_data = SHUFFLE_DATA; break;
  133. //TW NEW CASE
  134. case(DISTORT_PULSED): ap->special_data = PULSE_ENVELOPE; break;
  135. case(ZIGZAG):
  136. if(mode==ZIGZAG_USER) ap->special_data = ZIGDATA; break;
  137. case(SIMPLE_TEX):
  138. case(GROUPS):
  139. case(ORNATE):
  140. case(PREORNATE):
  141. case(POSTORNATE):
  142. case(MOTIFS):
  143. case(MOTIFSIN):
  144. case(DECORATED):
  145. case(PREDECOR):
  146. case(POSTDECOR):
  147. case(TIMED):
  148. case(TGROUPS):
  149. case(TMOTIFS):
  150. case(TMOTIFSIN): ap->special_data = TEX_NOTEDATA; break;
  151. case(GRAIN_REORDER): ap->special_data = GRAIN_REORDER_STRING; break;
  152. case(GRAIN_REPITCH): ap->special_data = GRAIN_PITCH_RATIOS; break;
  153. case(GRAIN_RERHYTHM): ap->special_data = GRAIN_TIME_RATIOS; break;
  154. case(GRAIN_REMOTIF): ap->special_data = GRAIN_TWO_RATIOS; break;
  155. case(GRAIN_POSITION): ap->special_data = GRAIN_TIMINGS; break;
  156. case(GREV):
  157. if(mode==GREV_PUT)
  158. ap->special_data = GRAIN_TIMINGS;
  159. break;
  160. case(ENV_CREATE):
  161. if(mode==ENV_ENVFILE_OUT
  162. || mode==ENV_BRKFILE_OUT) ap->special_data = ENV_CREATEFILE; break;
  163. case(ENV_WARPING):
  164. case(ENV_REPLOTTING):
  165. case(ENV_RESHAPING):
  166. if(mode==ENV_TRIGGERING) ap->special_data = ENV_TRIGGER_RAMP; break;
  167. case(MIXINBETWEEN):
  168. if(mode==INBI_RATIO)
  169. ap->special_data = INBTWN_RATIOS;
  170. break;
  171. case(MIXSHUFL):
  172. if(mode==MSH_DUPL_AND_RENAME) ap->special_data=SNDFILENAME; break;
  173. case(FLTBANKU):
  174. case(FLTITER): ap->special_data = FILTERBANK; break;
  175. case(FLTBANKV): ap->special_data = TIMEVARYING_FILTERBANK; break;
  176. case(FLTBANKV2): ap->special_data = TIMEVARY2_FILTERBANK; break;
  177. case(INSERTSIL_MANY):
  178. case(EDIT_EXCISEMANY): ap->special_data = EXCISE_TIMES; break;
  179. case(INFO_MUSUNITS):
  180. if(mode==MU_NOTE_TO_FRQ
  181. || mode==MU_NOTE_TO_MIDI) ap->special_data = NOTE_REPRESENTATION;
  182. else if(mode==MU_INTVL_TO_TSTRETCH
  183. || mode==MU_INTVL_TO_FRQRATIO)
  184. ap->special_data = INTERVAL_REPRESENTATION; break;
  185. case(HOUSE_DEL): ap->special_data = SNDFILENAME; break;
  186. case(HOUSE_EXTRACT):
  187. if(mode==HOUSE_BYHAND)
  188. ap->special_data = BY_HAND; break;
  189. case(ACC_STREAM): ap->special_data = ATTACK_STREAM; break;
  190. case(DEL_PERM): ap->special_data = DELPERM; break;
  191. case(DEL_PERM2): ap->special_data = DELPERM2; break;
  192. case(TWIXT): ap->special_data = SWITCH_TIMES; break;
  193. case(SPHINX): ap->special_data = MANY_SWITCH_TIMES; break;
  194. //TW NEW CASES
  195. case(MANY_ZCUTS):
  196. case(EDIT_CUTMANY): ap->special_data = MANYCUTS; break;
  197. case(STACK): ap->special_data = STACKDATA; break;
  198. case(SEQUENCER): ap->special_data = SEQUENCER_VALUES; break;
  199. case(SEQUENCER2): ap->special_data = SEQUENCER2_VALUES; break;
  200. case(CLICK): ap->special_data = CLICKTRACK; break;
  201. case(SYLLABS): ap->special_data = SYLLTIMES; break;
  202. case(JOIN_SEQ): ap->special_data = JOINSEQ; break;
  203. case(JOIN_SEQDYN): ap->special_data = JOINSEQDYN; break;
  204. case(BATCH_EXPAND): ap->special_data = BATCH; break;
  205. case(MOD_LOUDNESS):
  206. if(mode == LOUD_PROPOR || mode == LOUD_DB_PROPOR)
  207. ap->special_data = LOUDNESS; break;
  208. case(MULTI_SYN): ap->special_data = CHORD_SYN; break;
  209. }
  210. return(FINISHED);
  211. }
  212. /************************ SETUP_SPECIAL_DATA *********************/
  213. int setup_special_data(int process,int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap)
  214. {
  215. int exit_status;
  216. if((exit_status = setup_special_data_ranges(mode,srate,duration,nyquist,wlength,channels,ap))<0)
  217. return(exit_status);
  218. if((exit_status = setup_special_data_names(process,mode,ap))<0)
  219. return(exit_status);
  220. return(FINISHED);
  221. }
  222. /************************ SETUP_SPECIAL_DATA_RANGES *********************/
  223. int setup_special_data_ranges(int mode,int srate,double duration,double nyquist,int wlength,int channels,aplptr ap)
  224. {
  225. int exit_status;
  226. switch(ap->special_data) {
  227. /************************ SPEC *********************/
  228. /************************ SPEC *********************/
  229. /************************ SPEC *********************/
  230. case(TRANSPOS_RATIO_OR_CONSTANT):
  231. ap->special_range = TRUE;
  232. ap->min_special = MIN_TRANSPOS;
  233. ap->max_special = MAX_TRANSPOS;
  234. ap->default_special = DEFAULT_TRANSPOS;
  235. break;
  236. case(TRANSPOS_OCTAVE_OR_CONSTANT):
  237. ap->special_range = TRUE;
  238. ap->min_special = LOG2(MIN_TRANSPOS);
  239. ap->max_special = LOG2(MAX_TRANSPOS);
  240. ap->default_special = LOG2(DEFAULT_TRANSPOS);
  241. break;
  242. case(TRANSPOS_SEMIT_OR_CONSTANT):
  243. ap->special_range = TRUE;
  244. ap->min_special = 12.0 * LOG2(MIN_TRANSPOS);
  245. ap->max_special = 12.0 * LOG2(MAX_TRANSPOS);
  246. ap->default_special = 12.0 * LOG2(DEFAULT_TRANSPOS);
  247. break;
  248. case(SEMIT_TRANSPOS_SET):
  249. ap->data_in_file_only = TRUE;
  250. ap->special_range = TRUE;
  251. ap->min_special = 12.0 * LOG2(MIN_TRANSPOS);
  252. ap->max_special = 12.0 * LOG2(MAX_TRANSPOS);
  253. ap->default_special = 12.0 * LOG2(DEFAULT_TRANSPOS);
  254. break;
  255. case(FRQ_OR_FRQSET):
  256. ap->special_range = TRUE;
  257. ap->min_special = MINPITCH; /* NEW */
  258. ap->max_special = nyquist;
  259. ap->default_special = CONCERT_A;
  260. break;
  261. case(PITCH_OR_PITCHSET):
  262. ap->special_range = TRUE;
  263. ap->min_special = MIDIBOT;
  264. if((exit_status = hztomidi(&(ap->max_special),nyquist))<0)
  265. return(exit_status);
  266. ap->default_special = CONCERT_A_MIDI;
  267. break;
  268. case(FILTER_FRQS): /* actually 1 bwdth and many frqs */
  269. ap->data_in_file_only = TRUE;
  270. ap->special_range = TRUE;
  271. ap->min_special = OCTAVES_PER_SEMITONE;
  272. ap->max_special = LOG2(nyquist - SPEC_MINFRQ);
  273. ap->other_special_range = TRUE;
  274. ap->min_special2 = SPEC_MINFRQ;
  275. ap->max_special2 = (nyquist * 2.0)/3.0;
  276. break;
  277. case(FILTER_BWS_AND_FRQS): /* actually frq followed by bwd, in pairs */
  278. ap->data_in_file_only = TRUE;
  279. ap->special_range = TRUE;
  280. ap->min_special = SPEC_MINFRQ;
  281. ap->max_special = (nyquist * 2.0)/3.0;
  282. ap->other_special_range = TRUE;
  283. ap->min_special2 = OCTAVES_PER_SEMITONE;
  284. ap->max_special2 = LOG2(nyquist - SPEC_MINFRQ);
  285. break;
  286. case(PITCHQUANTISE_SET):
  287. ap->data_in_file_only = TRUE;
  288. ap->special_range = TRUE;
  289. ap->min_special = MIDIMIN;
  290. ap->max_special = MIDIMAX;
  291. break;
  292. case(INTERVAL_MAPPING):
  293. ap->data_in_file_only = TRUE;
  294. ap->special_range = TRUE;
  295. ap->min_special = -MAXINTRANGE;
  296. ap->max_special = MAXINTRANGE;
  297. break;
  298. case(SPECSPLI_DATA):
  299. ap->data_in_file_only = TRUE;
  300. break;
  301. case(FREEZE_DATA):
  302. case(FREEZE2_DATA):
  303. ap->data_in_file_only = TRUE;
  304. break;
  305. case(WEAVE_DATA):
  306. ap->data_in_file_only = TRUE;
  307. ap->min_special = (double)(-(wlength-2));
  308. ap->max_special = (double)(wlength-1);
  309. break;
  310. case(OUT_PFILE):
  311. case(OUT_PBRKFILE):
  312. if(!sloom)
  313. ap->data_in_file_only = TRUE;
  314. break;
  315. //TW NEW CASES
  316. case(PITCH_SPECTRUM):
  317. ap->data_in_file_only = TRUE;
  318. ap->special_range = TRUE;
  319. ap->min_special = 0.0;
  320. ap->max_special = 1.0;
  321. break;
  322. case(PITCH_VOWELS):
  323. ap->data_in_file_only = VOWEL_STRING;
  324. break;
  325. case(PITCH_CREATE):
  326. ap->data_in_file_only = TRUE;
  327. break;
  328. case(ZERO_INSERTTIMES):
  329. ap->data_in_file_only = TRUE;
  330. ap->special_range = TRUE;
  331. ap->min_special = 0.0;
  332. ap->max_special = duration;
  333. if(mode==1)
  334. ap->max_special *= 48000.0; /* Times maximum samplerate : kludgy */
  335. break;
  336. /************************ SPEC & GROUCHO ***********************/
  337. case(SHUFFLE_DATA):
  338. ap->data_in_file_only = SHUFFLE_STRING;
  339. break;
  340. /************************ GROUCHO ***********************/
  341. /************************ GROUCHO ***********************/
  342. /************************ GROUCHO ***********************/
  343. case(DISTORT_ENVELOPE):
  344. case(ENVSYN_ENVELOPE):
  345. ap->data_in_file_only = TRUE;
  346. ap->special_range = TRUE;
  347. ap->min_special = 0.0;
  348. ap->max_special = 1.0;
  349. break;
  350. //TW NEW CASE
  351. case(PULSE_ENVELOPE):
  352. if(mode == 0) {
  353. ap->data_in_file_only = TRUE;
  354. ap->special_range = TRUE;
  355. ap->min_special = 0.0;
  356. ap->max_special = 1.0;
  357. } else {
  358. ap->data_in_file_only = FALSE;
  359. ap->special_range = TRUE;
  360. ap->min_special = 0.0;
  361. ap->max_special = 1.0;
  362. ap->default_special = 0.0;
  363. }
  364. break;
  365. case(HARMONIC_DISTORT):
  366. ap->data_in_file_only = TRUE;
  367. ap->special_range = TRUE;
  368. ap->min_special = MIN_HARMONIC;
  369. ap->max_special = MAX_HARMONIC;
  370. ap->other_special_range = TRUE;
  371. ap->min_special2 = MIN_HARM_AMP;
  372. ap->max_special2 = MAX_HARM_AMP;
  373. break;
  374. case(ZIGDATA):
  375. ap->data_in_file_only = TRUE;
  376. ap->special_range = TRUE;
  377. ap->min_special = ZIG_SPLICELEN * MS_TO_SECS * 3;
  378. ap->max_special = duration;
  379. break;
  380. case(TEX_NOTEDATA):
  381. ap->data_in_file_only = TRUE;
  382. break;
  383. case(GRAIN_REORDER_STRING):
  384. ap->data_in_file_only = REORDER_STRING;
  385. break;
  386. case(GRAIN_PITCH_RATIOS):
  387. ap->data_in_file_only = TRUE;
  388. ap->special_range = TRUE;
  389. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  390. ap->min_special = -ap->max_special;
  391. break;
  392. case(GRAIN_TIME_RATIOS):
  393. ap->data_in_file_only = TRUE;
  394. ap->special_range = TRUE;
  395. ap->min_special = GR_MIN_TSTRETCH;
  396. ap->max_special = GR_MAX_TSTRETCH;
  397. break;
  398. case(GRAIN_TWO_RATIOS):
  399. ap->data_in_file_only = TRUE;
  400. ap->special_range = TRUE;
  401. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  402. ap->min_special = -(ap->max_special);
  403. ap->other_special_range = TRUE;
  404. ap->min_special2 = GR_MIN_TSTRETCH;
  405. ap->max_special2 = GR_MAX_TSTRETCH;
  406. break;
  407. //TW NEW CASE
  408. case(SEQUENCER_VALUES):
  409. ap->data_in_file_only = TRUE;
  410. ap->special_range = TRUE;
  411. ap->max_special = GR_MAX_TRANSPOS * SEMITONES_PER_OCTAVE;
  412. ap->min_special = -(ap->max_special);
  413. ap->other_special_range = TRUE;
  414. ap->min_special2 = 0.0;
  415. ap->max_special2 = 7200.0; /* arbitrary : 2 hours */
  416. break;
  417. case(SEQUENCER2_VALUES):
  418. ap->data_in_file_only = TRUE;
  419. ap->special_range = TRUE;
  420. ap->max_special = MIDIMAX;
  421. ap->min_special = MIDIMIN;
  422. ap->other_special_range = TRUE;
  423. ap->min_special2 = 0.0;
  424. ap->max_special2 = 7200.0; /* arbitrary : 2 hours */
  425. break;
  426. case(GRAIN_TIMINGS):
  427. ap->data_in_file_only = TRUE;
  428. ap->special_range = TRUE;
  429. ap->min_special = GRAIN_SPLICELEN * MS_TO_SECS;
  430. ap->max_special = MAX_FIRSTGRAIN_TIME;
  431. break;
  432. case(ENV_CREATEFILE):
  433. ap->data_in_file_only = TRUE;
  434. ap->special_range = TRUE;
  435. ap->min_special = 0.0;
  436. ap->max_special = BIG_TIME;
  437. ap->other_special_range = TRUE;
  438. ap->min_special2 = 0.0;
  439. ap->max_special2 = 1.0;
  440. break;
  441. case(ENV_TRIGGER_RAMP):
  442. ap->data_in_file_only = TRUE;
  443. ap->special_range = TRUE;
  444. ap->min_special = 0.0;
  445. ap->max_special = duration;
  446. ap->other_special_range = TRUE;
  447. ap->min_special2 = 0.0;
  448. ap->max_special2 = 1.0;
  449. break;
  450. case(SNDFILENAME):
  451. ap->data_in_file_only = SNDFILENAME_STRING;
  452. break;
  453. case(FILTERBANK):
  454. case(TIMEVARYING_FILTERBANK):
  455. ap->data_in_file_only = TRUE;
  456. ap->special_range = TRUE;
  457. switch(mode) {
  458. case(FLT_HZ):
  459. ap->min_special = FLT_MINFRQ;
  460. ap->max_special = FLT_MAXFRQ;
  461. break;
  462. case(FLT_MIDI):
  463. ap->min_special = unchecked_hztomidi(FLT_MINFRQ);
  464. ap->max_special = MIDIMAX;
  465. break;
  466. }
  467. ap->other_special_range = TRUE;
  468. ap->min_special2 = FLT_MINGAIN;
  469. ap->max_special2 = FLT_MAXGAIN;
  470. break;
  471. case(TIMEVARY2_FILTERBANK):
  472. ap->data_in_file_only = TRUE;
  473. ap->special_range = FALSE;
  474. break;
  475. case(EXCISE_TIMES):
  476. ap->data_in_file_only = TRUE;
  477. ap->special_range = TRUE;
  478. switch(mode) {
  479. case(EDIT_SAMPS):
  480. ap->min_special = 0.0;
  481. ap->max_special = (int)((duration * (double)srate) + 1.0) * MAX_SNDFILE_OUTCHANS;
  482. break; /* ROUND UP, times OVERKILL as this func doesn't know chancnt!! */
  483. case(EDIT_STSAMPS):
  484. ap->min_special = 0.0;
  485. ap->max_special = (int)((duration * (double)srate) + 1.0); /* ROUND UP */
  486. break;
  487. case(EDIT_SECS):
  488. ap->min_special = 0.0;
  489. ap->max_special = duration;
  490. break;
  491. }
  492. break;
  493. case(NOTE_REPRESENTATION):
  494. ap->data_in_file_only = NOTE_STRING;
  495. break;
  496. case(INTERVAL_REPRESENTATION):
  497. ap->data_in_file_only = INTERVAL_STRING;
  498. break;
  499. case(ATTACK_STREAM):
  500. ap->data_in_file_only = TRUE;
  501. ap->special_range = TRUE;
  502. ap->min_special = 0.0;
  503. ap->max_special = MAX_SYN_DUR; /* 2 hours */
  504. break;
  505. case(BY_HAND):
  506. ap->data_in_file_only = TRUE;
  507. ap->special_range = TRUE;
  508. ap->min_special = 0.0;
  509. ap->max_special = (int)round(duration * (double)(srate * channels));
  510. ap->other_special_range = TRUE;
  511. ap->min_special2 = MINSAMP;
  512. ap->max_special2 = MAXSAMP;
  513. break;
  514. case(DELPERM):
  515. case(DELPERM2):
  516. ap->data_in_file_only = TRUE;
  517. ap->special_range = TRUE;
  518. ap->min_special = -MIDIMAX/2;
  519. ap->max_special = MIDIMAX/2;
  520. ap->other_special_range = TRUE;
  521. ap->min_special2 = 0.05;
  522. ap->max_special2 = .95;
  523. break;
  524. case(SWITCH_TIMES):
  525. ap->data_in_file_only = TRUE;
  526. ap->special_range = TRUE;
  527. ap->min_special = 0.0;
  528. ap->max_special = duration;
  529. break;
  530. case(MANY_SWITCH_TIMES):
  531. //TW NEW CASE
  532. case(MANYCUTS):
  533. ap->data_in_file_only = TRUE;
  534. break;
  535. //TW NEW CASES
  536. case(GRIDDED_MIX):
  537. case(AUTO_MIX):
  538. ap->data_in_file_only = TRUE;
  539. break;
  540. case(STACKDATA):
  541. ap->special_range = TRUE;
  542. ap->min_special = -60.0;
  543. ap->max_special = 60.0;
  544. ap->default_special = 12.0;
  545. break;
  546. case(CLICKTRACK):
  547. case(SYLLTIMES):
  548. case(JOINSEQ):
  549. case(JOINSEQDYN):
  550. case(BATCH):
  551. case(INBTWN_RATIOS):
  552. case(LOUDNESS):
  553. ap->data_in_file_only = TRUE;
  554. break;
  555. case(CHORD_SYN):
  556. ap->data_in_file_only = TRUE;
  557. ap->special_range = TRUE;
  558. switch(mode) {
  559. case(0):
  560. hztomidi(&ap->min_special,1.0/MAX_SYN_DUR);
  561. ap->max_special = 127;
  562. break;
  563. case(1):
  564. ap->min_special = 1.0/MAX_SYN_DUR;
  565. ap->max_special = miditohz(127.0);
  566. break;
  567. break;
  568. }
  569. break;
  570. default:
  571. sprintf(errstr,"Unknown special_data type: setup_special_data_ranges()\n");
  572. return(PROGRAM_ERROR);
  573. }
  574. return(FINISHED);
  575. }
  576. /************************ SETUP_SPECIAL_NAMES *********************/
  577. int setup_special_data_names(int process,int mode,aplptr ap)
  578. {
  579. switch(ap->special_data) {
  580. /************************ SPEC *********************/
  581. case(TRANSPOS_RATIO_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_RATIO"; break;
  582. case(TRANSPOS_OCTAVE_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_IN_OCTAVES"; break;
  583. case(TRANSPOS_SEMIT_OR_CONSTANT): ap->special_data_name = "TRANSPOSITION_IN_SEMITONES"; break;
  584. case(SEMIT_TRANSPOS_SET): ap->special_data_name = "TRANSPOSITION_IN_SEMITONES"; break;
  585. case(FRQ_OR_FRQSET): ap->special_data_name = "FREQUENCY_SET"; break;
  586. case(PITCH_OR_PITCHSET): ap->special_data_name = "PITCH_SET"; break;
  587. case(FILTER_FRQS): ap->special_data_name = "BANDWIDTH_&_FILTER_FRQS"; break;
  588. case(FILTER_BWS_AND_FRQS): ap->special_data_name = "FILTER_FRQS_&_BANDWIDTHS"; break;
  589. case(PITCHQUANTISE_SET): ap->special_data_name = "QUANTISING_PITCHES"; break;
  590. case(INTERVAL_MAPPING): ap->special_data_name = "INTERVALS_FOR_MAPPING"; break;
  591. case(SPECSPLI_DATA): ap->special_data_name = "SPLITTING_DATA"; break;
  592. case(FREEZE_DATA): ap->special_data_name = "FREEZE_DATA"; break;
  593. case(FREEZE2_DATA): ap->special_data_name = "HOLD_DATA"; break;
  594. case(WEAVE_DATA): ap->special_data_name = "WEAVE_DATA"; break;
  595. //TW NEW CASES
  596. case(PITCH_SPECTRUM): ap->special_data_name = "PARTIAL_LEVELS"; break;
  597. case(PITCH_VOWELS): ap->special_data_name = "VOWELS"; break;
  598. case(PITCH_CREATE): ap->special_data_name = "PITCH_DATA"; break;
  599. case(ZERO_INSERTTIMES): ap->special_data_name = "INSERTION_TIMEPAIRS"; break;
  600. /************************ SPEC & GROUCHO ***********************/
  601. case(SHUFFLE_DATA): ap->special_data_name = "SHUFFLE_DATA"; break;
  602. /************************ GROUCHO ***********************/
  603. case(DISTORT_ENVELOPE): ap->special_data_name = "USER_DISTORT_ENVELOPE"; break;
  604. case(ENVSYN_ENVELOPE): ap->special_data_name = "USER_ENVELOPE"; break;
  605. //TW NEW CASE
  606. case(PULSE_ENVELOPE): ap->special_data_name = "IMPULSE_ENVELOPE"; break;
  607. case(HARMONIC_DISTORT): ap->special_data_name = "HARMONIC-NO:AMPLITUDE_PAIRS"; break;
  608. case(ZIGDATA): ap->special_data_name = "ZIGZAG_TIMES"; break;
  609. case(TEX_NOTEDATA): ap->special_data_name = "NOTE_DATA"; break;
  610. case(GRAIN_REORDER_STRING): ap->special_data_name = "CODE_FOR_REORDERING"; break;
  611. case(GRAIN_PITCH_RATIOS): ap->special_data_name = "SEMITONE_SHIFT_EACH_GRAIN"; break;
  612. case(GRAIN_TIME_RATIOS): ap->special_data_name = "DURATION_MULTIPLIER_EACH_GRAIN"; break;
  613. case(GRAIN_TWO_RATIOS): ap->special_data_name = "PSHIFT&DUR-MULTIPLY_EACH_GRAIN"; break;
  614. //TW NEW CASE
  615. case(SEQUENCER_VALUES): ap->special_data_name = "TIME,_SEMITONE_SHIFT_&_LEVEL"; break;
  616. case(SEQUENCER2_VALUES): ap->special_data_name = "SOUND-NO,_TIME,_MIDIPITCH,_LEVEL,_DUR"; break;
  617. case(GRAIN_TIMINGS): ap->special_data_name = "GRAIN_TIMINGS"; break;
  618. case(ENV_CREATEFILE): ap->special_data_name = "TIMES_&_(e)LEVELS_FOR_ENVELOPE"; break;
  619. case(ENV_TRIGGER_RAMP): ap->special_data_name = "TIMES_&_LEVELS_OF_RAMP"; break;
  620. case(SNDFILENAME):
  621. switch(process) {
  622. case(MIXSHUFL): ap->special_data_name = "NEW_FILENAME"; break;
  623. case(HOUSE_DEL): ap->special_data_name = "GENERIC_FILENAME"; break;
  624. }
  625. break;
  626. case(FILTERBANK):
  627. switch(mode) {
  628. case(FLT_HZ): ap->special_data_name = "FRQ_AND_AMP_OF_FILTERS"; break;
  629. case(FLT_MIDI): ap->special_data_name = "PITCH(MIDI)_&_AMP_OF_FILTERS"; break;
  630. }
  631. break;
  632. case(TIMEVARYING_FILTERBANK):
  633. case(TIMEVARY2_FILTERBANK):
  634. switch(mode) {
  635. case(FLT_HZ): ap->special_data_name = "TIMELIST_OF_FRQS&AMPS_OF_FILTS"; break;
  636. case(FLT_MIDI): ap->special_data_name = "TIMELIST_OF_PICHS&AMPS_OF_FILTS";break;
  637. }
  638. break;
  639. case(EXCISE_TIMES): ap->special_data_name = "START_&_END_TIMES_FOR_EXCISIONS";break;
  640. case(NOTE_REPRESENTATION): ap->special_data_name = "NOTE_NAME"; break;
  641. case(INTERVAL_REPRESENTATION): ap->special_data_name = "INTERVAL_NAME"; break;
  642. case(ATTACK_STREAM): ap->special_data_name = "TIMES_OF_EVENTS"; break;
  643. case(BY_HAND): ap->special_data_name = "SAMPLE_NO_AND_SAMPLE_VALUE"; break;
  644. case(DELPERM): ap->special_data_name = "DELAY_PERMUTATION"; break;
  645. case(DELPERM2): ap->special_data_name = "TRANSPOS_+_DELAY_PERMUTATION"; break;
  646. case(SWITCH_TIMES): ap->special_data_name = "SWITCHING_TIMES"; break;
  647. case(MANY_SWITCH_TIMES): ap->special_data_name = "SWITCHING_TIMES"; break;
  648. // TW NEW CASES
  649. case(MANYCUTS): ap->special_data_name = "SEGMENT_START_AND_END_TIMES"; break;
  650. case(GRIDDED_MIX): ap->special_data_name = "MIX_GRID"; break;
  651. case(AUTO_MIX): ap->special_data_name = "MIX_BALANCE_FUNCTION"; break;
  652. case(STACKDATA): ap->special_data_name = "TRANSPOSITION_DATA"; break;
  653. case(CLICKTRACK): ap->special_data_name = "CLICKTRACK_DATA"; break;
  654. case(SYLLTIMES): ap->special_data_name = "SYLLABLE_TIMES"; break;
  655. case(JOINSEQ): ap->special_data_name = "FILE_SEQUENCE"; break;
  656. case(JOINSEQDYN): ap->special_data_name = "FILE_SEQUENCE_WITH_LOUDNESSES"; break;
  657. case(BATCH): ap->special_data_name = "NEW_PARAMETER_VALUES"; break;
  658. case(INBTWN_RATIOS): ap->special_data_name = "MIX_RATIOS"; break;
  659. case(LOUDNESS): ap->special_data_name = "LOUDNESS_ENVELOPE"; break;
  660. case(CHORD_SYN):
  661. switch(mode) {
  662. case(0): ap->special_data_name = "MIDI_PITCHES_OF_CHORD_NOTES"; break;
  663. case(1): ap->special_data_name = "FRQUENCIES_OF_CHORD_NOTES"; break;
  664. }
  665. break;
  666. default:
  667. sprintf(errstr,"Unknown special_data type: setup_special_data_names()\n");
  668. return(PROGRAM_ERROR);
  669. }
  670. return(FINISHED);
  671. }