delay.c 121 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273
  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. /* floatsam version */
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <math.h>
  25. #include <time.h>
  26. #include <memory.h>
  27. #include <structures.h>
  28. #include <tkglobals.h>
  29. #include <globcon.h>
  30. #include <cdpmain.h>
  31. #include <modify.h>
  32. #include <modeno.h>
  33. #include <pnames.h>
  34. #include <flags.h>
  35. #include <arrays.h>
  36. #include <sfsys.h>
  37. #include <cdplib.h>
  38. #include <osbind.h>
  39. /*RWD January 2009:
  40. delay:
  41. replaced domono and dostereo with domulti for full m/c support
  42. corrected trailtime calc (counts frames, not samples )
  43. vdelay:
  44. replaced do_vdelay with do_vdelay_multi, ditto
  45. replaced triangle lfo with sine lfo
  46. revised random mod to use modulated sine osc
  47. randfac revised to use 1/f noise (average of successive rands)
  48. stadium:
  49. added error return if inout more than 2 chans
  50. */
  51. //#ifdef unix
  52. #define round(x) lround((x))
  53. //#endif
  54. #define DELAY_BUFLEN (4096)
  55. #define ROOTLEN_DELBUF (2)
  56. #define ROOTLEN_VDELBUF (4)
  57. /*RWD January 2009 */
  58. static int domulti(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,dataptr dz);
  59. int do_vdelay_multi(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,
  60. double modlen,double lfophase,int mdelay,dataptr dz);
  61. static int count(int num,int *counter);
  62. static double randfac(double length,double phase,int delay,int *ikindex,int *counter,double *rout,double *diff);
  63. static int domultiv(int trailtime,int delay,double prescale,dataptr dz);
  64. static int setup_stadium(dataptr dz);
  65. static int generate_delays(dataptr dz);
  66. static void generate_gains(dataptr dz);
  67. #ifndef M_PI
  68. #define M_PI (3.1415926535897932)
  69. #endif
  70. #ifndef M_TWOPI
  71. #define M_TWOPI (2.0 * M_PI)
  72. #endif
  73. typedef struct soscil_
  74. {
  75. double phase;
  76. double sr;
  77. double incr;
  78. double val;
  79. unsigned int count;
  80. unsigned int delay;
  81. } SOSCIL;
  82. SOSCIL* new_soscil(double srate,double startphase, double freq,unsigned int delay)
  83. {
  84. SOSCIL* osc = (SOSCIL*) malloc(sizeof(SOSCIL));
  85. if(osc==NULL)
  86. return NULL;
  87. osc->sr = srate;
  88. osc->phase = M_TWOPI * startphase;
  89. osc->incr = M_TWOPI/srate * freq;
  90. osc->delay = delay;
  91. osc->count = 0;
  92. osc->val = sin(osc->phase);
  93. return osc;
  94. }
  95. double soscil_tick(SOSCIL* osc)
  96. {
  97. if(osc->count >= osc->delay){
  98. osc->phase+= osc->incr;
  99. if(osc->phase >= M_PI)
  100. osc->phase -= M_TWOPI;
  101. osc->val = sin(osc->phase);
  102. }
  103. else
  104. osc->count++;
  105. return osc->val;
  106. }
  107. double soscil_tickf(SOSCIL* osc,double freqmod)
  108. {
  109. double nuincr;
  110. if(osc->count >= osc->delay){
  111. nuincr = osc->incr * freqmod;
  112. osc->phase+= nuincr;
  113. if(osc->phase >= M_PI)
  114. osc->phase -= M_TWOPI;
  115. osc->val = sin(osc->phase);
  116. }
  117. else
  118. osc->count++;
  119. return osc->val;
  120. }
  121. /********************************** DELAY_PREPROCESS *****************************/
  122. int delay_preprocess(dataptr dz)
  123. {
  124. int exit_status; /*RWD*/
  125. double sr;
  126. switch(dz->mode) {
  127. case(MOD_DELAY):
  128. dz->param[DELAY_INVERT] = 1.0;
  129. if(dz->vflag[DELAY_INVERT_FLAG])
  130. dz->param[DELAY_INVERT] = -1.0;
  131. break;
  132. case(MOD_VDELAY):
  133. sr = (double)dz->infile->srate;
  134. if(dz->param[DELAY_LFOFRQ]<0.0)
  135. dz->iparam[DELAY_LFOFLAG] = 0;
  136. else
  137. dz->iparam[DELAY_LFOFLAG] = 1;
  138. dz->param[DELAY_MODLEN] = 0.0;
  139. if(dz->param[DELAY_LFOFRQ] !=0.0)
  140. dz->param[DELAY_MODLEN] = sr/fabs(dz->param[DELAY_LFOFRQ]);
  141. dz->iparam[DELAY_MDELAY] = (int)(sr*dz->param[DELAY_LFODELAY]);
  142. break;
  143. /*RWD create outfile here in this case: props changed */
  144. case(MOD_STADIUM):
  145. /* create stereo outfile here! */
  146. /* RWD 4:2002 now we can open outfile with corect params! */
  147. dz->infile->channels = STEREO; /* ARRGH! */
  148. if((exit_status = create_sized_outfile(dz->outfilename,dz))<0)
  149. return(exit_status);
  150. break;
  151. }
  152. return(FINISHED);
  153. }
  154. /********************************** CREATE_DELAY_BUFFERS *****************************/
  155. int create_delay_buffers(dataptr dz) /* USES small bufs to allow max space for delay buffer */
  156. {
  157. int bigbufsize;
  158. if(dz->mode==MOD_STADIUM)
  159. return create_stadium_buffers(dz);
  160. /* MULTICHAN 2009 --> */
  161. // bigbufsize = DELAY_BUFLEN * 2;
  162. bigbufsize = DELAY_BUFLEN * dz->infile->channels * 2;
  163. if((dz->bigbuf = (float *)malloc(bigbufsize * sizeof(float)))==NULL) {
  164. sprintf(errstr,"INSUFFICIENT MEMORY for sound buffers.\n");
  165. return(MEMORY_ERROR);
  166. }
  167. bigbufsize /= 2;
  168. dz->buflen = bigbufsize;
  169. dz->sampbuf[0] = dz->bigbuf;
  170. dz->sampbuf[1] = dz->sampbuf[0] + dz->buflen;
  171. return(FINISHED);
  172. }
  173. /********************************** DO_DELAY *****************************/
  174. int do_delay(dataptr dz)
  175. {
  176. int exit_status = FINISHED;
  177. double rescale, gain, fdbk, fdfrwd, prescale;
  178. double sr = (double)dz->infile->srate;
  179. int chans = dz->infile->channels, root_delay = 0;
  180. int trailtime, delay, delbuflen;
  181. time_t longtime;
  182. delay = round(dz->param[DELAY_DELAY] * sr * MS_TO_SECS);
  183. /* nb delaysamps is per channel here */
  184. /* fdfrwd = ((1.0 - dz->param[DELAY_MIX])*dz->param[DELAY_INVERT]); */
  185. if((exit_status = read_values_from_all_existing_brktables(0.0,dz))<0)
  186. return(exit_status); /* read value 1 bloklength ahead */
  187. fdfrwd = 1.0 - dz->param[DELAY_MIX];
  188. gain = dz->param[DELAY_MIX];
  189. fdbk = dz->param[DELAY_FEEDBACK];
  190. rescale = (1.0 / (fdbk + 1.0)); /* i/p compensation */
  191. prescale = dz->param[DELAY_PRESCALE] * rescale;
  192. fdfrwd /= rescale;
  193. trailtime = round(dz->param[DELAY_TRAILTIME] * sr);
  194. switch(dz->mode) {
  195. case(MOD_DELAY):
  196. /* RWD Jan 2009: trailtime counts frames, not samples */
  197. /* if(chans==STEREO)
  198. trailtime *= 2;
  199. */
  200. delay *= chans;
  201. root_delay = ROOTLEN_DELBUF;
  202. root_delay *= chans; /*RWD Jan 2009 */
  203. /*RWD */
  204. fdfrwd *= dz->param[DELAY_INVERT];
  205. break;
  206. case(MOD_VDELAY):
  207. delay *= chans;
  208. root_delay = ROOTLEN_VDELBUF;
  209. root_delay *= chans;
  210. //TW added, following RWD's modifications above
  211. fdfrwd *= dz->param[DELAY_INVERT];
  212. break;
  213. }
  214. delbuflen = delay + root_delay;
  215. if((dz->parray[DELAY_BUF] = (double *)calloc(delbuflen,sizeof(double)))==NULL){
  216. sprintf(errstr,"INSUFFICIENT MEMORY for main delay buffer.");
  217. return(MEMORY_ERROR);
  218. }
  219. switch(dz->mode) {
  220. case(MOD_DELAY):
  221. if(dz->brksize[DELAY_MIX] > 0 || dz->brksize[DELAY_FEEDBACK] > 0)
  222. exit_status = domultiv(trailtime,delay,prescale,dz);
  223. else
  224. exit_status = domulti(trailtime,delay,gain,fdbk,fdfrwd,prescale,dz);
  225. break;
  226. case(MOD_VDELAY):
  227. if(dz->iparam[DELAY_SEED]==0) {
  228. time(&longtime);
  229. dz->iparam[DELAY_SEED] = (int)longtime;
  230. }
  231. #if defined(_WIN32) || defined(__SC__)
  232. srand(dz->iparam[DELAY_SEED]);
  233. #else
  234. srand48(dz->iparam[DELAY_SEED]);
  235. #endif
  236. dz->param[DELAY_MODRANGE] = 0.0;
  237. if(dz->param[DELAY_LFOMOD]>0.0) {
  238. dz->param[DELAY_MODRANGE] = (double) (delay/chans) * dz->param[DELAY_LFOMOD];
  239. if(dz->param[DELAY_MODRANGE] >= (double)(delay/chans)) /* never exactly 100% mod */
  240. dz->param[DELAY_MODRANGE] = (double)(delay/chans) - 1.0;
  241. }
  242. /*RWD Jan 2009 */
  243. exit_status = do_vdelay_multi(trailtime,delay,gain,fdbk,fdfrwd,prescale,
  244. dz->param[DELAY_MODLEN],dz->param[DELAY_LFOPHASE],dz->iparam[DELAY_MDELAY],dz);
  245. break;
  246. }
  247. return(exit_status);
  248. }
  249. /************************************* DOMONO ************************************/
  250. int domono(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,dataptr dz)
  251. {
  252. int exit_status;
  253. register int i;
  254. double input,output;
  255. int ipptr=0,opptr=0;
  256. float *inbuf = dz->sampbuf[0];
  257. float *outbuf = dz->sampbuf[1];
  258. double *delbuf = dz->parray[DELAY_BUF];
  259. while(dz->samps_left > 0) {
  260. if((exit_status = read_samps(inbuf,dz))<0)
  261. return(exit_status);
  262. for(i=0;i<dz->ssampsread;i++) {
  263. input = (double)inbuf[i] * prescale;
  264. output = (input * fdfrwd) + (delbuf[opptr] * gain);
  265. delbuf[ipptr] = delbuf[opptr++] * fdbk;
  266. delbuf[ipptr++] += input;
  267. outbuf[i] = (float) output;
  268. if(ipptr >= delay)
  269. ipptr -= delay;
  270. if(opptr >= delay)
  271. opptr -= delay;
  272. if(ipptr < 0 || opptr < 0) {
  273. sprintf(errstr,"Internal error, ipptr=%d,opptr=%d\n",ipptr,opptr);
  274. return(PROGRAM_ERROR);
  275. }
  276. }
  277. if(dz->ssampsread == dz->buflen) { /* If full buffer, write it */
  278. if((exit_status = write_samps(outbuf,dz->ssampsread,dz))<0)
  279. return(exit_status);
  280. }
  281. }
  282. i = dz->ssampsread % dz->buflen; /* i = position in buffer if not written, or 0 if just written */
  283. /* now do trailer */
  284. while(trailtime>0) {
  285. for(;i<dz->buflen;i++) {
  286. output=(delbuf[opptr] * gain);
  287. delbuf[ipptr++] = delbuf[opptr++] *fdbk;
  288. outbuf[i] = (float)output;
  289. if(ipptr >= delay)
  290. ipptr -= delay;
  291. if(opptr >= delay)
  292. opptr -= delay;
  293. if(--trailtime <=0) /* if got to end of trailer, break out */
  294. break;
  295. }
  296. if(trailtime > 0) { /* if not at end of trailer, but at end of buf, write buf */
  297. if((exit_status = write_samps(outbuf,dz->buflen,dz))<0)
  298. return(exit_status);
  299. i = 0; /* and reset bufptr to 0 */
  300. }
  301. } /* if no trailer or at end of trailer, and not at start of buf, write rest of buf */
  302. if(i>0 && (exit_status = write_samps(outbuf, i, dz))<0)
  303. return(exit_status);
  304. return(FINISHED);
  305. }
  306. /************************************* DOSTEREO ************************************/
  307. int dostereo(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,dataptr dz)
  308. {
  309. int exit_status;
  310. int i;
  311. double Linput,Rinput;
  312. double Loutput,Routput;
  313. int Lipptr = 0,Ripptr = 1;
  314. int Lopptr = 0,Ropptr = 1;
  315. double *delbuf = dz->parray[DELAY_BUF];
  316. float *inbuf = dz->sampbuf[0];
  317. float *outbuf= dz->sampbuf[1];
  318. while(dz->samps_left > 0) {
  319. if((exit_status = read_samps(inbuf,dz))<0)
  320. return(exit_status);
  321. for(i=0;i<(dz->ssampsread-1);i+=2) {
  322. Linput = inbuf[i]*prescale;
  323. Rinput = inbuf[i+1]*prescale;
  324. Loutput=(Linput*fdfrwd) + (delbuf[Lopptr]*gain);
  325. Routput=(Rinput*fdfrwd) + (delbuf[Ropptr]*gain);
  326. delbuf[Lipptr] = delbuf[Lopptr]*fdbk;
  327. Lopptr+=2;
  328. delbuf[Ripptr] = delbuf[Ropptr]*fdbk;
  329. Ropptr+=2;
  330. delbuf[Lipptr]+=Linput;
  331. delbuf[Ripptr]+=Rinput;
  332. Lipptr+=2;
  333. Ripptr+=2;
  334. outbuf[i] = (float) Loutput;
  335. outbuf[i+1] = (float) Routput;
  336. if(Lipptr >= delay) Lipptr -= delay;
  337. if(Ripptr >= delay) Ripptr -= delay;
  338. if(Lopptr >= delay) Lopptr -= delay;
  339. if(Ropptr >= delay) Ropptr -= delay;
  340. }
  341. if(dz->ssampsread == dz->buflen) {
  342. if((exit_status = write_samps(outbuf,dz->ssampsread,dz))<0)
  343. return(exit_status);
  344. }
  345. }
  346. i = dz->ssampsread % dz->buflen;
  347. /* now do trailer */
  348. while(trailtime>0) {
  349. for(;i<dz->buflen-1;i+=2) {
  350. Loutput = delbuf[Lopptr]*gain;
  351. Routput = delbuf[Ropptr]*gain;
  352. delbuf[Lipptr] = delbuf[Lopptr]*fdbk;
  353. delbuf[Ripptr] = delbuf[Ropptr]*fdbk;
  354. Lopptr+=2;
  355. Ropptr+=2;
  356. Lipptr+=2;
  357. Ripptr+=2;
  358. outbuf[i] = (float) Loutput;
  359. outbuf[i+1] = (float) Routput;
  360. if(Lipptr >= delay) Lipptr -= delay;
  361. if(Ripptr >= delay) Ripptr -= delay;
  362. if(Lopptr >= delay) Lopptr -= delay;
  363. if(Ropptr >= delay) Ropptr -= delay;
  364. if(--trailtime <=0)
  365. break;
  366. }
  367. if(trailtime > 0) {
  368. if((exit_status = write_samps(outbuf,dz->buflen,dz))<0)
  369. return(exit_status);
  370. i = 0;
  371. }
  372. }
  373. if(i>0 && (exit_status = write_samps(outbuf,i ,dz))<0)
  374. return(exit_status);
  375. return(FINISHED);
  376. }
  377. /*RWD Jan 2009 multichannel version */
  378. int domulti(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,dataptr dz)
  379. {
  380. int exit_status;
  381. int i,j;
  382. double* inputs;
  383. double* outputs;
  384. int* lipptr;
  385. int* lopptr;
  386. int chans = dz->infile->channels;
  387. int adjust = chans-1;
  388. double *delbuf = dz->parray[DELAY_BUF];
  389. float *inbuf = dz->sampbuf[0];
  390. float *outbuf= dz->sampbuf[1];
  391. inputs = (double*) malloc(chans * sizeof(double));
  392. outputs = (double*) malloc(chans * sizeof(double));
  393. lipptr = (int*) malloc(chans * sizeof(int));
  394. lopptr = (int*) malloc(chans * sizeof(int));
  395. for(i=0;i < chans;i++){
  396. inputs[i] = outputs[i] = 0.0;
  397. lipptr[i] = lopptr[i] = i;
  398. }
  399. while(dz->samps_left > 0) {
  400. if((exit_status = read_samps(inbuf,dz))<0)
  401. return(exit_status);
  402. for(i=0;i < dz->ssampsread-adjust; i+=chans) {
  403. for(j=0;j < chans;j++){
  404. inputs[j] = inbuf[i+j]*prescale;
  405. outputs[j] =(inputs[j]*fdfrwd) + (delbuf[lopptr[j]] * gain);
  406. delbuf[lipptr[j]] = delbuf[lopptr[j]]*fdbk;
  407. lopptr[j] += chans;
  408. delbuf[lipptr[j]] += inputs[j];
  409. lipptr[j] += chans;
  410. outbuf[i+j] = (float) outputs[j];
  411. if(lipptr[j] >= delay)
  412. lipptr[j] -= delay;
  413. if(lopptr[j] >= delay)
  414. lopptr[j] -= delay;
  415. }
  416. }
  417. if(dz->ssampsread == dz->buflen) {
  418. if((exit_status = write_samps(outbuf,dz->ssampsread,dz))<0)
  419. return(exit_status);
  420. }
  421. }
  422. i = dz->ssampsread % dz->buflen;
  423. /* now do trailer */
  424. while(trailtime>0) {
  425. for(;i<dz->buflen-adjust;i+=chans) {
  426. for(j=0;j < chans;j++){
  427. outputs[j] = delbuf[lopptr[j]]*gain;
  428. delbuf[lipptr[j]] = delbuf[lopptr[j]] * fdbk;
  429. lopptr[j]+=chans;
  430. lipptr[j]+=chans;
  431. outbuf[i+j] = (float) outputs[j];
  432. if(lipptr[j] >= delay) lipptr[j] -= delay;
  433. if(lopptr[j] >= delay) lopptr[j] -= delay;
  434. }
  435. if(--trailtime <=0)
  436. break;
  437. }
  438. if(trailtime > 0) {
  439. if((exit_status = write_samps(outbuf,dz->buflen,dz))<0)
  440. return(exit_status);
  441. i = 0;
  442. }
  443. }
  444. if(i>0 && (exit_status = write_samps(outbuf,i ,dz))<0)
  445. return(exit_status);
  446. free(inputs);
  447. free(outputs);
  448. free(lipptr);
  449. free(lopptr);
  450. return(FINISHED);
  451. }
  452. /*TW 2010: variable feedback, feedfrwd version */
  453. int domultiv(int trailtime,int delay,double prescale,dataptr dz)
  454. {
  455. int exit_status;
  456. int i,j;
  457. double* inputs;
  458. double* outputs;
  459. int* lipptr;
  460. int* lopptr;
  461. int chans = dz->infile->channels;
  462. int adjust = chans-1;
  463. double *delbuf = dz->parray[DELAY_BUF];
  464. float *inbuf = dz->sampbuf[0];
  465. float *outbuf= dz->sampbuf[1];
  466. int vstep = 128 * chans, samps_processed = 0;
  467. double srate = (double)dz->infile->srate, thistime;
  468. double gain, fdbk, fdfrwd;
  469. if((exit_status = read_values_from_all_existing_brktables(0.0,dz))<0)
  470. return(exit_status);
  471. fdfrwd = 1.0 - dz->param[DELAY_MIX];
  472. gain = dz->param[DELAY_MIX];
  473. fdbk = dz->param[DELAY_FEEDBACK];
  474. inputs = (double*) malloc(chans * sizeof(double));
  475. outputs = (double*) malloc(chans * sizeof(double));
  476. lipptr = (int*) malloc(chans * sizeof(int));
  477. lopptr = (int*) malloc(chans * sizeof(int));
  478. for(i=0;i < chans;i++){
  479. inputs[i] = outputs[i] = 0.0;
  480. lipptr[i] = lopptr[i] = i;
  481. }
  482. while(dz->samps_left > 0) {
  483. if((exit_status = read_samps(inbuf,dz))<0)
  484. return(exit_status);
  485. for(i=0;i < dz->ssampsread-adjust; i+=chans) {
  486. if(samps_processed % vstep == 0) {
  487. thistime = (double)(samps_processed/chans)/srate;
  488. if((exit_status = read_values_from_all_existing_brktables(thistime,dz))<0)
  489. return(exit_status);
  490. fdfrwd = 1.0 - dz->param[DELAY_MIX];
  491. gain = dz->param[DELAY_MIX];
  492. fdbk = dz->param[DELAY_FEEDBACK];
  493. }
  494. for(j=0;j < chans;j++){
  495. inputs[j] = inbuf[i+j]*prescale;
  496. outputs[j] =(inputs[j]*fdfrwd) + (delbuf[lopptr[j]] * gain);
  497. delbuf[lipptr[j]] = delbuf[lopptr[j]]*fdbk;
  498. lopptr[j] += chans;
  499. delbuf[lipptr[j]] += inputs[j];
  500. lipptr[j] += chans;
  501. outbuf[i+j] = (float) outputs[j];
  502. if(lipptr[j] >= delay)
  503. lipptr[j] -= delay;
  504. if(lopptr[j] >= delay)
  505. lopptr[j] -= delay;
  506. }
  507. samps_processed += chans;
  508. }
  509. if(dz->ssampsread == dz->buflen) {
  510. if((exit_status = write_samps(outbuf,dz->ssampsread,dz))<0)
  511. return(exit_status);
  512. }
  513. }
  514. i = dz->ssampsread % dz->buflen;
  515. /* now do trailer */
  516. while(trailtime>0) {
  517. for(;i<dz->buflen-adjust;i+=chans) {
  518. for(j=0;j < chans;j++){
  519. outputs[j] = delbuf[lopptr[j]]*gain;
  520. delbuf[lipptr[j]] = delbuf[lopptr[j]] * fdbk;
  521. lopptr[j]+=chans;
  522. lipptr[j]+=chans;
  523. outbuf[i+j] = (float) outputs[j];
  524. if(lipptr[j] >= delay) lipptr[j] -= delay;
  525. if(lopptr[j] >= delay) lopptr[j] -= delay;
  526. }
  527. if(--trailtime <=0)
  528. break;
  529. }
  530. if(trailtime > 0) {
  531. if((exit_status = write_samps(outbuf,dz->buflen,dz))<0)
  532. return(exit_status);
  533. i = 0;
  534. }
  535. }
  536. if(i>0 && (exit_status = write_samps(outbuf,i ,dz))<0)
  537. return(exit_status);
  538. free(inputs);
  539. free(outputs);
  540. free(lipptr);
  541. free(lopptr);
  542. return(FINISHED);
  543. }
  544. /************************************* DO_VDELAY_MULTI ************************************/
  545. int do_vdelay_multi(int trailtime,int delay,double gain,double fdbk,double fdfrwd,double prescale,
  546. double modlen,double lfophase,int mdelay,dataptr dz)
  547. {
  548. int exit_status;
  549. float *inbuf = dz->sampbuf[0];
  550. float *obuf = dz->sampbuf[1];
  551. int i,j,chans = dz->infile->channels;
  552. int adjust = chans-1;
  553. int *ipptr;
  554. int *opptr;
  555. int optr1, optr2;
  556. int framedelay = delay/chans;
  557. double val, offset;
  558. double *input;
  559. double *output;
  560. double *delbuf = dz->parray[DELAY_BUF];
  561. double *dinterp;
  562. double rout = 0.0, diff = 0.0;
  563. int ikindex= 0, counter = 0;
  564. SOSCIL* osc;
  565. ipptr = (int*) malloc(chans * sizeof(int));
  566. opptr = (int*) malloc(chans * sizeof(int));
  567. input = (double*) malloc(chans * sizeof(double));
  568. output = (double*) malloc(chans * sizeof(double));
  569. dinterp = (double*) malloc(chans * sizeof(double));
  570. for(j=0;j < chans;j++){
  571. ipptr[j] = opptr[j] = j;
  572. dinterp[j] = 0.0;
  573. input[j] = output[j] = 0.0;
  574. }
  575. osc = new_soscil(dz->infile->srate,lfophase,dz->param[DELAY_LFOFRQ],(unsigned int) mdelay);
  576. if(osc==NULL){
  577. return MEMORY_ERROR;
  578. }
  579. while(dz->samps_left > 0) {
  580. if((exit_status = read_samps(inbuf,dz))<0)
  581. return(exit_status);
  582. for(i = 0; i < dz->ssampsread-adjust; i += chans) {
  583. if(dz->iparam[DELAY_LFOFLAG])
  584. val = 0.5 + (0.5 * soscil_tick(osc));
  585. else {
  586. val = randfac(modlen,lfophase,mdelay,&ikindex,&counter,&rout,&diff);
  587. val = 0.5 + (0.5 * soscil_tickf(osc,val));
  588. }
  589. /* same fac for all chans */
  590. offset = dz->param[DELAY_MODRANGE] * val;
  591. for(j=0;j < chans;j++){
  592. input[j] = ((double) (inbuf[i+j])) * prescale;
  593. if(ipptr[j] >= framedelay)
  594. ipptr[j] -= framedelay;
  595. if(opptr[j] >= framedelay)
  596. opptr[j] -= framedelay;
  597. optr1 = opptr[j] + (int) offset;
  598. if(optr1 >= framedelay)
  599. optr1 -= framedelay;
  600. optr2 = optr1 + 1;
  601. if(optr2 >= framedelay)
  602. optr2 -= framedelay;
  603. dinterp[j] =(double) delbuf[optr1*chans +j] +
  604. (fmod(offset,1.0)*((double)delbuf[optr2*chans +j] - (double)delbuf[optr1*chans +j]));
  605. output[j] = (input[j] * fdfrwd) + (dinterp[j] * gain);
  606. delbuf[ipptr[j]*chans+j] = (float)(dinterp[j] * fdbk);
  607. delbuf[ipptr[j]*chans +j] += (float)input[j] ;
  608. ipptr[j]++;
  609. obuf[i+j] = (float)output[j];
  610. opptr[j]++;
  611. }
  612. }
  613. if(dz->ssampsread == dz->buflen) { /* If full buffer, write it */
  614. if((exit_status = write_samps(obuf,dz->ssampsread,dz))<0)
  615. return(exit_status);
  616. }
  617. }
  618. i = dz->ssampsread % dz->buflen; /* i = position in buffer if not written, or 0 if just written */
  619. /* now do trailer */
  620. while(trailtime>0) {
  621. for(; i < dz->buflen-adjust; i+= chans) {
  622. if(dz->iparam[DELAY_LFOFLAG])
  623. val = 0.5 + (0.5 * soscil_tick(osc));
  624. else {
  625. val = randfac(modlen,lfophase,mdelay,&ikindex,&counter,&rout,&diff);
  626. val = 0.5 + (0.5 * soscil_tickf(osc,val));
  627. }
  628. offset = dz->param[DELAY_MODRANGE] * val;
  629. for(j=0; j < chans; j++){
  630. if(ipptr[j] >= framedelay)
  631. ipptr[j] -= framedelay;
  632. if(opptr[j] >= framedelay)
  633. opptr[j] -= framedelay;
  634. optr1 = opptr[j] + (int) offset;
  635. if(optr1 >= framedelay)
  636. optr1 -= framedelay;
  637. optr2 = optr1 +1;
  638. if(optr2 >= framedelay)
  639. optr2 -= framedelay;
  640. dinterp[j] =(double) delbuf[optr1*chans +j] +
  641. (fmod(offset,1.0)*((double)delbuf[optr2*chans+j] - (double)delbuf[optr1*chans+j]));
  642. output[j] = (dinterp[j] * gain);
  643. delbuf[ipptr[j]*chans+j] = (float)(dinterp[j] * fdbk);
  644. ipptr[j]++;
  645. obuf[i+j] = (float)output[j];
  646. opptr[j]++;
  647. }
  648. if(--trailtime <=0) /* if got to end of trailer, break out */
  649. break;
  650. } /* for loop */
  651. if(trailtime > 0) { /* if not at end of trailer, but at end of buf, write buf */
  652. if((exit_status = write_samps(obuf,dz->buflen,dz))<0)
  653. return(exit_status);
  654. i = 0; /* and reset bufptr to 0 */
  655. }
  656. }
  657. free(osc);
  658. free(ipptr);
  659. free(opptr);
  660. free(input);
  661. free(output);
  662. free(dinterp);
  663. /* if no trailer or at end of trailer, and not at start of buf, write rest of buf */
  664. if(i>0 && (exit_status = write_samps(obuf,i ,dz))<0)
  665. return(exit_status);
  666. return(FINISHED);
  667. }
  668. /************************************* COUNT ************************************/
  669. int count(int num,int *counter)
  670. {
  671. if(*counter<=num) {
  672. num -= (*counter);
  673. (*counter)++;
  674. return(num);
  675. }
  676. return 0;
  677. }
  678. /************************************* RANDFAC ************************************/
  679. double randfac(double length,double phase,int delay,int *ikindex,int *counter,double *rout,double *diff)
  680. {
  681. double temp;
  682. volatile double dummy;
  683. if(!count(delay,counter)) {
  684. if(*ikindex==0) { /* start of cycle */
  685. dummy = drand48(); /* kludge to kickstart drand48() */
  686. temp = drand48();
  687. // *diff = *rout - temp;
  688. /* RWD january 2009 : extended to use 1/f random vals */
  689. *diff = *rout - (0.5 * (dummy + temp));
  690. }
  691. *rout -= (*diff)/length;
  692. (*ikindex)++;
  693. if(*ikindex>=(int)length)
  694. *ikindex = 0;
  695. return *rout;
  696. }
  697. return phase;
  698. }
  699. /************************** STADIUM_PCONSISTENCY ****************************/
  700. int stadium_pconsistency(dataptr dz)
  701. {
  702. int exit_status;
  703. dz->itemcnt = dz->infile->channels;
  704. dz->infile->channels = STEREO; /* for output!! */
  705. if((exit_status = setup_stadium(dz))<0)
  706. return(exit_status);
  707. if((exit_status = generate_delays(dz))<0)
  708. return(exit_status);
  709. dz->iparam[STAD_MAXDELAY] = dz->lparray[STAD_DELAY][dz->iparam[STAD_ECHOCNT]-1];
  710. generate_gains(dz);
  711. return(FINISHED);
  712. }
  713. /*************************** SETUP_STADIUM ***************************/
  714. int setup_stadium(dataptr dz)
  715. {
  716. //TW UPDATE TO 100 possible echoes
  717. // double *tdelay, *gain, *pan;
  718. double *tdelay, *gain, *pan, top, bot, interval;
  719. int n;
  720. if((dz->parray[STAD_TDELAY] = malloc(MAX_ECHOCNT * sizeof(double)))==NULL
  721. || (dz->parray[STAD_GAIN] = malloc(MAX_ECHOCNT * sizeof(double)))==NULL
  722. || (dz->parray[STAD_GAINL] = malloc(MAX_ECHOCNT * sizeof(double)))==NULL
  723. || (dz->parray[STAD_GAINR] = malloc(MAX_ECHOCNT * sizeof(double)))==NULL
  724. || (dz->parray[STAD_PAN] = malloc(MAX_ECHOCNT * sizeof(double)))==NULL) {
  725. sprintf(errstr,"Insufficient memory for stadium arrays.\n");
  726. return(MEMORY_ERROR);
  727. }
  728. tdelay = dz->parray[STAD_TDELAY];
  729. gain = dz->parray[STAD_GAIN];
  730. pan = dz->parray[STAD_PAN];
  731. //TW UPDATE TO 10 possible echoes
  732. if(dz->iparam[STAD_ECHOCNT] <= REASONABLE_ECHOCNT) {
  733. tdelay[0] = 0.000000; gain[0] = 1.000000; pan[0] = -1;
  734. tdelay[1] = 0.131832; gain[1] = 1.000000; pan[1] = 1;
  735. tdelay[2] = 0.215038; gain[2] = 0.354813; pan[2] = .5;
  736. tdelay[3] = 0.322274; gain[3] = 0.354813; pan[3] = -.5;
  737. tdelay[4] = 0.414122; gain[4] = 0.251189; pan[4] = 0;
  738. tdelay[5] = 0.504488; gain[5] = 0.125893; pan[5] = .7;
  739. tdelay[6] = 0.637713; gain[6] = 0.125893; pan[6] = -.7;
  740. tdelay[7] = 0.730468; gain[7] = 0.063096; pan[7] = .3;
  741. tdelay[8] = 0.808751; gain[8] = 0.063096; pan[8] = -.3;
  742. tdelay[9] = 0.910460; gain[9] = 0.031623; pan[9] = .15;
  743. tdelay[10] = 1.027041; gain[10] = 0.031623; pan[10] = -.15;
  744. tdelay[11] = 1.132028; gain[11] = 0.012589; pan[11] = .85;
  745. tdelay[12] = 1.244272; gain[12] = 0.012589; pan[12] = -.85;
  746. tdelay[13] = 1.336923; gain[13] = 0.005012; pan[13] = .4;
  747. tdelay[14] = 1.427700; gain[14] = 0.005012; pan[14] = -.4;
  748. tdelay[15] = 1.528503; gain[15] = 0.002512; pan[15] = .6;
  749. tdelay[16] = 1.618661; gain[16] = 0.002512; pan[16] = -.6;
  750. tdelay[17] = 1.715413; gain[17] = 0.002512; pan[17] = .225;
  751. tdelay[18] = 1.814730; gain[18] = 0.002512; pan[18] = -.225;
  752. tdelay[19] = 1.914843; gain[19] = 0.002512; pan[19] = .775;
  753. tdelay[20] = 2.000258; gain[20] = 0.002512; pan[20] = -.775;
  754. tdelay[21] = 2.135363; gain[21] = 0.002512; pan[21] = .125;
  755. tdelay[22] = 2.230554; gain[22] = 0.002512; pan[22] = -.125;
  756. } else {
  757. top = log(1.0);
  758. bot = log(.0001);
  759. interval = (top - bot)/(dz->iparam[STAD_ECHOCNT] - 1);
  760. gain[0] = 1.0;
  761. for(n=1;n<(dz->iparam[STAD_ECHOCNT] - 1);n++) {
  762. top -= interval;
  763. gain[n] = exp(top);
  764. }
  765. gain[n] = .0001;
  766. for(n=0;n<dz->iparam[STAD_ECHOCNT];n++) {
  767. switch(n) {
  768. case(0): tdelay[0] = 0.000000; pan[0] = -1; break;
  769. case(1): tdelay[1] = 0.131832; pan[1] = 1; break;
  770. case(2): tdelay[2] = 0.215038; pan[2] = .5; break;
  771. case(3): tdelay[3] = 0.322274; pan[3] = -.5; break;
  772. case(4): tdelay[4] = 0.414122; pan[4] = 0; break;
  773. case(5): tdelay[5] = 0.504488; pan[5] = .7; break;
  774. case(6): tdelay[6] = 0.637713; pan[6] = -.7; break;
  775. case(7): tdelay[7] = 0.730468; pan[7] = .3; break;
  776. case(8): tdelay[8] = 0.808751; pan[8] = -.3; break;
  777. case(9): tdelay[9] = 0.910460; pan[9] = .15; break;
  778. case(10): tdelay[10] = 1.027041; pan[10] = -.15; break;
  779. case(11): tdelay[11] = 1.132028; pan[11] = .85; break;
  780. case(12): tdelay[12] = 1.244272; pan[12] = -.85; break;
  781. case(13): tdelay[13] = 1.336923; pan[13] = .4; break;
  782. case(14): tdelay[14] = 1.427700; pan[14] = -.4; break;
  783. case(15): tdelay[15] = 1.528503; pan[15] = .6; break;
  784. case(16): tdelay[16] = 1.618661; pan[16] = -.6; break;
  785. case(17): tdelay[17] = 1.715413; pan[17] = .225; break;
  786. case(18): tdelay[18] = 1.814730; pan[18] = -.225; break;
  787. case(19): tdelay[19] = 1.914843; pan[19] = .775; break;
  788. case(20): tdelay[20] = 2.000258; pan[20] = -.775; break;
  789. case(21): tdelay[21] = 2.135363; pan[21] = .125; break;
  790. case(22): tdelay[22] = 2.230554; pan[22] = -.125; break;
  791. case(23): tdelay[23] = 2.290000; pan[23] = -.65; break;
  792. case(24): tdelay[24] = 2.372498; pan[24] = .65; break;
  793. case(25): tdelay[25] = 2.445365; pan[25] = .35; break;
  794. case(26): tdelay[26] = 2.571897; pan[26] = -.35; break;
  795. case(27): tdelay[27] = 2.627656; pan[27] = -.1; break;
  796. case(28): tdelay[28] = 2.695809; pan[28] = .1; break;
  797. case(29): tdelay[29] = 2.758350; pan[29] = -.8; break;
  798. case(30): tdelay[30] = 2.880984; pan[30] = .8; break;
  799. case(31): tdelay[31] = 2.975910; pan[31] = -.55; break;
  800. case(32): tdelay[32] = 3.043894; pan[32] = .55; break;
  801. case(33): tdelay[33] = 3.143261; pan[33] = -.25; break;
  802. case(34): tdelay[34] = 3.268126; pan[34] = .25; break;
  803. case(35): tdelay[35] = 3.366093; pan[35] = -.45; break;
  804. case(36): tdelay[36] = 3.480461; pan[36] = .45; break;
  805. case(37): tdelay[37] = 3.577198; pan[37] = .05; break;
  806. case(38): tdelay[38] = 3.666871; pan[38] = -.9; break;
  807. case(39): tdelay[39] = 3.779061; pan[39] = -.05; break;
  808. case(40): tdelay[40] = 3.852884; pan[40] = .9; break;
  809. case(41): tdelay[41] = 3.966519; pan[41] = -.425; break;
  810. case(42): tdelay[42] = 4.043514; pan[42] = .425; break;
  811. case(43): tdelay[43] = 4.147562; pan[43] = .75; break;
  812. case(44): tdelay[44] = 4.241538; pan[44] = -.75; break;
  813. case(45): tdelay[45] = 4.358808; pan[45] = .275; break;
  814. case(46): tdelay[46] = 4.470554; pan[46] = -.275; break;
  815. case(47): tdelay[47] = 4.540000; pan[47] = -.625; break;
  816. case(48): tdelay[48] = 4.612729; pan[48] = .625; break;
  817. case(49): tdelay[49] = 4.693888; pan[49] = .375; break;
  818. case(50): tdelay[50] = 4.750479; pan[50] = -.375; break;
  819. case(51): tdelay[51] = 4.834122; pan[51] = -.116; break;
  820. case(52): tdelay[52] = 4.894456; pan[52] = .116; break;
  821. case(53): tdelay[53] = 4.978112; pan[53] = -.825; break;
  822. case(54): tdelay[54] = 5.107199; pan[54] = .825; break;
  823. case(55): tdelay[55] = 5.217554; pan[55] = -.535; break;
  824. case(56): tdelay[56] = 5.282567; pan[56] = .535; break;
  825. case(57): tdelay[57] = 5.387678; pan[57] = -.265; break;
  826. case(58): tdelay[58] = 5.493642; pan[58] = .265; break;
  827. case(59): tdelay[59] = 5.610009; pan[59] = -.475; break;
  828. case(60): tdelay[60] = 5.720302; pan[60] = .475; break;
  829. case(61): tdelay[61] = 5.818331; pan[61] = .11; break;
  830. case(62): tdelay[62] = 5.911186; pan[62] = -.77; break;
  831. case(63): tdelay[63] = 6.013019; pan[63] = -.11; break;
  832. case(64): tdelay[64] = 6.089382; pan[64] = .77; break;
  833. case(65): tdelay[65] = 6.192071; pan[65] = -.475; break;
  834. case(66): tdelay[66] = 6.288516; pan[66] = .475; break;
  835. case(67): tdelay[67] = 6.403337; pan[67] = .725; break;
  836. case(68): tdelay[68] = 6.474009; pan[68] = -.725; break;
  837. case(69): tdelay[69] = 6.613701; pan[69] = .235; break;
  838. case(70): tdelay[70] = 6.710554; pan[70] = -.235; break;
  839. case(71): tdelay[71] = 6.800000; pan[71] = -.685; break;
  840. case(72): tdelay[72] = 6.933349; pan[72] = .685; break;
  841. case(73): tdelay[73] = 7.032532; pan[73] = .315; break;
  842. case(74): tdelay[74] = 7.122216; pan[74] = -.315; break;
  843. case(75): tdelay[75] = 7.194122; pan[75] = -.136; break;
  844. case(76): tdelay[76] = 7.265021; pan[76] = .136; break;
  845. case(77): tdelay[77] = 7.358764; pan[77] = -.635; break;
  846. case(78): tdelay[78] = 7.445276; pan[78] = .635; break;
  847. case(79): tdelay[79] = 7.539293; pan[79] = -.435; break;
  848. case(80): tdelay[80] = 7.609978; pan[80] = .435; break;
  849. case(81): tdelay[81] = 7.710640; pan[81] = -.765; break;
  850. case(82): tdelay[82] = 7.831968; pan[82] = .765; break;
  851. case(83): tdelay[83] = 7.933759; pan[83] = -.575; break;
  852. case(84): tdelay[84] = 8.031102; pan[84] = .575; break;
  853. case(85): tdelay[85] = 8.120963; pan[85] = .215; break;
  854. case(86): tdelay[86] = 8.230907; pan[86] = -.692; break;
  855. case(87): tdelay[87] = 8.322181; pan[87] = -.215; break;
  856. case(88): tdelay[88] = 8.426997; pan[88] = .692; break;
  857. case(89): tdelay[89] = 8.531689; pan[89] = -.435; break;
  858. case(90): tdelay[90] = 8.607012; pan[90] = .435; break;
  859. case(91): tdelay[91] = 8.715148; pan[91] = .675; break;
  860. case(92): tdelay[92] = 8.803142; pan[92] = -.675; break;
  861. case(93): tdelay[93] = 8.951037; pan[93] = .265; break;
  862. case(94): tdelay[94] = 9.018695; pan[94] = -.265; break;
  863. case(95): tdelay[95] = 9.107151; pan[95] = -.555; break;
  864. case(96): tdelay[96] = 9.240962; pan[96] = .555; break;
  865. case(97): tdelay[97] = 9.312251; pan[97] = .333; break;
  866. case(98): tdelay[98] = 9.422676; pan[98] = -.333; break;
  867. case(99): tdelay[99] = 9.514122; pan[99] = 0.0; break;
  868. case(100): tdelay[100] = 9.637713; pan[100] = -1; break;
  869. case(101): tdelay[101] = 9.730468; pan[101] = 1; break;
  870. case(102): tdelay[102] = 9.808751; pan[102] = .5; break;
  871. case(103): tdelay[103] = 9.910460; pan[103] = -.5; break;
  872. case(104): tdelay[104] = 10.027041; pan[104] = 0; break;
  873. case(105): tdelay[105] = 10.132028; pan[105] = .7; break;
  874. case(106): tdelay[106] = 10.244272; pan[106] = -.7; break;
  875. case(107): tdelay[107] = 10.336923; pan[107] = .3; break;
  876. case(108): tdelay[108] = 10.427700; pan[108] = -.3; break;
  877. case(109): tdelay[109] = 10.528503; pan[109] = .15; break;
  878. case(110): tdelay[110] = 10.618661; pan[110] = -.15; break;
  879. case(111): tdelay[111] = 10.715413; pan[111] = .85; break;
  880. case(112): tdelay[112] = 10.814730; pan[112] = -.85; break;
  881. case(113): tdelay[113] = 10.914843; pan[113] = .4; break;
  882. case(114): tdelay[114] = 11.000258; pan[114] = -.4; break;
  883. case(115): tdelay[115] = 11.135363; pan[115] = .6; break;
  884. case(116): tdelay[116] = 11.230554; pan[116] = -.6; break;
  885. case(117): tdelay[117] = 11.290000; pan[117] = .225; break;
  886. case(118): tdelay[118] = 11.372498; pan[118] = -.225; break;
  887. case(119): tdelay[119] = 11.445365; pan[119] = .775; break;
  888. case(120): tdelay[120] = 11.571897; pan[120] = -.775; break;
  889. case(121): tdelay[121] = 11.627656; pan[121] = .125; break;
  890. case(122): tdelay[122] = 11.695809; pan[122] = -.125; break;
  891. case(123): tdelay[123] = 11.758350; pan[123] = -.65; break;
  892. case(124): tdelay[124] = 11.880984; pan[124] = .65; break;
  893. case(125): tdelay[125] = 11.975910; pan[125] = .35; break;
  894. case(126): tdelay[126] = 12.043894; pan[126] = -.35; break;
  895. case(127): tdelay[127] = 12.143261; pan[127] = -.1; break;
  896. case(128): tdelay[128] = 12.268126; pan[128] = .1; break;
  897. case(129): tdelay[129] = 12.366093; pan[129] = -.8; break;
  898. case(130): tdelay[130] = 12.480461; pan[130] = .8; break;
  899. case(131): tdelay[131] = 12.577198; pan[131] = -.55; break;
  900. case(132): tdelay[132] = 12.666871; pan[132] = .55; break;
  901. case(133): tdelay[133] = 12.779061; pan[133] = -.25; break;
  902. case(134): tdelay[134] = 12.852884; pan[134] = .25; break;
  903. case(135): tdelay[135] = 12.966519; pan[135] = -.45; break;
  904. case(136): tdelay[136] = 13.043514; pan[136] = .45; break;
  905. case(137): tdelay[137] = 13.147562; pan[137] = .05; break;
  906. case(138): tdelay[138] = 13.241538; pan[138] = -.9; break;
  907. case(139): tdelay[139] = 13.358808; pan[139] = -.05; break;
  908. case(140): tdelay[140] = 13.470554; pan[140] = .9; break;
  909. case(141): tdelay[141] = 13.540000; pan[141] = -.425; break;
  910. case(142): tdelay[142] = 13.612729; pan[142] = .425; break;
  911. case(143): tdelay[143] = 13.693888; pan[143] = .75; break;
  912. case(144): tdelay[144] = 13.750479; pan[144] = -.75; break;
  913. case(145): tdelay[145] = 13.834122; pan[145] = .275; break;
  914. case(146): tdelay[146] = 13.894456; pan[146] = -.275; break;
  915. case(147): tdelay[147] = 13.978112; pan[147] = -.625; break;
  916. case(148): tdelay[148] = 14.107199; pan[148] = .625; break;
  917. case(149): tdelay[149] = 14.217554; pan[149] = .375; break;
  918. case(150): tdelay[150] = 14.282567; pan[150] = -.375; break;
  919. case(151): tdelay[151] = 14.387678; pan[151] = -.116; break;
  920. case(152): tdelay[152] = 14.493642; pan[152] = .116; break;
  921. case(153): tdelay[153] = 14.610009; pan[153] = -.825; break;
  922. case(154): tdelay[154] = 14.720302; pan[154] = .825; break;
  923. case(155): tdelay[155] = 14.818331; pan[155] = -.535; break;
  924. case(156): tdelay[156] = 14.911186; pan[156] = .535; break;
  925. case(157): tdelay[157] = 15.013019; pan[157] = -.265; break;
  926. case(158): tdelay[158] = 15.089382; pan[158] = .265; break;
  927. case(159): tdelay[159] = 15.192071; pan[159] = -.475; break;
  928. case(160): tdelay[160] = 15.288516; pan[160] = .475; break;
  929. case(161): tdelay[161] = 15.403337; pan[161] = .11; break;
  930. case(162): tdelay[162] = 15.474009; pan[162] = -.77; break;
  931. case(163): tdelay[163] = 15.613701; pan[163] = -.11; break;
  932. case(164): tdelay[164] = 15.710554; pan[164] = .77; break;
  933. case(165): tdelay[165] = 15.800000; pan[165] = -.475; break;
  934. case(166): tdelay[166] = 15.933349; pan[166] = .475; break;
  935. case(167): tdelay[167] = 16.032532; pan[167] = .725; break;
  936. case(168): tdelay[168] = 16.122216; pan[168] = -.725; break;
  937. case(169): tdelay[169] = 16.194122; pan[169] = .235; break;
  938. case(170): tdelay[170] = 16.265021; pan[170] = -.235; break;
  939. case(171): tdelay[171] = 16.358764; pan[171] = -.685; break;
  940. case(172): tdelay[172] = 16.445276; pan[172] = .685; break;
  941. case(173): tdelay[173] = 16.539293; pan[173] = .315; break;
  942. case(174): tdelay[174] = 16.609978; pan[174] = -.315; break;
  943. case(175): tdelay[175] = 16.710640; pan[175] = -.136; break;
  944. case(176): tdelay[176] = 16.831968; pan[176] = .136; break;
  945. case(177): tdelay[177] = 16.933759; pan[177] = -.635; break;
  946. case(178): tdelay[178] = 17.031102; pan[178] = .635; break;
  947. case(179): tdelay[179] = 17.120963; pan[179] = -.435; break;
  948. case(180): tdelay[180] = 17.230907; pan[180] = .435; break;
  949. case(181): tdelay[181] = 17.322181; pan[181] = -.765; break;
  950. case(182): tdelay[182] = 17.426997; pan[182] = .765; break;
  951. case(183): tdelay[183] = 17.531689; pan[183] = -.575; break;
  952. case(184): tdelay[184] = 17.607012; pan[184] = .575; break;
  953. case(185): tdelay[185] = 17.715148; pan[185] = .215; break;
  954. case(186): tdelay[186] = 17.803142; pan[186] = -.692; break;
  955. case(187): tdelay[187] = 17.951037; pan[187] = -.215; break;
  956. case(188): tdelay[188] = 18.018695; pan[188] = .692; break;
  957. case(189): tdelay[189] = 18.107151; pan[189] = -.435; break;
  958. case(190): tdelay[190] = 18.240962; pan[190] = .435; break;
  959. case(191): tdelay[191] = 18.312251; pan[191] = .675; break;
  960. case(192): tdelay[192] = 18.422676; pan[192] = -.675; break;
  961. case(193): tdelay[193] = 18.514122; pan[193] = .265; break;
  962. case(194): tdelay[194] = 18.637713; pan[194] = -.265; break;
  963. case(195): tdelay[195] = 18.730468; pan[195] = -.555; break;
  964. case(196): tdelay[196] = 18.808751; pan[196] = .555; break;
  965. case(197): tdelay[197] = 18.910460; pan[197] = .333; break;
  966. case(198): tdelay[198] = 19.000000; pan[198] = -.333; break;
  967. case(199): tdelay[199] = 19.131832; pan[199] = 0.0; break;
  968. case(200): tdelay[200] = 19.215038; pan[200] = -1; break;
  969. case(201): tdelay[201] = 19.322274; pan[201] = 1; break;
  970. case(202): tdelay[202] = 19.414122; pan[202] = .5; break;
  971. case(203): tdelay[203] = 19.504488; pan[203] = -.5; break;
  972. case(204): tdelay[204] = 19.637713; pan[204] = 0; break;
  973. case(205): tdelay[205] = 19.730468; pan[205] = .7; break;
  974. case(206): tdelay[206] = 19.808751; pan[206] = -.7; break;
  975. case(207): tdelay[207] = 19.910460; pan[207] = .3; break;
  976. case(208): tdelay[208] = 20.027041; pan[208] = -.3; break;
  977. case(209): tdelay[209] = 20.132028; pan[209] = .15; break;
  978. case(210): tdelay[210] = 20.244272; pan[210] = -.15; break;
  979. case(211): tdelay[211] = 20.336923; pan[211] = .85; break;
  980. case(212): tdelay[212] = 20.427700; pan[212] = -.85; break;
  981. case(213): tdelay[213] = 20.528503; pan[213] = .4; break;
  982. case(214): tdelay[214] = 20.618661; pan[214] = -.4; break;
  983. case(215): tdelay[215] = 20.715413; pan[215] = .6; break;
  984. case(216): tdelay[216] = 20.814730; pan[216] = -.6; break;
  985. case(217): tdelay[217] = 20.914843; pan[217] = .225; break;
  986. case(218): tdelay[218] = 21.000258; pan[218] = -.225; break;
  987. case(219): tdelay[219] = 21.135363; pan[219] = .775; break;
  988. case(220): tdelay[220] = 21.230554; pan[220] = -.775; break;
  989. case(221): tdelay[221] = 21.290000; pan[221] = .125; break;
  990. case(222): tdelay[222] = 21.372498; pan[222] = -.125; break;
  991. case(223): tdelay[223] = 21.445365; pan[223] = -.65; break;
  992. case(224): tdelay[224] = 21.571897; pan[224] = .65; break;
  993. case(225): tdelay[225] = 21.627656; pan[225] = .35; break;
  994. case(226): tdelay[226] = 21.695809; pan[226] = -.35; break;
  995. case(227): tdelay[227] = 21.758350; pan[227] = -.1; break;
  996. case(228): tdelay[228] = 21.880984; pan[228] = .1; break;
  997. case(229): tdelay[229] = 21.975910; pan[229] = -.8; break;
  998. case(230): tdelay[230] = 22.043894; pan[230] = .8; break;
  999. case(231): tdelay[231] = 22.143261; pan[231] = -.55; break;
  1000. case(232): tdelay[232] = 22.268126; pan[232] = .55; break;
  1001. case(233): tdelay[233] = 22.366093; pan[233] = -.25; break;
  1002. case(234): tdelay[234] = 22.480461; pan[234] = .25; break;
  1003. case(235): tdelay[235] = 22.577198; pan[235] = -.45; break;
  1004. case(236): tdelay[236] = 22.666871; pan[236] = .45; break;
  1005. case(237): tdelay[237] = 22.779061; pan[237] = .05; break;
  1006. case(238): tdelay[238] = 22.852884; pan[238] = -.9; break;
  1007. case(239): tdelay[239] = 22.966519; pan[239] = -.05; break;
  1008. case(240): tdelay[240] = 23.043514; pan[240] = .9; break;
  1009. case(241): tdelay[241] = 23.147562; pan[241] = -.425; break;
  1010. case(242): tdelay[242] = 23.241538; pan[242] = .425; break;
  1011. case(243): tdelay[243] = 23.358808; pan[243] = .75; break;
  1012. case(244): tdelay[244] = 23.470554; pan[244] = -.75; break;
  1013. case(245): tdelay[245] = 23.540000; pan[245] = .275; break;
  1014. case(246): tdelay[246] = 23.612729; pan[246] = -.275; break;
  1015. case(247): tdelay[247] = 23.693888; pan[247] = -.625; break;
  1016. case(248): tdelay[248] = 23.750479; pan[248] = .625; break;
  1017. case(249): tdelay[249] = 23.834122; pan[249] = .375; break;
  1018. case(250): tdelay[250] = 23.894456; pan[250] = -.375; break;
  1019. case(251): tdelay[251] = 23.978112; pan[251] = -.116; break;
  1020. case(252): tdelay[252] = 24.107199; pan[252] = .116; break;
  1021. case(253): tdelay[253] = 24.217554; pan[253] = -.825; break;
  1022. case(254): tdelay[254] = 24.282567; pan[254] = .825; break;
  1023. case(255): tdelay[255] = 24.387678; pan[255] = -.535; break;
  1024. case(256): tdelay[256] = 24.493642; pan[256] = .535; break;
  1025. case(257): tdelay[257] = 24.610009; pan[257] = -.265; break;
  1026. case(258): tdelay[258] = 24.720302; pan[258] = .265; break;
  1027. case(259): tdelay[259] = 24.818331; pan[259] = -.475; break;
  1028. case(260): tdelay[260] = 24.911186; pan[260] = .475; break;
  1029. case(261): tdelay[261] = 25.013019; pan[261] = .11; break;
  1030. case(262): tdelay[262] = 25.089382; pan[262] = -.77; break;
  1031. case(263): tdelay[263] = 25.192071; pan[263] = -.11; break;
  1032. case(264): tdelay[264] = 25.288516; pan[264] = .77; break;
  1033. case(265): tdelay[265] = 25.403337; pan[265] = -.475; break;
  1034. case(266): tdelay[266] = 25.474009; pan[266] = .475; break;
  1035. case(267): tdelay[267] = 25.613701; pan[267] = .725; break;
  1036. case(268): tdelay[268] = 25.710554; pan[268] = -.725; break;
  1037. case(269): tdelay[269] = 25.800000; pan[269] = .235; break;
  1038. case(270): tdelay[270] = 25.933349; pan[270] = -.235; break;
  1039. case(271): tdelay[271] = 26.032532; pan[271] = -.685; break;
  1040. case(272): tdelay[272] = 26.122216; pan[272] = .685; break;
  1041. case(273): tdelay[273] = 26.194122; pan[273] = .315; break;
  1042. case(274): tdelay[274] = 26.265021; pan[274] = -.315; break;
  1043. case(275): tdelay[275] = 26.358764; pan[275] = -.136; break;
  1044. case(276): tdelay[276] = 26.445276; pan[276] = .136; break;
  1045. case(277): tdelay[277] = 26.539293; pan[277] = -.635; break;
  1046. case(278): tdelay[278] = 26.609978; pan[278] = .635; break;
  1047. case(279): tdelay[279] = 26.710640; pan[279] = -.435; break;
  1048. case(280): tdelay[280] = 26.831968; pan[280] = .435; break;
  1049. case(281): tdelay[281] = 26.933759; pan[281] = -.765; break;
  1050. case(282): tdelay[282] = 27.031102; pan[282] = .765; break;
  1051. case(283): tdelay[283] = 27.120963; pan[283] = -.575; break;
  1052. case(284): tdelay[284] = 27.230907; pan[284] = .575; break;
  1053. case(285): tdelay[285] = 27.322181; pan[285] = .215; break;
  1054. case(286): tdelay[286] = 27.426997; pan[286] = -.692; break;
  1055. case(287): tdelay[287] = 27.531689; pan[287] = -.215; break;
  1056. case(288): tdelay[288] = 27.607012; pan[288] = .692; break;
  1057. case(289): tdelay[289] = 27.715148; pan[289] = -.435; break;
  1058. case(290): tdelay[290] = 27.803142; pan[290] = .435; break;
  1059. case(291): tdelay[291] = 27.951037; pan[291] = .675; break;
  1060. case(292): tdelay[292] = 28.018695; pan[292] = -.675; break;
  1061. case(293): tdelay[293] = 28.107151; pan[293] = .265; break;
  1062. case(294): tdelay[294] = 28.240962; pan[294] = -.265; break;
  1063. case(295): tdelay[295] = 28.312251; pan[295] = -.555; break;
  1064. case(296): tdelay[296] = 28.422676; pan[296] = -.333; break;
  1065. case(297): tdelay[297] = 28.514122; pan[297] = 0.0; break;
  1066. case(298): tdelay[298] = 28.637713; pan[298] = -1; break;
  1067. case(299): tdelay[299] = 28.730468; pan[299] = 1; break;
  1068. case(300): tdelay[300] = 28.808751; pan[300] = .5; break;
  1069. case(301): tdelay[301] = 28.910460; pan[301] = -.5; break;
  1070. case(302): tdelay[302] = 29.027041; pan[302] = 0; break;
  1071. case(303): tdelay[303] = 29.132028; pan[303] = .7; break;
  1072. case(304): tdelay[304] = 29.244272; pan[304] = -.7; break;
  1073. case(305): tdelay[305] = 29.336923; pan[305] = .3; break;
  1074. case(306): tdelay[306] = 29.427700; pan[306] = -.3; break;
  1075. case(307): tdelay[307] = 29.528503; pan[307] = .15; break;
  1076. case(308): tdelay[308] = 29.618661; pan[308] = -.15; break;
  1077. case(309): tdelay[309] = 29.715413; pan[309] = .85; break;
  1078. case(310): tdelay[310] = 29.814730; pan[310] = -.85; break;
  1079. case(311): tdelay[311] = 29.914843; pan[311] = .4; break;
  1080. case(312): tdelay[312] = 30.000258; pan[312] = -.4; break;
  1081. case(313): tdelay[313] = 30.135363; pan[313] = .6; break;
  1082. case(314): tdelay[314] = 30.230554; pan[314] = -.6; break;
  1083. case(315): tdelay[315] = 30.290000; pan[315] = .225; break;
  1084. case(316): tdelay[316] = 30.372498; pan[316] = -.225; break;
  1085. case(317): tdelay[317] = 30.445365; pan[317] = .775; break;
  1086. case(318): tdelay[318] = 30.571897; pan[318] = -.775; break;
  1087. case(319): tdelay[319] = 30.627656; pan[319] = .125; break;
  1088. case(320): tdelay[320] = 30.695809; pan[320] = -.125; break;
  1089. case(321): tdelay[321] = 30.758350; pan[321] = -.65; break;
  1090. case(322): tdelay[322] = 30.880984; pan[322] = .65; break;
  1091. case(323): tdelay[323] = 30.975910; pan[323] = .35; break;
  1092. case(324): tdelay[324] = 31.043894; pan[324] = -.35; break;
  1093. case(325): tdelay[325] = 31.143261; pan[325] = -.1; break;
  1094. case(326): tdelay[326] = 31.268126; pan[326] = .1; break;
  1095. case(327): tdelay[327] = 31.366093; pan[327] = -.8; break;
  1096. case(328): tdelay[328] = 31.480461; pan[328] = .8; break;
  1097. case(329): tdelay[329] = 31.577198; pan[329] = -.55; break;
  1098. case(330): tdelay[330] = 31.666871; pan[330] = .55; break;
  1099. case(331): tdelay[331] = 31.779061; pan[331] = -.25; break;
  1100. case(332): tdelay[332] = 31.852884; pan[332] = .25; break;
  1101. case(333): tdelay[333] = 31.966519; pan[333] = -.45; break;
  1102. case(334): tdelay[334] = 32.043514; pan[334] = .45; break;
  1103. case(335): tdelay[335] = 32.147562; pan[335] = .05; break;
  1104. case(336): tdelay[336] = 32.241538; pan[336] = -.9; break;
  1105. case(337): tdelay[337] = 32.358808; pan[337] = -.05; break;
  1106. case(338): tdelay[338] = 32.470554; pan[338] = .9; break;
  1107. case(339): tdelay[339] = 32.540000; pan[339] = -.425; break;
  1108. case(340): tdelay[340] = 32.612729; pan[340] = .425; break;
  1109. case(341): tdelay[341] = 32.693888; pan[341] = .75; break;
  1110. case(342): tdelay[342] = 32.750479; pan[342] = -.75; break;
  1111. case(343): tdelay[343] = 32.834122; pan[343] = .275; break;
  1112. case(344): tdelay[344] = 32.894456; pan[344] = -.275; break;
  1113. case(345): tdelay[345] = 32.978112; pan[345] = -.625; break;
  1114. case(346): tdelay[346] = 33.107199; pan[346] = .625; break;
  1115. case(347): tdelay[347] = 33.217554; pan[347] = .375; break;
  1116. case(348): tdelay[348] = 33.282567; pan[348] = -.375; break;
  1117. case(349): tdelay[349] = 33.387678; pan[349] = -.116; break;
  1118. case(350): tdelay[350] = 33.493642; pan[350] = .116; break;
  1119. case(351): tdelay[351] = 33.610009; pan[351] = -.825; break;
  1120. case(352): tdelay[352] = 33.720302; pan[352] = .825; break;
  1121. case(353): tdelay[353] = 33.818331; pan[353] = -.535; break;
  1122. case(354): tdelay[354] = 33.911186; pan[354] = .535; break;
  1123. case(355): tdelay[355] = 34.013019; pan[355] = -.265; break;
  1124. case(356): tdelay[356] = 34.089382; pan[356] = .265; break;
  1125. case(357): tdelay[357] = 34.192071; pan[357] = -.475; break;
  1126. case(358): tdelay[358] = 34.288516; pan[358] = .475; break;
  1127. case(359): tdelay[359] = 34.403337; pan[359] = .11; break;
  1128. case(360): tdelay[360] = 34.474009; pan[360] = -.77; break;
  1129. case(361): tdelay[361] = 34.613701; pan[361] = -.11; break;
  1130. case(362): tdelay[362] = 34.710554; pan[362] = .77; break;
  1131. case(363): tdelay[363] = 34.800000; pan[363] = -.475; break;
  1132. case(364): tdelay[364] = 34.933349; pan[364] = .475; break;
  1133. case(365): tdelay[365] = 35.032532; pan[365] = .725; break;
  1134. case(366): tdelay[366] = 35.122216; pan[366] = -.725; break;
  1135. case(367): tdelay[367] = 35.194122; pan[367] = .235; break;
  1136. case(368): tdelay[368] = 35.265021; pan[368] = -.235; break;
  1137. case(369): tdelay[369] = 35.358764; pan[369] = -.685; break;
  1138. case(370): tdelay[370] = 35.445276; pan[370] = .685; break;
  1139. case(371): tdelay[371] = 35.539293; pan[371] = .315; break;
  1140. case(372): tdelay[372] = 35.609978; pan[372] = -.315; break;
  1141. case(373): tdelay[373] = 35.710640; pan[373] = -.136; break;
  1142. case(374): tdelay[374] = 35.831968; pan[374] = .136; break;
  1143. case(375): tdelay[375] = 35.933759; pan[375] = -.635; break;
  1144. case(376): tdelay[376] = 36.031102; pan[376] = .635; break;
  1145. case(377): tdelay[377] = 36.120963; pan[377] = -.435; break;
  1146. case(378): tdelay[378] = 36.230907; pan[378] = .435; break;
  1147. case(379): tdelay[379] = 36.322181; pan[379] = -.765; break;
  1148. case(380): tdelay[380] = 36.426997; pan[380] = .765; break;
  1149. case(381): tdelay[381] = 36.531689; pan[381] = -.575; break;
  1150. case(382): tdelay[382] = 36.607012; pan[382] = .575; break;
  1151. case(383): tdelay[383] = 36.715148; pan[383] = .215; break;
  1152. case(384): tdelay[384] = 36.803142; pan[384] = -.692; break;
  1153. case(385): tdelay[385] = 36.951037; pan[385] = -.215; break;
  1154. case(386): tdelay[386] = 37.088695; pan[386] = .692; break;
  1155. case(387): tdelay[387] = 37.240962; pan[387] = -.435; break;
  1156. case(388): tdelay[388] = 37.312251; pan[388] = .435; break;
  1157. case(389): tdelay[389] = 37.422676; pan[389] = .675; break;
  1158. case(390): tdelay[390] = 37.514122; pan[390] = -.675; break;
  1159. case(391): tdelay[391] = 37.637713; pan[391] = .265; break;
  1160. case(392): tdelay[392] = 37.730468; pan[392] = -.265; break;
  1161. case(393): tdelay[393] = 37.808751; pan[393] = -.555; break;
  1162. case(394): tdelay[394] = 37.910460; pan[394] = .555; break;
  1163. case(395): tdelay[395] = 38.000000; pan[395] = .333; break;
  1164. case(396): tdelay[396] = 38.131832; pan[396] = -.333; break;
  1165. case(397): tdelay[397] = 38.215038; pan[397] = 0.0; break;
  1166. case(398): tdelay[398] = 38.322274; pan[398] = -1; break;
  1167. case(399): tdelay[399] = 38.414122; pan[399] = 1; break;
  1168. case(400): tdelay[400] = 38.504488; pan[400] = .5; break;
  1169. case(401): tdelay[401] = 38.637713; pan[401] = -.5; break;
  1170. case(402): tdelay[402] = 38.730468; pan[402] = 0; break;
  1171. case(403): tdelay[403] = 38.808751; pan[403] = .7; break;
  1172. case(404): tdelay[404] = 38.910460; pan[404] = -.7; break;
  1173. case(405): tdelay[405] = 39.027041; pan[405] = .3; break;
  1174. case(406): tdelay[406] = 39.132028; pan[406] = -.3; break;
  1175. case(407): tdelay[407] = 39.244272; pan[407] = .15; break;
  1176. case(408): tdelay[408] = 39.336923; pan[408] = -.15; break;
  1177. case(409): tdelay[409] = 39.427700; pan[409] = .85; break;
  1178. case(410): tdelay[410] = 39.528503; pan[410] = -.85; break;
  1179. case(411): tdelay[411] = 39.618661; pan[411] = .4; break;
  1180. case(412): tdelay[412] = 39.715413; pan[412] = -.4; break;
  1181. case(413): tdelay[413] = 39.814730; pan[413] = .6; break;
  1182. case(414): tdelay[414] = 39.914843; pan[414] = -.6; break;
  1183. case(415): tdelay[415] = 40.000258; pan[415] = .225; break;
  1184. case(416): tdelay[416] = 40.135363; pan[416] = -.225; break;
  1185. case(417): tdelay[417] = 40.230554; pan[417] = .775; break;
  1186. case(418): tdelay[418] = 40.290000; pan[418] = -.775; break;
  1187. case(419): tdelay[419] = 40.372498; pan[419] = .125; break;
  1188. case(420): tdelay[420] = 40.445365; pan[420] = -.125; break;
  1189. case(421): tdelay[421] = 40.571897; pan[421] = -.65; break;
  1190. case(422): tdelay[422] = 40.627656; pan[422] = .65; break;
  1191. case(423): tdelay[423] = 40.695809; pan[423] = .35; break;
  1192. case(424): tdelay[424] = 40.758350; pan[424] = -.35; break;
  1193. case(425): tdelay[425] = 40.880984; pan[425] = -.1; break;
  1194. case(426): tdelay[426] = 40.975910; pan[426] = .1; break;
  1195. case(427): tdelay[427] = 41.043894; pan[427] = -.8; break;
  1196. case(428): tdelay[428] = 41.143261; pan[428] = .8; break;
  1197. case(429): tdelay[429] = 41.268126; pan[429] = -.55; break;
  1198. case(430): tdelay[430] = 41.366093; pan[430] = .55; break;
  1199. case(431): tdelay[431] = 41.480461; pan[431] = -.25; break;
  1200. case(432): tdelay[432] = 41.577198; pan[432] = .25; break;
  1201. case(433): tdelay[433] = 41.666871; pan[433] = -.45; break;
  1202. case(434): tdelay[434] = 41.779061; pan[434] = .45; break;
  1203. case(435): tdelay[435] = 41.852884; pan[435] = .05; break;
  1204. case(436): tdelay[436] = 41.966519; pan[436] = -.9; break;
  1205. case(437): tdelay[437] = 42.043514; pan[437] = -.05; break;
  1206. case(438): tdelay[438] = 42.147562; pan[438] = .9; break;
  1207. case(439): tdelay[439] = 42.241538; pan[439] = -.425; break;
  1208. case(440): tdelay[440] = 42.358808; pan[440] = .425; break;
  1209. case(441): tdelay[441] = 42.470554; pan[441] = .75; break;
  1210. case(442): tdelay[442] = 42.540000; pan[442] = -.75; break;
  1211. case(443): tdelay[443] = 42.612729; pan[443] = .275; break;
  1212. case(444): tdelay[444] = 42.693888; pan[444] = -.275; break;
  1213. case(445): tdelay[445] = 42.750479; pan[445] = -.625; break;
  1214. case(446): tdelay[446] = 42.834122; pan[446] = .625; break;
  1215. case(447): tdelay[447] = 42.894456; pan[447] = .375; break;
  1216. case(448): tdelay[448] = 42.978112; pan[448] = -.375; break;
  1217. case(449): tdelay[449] = 43.107199; pan[449] = -.116; break;
  1218. case(450): tdelay[450] = 43.217554; pan[450] = .116; break;
  1219. case(451): tdelay[451] = 43.282567; pan[451] = -.825; break;
  1220. case(452): tdelay[452] = 43.387678; pan[452] = .825; break;
  1221. case(453): tdelay[453] = 43.493642; pan[453] = -.535; break;
  1222. case(454): tdelay[454] = 43.610009; pan[454] = .535; break;
  1223. case(455): tdelay[455] = 43.720302; pan[455] = -.265; break;
  1224. case(456): tdelay[456] = 43.818331; pan[456] = .265; break;
  1225. case(457): tdelay[457] = 43.911186; pan[457] = -.475; break;
  1226. case(458): tdelay[458] = 44.013019; pan[458] = .475; break;
  1227. case(459): tdelay[459] = 44.089382; pan[459] = .11; break;
  1228. case(460): tdelay[460] = 44.192071; pan[460] = -.77; break;
  1229. case(461): tdelay[461] = 44.288516; pan[461] = -.11; break;
  1230. case(462): tdelay[462] = 44.403337; pan[462] = .77; break;
  1231. case(463): tdelay[463] = 44.474009; pan[463] = -.475; break;
  1232. case(464): tdelay[464] = 44.613701; pan[464] = .475; break;
  1233. case(465): tdelay[465] = 44.710554; pan[465] = .725; break;
  1234. case(466): tdelay[466] = 44.800000; pan[466] = -.725; break;
  1235. case(467): tdelay[467] = 44.933349; pan[467] = .235; break;
  1236. case(468): tdelay[468] = 45.032532; pan[468] = -.235; break;
  1237. case(469): tdelay[469] = 45.122216; pan[469] = -.685; break;
  1238. case(470): tdelay[470] = 45.194122; pan[470] = .685; break;
  1239. case(471): tdelay[471] = 45.265021; pan[471] = .315; break;
  1240. case(472): tdelay[472] = 45.358764; pan[472] = -.315; break;
  1241. case(473): tdelay[473] = 45.445276; pan[473] = -.136; break;
  1242. case(474): tdelay[474] = 45.539293; pan[474] = .136; break;
  1243. case(475): tdelay[475] = 45.609978; pan[475] = -.635; break;
  1244. case(476): tdelay[476] = 45.710640; pan[476] = .635; break;
  1245. case(477): tdelay[477] = 45.831968; pan[477] = -.435; break;
  1246. case(478): tdelay[478] = 45.933759; pan[478] = .435; break;
  1247. case(479): tdelay[479] = 46.031102; pan[479] = -.765; break;
  1248. case(480): tdelay[480] = 46.120963; pan[480] = .765; break;
  1249. case(481): tdelay[481] = 46.230907; pan[481] = -.575; break;
  1250. case(482): tdelay[482] = 46.322181; pan[482] = .575; break;
  1251. case(483): tdelay[483] = 46.426997; pan[483] = .215; break;
  1252. case(484): tdelay[484] = 46.531689; pan[484] = -.692; break;
  1253. case(485): tdelay[485] = 46.607012; pan[485] = -.215; break;
  1254. case(486): tdelay[486] = 46.715148; pan[486] = .692; break;
  1255. case(487): tdelay[487] = 46.803142; pan[487] = -.435; break;
  1256. case(488): tdelay[488] = 46.951037; pan[488] = .435; break;
  1257. case(489): tdelay[489] = 47.018695; pan[489] = .675; break;
  1258. case(490): tdelay[490] = 47.107151; pan[490] = -.675; break;
  1259. case(491): tdelay[491] = 47.240962; pan[491] = .265; break;
  1260. case(492): tdelay[492] = 47.312251; pan[492] = -.265; break;
  1261. case(493): tdelay[493] = 47.422676; pan[493] = -.555; break;
  1262. case(494): tdelay[494] = 47.514122; pan[494] = .555; break;
  1263. case(495): tdelay[495] = 47.637713; pan[495] = .333; break;
  1264. case(496): tdelay[496] = 47.730468; pan[496] = -.333; break;
  1265. case(497): tdelay[497] = 47.808751; pan[497] = 0.0; break;
  1266. case(498): tdelay[498] = 47.910460; pan[498] = -1; break;
  1267. case(499): tdelay[499] = 48.027041; pan[499] = 1; break;
  1268. case(500): tdelay[500] = 48.132028; pan[500] = .5; break;
  1269. case(501): tdelay[501] = 48.244272; pan[501] = -.5; break;
  1270. case(502): tdelay[502] = 48.336923; pan[502] = 0; break;
  1271. case(503): tdelay[503] = 48.427700; pan[503] = .7; break;
  1272. case(504): tdelay[504] = 48.528503; pan[504] = -.7; break;
  1273. case(505): tdelay[505] = 48.618661; pan[505] = .3; break;
  1274. case(506): tdelay[506] = 48.715413; pan[506] = -.3; break;
  1275. case(507): tdelay[507] = 48.814730; pan[507] = .15; break;
  1276. case(508): tdelay[508] = 48.914843; pan[508] = -.15; break;
  1277. case(509): tdelay[509] = 49.000258; pan[509] = .85; break;
  1278. case(510): tdelay[510] = 49.135363; pan[510] = -.85; break;
  1279. case(511): tdelay[511] = 49.230554; pan[511] = .4; break;
  1280. case(512): tdelay[512] = 49.290000; pan[512] = -.4; break;
  1281. case(513): tdelay[513] = 49.372498; pan[513] = .6; break;
  1282. case(514): tdelay[514] = 49.445365; pan[514] = -.6; break;
  1283. case(515): tdelay[515] = 49.571897; pan[515] = .225; break;
  1284. case(516): tdelay[516] = 49.627656; pan[516] = -.225; break;
  1285. case(517): tdelay[517] = 49.695809; pan[517] = .775; break;
  1286. case(518): tdelay[518] = 49.758350; pan[518] = -.775; break;
  1287. case(519): tdelay[519] = 49.880984; pan[519] = .125; break;
  1288. case(520): tdelay[520] = 49.975910; pan[520] = -.125; break;
  1289. case(521): tdelay[521] = 50.043894; pan[521] = -.65; break;
  1290. case(522): tdelay[522] = 50.143261; pan[522] = .65; break;
  1291. case(523): tdelay[523] = 50.268126; pan[523] = .35; break;
  1292. case(524): tdelay[524] = 50.366093; pan[524] = -.35; break;
  1293. case(525): tdelay[525] = 50.480461; pan[525] = -.1; break;
  1294. case(526): tdelay[526] = 50.577198; pan[526] = .1; break;
  1295. case(527): tdelay[527] = 50.666871; pan[527] = -.8; break;
  1296. case(528): tdelay[528] = 50.779061; pan[528] = .8; break;
  1297. case(529): tdelay[529] = 50.852884; pan[529] = -.55; break;
  1298. case(530): tdelay[530] = 50.966519; pan[530] = .55; break;
  1299. case(531): tdelay[531] = 51.043514; pan[531] = -.25; break;
  1300. case(532): tdelay[532] = 51.147562; pan[532] = .25; break;
  1301. case(533): tdelay[533] = 51.241538; pan[533] = -.45; break;
  1302. case(534): tdelay[534] = 51.358808; pan[534] = .45; break;
  1303. case(535): tdelay[535] = 51.470554; pan[535] = .05; break;
  1304. case(536): tdelay[536] = 51.540000; pan[536] = -.9; break;
  1305. case(537): tdelay[537] = 51.612729; pan[537] = -.05; break;
  1306. case(538): tdelay[538] = 51.693888; pan[538] = .9; break;
  1307. case(539): tdelay[539] = 51.750479; pan[539] = -.425; break;
  1308. case(540): tdelay[540] = 51.834122; pan[540] = .425; break;
  1309. case(541): tdelay[541] = 51.894456; pan[541] = .75; break;
  1310. case(542): tdelay[542] = 51.978112; pan[542] = -.75; break;
  1311. case(543): tdelay[543] = 52.107199; pan[543] = .275; break;
  1312. case(544): tdelay[544] = 52.217554; pan[544] = -.275; break;
  1313. case(545): tdelay[545] = 52.282567; pan[545] = -.625; break;
  1314. case(546): tdelay[546] = 52.387678; pan[546] = .625; break;
  1315. case(547): tdelay[547] = 52.493642; pan[547] = .375; break;
  1316. case(548): tdelay[548] = 52.610009; pan[548] = -.375; break;
  1317. case(549): tdelay[549] = 52.720302; pan[549] = -.116; break;
  1318. case(550): tdelay[550] = 52.818331; pan[550] = .116; break;
  1319. case(551): tdelay[551] = 52.911186; pan[551] = -.825; break;
  1320. case(552): tdelay[552] = 53.013019; pan[552] = .825; break;
  1321. case(553): tdelay[553] = 53.089382; pan[553] = -.535; break;
  1322. case(554): tdelay[554] = 53.192071; pan[554] = .535; break;
  1323. case(555): tdelay[555] = 53.288516; pan[555] = -.265; break;
  1324. case(556): tdelay[556] = 53.403337; pan[556] = .265; break;
  1325. case(557): tdelay[557] = 53.474009; pan[557] = -.475; break;
  1326. case(558): tdelay[558] = 53.613701; pan[558] = .475; break;
  1327. case(559): tdelay[559] = 53.710554; pan[559] = .11; break;
  1328. case(560): tdelay[560] = 53.800000; pan[560] = -.77; break;
  1329. case(561): tdelay[561] = 53.933349; pan[561] = -.11; break;
  1330. case(562): tdelay[562] = 54.032532; pan[562] = .77; break;
  1331. case(563): tdelay[563] = 54.122216; pan[563] = -.475; break;
  1332. case(564): tdelay[564] = 54.194122; pan[564] = .475; break;
  1333. case(565): tdelay[565] = 54.265021; pan[565] = .725; break;
  1334. case(566): tdelay[566] = 54.358764; pan[566] = -.725; break;
  1335. case(567): tdelay[567] = 54.445276; pan[567] = .235; break;
  1336. case(568): tdelay[568] = 54.539293; pan[568] = -.235; break;
  1337. case(569): tdelay[569] = 54.609978; pan[569] = -.685; break;
  1338. case(570): tdelay[570] = 54.710640; pan[570] = .685; break;
  1339. case(571): tdelay[571] = 54.831968; pan[571] = .315; break;
  1340. case(572): tdelay[572] = 54.933759; pan[572] = -.315; break;
  1341. case(573): tdelay[573] = 55.031102; pan[573] = -.136; break;
  1342. case(574): tdelay[574] = 55.120963; pan[574] = .136; break;
  1343. case(575): tdelay[575] = 55.230907; pan[575] = -.635; break;
  1344. case(576): tdelay[576] = 55.322181; pan[576] = .635; break;
  1345. case(577): tdelay[577] = 55.426997; pan[577] = -.435; break;
  1346. case(578): tdelay[578] = 55.531689; pan[578] = .435; break;
  1347. case(579): tdelay[579] = 55.607012; pan[579] = -.765; break;
  1348. case(580): tdelay[580] = 55.715148; pan[580] = .765; break;
  1349. case(581): tdelay[581] = 55.803142; pan[581] = -.575; break;
  1350. case(582): tdelay[582] = 55.951037; pan[582] = .575; break;
  1351. case(583): tdelay[583] = 56.018695; pan[583] = .215; break;
  1352. case(584): tdelay[584] = 56.107151; pan[584] = -.692; break;
  1353. case(585): tdelay[585] = 56.240962; pan[585] = -.215; break;
  1354. case(586): tdelay[586] = 56.312251; pan[586] = .692; break;
  1355. case(587): tdelay[587] = 56.422676; pan[587] = -.435; break;
  1356. case(588): tdelay[588] = 56.514122; pan[588] = .435; break;
  1357. case(589): tdelay[589] = 56.637713; pan[589] = .675; break;
  1358. case(590): tdelay[590] = 56.730468; pan[590] = -.675; break;
  1359. case(591): tdelay[591] = 56.808751; pan[591] = .265; break;
  1360. case(592): tdelay[592] = 56.910460; pan[592] = -.265; break;
  1361. case(593): tdelay[593] = 57.027041; pan[593] = -.555; break;
  1362. case(594): tdelay[594] = 57.132028; pan[594] = .555; break;
  1363. case(595): tdelay[595] = 57.244272; pan[595] = .333; break;
  1364. case(596): tdelay[596] = 57.336923; pan[596] = -.333; break;
  1365. case(597): tdelay[597] = 57.427700; pan[597] = 0.0; break;
  1366. case(598): tdelay[598] = 57.528503; pan[598] = -1; break;
  1367. case(599): tdelay[599] = 57.618661; pan[599] = 1; break;
  1368. case(600): tdelay[600] = 57.715413; pan[600] = .5; break;
  1369. case(601): tdelay[601] = 57.814730; pan[601] = -.5; break;
  1370. case(602): tdelay[602] = 57.914843; pan[602] = 0; break;
  1371. case(603): tdelay[603] = 58.000258; pan[603] = .7; break;
  1372. case(604): tdelay[604] = 58.135363; pan[604] = -.7; break;
  1373. case(605): tdelay[605] = 58.230554; pan[605] = .3; break;
  1374. case(606): tdelay[606] = 58.290000; pan[606] = -.3; break;
  1375. case(607): tdelay[607] = 58.372498; pan[607] = .15; break;
  1376. case(608): tdelay[608] = 58.445365; pan[608] = -.15; break;
  1377. case(609): tdelay[609] = 58.571897; pan[609] = .85; break;
  1378. case(610): tdelay[610] = 58.627656; pan[610] = -.85; break;
  1379. case(611): tdelay[611] = 58.695809; pan[611] = .4; break;
  1380. case(612): tdelay[612] = 58.758350; pan[612] = -.4; break;
  1381. case(613): tdelay[613] = 58.880984; pan[613] = .6; break;
  1382. case(614): tdelay[614] = 58.975910; pan[614] = -.6; break;
  1383. case(615): tdelay[615] = 59.043894; pan[615] = .225; break;
  1384. case(616): tdelay[616] = 59.143261; pan[616] = -.225; break;
  1385. case(617): tdelay[617] = 59.268126; pan[617] = .775; break;
  1386. case(618): tdelay[618] = 59.366093; pan[618] = -.775; break;
  1387. case(619): tdelay[619] = 59.480461; pan[619] = .125; break;
  1388. case(620): tdelay[620] = 59.577198; pan[620] = -.125; break;
  1389. case(621): tdelay[621] = 59.666871; pan[621] = -.65; break;
  1390. case(622): tdelay[622] = 59.779061; pan[622] = .65; break;
  1391. case(623): tdelay[623] = 59.852884; pan[623] = .35; break;
  1392. case(624): tdelay[624] = 59.966519; pan[624] = -.35; break;
  1393. case(625): tdelay[625] = 60.043514; pan[625] = -.1; break;
  1394. case(626): tdelay[626] = 60.147562; pan[626] = .1; break;
  1395. case(627): tdelay[627] = 60.241538; pan[627] = -.8; break;
  1396. case(628): tdelay[628] = 60.358808; pan[628] = .8; break;
  1397. case(629): tdelay[629] = 60.470554; pan[629] = -.55; break;
  1398. case(630): tdelay[630] = 60.540000; pan[630] = .55; break;
  1399. case(631): tdelay[631] = 60.612729; pan[631] = -.25; break;
  1400. case(632): tdelay[632] = 60.693888; pan[632] = .25; break;
  1401. case(633): tdelay[633] = 60.750479; pan[633] = -.45; break;
  1402. case(634): tdelay[634] = 60.834122; pan[634] = .45; break;
  1403. case(635): tdelay[635] = 60.894456; pan[635] = .05; break;
  1404. case(636): tdelay[636] = 60.978112; pan[636] = -.9; break;
  1405. case(637): tdelay[637] = 61.107199; pan[637] = -.05; break;
  1406. case(638): tdelay[638] = 61.217554; pan[638] = .9; break;
  1407. case(639): tdelay[639] = 61.282567; pan[639] = -.425; break;
  1408. case(640): tdelay[640] = 61.387678; pan[640] = .425; break;
  1409. case(641): tdelay[641] = 61.493642; pan[641] = .75; break;
  1410. case(642): tdelay[642] = 61.610009; pan[642] = -.75; break;
  1411. case(643): tdelay[643] = 61.720302; pan[643] = .275; break;
  1412. case(644): tdelay[644] = 61.818331; pan[644] = -.275; break;
  1413. case(645): tdelay[645] = 61.911186; pan[645] = -.625; break;
  1414. case(646): tdelay[646] = 62.013019; pan[646] = .625; break;
  1415. case(647): tdelay[647] = 62.089382; pan[647] = .375; break;
  1416. case(648): tdelay[648] = 62.192071; pan[648] = -.375; break;
  1417. case(649): tdelay[649] = 62.288516; pan[649] = -.116; break;
  1418. case(650): tdelay[650] = 62.403337; pan[650] = .116; break;
  1419. case(651): tdelay[651] = 62.474009; pan[651] = -.825; break;
  1420. case(652): tdelay[652] = 62.613701; pan[652] = .825; break;
  1421. case(653): tdelay[653] = 62.710554; pan[653] = -.535; break;
  1422. case(654): tdelay[654] = 62.800000; pan[654] = .535; break;
  1423. case(655): tdelay[655] = 62.933349; pan[655] = -.265; break;
  1424. case(656): tdelay[656] = 63.032532; pan[656] = .265; break;
  1425. case(657): tdelay[657] = 63.122216; pan[657] = -.475; break;
  1426. case(658): tdelay[658] = 63.194122; pan[658] = .475; break;
  1427. case(659): tdelay[659] = 63.265021; pan[659] = .11; break;
  1428. case(660): tdelay[660] = 63.358764; pan[660] = -.77; break;
  1429. case(661): tdelay[661] = 63.445276; pan[661] = -.11; break;
  1430. case(662): tdelay[662] = 63.539293; pan[662] = .77; break;
  1431. case(663): tdelay[663] = 63.609978; pan[663] = -.475; break;
  1432. case(664): tdelay[664] = 63.710640; pan[664] = .475; break;
  1433. case(665): tdelay[665] = 63.831968; pan[665] = .725; break;
  1434. case(666): tdelay[666] = 63.933759; pan[666] = -.725; break;
  1435. case(667): tdelay[667] = 64.031102; pan[667] = .235; break;
  1436. case(668): tdelay[668] = 64.120963; pan[668] = -.235; break;
  1437. case(669): tdelay[669] = 64.230907; pan[669] = -.685; break;
  1438. case(670): tdelay[670] = 64.322181; pan[670] = .685; break;
  1439. case(671): tdelay[671] = 64.426997; pan[671] = .315; break;
  1440. case(672): tdelay[672] = 64.531689; pan[672] = -.315; break;
  1441. case(673): tdelay[673] = 64.607012; pan[673] = -.136; break;
  1442. case(674): tdelay[674] = 64.715148; pan[674] = .136; break;
  1443. case(675): tdelay[675] = 64.803142; pan[675] = -.635; break;
  1444. case(676): tdelay[676] = 64.951037; pan[676] = .635; break;
  1445. case(677): tdelay[677] = 65.018695; pan[677] = -.435; break;
  1446. case(678): tdelay[678] = 65.107151; pan[678] = .435; break;
  1447. case(679): tdelay[679] = 65.240962; pan[679] = -.765; break;
  1448. case(680): tdelay[680] = 65.312251; pan[680] = .765; break;
  1449. case(681): tdelay[681] = 65.422676; pan[681] = -.575; break;
  1450. case(682): tdelay[682] = 65.514122; pan[682] = .575; break;
  1451. case(683): tdelay[683] = 65.637713; pan[683] = .215; break;
  1452. case(684): tdelay[684] = 65.730468; pan[684] = -.692; break;
  1453. case(685): tdelay[685] = 65.808751; pan[685] = -.215; break;
  1454. case(686): tdelay[686] = 65.910460; pan[686] = .692; break;
  1455. case(687): tdelay[687] = 66.000000; pan[687] = -.435; break;
  1456. case(688): tdelay[688] = 66.131832; pan[688] = .435; break;
  1457. case(689): tdelay[689] = 66.215038; pan[689] = .675; break;
  1458. case(690): tdelay[690] = 66.322274; pan[690] = -.675; break;
  1459. case(691): tdelay[691] = 66.414122; pan[691] = .265; break;
  1460. case(692): tdelay[692] = 66.504488; pan[692] = -.265; break;
  1461. case(693): tdelay[693] = 66.637713; pan[693] = -.555; break;
  1462. case(694): tdelay[694] = 66.730468; pan[694] = .555; break;
  1463. case(695): tdelay[695] = 66.808751; pan[695] = .333; break;
  1464. case(696): tdelay[696] = 66.910460; pan[696] = -.333; break;
  1465. case(697): tdelay[697] = 67.027041; pan[697] = 0.0; break;
  1466. case(698): tdelay[698] = 67.132028; pan[698] = -1; break;
  1467. case(699): tdelay[699] = 67.244272; pan[699] = 1; break;
  1468. case(700): tdelay[700] = 67.336923; pan[700] = .5; break;
  1469. case(701): tdelay[701] = 67.427700; pan[701] = -.5; break;
  1470. case(702): tdelay[702] = 67.528503; pan[702] = 0; break;
  1471. case(703): tdelay[703] = 67.618661; pan[703] = .7; break;
  1472. case(704): tdelay[704] = 67.715413; pan[704] = -.7; break;
  1473. case(705): tdelay[705] = 67.814730; pan[705] = .3; break;
  1474. case(706): tdelay[706] = 67.914843; pan[706] = -.3; break;
  1475. case(707): tdelay[707] = 68.000258; pan[707] = .15; break;
  1476. case(708): tdelay[708] = 68.135363; pan[708] = -.15; break;
  1477. case(709): tdelay[709] = 68.230554; pan[709] = .85; break;
  1478. case(710): tdelay[710] = 68.290000; pan[710] = -.85; break;
  1479. case(711): tdelay[711] = 68.372498; pan[711] = .4; break;
  1480. case(712): tdelay[712] = 68.445365; pan[712] = -.4; break;
  1481. case(713): tdelay[713] = 68.571897; pan[713] = .6; break;
  1482. case(714): tdelay[714] = 68.627656; pan[714] = -.6; break;
  1483. case(715): tdelay[715] = 68.695809; pan[715] = .225; break;
  1484. case(716): tdelay[716] = 68.758350; pan[716] = -.225; break;
  1485. case(717): tdelay[717] = 68.880984; pan[717] = .775; break;
  1486. case(718): tdelay[718] = 68.975910; pan[718] = -.775; break;
  1487. case(719): tdelay[719] = 69.043894; pan[719] = .125; break;
  1488. case(720): tdelay[720] = 69.143261; pan[720] = -.125; break;
  1489. case(721): tdelay[721] = 69.268126; pan[721] = -.65; break;
  1490. case(722): tdelay[722] = 69.366093; pan[722] = .65; break;
  1491. case(723): tdelay[723] = 69.480461; pan[723] = .35; break;
  1492. case(724): tdelay[724] = 69.577198; pan[724] = -.35; break;
  1493. case(725): tdelay[725] = 69.666871; pan[725] = -.1; break;
  1494. case(726): tdelay[726] = 69.779061; pan[726] = .1; break;
  1495. case(727): tdelay[727] = 69.852884; pan[727] = -.8; break;
  1496. case(728): tdelay[728] = 69.966519; pan[728] = .8; break;
  1497. case(729): tdelay[729] = 70.043514; pan[729] = -.55; break;
  1498. case(730): tdelay[730] = 70.147562; pan[730] = .55; break;
  1499. case(731): tdelay[731] = 70.241538; pan[731] = -.25; break;
  1500. case(732): tdelay[732] = 70.358808; pan[732] = .25; break;
  1501. case(733): tdelay[733] = 70.470554; pan[733] = -.45; break;
  1502. case(734): tdelay[734] = 70.540000; pan[734] = .45; break;
  1503. case(735): tdelay[735] = 70.612775; pan[735] = .05; break;
  1504. case(736): tdelay[736] = 70.697583; pan[736] = -.9; break;
  1505. case(737): tdelay[737] = 70.750379; pan[737] = -.05; break;
  1506. case(738): tdelay[738] = 70.834122; pan[738] = .9; break;
  1507. case(739): tdelay[739] = 70.894456; pan[739] = -.425; break;
  1508. case(740): tdelay[740] = 70.978112; pan[740] = .425; break;
  1509. case(741): tdelay[741] = 71.107199; pan[741] = .75; break;
  1510. case(742): tdelay[742] = 71.217554; pan[742] = -.75; break;
  1511. case(743): tdelay[743] = 71.282567; pan[743] = .275; break;
  1512. case(744): tdelay[744] = 71.387678; pan[744] = -.275; break;
  1513. case(745): tdelay[745] = 71.493642; pan[745] = -.625; break;
  1514. case(746): tdelay[746] = 71.610009; pan[746] = .625; break;
  1515. case(747): tdelay[747] = 71.720302; pan[747] = .375; break;
  1516. case(748): tdelay[748] = 71.818331; pan[748] = -.375; break;
  1517. case(749): tdelay[749] = 71.911186; pan[749] = -.116; break;
  1518. case(750): tdelay[750] = 72.013019; pan[750] = .116; break;
  1519. case(751): tdelay[751] = 72.089382; pan[751] = -.825; break;
  1520. case(752): tdelay[752] = 72.192071; pan[752] = .825; break;
  1521. case(753): tdelay[753] = 72.288516; pan[753] = -.535; break;
  1522. case(754): tdelay[754] = 72.403337; pan[754] = .535; break;
  1523. case(755): tdelay[755] = 72.474009; pan[755] = -.265; break;
  1524. case(756): tdelay[756] = 72.613701; pan[756] = .265; break;
  1525. case(757): tdelay[757] = 72.710554; pan[757] = -.475; break;
  1526. case(758): tdelay[758] = 72.800000; pan[758] = .475; break;
  1527. case(759): tdelay[759] = 72.933349; pan[759] = .11; break;
  1528. case(760): tdelay[760] = 73.032532; pan[760] = -.77; break;
  1529. case(761): tdelay[761] = 73.122216; pan[761] = -.11; break;
  1530. case(762): tdelay[762] = 73.194122; pan[762] = .77; break;
  1531. case(763): tdelay[763] = 73.265021; pan[763] = -.475; break;
  1532. case(764): tdelay[764] = 73.358764; pan[764] = .475; break;
  1533. case(765): tdelay[765] = 73.445276; pan[765] = .725; break;
  1534. case(766): tdelay[766] = 73.539293; pan[766] = -.725; break;
  1535. case(767): tdelay[767] = 73.609978; pan[767] = .235; break;
  1536. case(768): tdelay[768] = 73.710640; pan[768] = -.235; break;
  1537. case(769): tdelay[769] = 73.831968; pan[769] = -.685; break;
  1538. case(770): tdelay[770] = 73.933759; pan[770] = .685; break;
  1539. case(771): tdelay[771] = 74.031102; pan[771] = .315; break;
  1540. case(772): tdelay[772] = 74.120963; pan[772] = -.315; break;
  1541. case(773): tdelay[773] = 74.230907; pan[773] = -.136; break;
  1542. case(774): tdelay[774] = 74.322181; pan[774] = .136; break;
  1543. case(775): tdelay[775] = 74.426997; pan[775] = -.635; break;
  1544. case(776): tdelay[776] = 74.531689; pan[776] = .635; break;
  1545. case(777): tdelay[777] = 74.607012; pan[777] = -.435; break;
  1546. case(778): tdelay[778] = 74.715148; pan[778] = .435; break;
  1547. case(779): tdelay[779] = 74.803142; pan[779] = -.765; break;
  1548. case(780): tdelay[780] = 74.951037; pan[780] = .765; break;
  1549. case(781): tdelay[781] = 75.018695; pan[781] = -.575; break;
  1550. case(782): tdelay[782] = 75.107151; pan[782] = .575; break;
  1551. case(783): tdelay[783] = 75.240962; pan[783] = .215; break;
  1552. case(784): tdelay[784] = 75.312251; pan[784] = -.692; break;
  1553. case(785): tdelay[785] = 75.422676; pan[785] = -.435; break;
  1554. case(786): tdelay[786] = 75.514122; pan[786] = .435; break;
  1555. case(787): tdelay[787] = 75.637713; pan[787] = .675; break;
  1556. case(788): tdelay[788] = 75.730468; pan[788] = -.675; break;
  1557. case(789): tdelay[789] = 75.808751; pan[789] = .265; break;
  1558. case(790): tdelay[790] = 75.910460; pan[790] = -.265; break;
  1559. case(791): tdelay[791] = 76.027041; pan[791] = -.555; break;
  1560. case(792): tdelay[792] = 76.132028; pan[792] = .555; break;
  1561. case(793): tdelay[793] = 76.244272; pan[793] = .333; break;
  1562. case(794): tdelay[794] = 76.336923; pan[794] = -.333; break;
  1563. case(795): tdelay[795] = 76.427700; pan[795] = 0.0; break;
  1564. case(796): tdelay[796] = 76.528503; pan[796] = -1; break;
  1565. case(797): tdelay[797] = 76.618661; pan[797] = 1; break;
  1566. case(798): tdelay[798] = 76.715413; pan[798] = .5; break;
  1567. case(799): tdelay[799] = 76.814730; pan[799] = -.5; break;
  1568. case(800): tdelay[800] = 76.914843; pan[800] = 0; break;
  1569. case(801): tdelay[801] = 77.000258; pan[801] = .7; break;
  1570. case(802): tdelay[802] = 77.135363; pan[802] = -.7; break;
  1571. case(803): tdelay[803] = 77.230554; pan[803] = .3; break;
  1572. case(804): tdelay[804] = 77.290000; pan[804] = -.3; break;
  1573. case(805): tdelay[805] = 77.372498; pan[805] = .15; break;
  1574. case(806): tdelay[806] = 77.445365; pan[806] = -.15; break;
  1575. case(807): tdelay[807] = 77.571897; pan[807] = .85; break;
  1576. case(808): tdelay[808] = 77.627656; pan[808] = -.85; break;
  1577. case(809): tdelay[809] = 77.695809; pan[809] = .4; break;
  1578. case(810): tdelay[810] = 77.758350; pan[810] = -.4; break;
  1579. case(811): tdelay[811] = 77.880984; pan[811] = .6; break;
  1580. case(812): tdelay[812] = 77.975910; pan[812] = -.6; break;
  1581. case(813): tdelay[813] = 78.043894; pan[813] = .225; break;
  1582. case(814): tdelay[814] = 78.143261; pan[814] = -.225; break;
  1583. case(815): tdelay[815] = 78.268126; pan[815] = .775; break;
  1584. case(816): tdelay[816] = 78.366093; pan[816] = -.775; break;
  1585. case(817): tdelay[817] = 78.480461; pan[817] = .125; break;
  1586. case(818): tdelay[818] = 78.577198; pan[818] = -.125; break;
  1587. case(819): tdelay[819] = 78.666871; pan[819] = -.65; break;
  1588. case(820): tdelay[820] = 78.779061; pan[820] = .65; break;
  1589. case(821): tdelay[821] = 78.852884; pan[821] = .35; break;
  1590. case(822): tdelay[822] = 78.966519; pan[822] = -.35; break;
  1591. case(823): tdelay[823] = 79.043514; pan[823] = -.1; break;
  1592. case(824): tdelay[824] = 79.147562; pan[824] = .1; break;
  1593. case(825): tdelay[825] = 79.241538; pan[825] = -.8; break;
  1594. case(826): tdelay[826] = 79.358808; pan[826] = .8; break;
  1595. case(827): tdelay[827] = 79.470554; pan[827] = -.55; break;
  1596. case(828): tdelay[828] = 79.540000; pan[828] = .55; break;
  1597. case(829): tdelay[829] = 79.612729; pan[829] = -.25; break;
  1598. case(830): tdelay[830] = 79.693888; pan[830] = .25; break;
  1599. case(831): tdelay[831] = 79.750479; pan[831] = -.45; break;
  1600. case(832): tdelay[832] = 79.834122; pan[832] = .45; break;
  1601. case(833): tdelay[833] = 79.894456; pan[833] = .05; break;
  1602. case(834): tdelay[834] = 79.978112; pan[834] = -.9; break;
  1603. case(835): tdelay[835] = 80.107199; pan[835] = -.05; break;
  1604. case(836): tdelay[836] = 80.217554; pan[836] = .9; break;
  1605. case(837): tdelay[837] = 80.282567; pan[837] = -.425; break;
  1606. case(838): tdelay[838] = 80.387678; pan[838] = .425; break;
  1607. case(839): tdelay[839] = 80.493642; pan[839] = .75; break;
  1608. case(840): tdelay[840] = 80.610009; pan[840] = -.75; break;
  1609. case(841): tdelay[841] = 80.720302; pan[841] = .275; break;
  1610. case(842): tdelay[842] = 80.818331; pan[842] = -.275; break;
  1611. case(843): tdelay[843] = 80.911186; pan[843] = -.625; break;
  1612. case(844): tdelay[844] = 81.013019; pan[844] = .625; break;
  1613. case(845): tdelay[845] = 81.089382; pan[845] = .375; break;
  1614. case(846): tdelay[846] = 81.192071; pan[846] = -.375; break;
  1615. case(847): tdelay[847] = 81.288516; pan[847] = -.116; break;
  1616. case(848): tdelay[848] = 81.403337; pan[848] = .116; break;
  1617. case(849): tdelay[849] = 81.474009; pan[849] = -.825; break;
  1618. case(850): tdelay[850] = 81.613701; pan[850] = .825; break;
  1619. case(851): tdelay[851] = 81.710554; pan[851] = -.535; break;
  1620. case(852): tdelay[852] = 81.800000; pan[852] = .535; break;
  1621. case(853): tdelay[853] = 81.933349; pan[853] = -.265; break;
  1622. case(854): tdelay[854] = 82.032532; pan[854] = .265; break;
  1623. case(855): tdelay[855] = 82.122216; pan[855] = -.475; break;
  1624. case(856): tdelay[856] = 82.194122; pan[856] = .475; break;
  1625. case(857): tdelay[857] = 82.265021; pan[857] = .11; break;
  1626. case(858): tdelay[858] = 82.358764; pan[858] = -.77; break;
  1627. case(859): tdelay[859] = 82.445276; pan[859] = -.11; break;
  1628. case(860): tdelay[860] = 82.539293; pan[860] = .77; break;
  1629. case(861): tdelay[861] = 82.609978; pan[861] = -.475; break;
  1630. case(862): tdelay[862] = 82.710640; pan[862] = .475; break;
  1631. case(863): tdelay[863] = 82.831968; pan[863] = .725; break;
  1632. case(864): tdelay[864] = 82.933759; pan[864] = -.725; break;
  1633. case(865): tdelay[865] = 83.031102; pan[865] = .235; break;
  1634. case(866): tdelay[866] = 83.120963; pan[866] = -.235; break;
  1635. case(867): tdelay[867] = 83.230907; pan[867] = -.685; break;
  1636. case(868): tdelay[868] = 83.322181; pan[868] = .685; break;
  1637. case(869): tdelay[869] = 83.426997; pan[869] = .315; break;
  1638. case(870): tdelay[870] = 83.531689; pan[870] = -.315; break;
  1639. case(871): tdelay[871] = 83.607012; pan[871] = -.136; break;
  1640. case(872): tdelay[872] = 83.715148; pan[872] = .136; break;
  1641. case(873): tdelay[873] = 83.803142; pan[873] = -.635; break;
  1642. case(874): tdelay[874] = 83.951037; pan[874] = .635; break;
  1643. case(875): tdelay[875] = 84.018695; pan[875] = -.435; break;
  1644. case(876): tdelay[876] = 84.160962; pan[876] = .435; break;
  1645. case(877): tdelay[877] = 84.312251; pan[877] = -.765; break;
  1646. case(878): tdelay[878] = 84.422676; pan[878] = .765; break;
  1647. case(879): tdelay[879] = 84.514122; pan[879] = -.575; break;
  1648. case(880): tdelay[880] = 84.637713; pan[880] = .575; break;
  1649. case(881): tdelay[881] = 84.730468; pan[881] = .215; break;
  1650. case(882): tdelay[882] = 84.808751; pan[882] = -.692; break;
  1651. case(883): tdelay[883] = 84.910460; pan[883] = -.215; break;
  1652. case(884): tdelay[884] = 85.000000; pan[884] = .692; break;
  1653. case(885): tdelay[885] = 85.131832; pan[885] = -.435; break;
  1654. case(886): tdelay[886] = 85.215038; pan[886] = .435; break;
  1655. case(887): tdelay[887] = 85.322274; pan[887] = .675; break;
  1656. case(888): tdelay[888] = 85.414122; pan[888] = -.675; break;
  1657. case(889): tdelay[889] = 85.504488; pan[889] = .265; break;
  1658. case(890): tdelay[890] = 85.637713; pan[890] = -.265; break;
  1659. case(891): tdelay[891] = 85.730468; pan[891] = -.555; break;
  1660. case(892): tdelay[892] = 85.808751; pan[892] = .555; break;
  1661. case(893): tdelay[893] = 85.910460; pan[893] = .333; break;
  1662. case(894): tdelay[894] = 86.027041; pan[894] = -.333; break;
  1663. case(895): tdelay[895] = 86.132028; pan[895] = 0.0; break;
  1664. case(896): tdelay[896] = 86.244272; pan[896] = -1; break;
  1665. case(897): tdelay[897] = 86.336923; pan[897] = 1; break;
  1666. case(898): tdelay[898] = 86.427700; pan[898] = .5; break;
  1667. case(899): tdelay[899] = 86.528503; pan[899] = -.5; break;
  1668. case(900): tdelay[900] = 86.618661; pan[900] = 0; break;
  1669. case(901): tdelay[901] = 86.715413; pan[901] = .7; break;
  1670. case(902): tdelay[902] = 86.814730; pan[902] = -.7; break;
  1671. case(903): tdelay[903] = 86.914843; pan[903] = .3; break;
  1672. case(904): tdelay[904] = 87.000258; pan[904] = -.3; break;
  1673. case(905): tdelay[905] = 87.135363; pan[905] = .15; break;
  1674. case(906): tdelay[906] = 87.230554; pan[906] = -.15; break;
  1675. case(907): tdelay[907] = 87.290000; pan[907] = .85; break;
  1676. case(908): tdelay[908] = 87.372498; pan[908] = -.85; break;
  1677. case(909): tdelay[909] = 87.445365; pan[909] = .4; break;
  1678. case(910): tdelay[910] = 87.571897; pan[910] = -.4; break;
  1679. case(911): tdelay[911] = 87.627656; pan[911] = .6; break;
  1680. case(912): tdelay[912] = 87.695809; pan[912] = -.6; break;
  1681. case(913): tdelay[913] = 87.758350; pan[913] = .225; break;
  1682. case(914): tdelay[914] = 87.880984; pan[914] = -.225; break;
  1683. case(915): tdelay[915] = 87.975910; pan[915] = .775; break;
  1684. case(916): tdelay[916] = 88.043894; pan[916] = -.775; break;
  1685. case(917): tdelay[917] = 88.143261; pan[917] = .125; break;
  1686. case(918): tdelay[918] = 88.268126; pan[918] = -.125; break;
  1687. case(919): tdelay[919] = 88.366093; pan[919] = -.65; break;
  1688. case(920): tdelay[920] = 88.480461; pan[920] = .65; break;
  1689. case(921): tdelay[921] = 88.577198; pan[921] = .35; break;
  1690. case(922): tdelay[922] = 88.666871; pan[922] = -.35; break;
  1691. case(923): tdelay[923] = 88.779061; pan[923] = -.1; break;
  1692. case(924): tdelay[924] = 88.852884; pan[924] = .1; break;
  1693. case(925): tdelay[925] = 88.966519; pan[925] = -.8; break;
  1694. case(926): tdelay[926] = 89.043514; pan[926] = .8; break;
  1695. case(927): tdelay[927] = 89.147562; pan[927] = -.55; break;
  1696. case(928): tdelay[928] = 89.241538; pan[928] = .55; break;
  1697. case(929): tdelay[929] = 89.358808; pan[929] = -.25; break;
  1698. case(930): tdelay[930] = 89.470554; pan[930] = .25; break;
  1699. case(931): tdelay[931] = 89.540000; pan[931] = -.45; break;
  1700. case(932): tdelay[932] = 89.612729; pan[932] = .45; break;
  1701. case(933): tdelay[933] = 89.693888; pan[933] = .05; break;
  1702. case(934): tdelay[934] = 89.750479; pan[934] = -.9; break;
  1703. case(935): tdelay[935] = 89.834122; pan[935] = -.05; break;
  1704. case(936): tdelay[936] = 89.894456; pan[936] = .9; break;
  1705. case(937): tdelay[937] = 89.978112; pan[937] = -.425; break;
  1706. case(938): tdelay[938] = 90.107199; pan[938] = .425; break;
  1707. case(939): tdelay[939] = 90.217554; pan[939] = .75; break;
  1708. case(940): tdelay[940] = 90.282567; pan[940] = -.75; break;
  1709. case(941): tdelay[941] = 90.387678; pan[941] = .275; break;
  1710. case(942): tdelay[942] = 90.493642; pan[942] = -.275; break;
  1711. case(943): tdelay[943] = 90.610009; pan[943] = -.625; break;
  1712. case(944): tdelay[944] = 90.720302; pan[944] = .625; break;
  1713. case(945): tdelay[945] = 90.818331; pan[945] = .375; break;
  1714. case(946): tdelay[946] = 90.911186; pan[946] = -.375; break;
  1715. case(947): tdelay[947] = 91.013019; pan[947] = -.116; break;
  1716. case(948): tdelay[948] = 91.089382; pan[948] = .116; break;
  1717. case(949): tdelay[949] = 91.192071; pan[949] = -.825; break;
  1718. case(950): tdelay[950] = 91.288516; pan[950] = .825; break;
  1719. case(951): tdelay[951] = 91.403337; pan[951] = -.535; break;
  1720. case(952): tdelay[952] = 91.474009; pan[952] = .535; break;
  1721. case(953): tdelay[953] = 91.613701; pan[953] = -.265; break;
  1722. case(954): tdelay[954] = 91.710554; pan[954] = .265; break;
  1723. case(955): tdelay[955] = 91.800000; pan[955] = -.475; break;
  1724. case(956): tdelay[956] = 91.933349; pan[956] = .475; break;
  1725. case(957): tdelay[957] = 92.032532; pan[957] = .11; break;
  1726. case(958): tdelay[958] = 92.122216; pan[958] = -.77; break;
  1727. case(959): tdelay[959] = 92.194122; pan[959] = -.11; break;
  1728. case(960): tdelay[960] = 92.265021; pan[960] = .77; break;
  1729. case(961): tdelay[961] = 92.358764; pan[961] = -.475; break;
  1730. case(962): tdelay[962] = 92.445276; pan[962] = .475; break;
  1731. case(963): tdelay[963] = 92.539293; pan[963] = .725; break;
  1732. case(964): tdelay[964] = 92.609978; pan[964] = -.725; break;
  1733. case(965): tdelay[965] = 92.710640; pan[965] = .235; break;
  1734. case(966): tdelay[966] = 92.831968; pan[966] = -.235; break;
  1735. case(967): tdelay[967] = 92.933759; pan[967] = -.685; break;
  1736. case(968): tdelay[968] = 93.031102; pan[968] = .685; break;
  1737. case(969): tdelay[969] = 93.120963; pan[969] = .315; break;
  1738. case(970): tdelay[970] = 93.230907; pan[970] = -.315; break;
  1739. case(971): tdelay[971] = 93.322181; pan[971] = -.136; break;
  1740. case(972): tdelay[972] = 93.426997; pan[972] = .136; break;
  1741. case(973): tdelay[973] = 93.531689; pan[973] = -.635; break;
  1742. case(974): tdelay[974] = 93.607012; pan[974] = .635; break;
  1743. case(975): tdelay[975] = 93.715148; pan[975] = -.435; break;
  1744. case(976): tdelay[976] = 93.803142; pan[976] = .435; break;
  1745. case(977): tdelay[977] = 93.951037; pan[977] = -.765; break;
  1746. case(978): tdelay[978] = 94.018695; pan[978] = .765; break;
  1747. case(979): tdelay[979] = 94.107151; pan[979] = -.575; break;
  1748. case(980): tdelay[980] = 94.240962; pan[980] = .575; break;
  1749. case(981): tdelay[981] = 94.312251; pan[981] = .215; break;
  1750. case(982): tdelay[982] = 94.422676; pan[982] = -.692; break;
  1751. case(983): tdelay[983] = 94.514122; pan[983] = -.215; break;
  1752. case(984): tdelay[984] = 94.637713; pan[984] = .692; break;
  1753. case(985): tdelay[985] = 94.730468; pan[985] = -.435; break;
  1754. case(986): tdelay[986] = 94.808751; pan[986] = .435; break;
  1755. case(987): tdelay[987] = 94.933759; pan[987] = .675; break;
  1756. case(988): tdelay[988] = 95.013019; pan[988] = -.675; break;
  1757. case(989): tdelay[989] = 95.107151; pan[989] = .265; break;
  1758. case(990): tdelay[990] = 95.240962; pan[990] = -.265; break;
  1759. case(991): tdelay[991] = 95.312251; pan[991] = -.555; break;
  1760. case(992): tdelay[992] = 95.422676; pan[992] = .555; break;
  1761. case(993): tdelay[993] = 95.514122; pan[993] = .333; break;
  1762. case(994): tdelay[994] = 95.637713; pan[994] = -.333; break;
  1763. case(995): tdelay[995] = 95.730468; pan[995] = 0.0; break;
  1764. case(996): tdelay[996] = 95.831968; pan[996] = -1; break;
  1765. case(997): tdelay[997] = 95.933759; pan[997] = 1; break;
  1766. case(998): tdelay[998] = 96.000000; pan[998] = .475; break;
  1767. case(999): tdelay[999] = 96.103567; pan[999] = -.475; break;
  1768. }
  1769. }
  1770. }
  1771. return(FINISHED);
  1772. }
  1773. /************************** GENERATE_DELAYS ****************************/
  1774. int generate_delays(dataptr dz)
  1775. {
  1776. int n;
  1777. int eccnt = dz->iparam[STAD_ECHOCNT];
  1778. int *delay;
  1779. double *tdelay = dz->parray[STAD_TDELAY];
  1780. double sr = (double)dz->infile->srate;
  1781. /*RWD Jan 2009 - trap files with more than 2 chans! */
  1782. if(dz->itemcnt > 2){
  1783. sprintf(errstr,"File has more than two channels.\n");
  1784. return GOAL_FAILED;
  1785. }
  1786. if((dz->lparray[STAD_DELAY] = malloc(MAX_ECHOCNT * sizeof(int)))==NULL) {
  1787. sprintf(errstr,"Insufficient memory for stadium arrays.\n");
  1788. return(MEMORY_ERROR);
  1789. }
  1790. delay = dz->lparray[STAD_DELAY];
  1791. for(n=0;n<eccnt;n++) {
  1792. if((delay[n] = (int)round(tdelay[n] * sr * dz->param[STAD_SIZE]) * STEREO)<0) {
  1793. sprintf(errstr,"Delay time too long.\n");
  1794. return(GOAL_FAILED);
  1795. }
  1796. }
  1797. return(FINISHED);
  1798. }
  1799. /************************** GENERATE_GAINS ****************************/
  1800. void generate_gains(dataptr dz)
  1801. {
  1802. int n;
  1803. double pregain = dz->param[STAD_PREGAIN];
  1804. double *gain = dz->parray[STAD_GAIN];
  1805. double *gainl = dz->parray[STAD_GAINL];
  1806. double *gainr = dz->parray[STAD_GAINR];
  1807. double *pan = dz->parray[STAD_PAN];
  1808. double rolloff = dz->param[STAD_ROLLOFF];
  1809. int eccnt = dz->iparam[STAD_ECHOCNT];
  1810. if(rolloff<1.0) {
  1811. for(n=0;n<eccnt;n++)
  1812. gain[n] = pow(gain[n],rolloff);
  1813. }
  1814. for(n=0;n<eccnt;n++) {
  1815. if(pan[n] < 0.0) { /* LEFTWARDS */
  1816. gainl[n] = gain[n] * pregain;
  1817. gainr[n] = gain[n] * pregain * (1.0+pan[n]);
  1818. } else { /* RIGHTWARDS */
  1819. gainl[n] = gain[n] * pregain * (1.0-pan[n]);
  1820. gainr[n] = gain[n] * pregain;
  1821. }
  1822. }
  1823. }
  1824. /******************************** CREATE_STADIUM_BUFFERS **********************************/
  1825. #define IBUF (0)
  1826. #define OBUF (1)
  1827. #define OBUFEND (2)
  1828. #define PADSTRT (3)
  1829. int create_stadium_buffers(dataptr dz)
  1830. {
  1831. int bigbufsize,bufwanted;
  1832. int obuflen;
  1833. int cnt;
  1834. float *ibufend;
  1835. int overflowlen;
  1836. dz->iparam[STAD_OVFLWSZ] = dz->iparam[STAD_MAXDELAY] * sizeof(float) ;
  1837. if(dz->itemcnt == 1) /* storing channel-count of infile */
  1838. cnt = 3;
  1839. else
  1840. cnt = 4;
  1841. overflowlen = dz->iparam[STAD_MAXDELAY];
  1842. bigbufsize = (int)(long) Malloc(-1);
  1843. // TW modified overflow check, to include dz->iparam[STAD_OVFLWSZ]
  1844. if((bufwanted = bigbufsize + dz->iparam[STAD_OVFLWSZ]) < 0) {
  1845. sprintf(errstr,"Insufficient memory for delay buffer & snd buffers.\n");
  1846. return(MEMORY_ERROR);
  1847. }
  1848. if((dz->bigbuf = (float *) malloc(bufwanted))==NULL){
  1849. sprintf(errstr,"Unable to acquire %d samps for delay and sound buffers.\n",bufwanted);
  1850. return MEMORY_ERROR;
  1851. }
  1852. bigbufsize /= cnt;
  1853. dz->buflen = bigbufsize/sizeof(float);
  1854. obuflen = dz->buflen * STEREO;
  1855. dz->sampbuf[IBUF] = dz->bigbuf;
  1856. ibufend = dz->sampbuf[IBUF] + (dz->buflen * dz->itemcnt);
  1857. dz->sampbuf[OBUF] = ibufend;
  1858. dz->sampbuf[OBUFEND] = dz->sampbuf[OBUF] + obuflen;
  1859. dz->sampbuf[PADSTRT] = dz->sampbuf[OBUF] + overflowlen;
  1860. memset((char *)dz->bigbuf,0,(dz->buflen * sizeof(float) * cnt) + dz->iparam[STAD_OVFLWSZ]);
  1861. return(FINISHED);
  1862. }
  1863. /******************************** DO_STADIUM **********************************/
  1864. int do_stadium(dataptr dz)
  1865. {
  1866. int exit_status;
  1867. int n, m, chans = dz->itemcnt; /* stores channel-cnt of infile */
  1868. double sum, maxinsamp = 0.0, maxoutsamp = 0.0, normaliser = 1.0;
  1869. int icnt, ocnt, sampcnt = 0, samps_to_write, samps_left = 0, k;
  1870. int *delay = dz->lparray[STAD_DELAY];
  1871. double *gainl = dz->parray[STAD_GAINL];
  1872. double *gainr = dz->parray[STAD_GAINR];
  1873. /*int ibuflen = dz->buflen;*/
  1874. int obuflen = dz->buflen * STEREO;
  1875. float *ibuf = dz->sampbuf[IBUF];
  1876. float *obuf = dz->sampbuf[OBUF];
  1877. int eccnt = dz->iparam[STAD_ECHOCNT];
  1878. if(dz->vflag[0]) {
  1879. if(sloom) {
  1880. fprintf(stdout,"INFO: Checking output level\n");
  1881. fflush(stdout);
  1882. }
  1883. while((dz->ssampsread = fgetfbufEx(ibuf,(dz->buflen * dz->itemcnt),dz->ifd[0],0)) > 0) {
  1884. if(chans >= 2) {
  1885. sum = 0.0;
  1886. for(n = 0,m = 0; n < dz->ssampsread; n+=chans, m++) {
  1887. for(k=0;k<chans;k++)
  1888. sum += ibuf[n+k];
  1889. ibuf[m] = (float)(sum/(double)chans);
  1890. if(fabs(ibuf[m]) > maxinsamp)
  1891. maxinsamp = fabs(ibuf[m]);
  1892. }
  1893. dz->ssampsread /= chans;
  1894. } else {
  1895. for(n = 0; n < dz->ssampsread; n++) {
  1896. if(fabs(ibuf[n]) > maxinsamp)
  1897. maxinsamp = fabs(ibuf[n]);
  1898. }
  1899. }
  1900. for(n=0;n<eccnt;n++) {
  1901. for(icnt=0,ocnt=0;icnt<dz->ssampsread;icnt++,ocnt+=STEREO) {
  1902. sampcnt = ocnt + delay[n];
  1903. obuf[sampcnt] += (float) /*round*/(ibuf[icnt] * gainl[n]);
  1904. sampcnt++;
  1905. obuf[sampcnt] += (float) /*round*/(ibuf[icnt] * gainr[n]);
  1906. }
  1907. }
  1908. sampcnt++;
  1909. if((samps_to_write = min(obuflen,sampcnt))>0) {
  1910. for(k=0;k < samps_to_write;k++) {
  1911. if(fabs(obuf[k]) > maxoutsamp)
  1912. maxoutsamp = fabs(obuf[k]);
  1913. }
  1914. }
  1915. samps_left = sampcnt - obuflen;
  1916. memcpy((char *)obuf,(char *)dz->sampbuf[OBUFEND],dz->iparam[STAD_OVFLWSZ]);
  1917. memset((char *)dz->sampbuf[PADSTRT],0,obuflen * sizeof(float));
  1918. }
  1919. if(dz->ssampsread < 0) {
  1920. sprintf(errstr,"Sound read error.\n");
  1921. return(SYSTEM_ERROR);
  1922. }
  1923. if(samps_left > 0) {
  1924. for(k=0;k < samps_left;k++) {
  1925. if(fabs(obuf[k]) > maxoutsamp)
  1926. maxoutsamp = fabs(obuf[k]);
  1927. }
  1928. }
  1929. if(flteq(maxinsamp,0.0) || flteq(maxoutsamp,0.0)) {
  1930. sprintf(errstr,"No significant level in input file.\n");
  1931. return DATA_ERROR;
  1932. }
  1933. if(maxoutsamp > 0.95)
  1934. normaliser = 0.95/maxoutsamp;
  1935. else if(maxoutsamp < maxinsamp)
  1936. normaliser = maxoutsamp/maxinsamp;
  1937. memset((char *)dz->bigbuf,0,(dz->buflen * sizeof(float) * 3) + dz->iparam[STAD_OVFLWSZ]);
  1938. sndseekEx(dz->ifd[0],0,0);
  1939. reset_filedata_counters(dz);
  1940. if(sloom) {
  1941. fprintf(stdout,"INFO: Generating stadium reverb.\n");
  1942. fflush(stdout);
  1943. }
  1944. }
  1945. while((dz->ssampsread = fgetfbufEx(ibuf,(dz->buflen * dz->itemcnt),dz->ifd[0],0)) > 0) {
  1946. if(chans >= 2) {
  1947. for(n = 0,m = 0; n < dz->ssampsread; n+=chans, m++) {
  1948. sum = 0.0;
  1949. for(k=0;k<chans;k++)
  1950. sum += ibuf[n+k];
  1951. ibuf[m] = (float)(sum/(double)chans);
  1952. }
  1953. dz->ssampsread /= chans;
  1954. }
  1955. for(n=0;n<eccnt;n++) {
  1956. for(icnt=0,ocnt=0;icnt<dz->ssampsread;icnt++,ocnt+=STEREO) {
  1957. sampcnt = ocnt + delay[n];
  1958. obuf[sampcnt] += (float) /*round*/(ibuf[icnt] * gainl[n]);
  1959. sampcnt++;
  1960. obuf[sampcnt] += (float) /*round*/(ibuf[icnt] * gainr[n]);
  1961. }
  1962. }
  1963. sampcnt++;
  1964. if((samps_to_write = min(obuflen,sampcnt))>0) {
  1965. if(dz->vflag[0]) {
  1966. for(k=0;k < samps_to_write;k++)
  1967. obuf[k] = (float)(obuf[k] * normaliser);
  1968. }
  1969. if((exit_status = write_samps(obuf,samps_to_write,dz))<0)
  1970. return(exit_status);
  1971. }
  1972. samps_left = sampcnt - obuflen;
  1973. memcpy((char *)obuf,(char *)dz->sampbuf[OBUFEND],dz->iparam[STAD_OVFLWSZ]);
  1974. memset((char *)dz->sampbuf[PADSTRT],0,obuflen * sizeof(float));
  1975. }
  1976. if(dz->ssampsread < 0) {
  1977. sprintf(errstr,"Sound read error.\n");
  1978. return(SYSTEM_ERROR);
  1979. }
  1980. if(samps_left > 0) {
  1981. if(dz->vflag[0]) {
  1982. for(k=0;k < samps_left;k++)
  1983. obuf[k] = (float)(obuf[k] * normaliser);
  1984. }
  1985. return write_samps(obuf,samps_left,dz);
  1986. }
  1987. return(FINISHED);
  1988. }
  1989. //TW UPDATE : NEW FUNCTIONS (converted for flotsams)
  1990. /******************************** DO_CONVOLVE **********************************/
  1991. int do_convolve(dataptr dz)
  1992. {
  1993. int exit_status, chans = dz->infile->channels, k;
  1994. int n = 0, m = 0, dl, yy, ynext, nn, mm, samps_read, maxwrite, tt = 0;
  1995. double *dbuf, scaler, maxval = 0.0, d, cbufval, clumpcnt = (double)(dz->insams[1]/chans);
  1996. double timeincr = 1.0/(double)dz->infile->srate, thistime;
  1997. float *cbuf, *ibuf, *obuf;
  1998. int cfile_len = dz->insams[1], samps_to_write;
  1999. unsigned int dblovflw = cfile_len * sizeof(double);
  2000. dz->total_samps_read = 0;
  2001. if((samps_read = fgetfbufEx(dz->sampbuf[1],dz->insams[1],dz->ifd[1],0)) < 0) {
  2002. sprintf(errstr,"Can't read samps from soundfile to be convolved.\n");
  2003. return(SYSTEM_ERROR);
  2004. }
  2005. dz->total_samps_read += samps_read;
  2006. if((samps_read = fgetfbufEx(dz->sampbuf[0],dz->buflen,dz->ifd[0],0)) < 0) {
  2007. sprintf(errstr,"Can't read samps from convolving soundfile.\n");
  2008. return(SYSTEM_ERROR);
  2009. }
  2010. if(samps_read == 0) {
  2011. sprintf(errstr,"No data found in soundfile to be convolved.\n");
  2012. return(SYSTEM_ERROR);
  2013. }
  2014. dz->ssampsread = samps_read;
  2015. dz->total_samps_read += samps_read;
  2016. print_outmessage_flush("Calculating scaling factor. (This is a SLOW process)\n");
  2017. do {
  2018. for(k=0;k<chans;k++) {
  2019. ibuf = dz->sampbuf[0] + k;
  2020. dbuf = dz->parray[0] + k;
  2021. switch(dz->mode) {
  2022. case(CONV_NORMAL):
  2023. for(n = k; n < dz->ssampsread; n+=chans,tt++) {
  2024. nn = n - k;
  2025. cbuf = dz->sampbuf[1] + k;
  2026. for(m = k; m < dz->insams[1]; m+=chans) {
  2027. mm = m - k;
  2028. dbuf[nn+mm] += *ibuf * *cbuf;
  2029. cbuf += chans;
  2030. }
  2031. ibuf += chans;
  2032. if(tt % dz->infile->srate == 0)
  2033. display_virtual_time(tt,dz);
  2034. }
  2035. break;
  2036. case(CONV_TVAR):
  2037. for(n = k, thistime = 0.0; n < dz->ssampsread; n+=chans, thistime += timeincr,tt++) {
  2038. nn = n - k;
  2039. if(dz->brksize[CONV_TRANS] && !(nn%256)) {
  2040. if((exit_status = read_value_from_brktable(thistime,CONV_TRANS,dz))<0)
  2041. return(exit_status);
  2042. }
  2043. //TW Omission corrected DEC 2002
  2044. cbuf = dz->sampbuf[1] + k;
  2045. for(m = k, d = 0.0; d <= clumpcnt; m+=chans, d+= dz->param[CONV_TRANS]) {
  2046. mm = m - k;
  2047. d += max(dz->param[CONV_TRANS],0.0);
  2048. dl = (int)floor(d);
  2049. yy = dl * chans;
  2050. ynext = yy+chans;
  2051. cbufval = (double)cbuf[yy] + ((d - (double)dl) * (double)(cbuf[ynext] - cbuf[yy]));
  2052. dbuf[nn+mm] += *ibuf * cbufval;
  2053. }
  2054. ibuf += chans;
  2055. if(tt % dz->infile->srate == 0)
  2056. display_virtual_time(tt,dz);
  2057. }
  2058. break;
  2059. }
  2060. }
  2061. maxwrite = (n-chans) + (m-chans) + 1;
  2062. dbuf = dz->parray[0];
  2063. if (samps_read >= dz->buflen) {
  2064. for(n = 0; n < dz->ssampsread; n++)
  2065. maxval = max(maxval,fabs(dbuf[n]));
  2066. // display_virtual_time(dz->total_samps_read,dz);
  2067. memset((char *)dbuf,0,dz->buflen * sizeof(double));
  2068. memcpy((char *)dbuf,(char *)(dbuf + dz->buflen),dblovflw);
  2069. memset((char *)(dbuf + dz->buflen),0,dblovflw);
  2070. maxwrite -= dz->buflen;
  2071. if((samps_read = fgetfbufEx(dz->sampbuf[0],dz->buflen,dz->ifd[0],0)) < 0) {
  2072. sprintf(errstr,"Can't read samps from convolving soundfile.\n");
  2073. return(SYSTEM_ERROR);
  2074. }
  2075. dz->ssampsread = samps_read;
  2076. dz->total_samps_read += samps_read;
  2077. display_virtual_time(dz->total_samps_read,dz);
  2078. } else {
  2079. if(maxwrite > 0) {
  2080. for(n = 0; n < maxwrite; n++)
  2081. maxval = max(maxval,fabs(dbuf[n]));
  2082. }
  2083. break;
  2084. }
  2085. } while(samps_read > 0);
  2086. dbuf = dz->parray[0];
  2087. scaler = F_MAXSAMP/maxval;
  2088. memset((char *)dbuf,0,((dz->buflen + cfile_len) * sizeof(double)));
  2089. dz->total_samps_read = 0;
  2090. display_virtual_time(0,dz);
  2091. print_outmessage_flush("Doing the convolution. (This is an even SLOWER process)\n");
  2092. sndseekEx(dz->ifd[0],0,0);
  2093. if((samps_read = fgetfbufEx(dz->sampbuf[0],dz->buflen,dz->ifd[0],0)) < 0) {
  2094. sprintf(errstr,"Can't read samps from convolving soundfile.\n");
  2095. return(SYSTEM_ERROR);
  2096. }
  2097. dz->ssampsread = samps_read;
  2098. dz->total_samps_read += samps_read;
  2099. if(samps_read == 0) {
  2100. sprintf(errstr,"No data found in soundfile to be convolved, on 2nd pass.\n");
  2101. return(SYSTEM_ERROR);
  2102. }
  2103. obuf = dz->sampbuf[2];
  2104. tt = 0;
  2105. do {
  2106. for(k=0;k<chans;k++) {
  2107. ibuf = dz->sampbuf[0] + k;
  2108. dbuf = dz->parray[0] + k;
  2109. switch(dz->mode) {
  2110. case(CONV_NORMAL):
  2111. for(n = k; n < dz->ssampsread; n+=chans,tt++) {
  2112. nn = n - k;
  2113. cbuf = dz->sampbuf[1] + k;
  2114. for(m = k; m < dz->insams[1]; m+=chans) {
  2115. mm = m - k;
  2116. dbuf[nn+mm] += *ibuf * *cbuf;
  2117. cbuf += chans;
  2118. }
  2119. ibuf += chans;
  2120. if(tt % dz->infile->srate == 0)
  2121. display_virtual_time(tt,dz);
  2122. }
  2123. break;
  2124. case(CONV_TVAR):
  2125. for(n = k, thistime = 0.0; n < dz->ssampsread; n+=chans, thistime += timeincr,tt++) {
  2126. nn = n - k;
  2127. if(dz->brksize[CONV_TRANS] && !(nn%256)) {
  2128. if((exit_status = read_value_from_brktable(thistime,CONV_TRANS,dz))<0)
  2129. return(exit_status);
  2130. }
  2131. //TW Omission corrected DEC 2002
  2132. cbuf = dz->sampbuf[1] + k;
  2133. for(mm = 0, d = 0.0; d <= clumpcnt; mm+=chans, d+= dz->param[CONV_TRANS]) {
  2134. d += max(dz->param[CONV_TRANS],0.0);
  2135. dl = (int)floor(d);
  2136. yy = dl * chans;
  2137. ynext = yy+chans;
  2138. cbufval = (double)cbuf[yy] + ((d - (double)dl) * (double)(cbuf[ynext] - cbuf[yy]));
  2139. dbuf[nn+mm] += *ibuf * cbufval;
  2140. }
  2141. ibuf += chans;
  2142. if(tt % dz->infile->srate == 0)
  2143. display_virtual_time(tt,dz);
  2144. }
  2145. break;
  2146. }
  2147. }
  2148. maxwrite = (n-chans) + (m-chans) + 1;
  2149. dbuf = dz->parray[0];
  2150. if(samps_read >= dz->buflen) {
  2151. for(n=0;n<dz->ssampsread;n++)
  2152. obuf[n] = (float)(dbuf[n] * scaler);
  2153. if((exit_status = write_samps(dz->sampbuf[2],samps_read,dz))<0)
  2154. return(exit_status);
  2155. // display_virtual_time(dz->total_samps_written,dz);
  2156. memset((char *)dz->parray[0],0,dz->buflen * sizeof(double));
  2157. memcpy((char *)dz->parray[0],(char *)(dz->parray[0] + dz->buflen),dblovflw);
  2158. memset((char *)(dz->parray[0] + dz->buflen),0,dblovflw);
  2159. maxwrite -= dz->buflen;
  2160. if((samps_read = fgetfbufEx(dz->sampbuf[0],dz->buflen,dz->ifd[0],0)) < 0) {
  2161. sprintf(errstr,"Can't read samps from convolving soundfile.\n");
  2162. return(SYSTEM_ERROR);
  2163. }
  2164. dz->ssampsread = samps_read;
  2165. dz->total_samps_read += samps_read;
  2166. display_virtual_time(dz->total_samps_read,dz);
  2167. } else {
  2168. m = 0;
  2169. while(maxwrite > 0) {
  2170. samps_to_write = min(maxwrite,dz->buflen);
  2171. for(n=0;n<samps_to_write;n++) {
  2172. obuf[n] = (float)(dbuf[m++] * scaler);
  2173. }
  2174. if((exit_status = write_samps(dz->sampbuf[2],samps_to_write,dz))<0)
  2175. return(exit_status);
  2176. display_virtual_time(dz->total_samps_written,dz);
  2177. maxwrite -= samps_to_write;
  2178. }
  2179. break;
  2180. }
  2181. } while(samps_read > 0);
  2182. return(FINISHED);
  2183. }
  2184. /******************************** CONVOLVE_PREPROCESS **********************************/
  2185. int convolve_preprocess(dataptr dz)
  2186. {
  2187. double *p, *brkend;
  2188. if(dz->brksize[CONV_TRANS]) {
  2189. brkend = dz->brk[CONV_TRANS] + (2 * dz->brksize[CONV_TRANS]);
  2190. p = dz->brk[CONV_TRANS] + 1;
  2191. while(p < brkend) {
  2192. *p = pow(2.0,(*p/SEMITONES_PER_OCTAVE));
  2193. p += 2;
  2194. }
  2195. } else
  2196. dz->param[CONV_TRANS] = pow(2.0,(dz->param[CONV_TRANS]/SEMITONES_PER_OCTAVE));
  2197. return(FINISHED);
  2198. }