jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

899 lines
27KB

  1. /* link with */
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <limits.h>
  6. #include <math.h>
  7. #include <errno.h>
  8. #include <time.h>
  9. #include <vector>
  10. #include <stack>
  11. #include <string>
  12. #include <map>
  13. #include <iostream>
  14. //#include <libgen.h>
  15. #include "jack.h"
  16. #include <windows.h>
  17. // g++ -O3 -lm -lsndfile myfx.cpp
  18. using namespace std;
  19. #define max(x,y) (((x)>(y)) ? (x) : (y))
  20. #define min(x,y) (((x)<(y)) ? (x) : (y))
  21. // abs is now predefined
  22. //template<typename T> T abs (T a) { return (a<T(0)) ? -a : a; }
  23. inline int lsr (int x, int n)
  24. {
  25. return int(((unsigned int)x) >> n);
  26. }
  27. /******************************************************************************
  28. *******************************************************************************
  29. VECTOR INTRINSICS
  30. *******************************************************************************
  31. *******************************************************************************/
  32. inline void *aligned_calloc(size_t nmemb, size_t size)
  33. {
  34. return (void*)((unsigned)(calloc((nmemb*size) + 15, sizeof(char))) + 15 & 0xfffffff0);
  35. }
  36. /******************************************************************************
  37. *******************************************************************************
  38. USER INTERFACE
  39. *******************************************************************************
  40. *******************************************************************************/
  41. class UI
  42. {
  43. bool fStopped;
  44. public:
  45. UI() : fStopped(false)
  46. {}
  47. virtual ~UI()
  48. {}
  49. // -- active widgets
  50. virtual void addButton(char* label, float* zone) = 0;
  51. virtual void addToggleButton(char* label, float* zone) = 0;
  52. virtual void addCheckButton(char* label, float* zone) = 0;
  53. virtual void addVerticalSlider(char* label, float* zone, float init, float min, float max, float step) = 0;
  54. virtual void addHorizontalSlider(char* label, float* zone, float init, float min, float max, float step) = 0;
  55. virtual void addNumEntry(char* label, float* zone, float init, float min, float max, float step) = 0;
  56. // -- passive widgets
  57. virtual void addNumDisplay(char* label, float* zone, int precision) = 0;
  58. virtual void addTextDisplay(char* label, float* zone, char* names[], float min, float max) = 0;
  59. virtual void addHorizontalBargraph(char* label, float* zone, float min, float max) = 0;
  60. virtual void addVerticalBargraph(char* label, float* zone, float min, float max) = 0;
  61. // -- frames and labels
  62. virtual void openFrameBox(char* label) = 0;
  63. virtual void openTabBox(char* label) = 0;
  64. virtual void openHorizontalBox(char* label) = 0;
  65. virtual void openVerticalBox(char* label) = 0;
  66. virtual void closeBox() = 0;
  67. virtual void show() = 0;
  68. virtual void run() = 0;
  69. void stop()
  70. {
  71. fStopped = true;
  72. }
  73. bool stopped()
  74. {
  75. return fStopped;
  76. }
  77. };
  78. struct param
  79. {
  80. float* fZone;
  81. float fMin;
  82. float fMax;
  83. param(float* z, float a, float b) : fZone(z), fMin(a), fMax(b)
  84. {}
  85. }
  86. ;
  87. class CMDUI : public UI
  88. {
  89. int fArgc;
  90. char** fArgv;
  91. stack<string> fPrefix;
  92. map<string, param> fKeyParam;
  93. void addOption(char* label, float* zone, float min, float max)
  94. {
  95. string fullname = fPrefix.top() + label;
  96. fKeyParam.insert(make_pair(fullname, param(zone, min, max)));
  97. }
  98. void openAnyBox(char* label)
  99. {
  100. string prefix;
  101. if (label && label[0]) {
  102. prefix = fPrefix.top() + "-" + label;
  103. } else {
  104. prefix = fPrefix.top();
  105. }
  106. fPrefix.push(prefix);
  107. }
  108. public:
  109. CMDUI(int argc, char *argv[]) : UI(), fArgc(argc), fArgv(argv)
  110. {
  111. fPrefix.push("--");
  112. }
  113. virtual ~CMDUI()
  114. {}
  115. virtual void addButton(char* label, float* zone)
  116. {}
  117. ;
  118. virtual void addToggleButton(char* label, float* zone)
  119. {}
  120. ;
  121. virtual void addCheckButton(char* label, float* zone)
  122. {}
  123. ;
  124. virtual void addVerticalSlider(char* label, float* zone, float init, float min, float max, float step)
  125. {
  126. addOption(label, zone, min, max);
  127. }
  128. virtual void addHorizontalSlider(char* label, float* zone, float init, float min, float max, float step)
  129. {
  130. addOption(label, zone, min, max);
  131. }
  132. virtual void addNumEntry(char* label, float* zone, float init, float min, float max, float step)
  133. {
  134. addOption(label, zone, min, max);
  135. }
  136. // -- passive widgets
  137. virtual void addNumDisplay(char* label, float* zone, int precision)
  138. {}
  139. virtual void addTextDisplay(char* label, float* zone, char* names[], float min, float max)
  140. {}
  141. virtual void addHorizontalBargraph(char* label, float* zone, float min, float max)
  142. {}
  143. virtual void addVerticalBargraph(char* label, float* zone, float min, float max)
  144. {}
  145. virtual void openFrameBox(char* label)
  146. {
  147. openAnyBox(label);
  148. }
  149. virtual void openTabBox(char* label)
  150. {
  151. openAnyBox(label);
  152. }
  153. virtual void openHorizontalBox(char* label)
  154. {
  155. openAnyBox(label);
  156. }
  157. virtual void openVerticalBox(char* label)
  158. {
  159. openAnyBox(label);
  160. }
  161. virtual void closeBox()
  162. {
  163. fPrefix.pop();
  164. }
  165. virtual void show()
  166. {}
  167. virtual void run()
  168. {
  169. char c;
  170. printf("Type 'q' to quit\n");
  171. while ((c = getchar()) != 'q') {
  172. //sleep(1);
  173. Sleep(1000);
  174. }
  175. }
  176. void print()
  177. {
  178. map<string, param>::iterator i;
  179. cout << fArgc << "\n";
  180. cout << fArgv[0] << " option list : ";
  181. for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) {
  182. cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax << " ] ";
  183. }
  184. //cout << " infile outfile\n";
  185. }
  186. void process_command()
  187. {
  188. map<string, param>::iterator p;
  189. for (int i = 1; i < fArgc; i++) {
  190. if (fArgv[i][0] == '-') {
  191. p = fKeyParam.find(fArgv[i]);
  192. if (p == fKeyParam.end()) {
  193. cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n";
  194. print();
  195. exit(1);
  196. }
  197. char* end;
  198. *(p->second.fZone) = float(strtod(fArgv[i + 1], &end));
  199. i++;
  200. }
  201. }
  202. }
  203. void process_init()
  204. {
  205. map<string, param>::iterator p;
  206. for (int i = 1; i < fArgc; i++) {
  207. if (fArgv[i][0] == '-') {
  208. p = fKeyParam.find(fArgv[i]);
  209. if (p == fKeyParam.end()) {
  210. cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n";
  211. exit(1);
  212. }
  213. char* end;
  214. *(p->second.fZone) = float(strtod(fArgv[i + 1], &end));
  215. i++;
  216. }
  217. }
  218. }
  219. };
  220. //----------------------------------------------------------------
  221. // d�inition du processeur de signal
  222. //----------------------------------------------------------------
  223. class dsp
  224. {
  225. protected:
  226. int fSamplingFreq;
  227. public:
  228. dsp()
  229. {}
  230. virtual ~dsp()
  231. {}
  232. virtual int getNumInputs() = 0;
  233. virtual int getNumOutputs() = 0;
  234. virtual void buildUserInterface(UI* interface) = 0;
  235. virtual void init(int samplingRate) = 0;
  236. virtual void compute(int len, float** inputs, float** outputs) = 0;
  237. virtual void conclude()
  238. {}
  239. }
  240. ;
  241. //----------------------------------------------------------------------------
  242. // FAUST generated code
  243. //----------------------------------------------------------------------------
  244. class mydsp : public dsp
  245. {
  246. private:
  247. float fslider0;
  248. float R0_0;
  249. int iota0;
  250. float dline0[225];
  251. float R1_0;
  252. int iota1;
  253. float dline1[341];
  254. float R2_0;
  255. int iota2;
  256. float dline2[441];
  257. float R3_0;
  258. int iota3;
  259. float dline3[556];
  260. float R4_0;
  261. int iota4;
  262. float dline4[1617];
  263. float fslider1;
  264. float R5_0;
  265. float fslider2;
  266. float R6_0;
  267. int iota5;
  268. float dline5[1557];
  269. float R7_0;
  270. float R8_0;
  271. int iota6;
  272. float dline6[1491];
  273. float R9_0;
  274. float R10_0;
  275. int iota7;
  276. float dline7[1422];
  277. float R11_0;
  278. float R12_0;
  279. int iota8;
  280. float dline8[1277];
  281. float R13_0;
  282. float R14_0;
  283. int iota9;
  284. float dline9[1116];
  285. float R15_0;
  286. float R16_0;
  287. int iota10;
  288. float dline10[1188];
  289. float R17_0;
  290. float R18_0;
  291. int iota11;
  292. float dline11[1356];
  293. float R19_0;
  294. float R3_1;
  295. float R2_1;
  296. float R1_1;
  297. float R0_1;
  298. float R20_0;
  299. int iota12;
  300. float dline12[248];
  301. float R21_0;
  302. int iota13;
  303. float dline13[364];
  304. float R22_0;
  305. int iota14;
  306. float dline14[464];
  307. float R23_0;
  308. int iota15;
  309. float dline15[579];
  310. float R24_0;
  311. int iota16;
  312. float dline16[1640];
  313. float R25_0;
  314. float R26_0;
  315. int iota17;
  316. float dline17[1580];
  317. float R27_0;
  318. float R28_0;
  319. int iota18;
  320. float dline18[1514];
  321. float R29_0;
  322. float R30_0;
  323. int iota19;
  324. float dline19[1445];
  325. float R31_0;
  326. float R32_0;
  327. int iota20;
  328. float dline20[1300];
  329. float R33_0;
  330. float R34_0;
  331. int iota21;
  332. float dline21[1139];
  333. float R35_0;
  334. float R36_0;
  335. int iota22;
  336. float dline22[1211];
  337. float R37_0;
  338. float R38_0;
  339. int iota23;
  340. float dline23[1379];
  341. float R39_0;
  342. float R23_1;
  343. float R22_1;
  344. float R21_1;
  345. float R20_1;
  346. public:
  347. virtual int getNumInputs()
  348. {
  349. return 2;
  350. }
  351. virtual int getNumOutputs()
  352. {
  353. return 2;
  354. }
  355. virtual void init(int samplingFreq)
  356. {
  357. int i;
  358. fSamplingFreq = samplingFreq;
  359. fslider0 = 0.333300f;
  360. R0_0 = 0.0;
  361. iota0 = 0;
  362. for (i = 0; i < 225; i++)
  363. dline0[i] = 0.0;
  364. R1_0 = 0.0;
  365. iota1 = 0;
  366. for (i = 0; i < 341; i++)
  367. dline1[i] = 0.0;
  368. R2_0 = 0.0;
  369. iota2 = 0;
  370. for (i = 0; i < 441; i++)
  371. dline2[i] = 0.0;
  372. R3_0 = 0.0;
  373. iota3 = 0;
  374. for (i = 0; i < 556; i++)
  375. dline3[i] = 0.0;
  376. R4_0 = 0.0;
  377. iota4 = 0;
  378. for (i = 0; i < 1617; i++)
  379. dline4[i] = 0.0;
  380. fslider1 = 0.9500000f;
  381. R5_0 = 0.0;
  382. fslider2 = 0.9500000f;
  383. R6_0 = 0.0;
  384. iota5 = 0;
  385. for (i = 0; i < 1557; i++)
  386. dline5[i] = 0.0;
  387. R7_0 = 0.0;
  388. R8_0 = 0.0;
  389. iota6 = 0;
  390. for (i = 0; i < 1491; i++)
  391. dline6[i] = 0.0;
  392. R9_0 = 0.0;
  393. R10_0 = 0.0;
  394. iota7 = 0;
  395. for (i = 0; i < 1422; i++)
  396. dline7[i] = 0.0;
  397. R11_0 = 0.0;
  398. R12_0 = 0.0;
  399. iota8 = 0;
  400. for (i = 0; i < 1277; i++)
  401. dline8[i] = 0.0;
  402. R13_0 = 0.0;
  403. R14_0 = 0.0;
  404. iota9 = 0;
  405. for (i = 0; i < 1116; i++)
  406. dline9[i] = 0.0;
  407. R15_0 = 0.0;
  408. R16_0 = 0.0;
  409. iota10 = 0;
  410. for (i = 0; i < 1188; i++)
  411. dline10[i] = 0.0;
  412. R17_0 = 0.0;
  413. R18_0 = 0.0;
  414. iota11 = 0;
  415. for (i = 0; i < 1356; i++)
  416. dline11[i] = 0.0;
  417. R19_0 = 0.0;
  418. R3_1 = 0.0;
  419. R2_1 = 0.0;
  420. R1_1 = 0.0;
  421. R0_1 = 0.0;
  422. R20_0 = 0.0;
  423. iota12 = 0;
  424. for (i = 0; i < 248; i++)
  425. dline12[i] = 0.0;
  426. R21_0 = 0.0;
  427. iota13 = 0;
  428. for (i = 0; i < 364; i++)
  429. dline13[i] = 0.0;
  430. R22_0 = 0.0;
  431. iota14 = 0;
  432. for (i = 0; i < 464; i++)
  433. dline14[i] = 0.0;
  434. R23_0 = 0.0;
  435. iota15 = 0;
  436. for (i = 0; i < 579; i++)
  437. dline15[i] = 0.0;
  438. R24_0 = 0.0;
  439. iota16 = 0;
  440. for (i = 0; i < 1640; i++)
  441. dline16[i] = 0.0;
  442. R25_0 = 0.0;
  443. R26_0 = 0.0;
  444. iota17 = 0;
  445. for (i = 0; i < 1580; i++)
  446. dline17[i] = 0.0;
  447. R27_0 = 0.0;
  448. R28_0 = 0.0;
  449. iota18 = 0;
  450. for (i = 0; i < 1514; i++)
  451. dline18[i] = 0.0;
  452. R29_0 = 0.0;
  453. R30_0 = 0.0;
  454. iota19 = 0;
  455. for (i = 0; i < 1445; i++)
  456. dline19[i] = 0.0;
  457. R31_0 = 0.0;
  458. R32_0 = 0.0;
  459. iota20 = 0;
  460. for (i = 0; i < 1300; i++)
  461. dline20[i] = 0.0;
  462. R33_0 = 0.0;
  463. R34_0 = 0.0;
  464. iota21 = 0;
  465. for (i = 0; i < 1139; i++)
  466. dline21[i] = 0.0;
  467. R35_0 = 0.0;
  468. R36_0 = 0.0;
  469. iota22 = 0;
  470. for (i = 0; i < 1211; i++)
  471. dline22[i] = 0.0;
  472. R37_0 = 0.0;
  473. R38_0 = 0.0;
  474. iota23 = 0;
  475. for (i = 0; i < 1379; i++)
  476. dline23[i] = 0.0;
  477. R39_0 = 0.0;
  478. R23_1 = 0.0;
  479. R22_1 = 0.0;
  480. R21_1 = 0.0;
  481. R20_1 = 0.0;
  482. }
  483. virtual void buildUserInterface(UI* inter)
  484. {
  485. inter->openVerticalBox("Freeverb");
  486. inter->addHorizontalSlider("Damp", &fslider2, 0.500000f, 0.000000f, 1.000000f, 2.500000e-02f);
  487. inter->addHorizontalSlider("RoomSize", &fslider1, 0.500000f, 0.000000f, 1.000000f, 2.500000e-02f);
  488. inter->addHorizontalSlider("Wet", &fslider0, 0.333300f, 0.000000f, 1.000000f, 2.500000e-02f);
  489. inter->closeBox();
  490. }
  491. virtual void compute (int count, float** input, float** output)
  492. {
  493. float* input0;
  494. input0 = input[0];
  495. float* input1;
  496. input1 = input[1];
  497. float* output0;
  498. output0 = output[0];
  499. float* output1;
  500. output1 = output[1];
  501. float ftemp0 = fslider0;
  502. float ftemp1 = (1 - ftemp0);
  503. float ftemp5 = (0.700000f + (0.280000f * fslider1));
  504. float ftemp6 = (0.400000f * fslider2);
  505. float ftemp7 = (1 - ftemp6);
  506. for (int i = 0; i < count; i++) {
  507. float ftemp2 = input0[i];
  508. if (++iota0 == 225)
  509. iota0 = 0;
  510. float T0 = dline0[iota0];
  511. if (++iota1 == 341)
  512. iota1 = 0;
  513. float T1 = dline1[iota1];
  514. if (++iota2 == 441)
  515. iota2 = 0;
  516. float T2 = dline2[iota2];
  517. if (++iota3 == 556)
  518. iota3 = 0;
  519. float T3 = dline3[iota3];
  520. if (++iota4 == 1617)
  521. iota4 = 0;
  522. float T4 = dline4[iota4];
  523. float ftemp3 = input1[i];
  524. float ftemp4 = (1.500000e-02f * (ftemp2 + ftemp3));
  525. R5_0 = ((ftemp7 * R4_0) + (ftemp6 * R5_0));
  526. dline4[iota4] = (ftemp4 + (ftemp5 * R5_0));
  527. R4_0 = T4;
  528. if (++iota5 == 1557)
  529. iota5 = 0;
  530. float T5 = dline5[iota5];
  531. R7_0 = ((ftemp7 * R6_0) + (ftemp6 * R7_0));
  532. dline5[iota5] = (ftemp4 + (ftemp5 * R7_0));
  533. R6_0 = T5;
  534. if (++iota6 == 1491)
  535. iota6 = 0;
  536. float T6 = dline6[iota6];
  537. R9_0 = ((ftemp7 * R8_0) + (ftemp6 * R9_0));
  538. dline6[iota6] = (ftemp4 + (ftemp5 * R9_0));
  539. R8_0 = T6;
  540. if (++iota7 == 1422)
  541. iota7 = 0;
  542. float T7 = dline7[iota7];
  543. R11_0 = ((ftemp7 * R10_0) + (ftemp6 * R11_0));
  544. dline7[iota7] = (ftemp4 + (ftemp5 * R11_0));
  545. R10_0 = T7;
  546. if (++iota8 == 1277)
  547. iota8 = 0;
  548. float T8 = dline8[iota8];
  549. R13_0 = ((ftemp7 * R12_0) + (ftemp6 * R13_0));
  550. dline8[iota8] = (ftemp4 + (ftemp5 * R13_0));
  551. R12_0 = T8;
  552. if (++iota9 == 1116)
  553. iota9 = 0;
  554. float T9 = dline9[iota9];
  555. R15_0 = ((ftemp7 * R14_0) + (ftemp6 * R15_0));
  556. dline9[iota9] = (ftemp4 + (ftemp5 * R15_0));
  557. R14_0 = T9;
  558. if (++iota10 == 1188)
  559. iota10 = 0;
  560. float T10 = dline10[iota10];
  561. R17_0 = ((ftemp7 * R16_0) + (ftemp6 * R17_0));
  562. dline10[iota10] = (ftemp4 + (ftemp5 * R17_0));
  563. R16_0 = T10;
  564. if (++iota11 == 1356)
  565. iota11 = 0;
  566. float T11 = dline11[iota11];
  567. R19_0 = ((ftemp7 * R18_0) + (ftemp6 * R19_0));
  568. dline11[iota11] = (ftemp4 + (ftemp5 * R19_0));
  569. R18_0 = T11;
  570. float ftemp8 = (R16_0 + R18_0);
  571. dline3[iota3] = ((((0.500000f * R3_0) + R4_0) + (R6_0 + R8_0)) + ((R10_0 + R12_0) + (R14_0 + ftemp8)));
  572. float R3temp0 = T3;
  573. float R3temp1 = (R3_0 - (((R4_0 + R6_0) + (R8_0 + R10_0)) + ((R12_0 + R14_0) + ftemp8)));
  574. R3_0 = R3temp0;
  575. R3_1 = R3temp1;
  576. dline2[iota2] = ((0.500000f * R2_0) + R3_1);
  577. float R2temp0 = T2;
  578. float R2temp1 = (R2_0 - R3_1);
  579. R2_0 = R2temp0;
  580. R2_1 = R2temp1;
  581. dline1[iota1] = ((0.500000f * R1_0) + R2_1);
  582. float R1temp0 = T1;
  583. float R1temp1 = (R1_0 - R2_1);
  584. R1_0 = R1temp0;
  585. R1_1 = R1temp1;
  586. dline0[iota0] = ((0.500000f * R0_0) + R1_1);
  587. float R0temp0 = T0;
  588. float R0temp1 = (R0_0 - R1_1);
  589. R0_0 = R0temp0;
  590. R0_1 = R0temp1;
  591. output0[i] = ((ftemp1 * ftemp2) + (ftemp0 * R0_1));
  592. if (++iota12 == 248)
  593. iota12 = 0;
  594. float T12 = dline12[iota12];
  595. if (++iota13 == 364)
  596. iota13 = 0;
  597. float T13 = dline13[iota13];
  598. if (++iota14 == 464)
  599. iota14 = 0;
  600. float T14 = dline14[iota14];
  601. if (++iota15 == 579)
  602. iota15 = 0;
  603. float T15 = dline15[iota15];
  604. if (++iota16 == 1640)
  605. iota16 = 0;
  606. float T16 = dline16[iota16];
  607. R25_0 = ((ftemp7 * R24_0) + (ftemp6 * R25_0));
  608. dline16[iota16] = (ftemp4 + (ftemp5 * R25_0));
  609. R24_0 = T16;
  610. if (++iota17 == 1580)
  611. iota17 = 0;
  612. float T17 = dline17[iota17];
  613. R27_0 = ((ftemp7 * R26_0) + (ftemp6 * R27_0));
  614. dline17[iota17] = (ftemp4 + (ftemp5 * R27_0));
  615. R26_0 = T17;
  616. if (++iota18 == 1514)
  617. iota18 = 0;
  618. float T18 = dline18[iota18];
  619. R29_0 = ((ftemp7 * R28_0) + (ftemp6 * R29_0));
  620. dline18[iota18] = (ftemp4 + (ftemp5 * R29_0));
  621. R28_0 = T18;
  622. if (++iota19 == 1445)
  623. iota19 = 0;
  624. float T19 = dline19[iota19];
  625. R31_0 = ((ftemp7 * R30_0) + (ftemp6 * R31_0));
  626. dline19[iota19] = (ftemp4 + (ftemp5 * R31_0));
  627. R30_0 = T19;
  628. if (++iota20 == 1300)
  629. iota20 = 0;
  630. float T20 = dline20[iota20];
  631. R33_0 = ((ftemp7 * R32_0) + (ftemp6 * R33_0));
  632. dline20[iota20] = (ftemp4 + (ftemp5 * R33_0));
  633. R32_0 = T20;
  634. if (++iota21 == 1139)
  635. iota21 = 0;
  636. float T21 = dline21[iota21];
  637. R35_0 = ((ftemp7 * R34_0) + (ftemp6 * R35_0));
  638. dline21[iota21] = (ftemp4 + (ftemp5 * R35_0));
  639. R34_0 = T21;
  640. if (++iota22 == 1211)
  641. iota22 = 0;
  642. float T22 = dline22[iota22];
  643. R37_0 = ((ftemp7 * R36_0) + (ftemp6 * R37_0));
  644. dline22[iota22] = (ftemp4 + (ftemp5 * R37_0));
  645. R36_0 = T22;
  646. if (++iota23 == 1379)
  647. iota23 = 0;
  648. float T23 = dline23[iota23];
  649. R39_0 = ((ftemp7 * R38_0) + (ftemp6 * R39_0));
  650. dline23[iota23] = (ftemp4 + (ftemp5 * R39_0));
  651. R38_0 = T23;
  652. float ftemp9 = (R36_0 + R38_0);
  653. dline15[iota15] = ((((0.500000f * R23_0) + R24_0) + (R26_0 + R28_0)) + ((R30_0 + R32_0) + (R34_0 + ftemp9)));
  654. float R23temp0 = T15;
  655. float R23temp1 = (R23_0 - (((R24_0 + R26_0) + (R28_0 + R30_0)) + ((R32_0 + R34_0) + ftemp9)));
  656. R23_0 = R23temp0;
  657. R23_1 = R23temp1;
  658. dline14[iota14] = ((0.500000f * R22_0) + R23_1);
  659. float R22temp0 = T14;
  660. float R22temp1 = (R22_0 - R23_1);
  661. R22_0 = R22temp0;
  662. R22_1 = R22temp1;
  663. dline13[iota13] = ((0.500000f * R21_0) + R22_1);
  664. float R21temp0 = T13;
  665. float R21temp1 = (R21_0 - R22_1);
  666. R21_0 = R21temp0;
  667. R21_1 = R21temp1;
  668. dline12[iota12] = ((0.500000f * R20_0) + R21_1);
  669. float R20temp0 = T12;
  670. float R20temp1 = (R20_0 - R21_1);
  671. R20_0 = R20temp0;
  672. R20_1 = R20temp1;
  673. output1[i] = ((ftemp1 * ftemp3) + (ftemp0 * R20_1));
  674. }
  675. }
  676. };
  677. mydsp DSP;
  678. /******************************************************************************
  679. *******************************************************************************
  680. JACK AUDIO INTERFACE
  681. *******************************************************************************
  682. *******************************************************************************/
  683. //----------------------------------------------------------------------------
  684. // number of input and output channels
  685. //----------------------------------------------------------------------------
  686. int gNumInChans;
  687. int gNumOutChans;
  688. //----------------------------------------------------------------------------
  689. // Jack ports
  690. //----------------------------------------------------------------------------
  691. jack_port_t *input_ports[256];
  692. jack_port_t *output_ports[256];
  693. //----------------------------------------------------------------------------
  694. // tables of noninterleaved input and output channels for FAUST
  695. //----------------------------------------------------------------------------
  696. float* gInChannel[256];
  697. float* gOutChannel[256];
  698. //----------------------------------------------------------------------------
  699. // Jack Callbacks
  700. //----------------------------------------------------------------------------
  701. int srate(jack_nframes_t nframes, void *arg)
  702. {
  703. printf("the sample rate is now %u/sec\n", nframes);
  704. return 0;
  705. }
  706. void jack_shutdown(void *arg)
  707. {
  708. exit(1);
  709. }
  710. int process (jack_nframes_t nframes, void *arg)
  711. {
  712. int i;
  713. for (i = 0; i < gNumInChans; i++) {
  714. gInChannel[i] = (float *)jack_port_get_buffer(input_ports[i], nframes);
  715. }
  716. for (i = 0; i < gNumOutChans; i++) {
  717. gOutChannel[i] = (float *)jack_port_get_buffer(output_ports[i], nframes);
  718. }
  719. DSP.compute(nframes, gInChannel, gOutChannel);
  720. return 0;
  721. }
  722. //-------------------------------------------------------------------------
  723. // MAIN
  724. //-------------------------------------------------------------------------
  725. int main(int argc, char *argv[] )
  726. {
  727. char jackname[256];
  728. char** physicalInPorts;
  729. char** physicalOutPorts;
  730. jack_client_t* client;
  731. int i;
  732. CMDUI* inter = new CMDUI(argc, argv);
  733. DSP.buildUserInterface(inter);
  734. //_snprintf(jackname, 255, "%s", basename(argv[0]));
  735. _snprintf(jackname, 255, "%s", "freeverb");
  736. if ((client = jack_client_new(jackname)) == 0) {
  737. fprintf(stderr, "jack server not running?\n");
  738. return 1;
  739. }
  740. jack_set_process_callback(client, process, 0);
  741. jack_set_sample_rate_callback(client, srate, 0);
  742. jack_on_shutdown(client, jack_shutdown, 0);
  743. gNumInChans = DSP.getNumInputs();
  744. gNumOutChans = DSP.getNumOutputs();
  745. for (i = 0; i < gNumInChans; i++) {
  746. char buf[256];
  747. _snprintf(buf, 256, "in_%d", i);
  748. input_ports[i] = jack_port_register(client, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
  749. }
  750. for (i = 0; i < gNumOutChans; i++) {
  751. char buf[256];
  752. _snprintf(buf, 256, "out_%d", i);
  753. output_ports[i] = jack_port_register(client, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
  754. }
  755. DSP.init(jack_get_sample_rate(client));
  756. DSP.buildUserInterface(inter);
  757. inter->process_command();
  758. physicalInPorts = (char **)jack_get_ports(client, NULL, NULL, JackPortIsPhysical | JackPortIsInput);
  759. physicalOutPorts = (char **)jack_get_ports(client, NULL, NULL, JackPortIsPhysical | JackPortIsOutput);
  760. if (jack_activate(client)) {
  761. fprintf(stderr, "cannot activate client");
  762. return 1;
  763. }
  764. /*
  765. if (physicalOutPorts != NULL) {
  766. for (int i = 0; i < gNumInChans && physicalOutPorts[i]; i++) {
  767. jack_connect(client, physicalOutPorts[i], jack_port_name(input_ports[i]));
  768. }
  769. }
  770. */
  771. if (physicalInPorts != NULL) {
  772. for (int i = 0; i < gNumOutChans && physicalInPorts[i]; i++) {
  773. jack_connect(client, jack_port_name(output_ports[i]), physicalInPorts[i]);
  774. }
  775. }
  776. /*
  777. jack_connect(client, "AudioPlayer:out1", jack_port_name(input_ports[0]));
  778. jack_connect(client, "AudioPlayer:out1", jack_port_name(input_ports[1]));
  779. jack_connect(client, "AudioPlayer:out2", jack_port_name(input_ports[0]));
  780. jack_connect(client, "AudioPlayer:out2", jack_port_name(input_ports[1]));
  781. */
  782. jack_connect(client, "JackRouter:out1", jack_port_name(input_ports[0]));
  783. jack_connect(client, "JackRouter:out2", jack_port_name(input_ports[1]));
  784. inter->run();
  785. jack_deactivate(client);
  786. for (i = 0; i < gNumInChans; i++) {
  787. jack_port_unregister(client, input_ports[i]);
  788. }
  789. for (i = 0; i < gNumOutChans; i++) {
  790. jack_port_unregister(client, output_ports[i]);
  791. }
  792. jack_client_close(client);
  793. return 0;
  794. }